summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/ChangeLog/20210828.md4
-rw-r--r--docs/ChangeLog/20211127.md4
-rw-r--r--docs/ChangeLog/20220226.md2
-rw-r--r--docs/ChangeLog/20220528.md4
-rw-r--r--docs/ChangeLog/20220827.md2
-rw-r--r--docs/ChangeLog/20221126.md4
-rw-r--r--docs/ChangeLog/20230226.md2
-rw-r--r--docs/ChangeLog/20230528.md4
-rw-r--r--docs/ChangeLog/20230827.md2
-rw-r--r--docs/ChangeLog/20240225.md2
-rw-r--r--docs/_sidebar.json112
-rw-r--r--docs/cli_commands.md2
-rw-r--r--docs/config_options.md12
-rw-r--r--docs/custom_quantum_functions.md2
-rw-r--r--docs/documentation_best_practices.md2
-rw-r--r--docs/driver_installation_zadig.md4
-rw-r--r--docs/drivers/adc.md (renamed from docs/adc_driver.md)2
-rw-r--r--docs/drivers/apa102.md (renamed from docs/apa102_driver.md)4
-rw-r--r--docs/drivers/audio.md (renamed from docs/audio_driver.md)2
-rw-r--r--docs/drivers/eeprom.md (renamed from docs/eeprom_driver.md)2
-rw-r--r--docs/drivers/flash.md (renamed from docs/flash_driver.md)0
-rw-r--r--docs/drivers/gpio.md (renamed from docs/gpio_control.md)0
-rw-r--r--docs/drivers/i2c.md (renamed from docs/i2c_driver.md)2
-rw-r--r--docs/drivers/serial.md (renamed from docs/serial_driver.md)4
-rw-r--r--docs/drivers/spi.md (renamed from docs/spi_driver.md)2
-rw-r--r--docs/drivers/uart.md (renamed from docs/uart_driver.md)0
-rw-r--r--docs/drivers/ws2812.md (renamed from docs/ws2812_driver.md)2
-rw-r--r--docs/easy_maker.md2
-rw-r--r--docs/faq_build.md2
-rw-r--r--docs/faq_debug.md2
-rw-r--r--docs/faq_keymap.md6
-rw-r--r--docs/feature_advanced_keycodes.md4
-rw-r--r--docs/feature_converters.md16
-rw-r--r--docs/feature_eeprom.md2
-rw-r--r--docs/feature_layers.md4
-rw-r--r--docs/feature_macros.md4
-rw-r--r--docs/features/audio.md (renamed from docs/feature_audio.md)6
-rw-r--r--docs/features/auto_shift.md (renamed from docs/feature_auto_shift.md)8
-rw-r--r--docs/features/autocorrect.md (renamed from docs/feature_autocorrect.md)2
-rw-r--r--docs/features/backlight.md (renamed from docs/feature_backlight.md)4
-rw-r--r--docs/features/bluetooth.md (renamed from docs/feature_bluetooth.md)2
-rw-r--r--docs/features/bootmagic.md (renamed from docs/feature_bootmagic.md)6
-rw-r--r--docs/features/caps_word.md (renamed from docs/feature_caps_word.md)4
-rw-r--r--docs/features/combo.md (renamed from docs/feature_combo.md)4
-rw-r--r--docs/features/command.md (renamed from docs/feature_command.md)2
-rw-r--r--docs/features/digitizer.md (renamed from docs/feature_digitizer.md)2
-rw-r--r--docs/features/dip_switch.md (renamed from docs/feature_dip_switch.md)0
-rw-r--r--docs/features/dynamic_macros.md (renamed from docs/feature_dynamic_macros.md)0
-rw-r--r--docs/features/encoders.md (renamed from docs/feature_encoders.md)0
-rw-r--r--docs/features/grave_esc.md (renamed from docs/feature_grave_esc.md)0
-rw-r--r--docs/features/haptic_feedback.md (renamed from docs/feature_haptic_feedback.md)4
-rw-r--r--docs/features/hd44780.md (renamed from docs/feature_hd44780.md)0
-rw-r--r--docs/features/joystick.md (renamed from docs/feature_joystick.md)2
-rw-r--r--docs/features/key_lock.md (renamed from docs/feature_key_lock.md)4
-rw-r--r--docs/features/key_overrides.md (renamed from docs/feature_key_overrides.md)4
-rw-r--r--docs/features/leader_key.md (renamed from docs/feature_leader_key.md)4
-rw-r--r--docs/features/led_indicators.md (renamed from docs/feature_led_indicators.md)2
-rw-r--r--docs/features/led_matrix.md (renamed from docs/feature_led_matrix.md)2
-rw-r--r--docs/features/midi.md (renamed from docs/feature_midi.md)2
-rw-r--r--docs/features/mouse_keys.md (renamed from docs/feature_mouse_keys.md)2
-rw-r--r--docs/features/oled_driver.md (renamed from docs/feature_oled_driver.md)0
-rw-r--r--docs/features/os_detection.md (renamed from docs/feature_os_detection.md)0
-rw-r--r--docs/features/pointing_device.md (renamed from docs/feature_pointing_device.md)8
-rw-r--r--docs/features/programmable_button.md (renamed from docs/feature_programmable_button.md)0
-rw-r--r--docs/features/ps2_mouse.md (renamed from docs/feature_ps2_mouse.md)0
-rw-r--r--docs/features/rawhid.md (renamed from docs/feature_rawhid.md)0
-rw-r--r--docs/features/repeat_key.md (renamed from docs/feature_repeat_key.md)9
-rw-r--r--docs/features/rgb_matrix.md (renamed from docs/feature_rgb_matrix.md)10
-rw-r--r--docs/features/rgblight.md (renamed from docs/feature_rgblight.md)10
-rw-r--r--docs/features/secure.md (renamed from docs/feature_secure.md)2
-rw-r--r--docs/features/send_string.md (renamed from docs/feature_send_string.md)8
-rw-r--r--docs/features/sequencer.md (renamed from docs/feature_sequencer.md)0
-rw-r--r--docs/features/space_cadet.md (renamed from docs/feature_space_cadet.md)2
-rw-r--r--docs/features/split_keyboard.md (renamed from docs/feature_split_keyboard.md)10
-rw-r--r--docs/features/st7565.md (renamed from docs/feature_st7565.md)0
-rw-r--r--docs/features/stenography.md (renamed from docs/feature_stenography.md)4
-rw-r--r--docs/features/swap_hands.md (renamed from docs/feature_swap_hands.md)2
-rw-r--r--docs/features/tap_dance.md (renamed from docs/feature_tap_dance.md)4
-rw-r--r--docs/features/tri_layer.md (renamed from docs/feature_tri_layer.md)2
-rw-r--r--docs/features/unicode.md (renamed from docs/feature_unicode.md)4
-rw-r--r--docs/features/wpm.md (renamed from docs/feature_wpm.md)0
-rw-r--r--docs/flashing.md4
-rw-r--r--docs/getting_started_make_guide.md6
-rw-r--r--docs/hand_wire.md2
-rw-r--r--docs/hardware_drivers.md10
-rw-r--r--docs/hardware_keyboard_guidelines.md2
-rw-r--r--docs/keycodes.md42
-rw-r--r--docs/mod_tap.md2
-rw-r--r--docs/newbs_building_firmware.md4
-rw-r--r--docs/platformdev_rp2040.md30
-rw-r--r--docs/porting_your_keyboard_to_qmk.md2
-rw-r--r--docs/pr_checklist.md6
-rw-r--r--docs/ref_functions.md4
-rw-r--r--docs/reference_glossary.md12
-rw-r--r--docs/reference_info_json.md44
-rw-r--r--docs/syllabus.md28
-rw-r--r--docs/tap_hold.md2
97 files changed, 282 insertions, 285 deletions
diff --git a/docs/ChangeLog/20210828.md b/docs/ChangeLog/20210828.md
index f84169cc94..18b1d92b0c 100644
--- a/docs/ChangeLog/20210828.md
+++ b/docs/ChangeLog/20210828.md
@@ -10,11 +10,11 @@ It is also now possible to define combos that have keys overlapping with other c
10 10
11### Key Overrides ([#11422](https://github.com/qmk/qmk_firmware/pull/11422)) {#key-overrides} 11### Key Overrides ([#11422](https://github.com/qmk/qmk_firmware/pull/11422)) {#key-overrides}
12 12
13QMK now has a new feature: [key overrides](../feature_key_overrides). This feature allows for overriding the output of key combinations involving modifiers. As an example, pressing <kbd>Shift+2</kbd> normally results in an <kbd>@</kbd> on US-ANSI keyboard layouts -- the new key overrides allow for adding similar functionality, but for any <kbd>modifier + key</kbd> press. 13QMK now has a new feature: [key overrides](../features/key_overrides). This feature allows for overriding the output of key combinations involving modifiers. As an example, pressing <kbd>Shift+2</kbd> normally results in an <kbd>@</kbd> on US-ANSI keyboard layouts -- the new key overrides allow for adding similar functionality, but for any <kbd>modifier + key</kbd> press.
14 14
15To illustrate, it's now possible to use the key overrides feature to translate <kbd>Shift + Backspace</kbd> into <kbd>Delete</kbd> -- an often-requested example of where this functionality comes in handy. 15To illustrate, it's now possible to use the key overrides feature to translate <kbd>Shift + Backspace</kbd> into <kbd>Delete</kbd> -- an often-requested example of where this functionality comes in handy.
16 16
17There's far more to describe that what lives in this changelog, so head over to the [key overrides documentation](../feature_key_overrides) for more examples and info. 17There's far more to describe that what lives in this changelog, so head over to the [key overrides documentation](../features/key_overrides) for more examples and info.
18 18
19### Digitizer support ([#12851](https://github.com/qmk/qmk_firmware/pull/12851)) 19### Digitizer support ([#12851](https://github.com/qmk/qmk_firmware/pull/12851))
20 20
diff --git a/docs/ChangeLog/20211127.md b/docs/ChangeLog/20211127.md
index d810be505a..5ca68c3999 100644
--- a/docs/ChangeLog/20211127.md
+++ b/docs/ChangeLog/20211127.md
@@ -31,7 +31,7 @@ QMK now has core-supplied support for the following pointing device peripherals:
31| `POINTING_DEVICE_DRIVER = pimoroni_trackball` | Pimoroni Trackball | 31| `POINTING_DEVICE_DRIVER = pimoroni_trackball` | Pimoroni Trackball |
32| `POINTING_DEVICE_DRIVER = pmw3360` | PMW 3360 | 32| `POINTING_DEVICE_DRIVER = pmw3360` | PMW 3360 |
33 33
34See the new documentation for the [Pointing Device](../feature_pointing_device) feature for more information on specific configuration for each driver. 34See the new documentation for the [Pointing Device](../features/pointing_device) feature for more information on specific configuration for each driver.
35 35
36### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) {#dynamic-tapping-term} 36### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) {#dynamic-tapping-term}
37 37
@@ -116,7 +116,7 @@ Related to the previous section -- RGB Matrix modes have now been made to be opt
116 116
117Most keyboards keep their original functionality, but over time the QMK maintainers have found that removal of animations ends up being the quickest way to free up space... and some keyboards have had animations such as reactive effects disabled by default in order to still fit within the flash space available. 117Most keyboards keep their original functionality, but over time the QMK maintainers have found that removal of animations ends up being the quickest way to free up space... and some keyboards have had animations such as reactive effects disabled by default in order to still fit within the flash space available.
118 118
119The full list of configurables to turn specific animations back on can be found at on the [RGB Matrix documentation](../feature_rgb_matrix#rgb-matrix-effects) page. 119The full list of configurables to turn specific animations back on can be found at on the [RGB Matrix documentation](../features/rgb_matrix#rgb-matrix-effects) page.
120 120
121### OLED task refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/14864)) {#oled-task-refactor} 121### OLED task refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/14864)) {#oled-task-refactor}
122 122
diff --git a/docs/ChangeLog/20220226.md b/docs/ChangeLog/20220226.md
index f0cbbc0603..a10b6447ea 100644
--- a/docs/ChangeLog/20220226.md
+++ b/docs/ChangeLog/20220226.md
@@ -12,7 +12,7 @@ Something something *Lets go gamers!*
12 12
13Pointing devices can now be shared across a split keyboard with support for a single pointing device or a pointing device on each side. 13Pointing devices can now be shared across a split keyboard with support for a single pointing device or a pointing device on each side.
14 14
15See the [Pointing Device](../feature_pointing_device) documentation for further configuration options. 15See the [Pointing Device](../features/pointing_device) documentation for further configuration options.
16 16
17## Changes Requiring User Action {#changes-requiring-user-action} 17## Changes Requiring User Action {#changes-requiring-user-action}
18 18
diff --git a/docs/ChangeLog/20220528.md b/docs/ChangeLog/20220528.md
index 31347c9c00..ae84f163d4 100644
--- a/docs/ChangeLog/20220528.md
+++ b/docs/ChangeLog/20220528.md
@@ -8,7 +8,7 @@ This is a new feature that allows for capslock-like functionality that turns its
8 8
9For instance, if you wish to type "QMK" without holding shift the entire time, you can either tap both left and right shift, or double-tap shift, to turn on _Caps Word_ -- then type `qmk` (lowercase) without holding shift. Once you hit any key other than `a`--`z`, `0`--`9`, `-`, `_`, delete, or backspace, this will go back to normal typing! 9For instance, if you wish to type "QMK" without holding shift the entire time, you can either tap both left and right shift, or double-tap shift, to turn on _Caps Word_ -- then type `qmk` (lowercase) without holding shift. Once you hit any key other than `a`--`z`, `0`--`9`, `-`, `_`, delete, or backspace, this will go back to normal typing!
10 10
11There are other activation mechanisms as well as configurable options like timeout and the like -- see the [Caps Word documentation](../feature_caps_word) for more information. 11There are other activation mechanisms as well as configurable options like timeout and the like -- see the [Caps Word documentation](../features/caps_word) for more information.
12 12
13### Quantum Painter ([#10174](https://github.com/qmk/qmk_firmware/pull/10174)) {#quantum-painter} 13### Quantum Painter ([#10174](https://github.com/qmk/qmk_firmware/pull/10174)) {#quantum-painter}
14 14
@@ -26,7 +26,7 @@ Quantum Painter is not supported on AVR due to complexity and size constraints.
26 26
27### Encoder Mapping ([#13286](https://github.com/qmk/qmk_firmware/pull/13286)) {#encoder-mapping} 27### Encoder Mapping ([#13286](https://github.com/qmk/qmk_firmware/pull/13286)) {#encoder-mapping}
28 28
29One 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#encoder-map), which allows users to define encoder functionality in a similar way to their normal keymap. 29One 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](../features/encoders#encoder-map), which allows users to define encoder functionality in a similar way to their normal keymap.
30 30
31::: warning 31::: warning
32This is not yet supported by QMK Configurator. It is also unlikely to ever be supported by VIA. 32This is not yet supported by QMK Configurator. It is also unlikely to ever be supported by VIA.
diff --git a/docs/ChangeLog/20220827.md b/docs/ChangeLog/20220827.md
index d58db91272..6d9f82f36a 100644
--- a/docs/ChangeLog/20220827.md
+++ b/docs/ChangeLog/20220827.md
@@ -83,7 +83,7 @@ The now-EOL kbfirmware allowed people who aren't set up with QMK the ability to
83 83
84QMK 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. 84QMK 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.
85 85
86See the [EEPROM Driver](../eeprom_driver) documentation for more information. 86See the [EEPROM Driver](../drivers/eeprom) documentation for more information.
87 87
88### 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} 88### 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}
89 89
diff --git a/docs/ChangeLog/20221126.md b/docs/ChangeLog/20221126.md
index 25cf1d592d..41b0ad0a6b 100644
--- a/docs/ChangeLog/20221126.md
+++ b/docs/ChangeLog/20221126.md
@@ -4,7 +4,7 @@
4 4
5### Autocorrect ([#15699](https://github.com/qmk/qmk_firmware/pull/15699)) {#autocorrect} 5### Autocorrect ([#15699](https://github.com/qmk/qmk_firmware/pull/15699)) {#autocorrect}
6 6
7_@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) for more ifnormation (grin). 7_@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](../features/autocorrect) for more ifnormation (grin).
8 8
9## Changes Requiring User Action {#changes-requiring-user-action} 9## Changes Requiring User Action {#changes-requiring-user-action}
10 10
@@ -132,7 +132,7 @@ The equivalent transformations should be done for LED Matrix boards.
132 132
133### Unicode mode refactoring {#unicode-mode-renaming} 133### Unicode mode refactoring {#unicode-mode-renaming}
134 134
135Unicode modes were renamed in order to prevent collision with equivalent keycodes. The available values for `UNICODE_SELECTED_MODES` changed -- see [Feature: Unicode](../feature_unicode#setting-the-input-mode) for the new list of values and how to configure them. 135Unicode modes were renamed in order to prevent collision with equivalent keycodes. The available values for `UNICODE_SELECTED_MODES` changed -- see [Feature: Unicode](../features/unicode#setting-the-input-mode) for the new list of values and how to configure them.
136 136
137## Notable core changes {#notable-core} 137## Notable core changes {#notable-core}
138 138
diff --git a/docs/ChangeLog/20230226.md b/docs/ChangeLog/20230226.md
index ee56068604..87ff924264 100644
--- a/docs/ChangeLog/20230226.md
+++ b/docs/ChangeLog/20230226.md
@@ -106,7 +106,7 @@ void leader_end_user(void) {
106} 106}
107``` 107```
108 108
109For more information please see the [Leader Key documentation](../feature_leader_key). 109For more information please see the [Leader Key documentation](../features/leader_key).
110 110
111### Updated Keyboard Codebases {#updated-keyboard-codebases} 111### Updated Keyboard Codebases {#updated-keyboard-codebases}
112 112
diff --git a/docs/ChangeLog/20230528.md b/docs/ChangeLog/20230528.md
index 40ab3a420c..77ad6209b0 100644
--- a/docs/ChangeLog/20230528.md
+++ b/docs/ChangeLog/20230528.md
@@ -24,7 +24,7 @@ Of note for keyboard designers:
24 24
25A new pair of keys has been added to QMK -- namely `QK_REPEAT_KEY` and `QK_ALT_REPEAT_KEY` (shortened: `QK_REP`/`QK_AREP`). These allow you to repeat the last key pressed, or in the case of the alternate key, press the "opposite" of the last key. For example, if you press `KC_LEFT`, pressing `QK_REPEAT_KEY` afterwards repeats `KC_LEFT`, but pressing `QK_ALT_REPEAT_KEY` instead sends `KC_RIGHT`. 25A new pair of keys has been added to QMK -- namely `QK_REPEAT_KEY` and `QK_ALT_REPEAT_KEY` (shortened: `QK_REP`/`QK_AREP`). These allow you to repeat the last key pressed, or in the case of the alternate key, press the "opposite" of the last key. For example, if you press `KC_LEFT`, pressing `QK_REPEAT_KEY` afterwards repeats `KC_LEFT`, but pressing `QK_ALT_REPEAT_KEY` instead sends `KC_RIGHT`.
26 26
27The full list of default alternate keys is available on the [Repeat Key](../feature_repeat_key) documentation. 27The full list of default alternate keys is available on the [Repeat Key](../features/repeat_key) documentation.
28 28
29To enable these keys, in your keymap's `rules.mk`, add: 29To enable these keys, in your keymap's `rules.mk`, add:
30 30
@@ -93,7 +93,7 @@ Additionally, this ensures that builds on QMK Configurator produce some sort of
93 93
94The "classic" OLED driver picked up support for additional sizes of OLED displays, support for the SH1107 controller, and SPI-based OLED support. 94The "classic" OLED driver picked up support for additional sizes of OLED displays, support for the SH1107 controller, and SPI-based OLED support.
95 95
96Other configurable items are available and can be found on the [OLED Driver page](../feature_oled_driver). 96Other configurable items are available and can be found on the [OLED Driver page](../features/oled_driver).
97 97
98## Full changelist {#full-changelist} 98## Full changelist {#full-changelist}
99 99
diff --git a/docs/ChangeLog/20230827.md b/docs/ChangeLog/20230827.md
index aecbcb0d8f..493ee84349 100644
--- a/docs/ChangeLog/20230827.md
+++ b/docs/ChangeLog/20230827.md
@@ -42,7 +42,7 @@ AVR sees minimal (if any) benefit -- `double` was interpreted as `float` on AVR
42 42
43### Remove encoder in-matrix workaround code ([#20389](https://github.com/qmk/qmk_firmware/pull/20389)) {#remove-encoder-in-matrix-workaround-code} 43### Remove encoder in-matrix workaround code ([#20389](https://github.com/qmk/qmk_firmware/pull/20389)) {#remove-encoder-in-matrix-workaround-code}
44 44
45Some keyboards "hacked" encoder support into spare slots in the key matrix in order to interoperate with VIA. This workaround is no longer necessary, and the code has been removed. If you have a keyboard that uses this workaround, you will need to update your keymap to use the new [Encoder Map](../feature_encoders#encoder-map) API instead. 45Some keyboards "hacked" encoder support into spare slots in the key matrix in order to interoperate with VIA. This workaround is no longer necessary, and the code has been removed. If you have a keyboard that uses this workaround, you will need to update your keymap to use the new [Encoder Map](../features/encoders#encoder-map) API instead.
46 46
47### Unicodemap keycodes rename ([#21092](https://github.com/qmk/qmk_firmware/pull/21092)) {#unicodemap-keycodes-rename} 47### Unicodemap keycodes rename ([#21092](https://github.com/qmk/qmk_firmware/pull/21092)) {#unicodemap-keycodes-rename}
48 48
diff --git a/docs/ChangeLog/20240225.md b/docs/ChangeLog/20240225.md
index f4103c594e..1ebfbd2309 100644
--- a/docs/ChangeLog/20240225.md
+++ b/docs/ChangeLog/20240225.md
@@ -120,7 +120,7 @@ In some cases, accidental automatic activation of the mouse layer made it diffic
120 120
121### DIP Switch Mapping ([#22543](https://github.com/qmk/qmk_firmware/pull/22543)) {#dip-switch-map} 121### DIP Switch Mapping ([#22543](https://github.com/qmk/qmk_firmware/pull/22543)) {#dip-switch-map}
122 122
123Much like Encoder Mapping, DIP Switch Mapping allows for specifying a table of actions to execute when a DIP switch state changes. See the [DIP Switch Documentation](../feature_dip_switch#dip-switch-map) for more information. 123Much like Encoder Mapping, DIP Switch Mapping allows for specifying a table of actions to execute when a DIP switch state changes. See the [DIP Switch Documentation](../features/dip_switch#dip-switch-map) for more information.
124 124
125```c 125```c
126#if defined(DIP_SWITCH_MAP_ENABLE) 126#if defined(DIP_SWITCH_MAP_ENABLE)
diff --git a/docs/_sidebar.json b/docs/_sidebar.json
index f1b7c156e6..b41719e4b3 100644
--- a/docs/_sidebar.json
+++ b/docs/_sidebar.json
@@ -103,45 +103,45 @@
103 { 103 {
104 "text": "Advanced Keycodes", 104 "text": "Advanced Keycodes",
105 "items": [ 105 "items": [
106 { "text": "Command", "link": "/feature_command" }, 106 { "text": "Command", "link": "/features/command" },
107 { "text": "Dynamic Macros", "link": "/feature_dynamic_macros" }, 107 { "text": "Dynamic Macros", "link": "/features/dynamic_macros" },
108 { "text": "Grave Escape", "link": "/feature_grave_esc" }, 108 { "text": "Grave Escape", "link": "/features/grave_esc" },
109 { "text": "Leader Key", "link": "/feature_leader_key" }, 109 { "text": "Leader Key", "link": "/features/leader_key" },
110 { "text": "Mod-Tap", "link": "/mod_tap" }, 110 { "text": "Mod-Tap", "link": "/mod_tap" },
111 { "text": "Macros", "link": "/feature_macros" }, 111 { "text": "Macros", "link": "/feature_macros" },
112 { "text": "Mouse Keys", "link": "/feature_mouse_keys" }, 112 { "text": "Mouse Keys", "link": "/features/mouse_keys" },
113 { "text": "Programmable Button", "link": "/feature_programmable_button" }, 113 { "text": "Programmable Button", "link": "/features/programmable_button" },
114 { "text": "Repeat Key", "link": "/feature_repeat_key" }, 114 { "text": "Repeat Key", "link": "/features/repeat_key" },
115 { "text": "Space Cadet Shift", "link": "/feature_space_cadet" }, 115 { "text": "Space Cadet Shift", "link": "/features/space_cadet" },
116 { "text": "US ANSI Shifted Keys", "link": "/keycodes_us_ansi_shifted" } 116 { "text": "US ANSI Shifted Keys", "link": "/keycodes_us_ansi_shifted" }
117 ] 117 ]
118 }, 118 },
119 { 119 {
120 "text": "Software Features", 120 "text": "Software Features",
121 "items": [ 121 "items": [
122 { "text": "Auto Shift", "link": "/feature_auto_shift" }, 122 { "text": "Auto Shift", "link": "/features/auto_shift" },
123 { "text": "Autocorrect", "link": "/feature_autocorrect" }, 123 { "text": "Autocorrect", "link": "/features/autocorrect" },
124 { "text": "Caps Word", "link": "/feature_caps_word" }, 124 { "text": "Caps Word", "link": "/features/caps_word" },
125 { "text": "Combos", "link": "/feature_combo" }, 125 { "text": "Combos", "link": "/features/combo" },
126 { "text": "Debounce API", "link": "/feature_debounce_type" }, 126 { "text": "Debounce API", "link": "/feature_debounce_type" },
127 { "text": "Digitizer", "link": "/feature_digitizer" }, 127 { "text": "Digitizer", "link": "/features/digitizer" },
128 { "text": "EEPROM", "link": "/feature_eeprom" }, 128 { "text": "EEPROM", "link": "/feature_eeprom" },
129 { "text": "Key Lock", "link": "/feature_key_lock" }, 129 { "text": "Key Lock", "link": "/features/key_lock" },
130 { "text": "Key Overrides", "link": "/feature_key_overrides" }, 130 { "text": "Key Overrides", "link": "/features/key_overrides" },
131 { "text": "Layers", "link": "/feature_layers" }, 131 { "text": "Layers", "link": "/feature_layers" },
132 { "text": "One Shot Keys", "link": "/one_shot_keys" }, 132 { "text": "One Shot Keys", "link": "/one_shot_keys" },
133 { "text": "OS Detection", "link": "/feature_os_detection" }, 133 { "text": "OS Detection", "link": "/features/os_detection" },
134 { "text": "Raw HID", "link": "/feature_rawhid" }, 134 { "text": "Raw HID", "link": "/features/rawhid" },
135 { "text": "Secure", "link": "/feature_secure" }, 135 { "text": "Secure", "link": "/features/secure" },
136 { "text": "Send String", "link": "/feature_send_string" }, 136 { "text": "Send String", "link": "/features/send_string" },
137 { "text": "Sequencer", "link": "/feature_sequencer" }, 137 { "text": "Sequencer", "link": "/features/sequencer" },
138 { "text": "Swap Hands", "link": "/feature_swap_hands" }, 138 { "text": "Swap Hands", "link": "/features/swap_hands" },
139 { "text": "Tap Dance", "link": "/feature_tap_dance" }, 139 { "text": "Tap Dance", "link": "/features/tap_dance" },
140 { "text": "Tap-Hold Configuration", "link": "/tap_hold" }, 140 { "text": "Tap-Hold Configuration", "link": "/tap_hold" },
141 { "text": "Tri Layer", "link": "/feature_tri_layer" }, 141 { "text": "Tri Layer", "link": "/features/tri_layer" },
142 { "text": "Unicode", "link": "/feature_unicode" }, 142 { "text": "Unicode", "link": "/features/unicode" },
143 { "text": "Userspace", "link": "/feature_userspace" }, 143 { "text": "Userspace", "link": "/feature_userspace" },
144 { "text": "WPM Calculation", "link": "/feature_wpm" } 144 { "text": "WPM Calculation", "link": "/features/wpm" }
145 ] 145 ]
146 }, 146 },
147 { 147 {
@@ -157,35 +157,35 @@
157 { "text": "Quantum Painter LVGL Integration", "link": "/quantum_painter_lvgl" } 157 { "text": "Quantum Painter LVGL Integration", "link": "/quantum_painter_lvgl" }
158 ] 158 ]
159 }, 159 },
160 { "text": "HD44780 LCD Driver", "link": "/feature_hd44780" }, 160 { "text": "HD44780 LCD Driver", "link": "/features/hd44780" },
161 { "text": "ST7565 LCD Driver", "link": "/feature_st7565" }, 161 { "text": "ST7565 LCD Driver", "link": "/features/st7565" },
162 { "text": "OLED Driver", "link": "/feature_oled_driver" } 162 { "text": "OLED Driver", "link": "/features/oled_driver" }
163 ] 163 ]
164 }, 164 },
165 { 165 {
166 "text": "Lighting", 166 "text": "Lighting",
167 "items": [ 167 "items": [
168 { "text": "Backlight", "link": "/feature_backlight" }, 168 { "text": "Backlight", "link": "/features/backlight" },
169 { "text": "LED Matrix", "link": "/feature_led_matrix" }, 169 { "text": "LED Matrix", "link": "/features/led_matrix" },
170 { "text": "RGB Lighting", "link": "/feature_rgblight" }, 170 { "text": "RGB Lighting", "link": "/features/rgblight" },
171 { "text": "RGB Matrix", "link": "/feature_rgb_matrix" } 171 { "text": "RGB Matrix", "link": "/features/rgb_matrix" }
172 ] 172 ]
173 }, 173 },
174 { "text": "Audio", "link": "/feature_audio" }, 174 { "text": "Audio", "link": "/features/audio" },
175 { "text": "Bluetooth", "link": "/feature_bluetooth" }, 175 { "text": "Bluetooth", "link": "/features/bluetooth" },
176 { "text": "Bootmagic Lite", "link": "/feature_bootmagic" }, 176 { "text": "Bootmagic Lite", "link": "/features/bootmagic" },
177 { "text": "Converters", "link": "/feature_converters" }, 177 { "text": "Converters", "link": "/feature_converters" },
178 { "text": "Custom Matrix", "link": "/custom_matrix" }, 178 { "text": "Custom Matrix", "link": "/custom_matrix" },
179 { "text": "DIP Switch", "link": "/feature_dip_switch" }, 179 { "text": "DIP Switch", "link": "/features/dip_switch" },
180 { "text": "Encoders", "link": "/feature_encoders" }, 180 { "text": "Encoders", "link": "/features/encoders" },
181 { "text": "Haptic Feedback", "link": "/feature_haptic_feedback" }, 181 { "text": "Haptic Feedback", "link": "/features/haptic_feedback" },
182 { "text": "Joystick", "link": "/feature_joystick" }, 182 { "text": "Joystick", "link": "/features/joystick" },
183 { "text": "LED Indicators", "link": "/feature_led_indicators" }, 183 { "text": "LED Indicators", "link": "/features/led_indicators" },
184 { "text": "MIDI", "link": "/feature_midi" }, 184 { "text": "MIDI", "link": "/features/midi" },
185 { "text": "Pointing Device", "link": "/feature_pointing_device" }, 185 { "text": "Pointing Device", "link": "/features/pointing_device" },
186 { "text": "PS/2 Mouse", "link": "/feature_ps2_mouse" }, 186 { "text": "PS/2 Mouse", "link": "/features/ps2_mouse" },
187 { "text": "Split Keyboard", "link": "/feature_split_keyboard" }, 187 { "text": "Split Keyboard", "link": "/features/split_keyboard" },
188 { "text": "Stenography", "link": "/feature_stenography" } 188 { "text": "Stenography", "link": "/features/stenography" }
189 ] 189 ]
190 }, 190 },
191 { 191 {
@@ -226,19 +226,19 @@
226 "text": "Drivers", 226 "text": "Drivers",
227 "link": "hardware_drivers", 227 "link": "hardware_drivers",
228 "items": [ 228 "items": [
229 { "text": "ADC Driver", "link": "/adc_driver" }, 229 { "text": "ADC Driver", "link": "/drivers/adc" },
230 { "text": "APA102 Driver", "link": "/apa102_driver" }, 230 { "text": "APA102 Driver", "link": "/drivers/apa102" },
231 { "text": "Audio Driver", "link": "/audio_driver" }, 231 { "text": "Audio Driver", "link": "/drivers/audio" },
232 { "text": "I2C Driver", "link": "/i2c_driver" }, 232 { "text": "EEPROM Driver", "link": "/drivers/eeprom" },
233 { "text": "SPI Driver", "link": "/spi_driver" }, 233 { "text": "Flash Driver", "link": "/drivers/flash" },
234 { "text": "WS2812 Driver", "link": "/ws2812_driver" }, 234 { "text": "I2C Driver", "link": "/drivers/i2c" },
235 { "text": "EEPROM Driver", "link": "/eeprom_driver" }, 235 { "text": "'serial' Driver", "link": "/drivers/serial" },
236 { "text": "Flash Driver", "link": "/flash_driver" }, 236 { "text": "SPI Driver", "link": "/drivers/spi" },
237 { "text": "'serial' Driver", "link": "/serial_driver" }, 237 { "text": "UART Driver", "link": "/drivers/uart" },
238 { "text": "UART Driver", "link": "/uart_driver" } 238 { "text": "WS2812 Driver", "link": "/drivers/ws2812" }
239 ] 239 ]
240 }, 240 },
241 { "text": "GPIO Controls", "link": "/gpio_control" }, 241 { "text": "GPIO Controls", "link": "/drivers/gpio" },
242 { "text": "Keyboard Guidelines", "link": "/hardware_keyboard_guidelines" } 242 { "text": "Keyboard Guidelines", "link": "/hardware_keyboard_guidelines" }
243 ] 243 ]
244 }, 244 },
diff --git a/docs/cli_commands.md b/docs/cli_commands.md
index 5a85356e70..7d74d8e617 100644
--- a/docs/cli_commands.md
+++ b/docs/cli_commands.md
@@ -749,7 +749,7 @@ options:
749 749
750## `qmk generate-rgb-breathe-table` 750## `qmk generate-rgb-breathe-table`
751 751
752This command generates a lookup table (LUT) header file for the [RGB Lighting](feature_rgblight) feature's breathing animation. Place this file in your keyboard or keymap directory as `rgblight_breathe_table.h` to override the default LUT in `quantum/rgblight/`. 752This command generates a lookup table (LUT) header file for the [RGB Lighting](features/rgblight) feature's breathing animation. Place this file in your keyboard or keymap directory as `rgblight_breathe_table.h` to override the default LUT in `quantum/rgblight/`.
753 753
754**Usage**: 754**Usage**:
755 755
diff --git a/docs/config_options.md b/docs/config_options.md
index 236649a0ea..a1ca8c8d50 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -207,7 +207,7 @@ If you define these options you will enable the associated feature, which may in
207* `#define TAP_HOLD_CAPS_DELAY 80` 207* `#define TAP_HOLD_CAPS_DELAY 80`
208 * Sets the delay for Tap Hold keys (`LT`, `MT`) when using `KC_CAPS_LOCK` keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher. 208 * Sets the delay for Tap Hold keys (`LT`, `MT`) when using `KC_CAPS_LOCK` keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.
209* `#define KEY_OVERRIDE_REPEAT_DELAY 500` 209* `#define KEY_OVERRIDE_REPEAT_DELAY 500`
210 * Sets the key repeat interval for [key overrides](feature_key_overrides). 210 * Sets the key repeat interval for [key overrides](features/key_overrides).
211* `#define LEGACY_MAGIC_HANDLING` 211* `#define LEGACY_MAGIC_HANDLING`
212 * Enables magic configuration handling for advanced keycodes (such as Mod Tap and Layer Tap) 212 * Enables magic configuration handling for advanced keycodes (such as Mod Tap and Layer Tap)
213 213
@@ -217,14 +217,14 @@ If you define these options you will enable the associated feature, which may in
217* `#define WS2812_DI_PIN D7` 217* `#define WS2812_DI_PIN D7`
218 * pin the DI on the WS2812 is hooked-up to 218 * pin the DI on the WS2812 is hooked-up to
219* `#define RGBLIGHT_LAYERS` 219* `#define RGBLIGHT_LAYERS`
220 * Lets you define [lighting layers](feature_rgblight#lighting-layers) that can be toggled on or off. Great for showing the current keyboard layer or caps lock state. 220 * Lets you define [lighting layers](features/rgblight#lighting-layers) that can be toggled on or off. Great for showing the current keyboard layer or caps lock state.
221* `#define RGBLIGHT_MAX_LAYERS` 221* `#define RGBLIGHT_MAX_LAYERS`
222 * Defaults to 8. Can be expanded up to 32 if more [lighting layers](feature_rgblight#lighting-layers) are needed. 222 * Defaults to 8. Can be expanded up to 32 if more [lighting layers](features/rgblight#lighting-layers) are needed.
223 * Note: Increasing the maximum will increase the firmware size and slow sync on split keyboards. 223 * Note: Increasing the maximum will increase the firmware size and slow sync on split keyboards.
224* `#define RGBLIGHT_LAYER_BLINK` 224* `#define RGBLIGHT_LAYER_BLINK`
225 * Adds ability to [blink](feature_rgblight#lighting-layer-blink) a lighting layer for a specified number of milliseconds (e.g. to acknowledge an action). 225 * Adds ability to [blink](features/rgblight#lighting-layer-blink) a lighting layer for a specified number of milliseconds (e.g. to acknowledge an action).
226* `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF` 226* `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF`
227 * If defined, then [lighting layers](feature_rgblight#overriding-rgb-lighting-onoff-status) will be shown even if RGB Light is off. 227 * If defined, then [lighting layers](features/rgblight#overriding-rgb-lighting-onoff-status) will be shown even if RGB Light is off.
228* `#define RGBLIGHT_LED_COUNT 12` 228* `#define RGBLIGHT_LED_COUNT 12`
229 * number of LEDs 229 * number of LEDs
230* `#define RGBLIGHT_SPLIT` 230* `#define RGBLIGHT_SPLIT`
@@ -358,7 +358,7 @@ There are a few different ways to set handedness for split keyboards (listed in
358 358
359* `#define SPLIT_TRANSACTION_IDS_KB .....` 359* `#define SPLIT_TRANSACTION_IDS_KB .....`
360* `#define SPLIT_TRANSACTION_IDS_USER .....` 360* `#define SPLIT_TRANSACTION_IDS_USER .....`
361 * Allows for custom data sync with the slave when using the QMK-provided split transport. See [custom data sync between sides](feature_split_keyboard#custom-data-sync) for more information. 361 * Allows for custom data sync with the slave when using the QMK-provided split transport. See [custom data sync between sides](features/split_keyboard#custom-data-sync) for more information.
362 362
363# The `rules.mk` File 363# The `rules.mk` File
364 364
diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md
index ac21f0e039..729f0cd028 100644
--- a/docs/custom_quantum_functions.md
+++ b/docs/custom_quantum_functions.md
@@ -206,7 +206,7 @@ Similar to `matrix_scan_*`, these are called as often as the MCU can handle. To
206 206
207### Example `void housekeeping_task_user(void)` implementation 207### Example `void housekeeping_task_user(void)` implementation
208 208
209This example will show you how to use `void housekeeping_task_user(void)` to turn off [RGB Light](feature_rgblight). For RGB Matrix, the [builtin](feature_rgb_matrix#additional-configh-options) `RGB_MATRIX_TIMEOUT` should be used. 209This example will show you how to use `void housekeeping_task_user(void)` to turn off [RGB Light](features/rgblight). For RGB Matrix, the [builtin](features/rgb_matrix#additional-configh-options) `RGB_MATRIX_TIMEOUT` should be used.
210 210
211First, add the following lines to your keymap's `config.h`: 211First, add the following lines to your keymap's `config.h`:
212 212
diff --git a/docs/documentation_best_practices.md b/docs/documentation_best_practices.md
index d41ec28f19..bc64472e24 100644
--- a/docs/documentation_best_practices.md
+++ b/docs/documentation_best_practices.md
@@ -69,4 +69,4 @@ This page describes my cool feature. You can use my cool feature to make coffee
69|KC_SUGAR||Order Sugar| 69|KC_SUGAR||Order Sugar|
70``` 70```
71 71
72Place your documentation into `docs/feature_<my_cool_feature>.md`, and add that file to the appropriate place in `docs/_sidebar.json`. If you have added any keycodes be sure to add them to `docs/keycodes.md` with a link back to your feature page. 72Place your documentation into `docs/features/<my_cool_feature>.md`, and add that file to the appropriate place in `docs/_sidebar.json`. If you have added any keycodes be sure to add them to `docs/keycodes.md` with a link back to your feature page.
diff --git a/docs/driver_installation_zadig.md b/docs/driver_installation_zadig.md
index ce16ada166..099376faeb 100644
--- a/docs/driver_installation_zadig.md
+++ b/docs/driver_installation_zadig.md
@@ -8,8 +8,8 @@ We recommend the use of the [Zadig](https://zadig.akeo.ie/) utility. If you have
8 8
9## Installation 9## Installation
10 10
11Put your keyboard into bootloader mode, either by hitting the `QK_BOOT` keycode (which may be on a different layer), or by pressing the reset switch that's usually located on the underside of the board. If your keyboard has neither, try holding Escape or Space+`B` as you plug it in (see the [Bootmagic Lite](feature_bootmagic) docs for more details). Some boards use [Command](feature_command) instead of Bootmagic; in this case, you can enter bootloader mode by hitting Left Shift+Right Shift+`B` or Left Shift+Right Shift+Escape at any point while the keyboard is plugged in. 11Put your keyboard into bootloader mode, either by hitting the `QK_BOOT` keycode (which may be on a different layer), or by pressing the reset switch that's usually located on the underside of the board. If your keyboard has neither, try holding Escape or Space+`B` as you plug it in (see the [Bootmagic Lite](features/bootmagic) docs for more details). Some boards use [Command](features/command) instead of Bootmagic; in this case, you can enter bootloader mode by hitting Left Shift+Right Shift+`B` or Left Shift+Right Shift+Escape at any point while the keyboard is plugged in.
12Some keyboards may have specific instructions for entering the bootloader. For example, the [Bootmagic Lite](feature_bootmagic) key (default: Escape) might be on a different key, e.g. Left Control; or the magic combination for Command (default: Left Shift+Right Shift) might require you to hold something else, e.g. Left Control+Right Control. Refer to the board's README file if you are unsure. 12Some keyboards may have specific instructions for entering the bootloader. For example, the [Bootmagic Lite](features/bootmagic) key (default: Escape) might be on a different key, e.g. Left Control; or the magic combination for Command (default: Left Shift+Right Shift) might require you to hold something else, e.g. Left Control+Right Control. Refer to the board's README file if you are unsure.
13 13
14To put a device in bootloader mode with USBaspLoader, tap the `RESET` button while holding down the `BOOT` button. 14To put a device in bootloader mode with USBaspLoader, tap the `RESET` button while holding down the `BOOT` button.
15Alternatively, hold `BOOT` while inserting the USB cable. 15Alternatively, hold `BOOT` while inserting the USB cable.
diff --git a/docs/adc_driver.md b/docs/drivers/adc.md
index a1ab5a5251..d89068c2ae 100644
--- a/docs/adc_driver.md
+++ b/docs/drivers/adc.md
@@ -1,6 +1,6 @@
1# ADC Driver 1# ADC Driver
2 2
3QMK can leverage the Analog-to-Digital Converter (ADC) on supported MCUs to measure voltages on certain pins. This can be useful for implementing things such as battery level indicators for Bluetooth keyboards, or volume controls using a potentiometer, as opposed to a [rotary encoder](feature_encoders). 3QMK can leverage the Analog-to-Digital Converter (ADC) on supported MCUs to measure voltages on certain pins. This can be useful for implementing things such as battery level indicators for Bluetooth keyboards, or volume controls using a potentiometer, as opposed to a [rotary encoder](../features/encoders).
4 4
5This driver currently supports both AVR and a limited selection of ARM devices. The values returned are 10-bit integers (0-1023) mapped between 0V and VCC (usually 5V or 3.3V for AVR, 3.3V only for ARM), however on ARM there is more flexibility in control of operation through `#define`s if you need more precision. 5This driver currently supports both AVR and a limited selection of ARM devices. The values returned are 10-bit integers (0-1023) mapped between 0V and VCC (usually 5V or 3.3V for AVR, 3.3V only for ARM), however on ARM there is more flexibility in control of operation through `#define`s if you need more precision.
6 6
diff --git a/docs/apa102_driver.md b/docs/drivers/apa102.md
index 0f905e3f18..88868a73b5 100644
--- a/docs/apa102_driver.md
+++ b/docs/drivers/apa102.md
@@ -1,10 +1,10 @@
1# APA102 Driver {#apa102-driver} 1# APA102 Driver {#apa102-driver}
2 2
3This driver provides support for APA102 addressable RGB LEDs. They are similar to the [WS2812](ws2812_driver) LEDs, but have increased data and refresh rates. 3This driver provides support for APA102 addressable RGB LEDs. They are similar to the [WS2812](ws2812) LEDs, but have increased data and refresh rates.
4 4
5## Usage {#usage} 5## Usage {#usage}
6 6
7In 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. 7In most cases, the APA102 driver code is automatically included if you are using either the [RGBLight](../features/rgblight) or [RGB Matrix](../features/rgb_matrix) feature with the `apa102` driver set, and you would use those APIs instead.
8 8
9However, if you need to use the driver standalone, add the following to your `rules.mk`: 9However, if you need to use the driver standalone, add the following to your `rules.mk`:
10 10
diff --git a/docs/audio_driver.md b/docs/drivers/audio.md
index 4a71b4f411..c764c97369 100644
--- a/docs/audio_driver.md
+++ b/docs/drivers/audio.md
@@ -1,6 +1,6 @@
1# Audio Driver {#audio-driver} 1# Audio Driver {#audio-driver}
2 2
3The [Audio feature](feature_audio) breaks the hardware specifics out into separate, exchangeable driver units, with a common interface to the audio-"core" - which itself handles playing songs and notes while tracking their progress in an internal state, initializing/starting/stopping the driver as needed. 3The [Audio feature](../features/audio) breaks the hardware specifics out into separate, exchangeable driver units, with a common interface to the audio-"core" - which itself handles playing songs and notes while tracking their progress in an internal state, initializing/starting/stopping the driver as needed.
4 4
5Not all MCUs support every available driver, either the platform-support is not there (yet?) or the MCU simply does not have the required hardware peripheral. 5Not all MCUs support every available driver, either the platform-support is not there (yet?) or the MCU simply does not have the required hardware peripheral.
6 6
diff --git a/docs/eeprom_driver.md b/docs/drivers/eeprom.md
index 6d13377ed8..82630c501d 100644
--- a/docs/eeprom_driver.md
+++ b/docs/drivers/eeprom.md
@@ -133,7 +133,7 @@ If your MCU does not boot after swapping to the EFL wear-leveling driver, it's l
133 133
134## Wear-leveling SPI Flash Driver Configuration {#wear_leveling-flash_spi-driver-configuration} 134## Wear-leveling SPI Flash Driver Configuration {#wear_leveling-flash_spi-driver-configuration}
135 135
136This driver performs writes to an external SPI NOR Flash peripheral. It also requires a working configuration for the SPI NOR Flash peripheral -- see the [flash driver](flash_driver) documentation for more information. 136This driver performs writes to an external SPI NOR Flash peripheral. It also requires a working configuration for the SPI NOR Flash peripheral -- see the [flash driver](flash) documentation for more information.
137 137
138Configurable options in your keyboard's `config.h`: 138Configurable options in your keyboard's `config.h`:
139 139
diff --git a/docs/flash_driver.md b/docs/drivers/flash.md
index 4160721350..4160721350 100644
--- a/docs/flash_driver.md
+++ b/docs/drivers/flash.md
diff --git a/docs/gpio_control.md b/docs/drivers/gpio.md
index 9ce4f2aa20..9ce4f2aa20 100644
--- a/docs/gpio_control.md
+++ b/docs/drivers/gpio.md
diff --git a/docs/i2c_driver.md b/docs/drivers/i2c.md
index ccc21137b3..10949ed59e 100644
--- a/docs/i2c_driver.md
+++ b/docs/drivers/i2c.md
@@ -4,7 +4,7 @@ The I2C Master drivers used in QMK have a set of common functions to allow porta
4 4
5## Usage {#usage} 5## Usage {#usage}
6 6
7In most cases, the I2C Master driver code is automatically included if you are using a feature or driver which requires it, such as [OLED](feature_oled_driver). 7In most cases, the I2C Master driver code is automatically included if you are using a feature or driver which requires it, such as [OLED](../features/oled_driver).
8 8
9However, if you need to use the driver standalone, add the following to your `rules.mk`: 9However, if you need to use the driver standalone, add the following to your `rules.mk`:
10 10
diff --git a/docs/serial_driver.md b/docs/drivers/serial.md
index ce2fc7a46c..364e951b86 100644
--- a/docs/serial_driver.md
+++ b/docs/drivers/serial.md
@@ -1,6 +1,6 @@
1# 'serial' Driver 1# 'serial' Driver
2 2
3The Serial driver powers the [Split Keyboard](feature_split_keyboard) feature. Several implementations are available that cater to the platform and capabilites of MCU in use. Note that none of the drivers support split keyboards with more than two halves. 3The Serial driver powers the [Split Keyboard](../features/split_keyboard) feature. Several implementations are available that cater to the platform and capabilites of MCU in use. Note that none of the drivers support split keyboards with more than two halves.
4 4
5| Driver | AVR | ARM | Connection between halves | 5| Driver | AVR | ARM | Connection between halves |
6| --------------------------------------- | ------------------ | ------------------ | --------------------------------------------------------------------------------------------- | 6| --------------------------------------- | ------------------ | ------------------ | --------------------------------------------------------------------------------------------- |
@@ -298,7 +298,7 @@ If you're having issues withe serial communication, you can enable debug message
298``` 298```
299 299
300::: tip 300::: tip
301The messages will be printed out to the `CONSOLE` output. For additional information, refer to [Debugging/Troubleshooting QMK](faq_debug). 301The messages will be printed out to the `CONSOLE` output. For additional information, refer to [Debugging/Troubleshooting QMK](../faq_debug).
302::: 302:::
303 303
304## Alternate Functions for selected STM32 MCUs 304## Alternate Functions for selected STM32 MCUs
diff --git a/docs/spi_driver.md b/docs/drivers/spi.md
index b77e2dbb46..ddc35de851 100644
--- a/docs/spi_driver.md
+++ b/docs/drivers/spi.md
@@ -4,7 +4,7 @@ The SPI Master drivers used in QMK have a set of common functions to allow porta
4 4
5## Usage {#usage} 5## Usage {#usage}
6 6
7In most cases, the SPI Master driver code is automatically included if you are using a feature or driver which requires it, such as [OLED](feature_oled_driver). 7In most cases, the SPI Master driver code is automatically included if you are using a feature or driver which requires it, such as [OLED](../features/oled_driver).
8 8
9However, if you need to use the driver standalone, add the following to your `rules.mk`: 9However, if you need to use the driver standalone, add the following to your `rules.mk`:
10 10
diff --git a/docs/uart_driver.md b/docs/drivers/uart.md
index 23f5b3d6e4..23f5b3d6e4 100644
--- a/docs/uart_driver.md
+++ b/docs/drivers/uart.md
diff --git a/docs/ws2812_driver.md b/docs/drivers/ws2812.md
index c445e2dbf6..61addf1917 100644
--- a/docs/ws2812_driver.md
+++ b/docs/drivers/ws2812.md
@@ -10,7 +10,7 @@ The LEDs can be chained together, and the remaining data is passed on to the nex
10 10
11## Usage {#usage} 11## Usage {#usage}
12 12
13In most cases, the WS2812 driver code is automatically included if you are using either the [RGBLight](feature_rgblight) or [RGB Matrix](feature_rgb_matrix) feature with the `ws2812` driver set, and you would use those APIs instead. 13In most cases, the WS2812 driver code is automatically included if you are using either the [RGBLight](../features/rgblight) or [RGB Matrix](../features/rgb_matrix) feature with the `ws2812` driver set, and you would use those APIs instead.
14 14
15However, if you need to use the driver standalone, add the following to your `rules.mk`: 15However, if you need to use the driver standalone, add the following to your `rules.mk`:
16 16
diff --git a/docs/easy_maker.md b/docs/easy_maker.md
index 6a2f00686f..e94477322b 100644
--- a/docs/easy_maker.md
+++ b/docs/easy_maker.md
@@ -5,7 +5,7 @@ Have you ever needed an easy way to program a controller, such as a Proton C or
5There are different styles of Easy Maker available depending on your needs: 5There are different styles of Easy Maker available depending on your needs:
6 6
7* [Direct Pin](https://config.qmk.fm/#/?filter=ez_maker/direct) - Connect a single switch to a single pin 7* [Direct Pin](https://config.qmk.fm/#/?filter=ez_maker/direct) - Connect a single switch to a single pin
8* Direct Pin + Backlight (Coming Soon) - Like Direct Pin but dedicates a single pin to [Backlight](feature_backlight) control 8* Direct Pin + Backlight (Coming Soon) - Like Direct Pin but dedicates a single pin to [Backlight](features/backlight) control
9* Direct Pin + Numlock (Coming Soon) - Like Direct Pin but dedicates a single pin to the Numlock LED 9* Direct Pin + Numlock (Coming Soon) - Like Direct Pin but dedicates a single pin to the Numlock LED
10* Direct Pin + Capslock (Coming Soon) - Like Direct Pin but dedicates a single pin to the Capslock LED 10* Direct Pin + Capslock (Coming Soon) - Like Direct Pin but dedicates a single pin to the Capslock LED
11* Direct Pin + Encoder (Coming Soon) - Like Direct Pin but uses 2 pins to add a single rotary encoder 11* Direct Pin + Encoder (Coming Soon) - Like Direct Pin but uses 2 pins to add a single rotary encoder
diff --git a/docs/faq_build.md b/docs/faq_build.md
index 7fafff1066..54ed576c70 100644
--- a/docs/faq_build.md
+++ b/docs/faq_build.md
@@ -66,4 +66,4 @@ Due to how EEPROM works on ARM based chips, saved settings may no longer be vali
66[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) can be used to force an eeprom reset. After flashing this image, flash your normal firmware again which should restore your keyboard to _normal_ working order. 66[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) can be used to force an eeprom reset. After flashing this image, flash your normal firmware again which should restore your keyboard to _normal_ working order.
67[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin) 67[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
68 68
69If bootmagic is enabled in any form, you should be able to do this too (see [Bootmagic docs](feature_bootmagic) and keyboard info for specifics on how to do this). 69If bootmagic is enabled in any form, you should be able to do this too (see [Bootmagic docs](features/bootmagic) and keyboard info for specifics on how to do this).
diff --git a/docs/faq_debug.md b/docs/faq_debug.md
index e22bc5d9ce..36374974df 100644
--- a/docs/faq_debug.md
+++ b/docs/faq_debug.md
@@ -4,7 +4,7 @@ This page details various common questions people have about troubleshooting the
4 4
5## Debugging {#debugging} 5## Debugging {#debugging}
6 6
7Your keyboard will output debug information if you have `CONSOLE_ENABLE = yes` in your `rules.mk`. By default the output is very limited, but you can turn on debug mode to increase the amount of debug output. Use the `DB_TOGG` keycode in your keymap, use the [Command](feature_command) feature to enable debug mode, or add the following code to your keymap. 7Your keyboard will output debug information if you have `CONSOLE_ENABLE = yes` in your `rules.mk`. By default the output is very limited, but you can turn on debug mode to increase the amount of debug output. Use the `DB_TOGG` keycode in your keymap, use the [Command](features/command) feature to enable debug mode, or add the following code to your keymap.
8 8
9```c 9```c
10void keyboard_post_init_user(void) { 10void keyboard_post_init_user(void) {
diff --git a/docs/faq_keymap.md b/docs/faq_keymap.md
index 0070b6d1de..56ccc6f6cc 100644
--- a/docs/faq_keymap.md
+++ b/docs/faq_keymap.md
@@ -45,7 +45,7 @@ QMK has a couple of features which allow you to change the behavior of your keyb
45Refer to the EEPROM clearing methods above, which should return those keys to normal operation. If that doesn't work, look here: 45Refer to the EEPROM clearing methods above, which should return those keys to normal operation. If that doesn't work, look here:
46 46
47* [Magic Keycodes](keycodes_magic) 47* [Magic Keycodes](keycodes_magic)
48* [Command](feature_command) 48* [Command](features/command)
49 49
50## The Menu Key Isn't Working 50## The Menu Key Isn't Working
51 51
@@ -86,7 +86,7 @@ Old vintage mechanical keyboards occasionally have lock switches but modern ones
86 86
87## Input Special Characters Other Than ASCII like Cédille 'Ç' 87## Input Special Characters Other Than ASCII like Cédille 'Ç'
88 88
89See the [Unicode](feature_unicode) feature. 89See the [Unicode](features/unicode) feature.
90 90
91## `Fn` Key on macOS 91## `Fn` Key on macOS
92 92
@@ -130,7 +130,7 @@ https://github.com/tekezo/Karabiner/issues/403
130 130
131## Esc and <code>&#96;</code> on a Single Key 131## Esc and <code>&#96;</code> on a Single Key
132 132
133See the [Grave Escape](feature_grave_esc) feature. 133See the [Grave Escape](features/grave_esc) feature.
134 134
135## Eject on Mac OSX 135## Eject on Mac OSX
136 136
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index 50dc0bb281..7f5a10d1c1 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -160,7 +160,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
160 return true; 160 return true;
161}; 161};
162``` 162```
163Alternatively, this can be done with [Key Overrides](feature_key_overrides#simple-example). 163Alternatively, this can be done with [Key Overrides](features/key_overrides#simple-example).
164 164
165# Advanced topics {#advanced-topics} 165# Advanced topics {#advanced-topics}
166 166
@@ -184,4 +184,4 @@ This page used to encompass a large set of features. We have moved many sections
184 184
185## Key Overrides {#key-overrides} 185## Key Overrides {#key-overrides}
186 186
187* [Key Overrides](feature_key_overrides) 187* [Key Overrides](features/key_overrides)
diff --git a/docs/feature_converters.md b/docs/feature_converters.md
index 9b2d027a66..229d1007ab 100644
--- a/docs/feature_converters.md
+++ b/docs/feature_converters.md
@@ -39,7 +39,7 @@ qmk flash -c -kb keebio/bdn9/rev1 -km default -e CONVERT_TO=proton_c
39You can also add the same `CONVERT_TO=<target>` to your keymap's `rules.mk`, which will accomplish the same thing. 39You can also add the same `CONVERT_TO=<target>` to your keymap's `rules.mk`, which will accomplish the same thing.
40 40
41::: tip 41::: tip
42If you get errors about `PORTB/DDRB`, etc not being defined, you'll need to convert the keyboard's code to use the [GPIO Controls](gpio_control) that will work for both ARM and AVR. This shouldn't affect the AVR builds at all. 42If you get errors about `PORTB/DDRB`, etc not being defined, you'll need to convert the keyboard's code to use the [GPIO Controls](drivers/gpio) that will work for both ARM and AVR. This shouldn't affect the AVR builds at all.
43::: 43:::
44 44
45### Conditional Configuration 45### Conditional Configuration
@@ -118,11 +118,11 @@ The following defaults are based on what has been implemented for STM32 boards.
118 118
119| Feature | Notes | 119| Feature | Notes |
120|----------------------------------------------|------------------------------------------------------------------------------------------------------------------| 120|----------------------------------------------|------------------------------------------------------------------------------------------------------------------|
121| [Audio](feature_audio) | Enabled | 121| [Audio](features/audio) | Enabled |
122| [RGB Lighting](feature_rgblight) | Disabled | 122| [RGB Lighting](features/rgblight) | Disabled |
123| [Backlight](feature_backlight) | Forces [task driven PWM](feature_backlight#software-pwm-driver) until ARM can provide automatic configuration | 123| [Backlight](features/backlight) | Forces [task driven PWM](features/backlight#software-pwm-driver) until ARM can provide automatic configuration |
124| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) | 124| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
125| [Split keyboards](feature_split_keyboard) | Partial - heavily dependent on enabled features | 125| [Split keyboards](features/split_keyboard) | Partial - heavily dependent on enabled features |
126 126
127### Adafruit KB2040 {#kb2040} 127### Adafruit KB2040 {#kb2040}
128 128
@@ -130,10 +130,10 @@ The following defaults are based on what has been implemented for [RP2040](platf
130 130
131| Feature | Notes | 131| Feature | Notes |
132|----------------------------------------------|------------------------------------------------------------------------------------------------------------------| 132|----------------------------------------------|------------------------------------------------------------------------------------------------------------------|
133| [RGB Lighting](feature_rgblight) | Enabled via `PIO` vendor driver | 133| [RGB Lighting](features/rgblight) | Enabled via `PIO` vendor driver |
134| [Backlight](feature_backlight) | Forces [task driven PWM](feature_backlight#software-pwm-driver) until ARM can provide automatic configuration | 134| [Backlight](features/backlight) | Forces [task driven PWM](features/backlight#software-pwm-driver) until ARM can provide automatic configuration |
135| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) | 135| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
136| [Split keyboards](feature_split_keyboard) | Partial via `PIO` vendor driver - heavily dependent on enabled features | 136| [Split keyboards](features/split_keyboard) | Partial via `PIO` vendor driver - heavily dependent on enabled features |
137 137
138### SparkFun Pro Micro - RP2040, Blok, Bit-C PRO and Michi {#promicro_rp2040 } 138### SparkFun Pro Micro - RP2040, Blok, Bit-C PRO and Michi {#promicro_rp2040 }
139 139
diff --git a/docs/feature_eeprom.md b/docs/feature_eeprom.md
index 63026d3c10..2912407ac7 100644
--- a/docs/feature_eeprom.md
+++ b/docs/feature_eeprom.md
@@ -109,7 +109,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
109 } 109 }
110} 110}
111``` 111```
112And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EE_CLR` keycode or [Bootmagic Lite](feature_bootmagic) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued. 112And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EE_CLR` keycode or [Bootmagic Lite](features/bootmagic) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued.
113 113
114```c 114```c
115void eeconfig_init_user(void) { // EEPROM is getting reset! 115void eeconfig_init_user(void) { // EEPROM is getting reset!
diff --git a/docs/feature_layers.md b/docs/feature_layers.md
index 77b6ef9531..fe9932fadb 100644
--- a/docs/feature_layers.md
+++ b/docs/feature_layers.md
@@ -27,7 +27,7 @@ For a similar reason, the `layer` argument of `LM()` is also limited to layers 0
27|:---------------:|:----------------------:|:------------------------:|:----------------:| 27|:---------------:|:----------------------:|:------------------------:|:----------------:|
28| ❌ | ❌ | ❌ | ✅ | 28| ❌ | ❌ | ❌ | ✅ |
29 29
30Expanding this would be complicated, at best. Moving to a 32-bit keycode would solve a lot of this, but would double the amount of space that the keymap matrix uses. And it could potentially cause issues, too. If you need to apply modifiers to your tapped keycode, [Tap Dance](feature_tap_dance#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this. 30Expanding this would be complicated, at best. Moving to a 32-bit keycode would solve a lot of this, but would double the amount of space that the keymap matrix uses. And it could potentially cause issues, too. If you need to apply modifiers to your tapped keycode, [Tap Dance](features/tap_dance#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this.
31 31
32## Working with Layers {#working-with-layers} 32## Working with Layers {#working-with-layers}
33 33
@@ -104,7 +104,7 @@ This runs code every time that the layers get changed. This can be useful for l
104 104
105### Example `layer_state_set_*` Implementation 105### Example `layer_state_set_*` Implementation
106 106
107This example shows how to set the [RGB Underglow](feature_rgblight) lights based on the layer, using the Planck as an example. 107This example shows how to set the [RGB Underglow](features/rgblight) lights based on the layer, using the Planck as an example.
108 108
109```c 109```c
110layer_state_t layer_state_set_user(layer_state_t state) { 110layer_state_t layer_state_set_user(layer_state_t state) {
diff --git a/docs/feature_macros.md b/docs/feature_macros.md
index d5a830c0ef..055bb3ff8f 100644
--- a/docs/feature_macros.md
+++ b/docs/feature_macros.md
@@ -86,7 +86,7 @@ All objects have one required key: `action`. This tells QMK what the object does
86Only basic keycodes (prefixed by `KC_`) are supported. Do not include the `KC_` prefix when listing keycodes. 86Only basic keycodes (prefixed by `KC_`) are supported. Do not include the `KC_` prefix when listing keycodes.
87 87
88* `beep` 88* `beep`
89 * Play a bell if the keyboard has [audio enabled](feature_audio). 89 * Play a bell if the keyboard has [audio enabled](features/audio).
90 * Example: `{"action": "beep"}` 90 * Example: `{"action": "beep"}`
91* `delay` 91* `delay`
92 * Pause macro playback. Duration is specified in milliseconds (ms). 92 * Pause macro playback. Duration is specified in milliseconds (ms).
@@ -108,7 +108,7 @@ Only basic keycodes (prefixed by `KC_`) are supported. Do not include the `KC_`
108 108
109### `SEND_STRING()` & `process_record_user` 109### `SEND_STRING()` & `process_record_user`
110 110
111See also: [Send String](feature_send_string) 111See also: [Send String](features/send_string)
112 112
113Sometimes you want a key to type out words or phrases. For the most common situations, we've provided `SEND_STRING()`, which will type out a string (i.e. a sequence of characters) for you. All ASCII characters that are easily translatable to a keycode are supported (e.g. `qmk 123\n\t`). 113Sometimes you want a key to type out words or phrases. For the most common situations, we've provided `SEND_STRING()`, which will type out a string (i.e. a sequence of characters) for you. All ASCII characters that are easily translatable to a keycode are supported (e.g. `qmk 123\n\t`).
114 114
diff --git a/docs/feature_audio.md b/docs/features/audio.md
index ec28860ae9..2f5e5b2d98 100644
--- a/docs/feature_audio.md
+++ b/docs/features/audio.md
@@ -27,7 +27,7 @@ per speaker is - for example with a piezo buzzer - the black lead to Ground, and
27 27
28 28
29## ARM based boards 29## ARM based boards
30for more technical details, see the notes on [Audio driver](audio_driver). 30for more technical details, see the notes on [Audio driver](../drivers/audio).
31 31
32<!-- because I'm not sure where to fit this in: https://waveeditonline.com/ --> 32<!-- because I'm not sure where to fit this in: https://waveeditonline.com/ -->
33### DAC (basic) 33### DAC (basic)
@@ -196,7 +196,7 @@ These keycodes turn all of the audio functionality on and off. Turning it off m
196|`GUITAR_SONG` | `GUITAR_SOUND` |Plays when the guitar music mode is selected (process_music.c) | 196|`GUITAR_SONG` | `GUITAR_SOUND` |Plays when the guitar music mode is selected (process_music.c) |
197|`VIOLIN_SONG` | `VIOLIN_SOUND` |Plays when the violin music mode is selected (process_music.c) | 197|`VIOLIN_SONG` | `VIOLIN_SOUND` |Plays when the violin music mode is selected (process_music.c) |
198|`MAJOR_SONG` | `MAJOR_SOUND` |Plays when the major music mode is selected (process_music.c) | 198|`MAJOR_SONG` | `MAJOR_SOUND` |Plays when the major music mode is selected (process_music.c) |
199|`DEFAULT_LAYER_SONGS` | *Not defined* |Plays song when switched default layers with [`set_single_persistent_default_layer(layer)`](ref_functions.md#setting-the-persistent-default-layer)(quantum.c). | 199|`DEFAULT_LAYER_SONGS` | *Not defined* |Plays song when switched default layers with [`set_single_persistent_default_layer(layer)`](../ref_functions#setting-the-persistent-default-layer)(quantum.c). |
200|`SENDSTRING_BELL` | *Not defined* |Plays chime when the "enter" ("\a") character is sent (send_string.c) | 200|`SENDSTRING_BELL` | *Not defined* |Plays chime when the "enter" ("\a") character is sent (send_string.c) |
201 201
202## Tempo 202## Tempo
@@ -354,7 +354,7 @@ You can configure the default, min and max frequencies, the stepping and built i
354 354
355## MIDI Functionality 355## MIDI Functionality
356 356
357See [MIDI](feature_midi) 357See [MIDI](midi)
358 358
359## Audio Keycodes 359## Audio Keycodes
360 360
diff --git a/docs/feature_auto_shift.md b/docs/features/auto_shift.md
index 53635e39f0..45b9048f03 100644
--- a/docs/feature_auto_shift.md
+++ b/docs/features/auto_shift.md
@@ -294,7 +294,7 @@ Holding and releasing a Tap Hold key without pressing another key will ordinaril
294result in only the hold. With `retro shift` enabled this action will instead 294result in only the hold. With `retro shift` enabled this action will instead
295produce a shifted version of the tap keycode on release. 295produce a shifted version of the tap keycode on release.
296 296
297It does not require [Retro Tapping](tap_hold#retro-tapping) to be enabled, and 297It does not require [Retro Tapping](../tap_hold#retro-tapping) to be enabled, and
298if both are enabled the state of `retro tapping` will only apply if the tap keycode 298if both are enabled the state of `retro tapping` will only apply if the tap keycode
299is not matched by Auto Shift. `RETRO_TAPPING_PER_KEY` and its corresponding 299is not matched by Auto Shift. `RETRO_TAPPING_PER_KEY` and its corresponding
300function, however, are checked before `retro shift` is applied. 300function, however, are checked before `retro shift` is applied.
@@ -318,10 +318,10 @@ Without a value set, holds of any length without an interrupting key will produc
318 318
319This value (if set) must be greater than one's `TAPPING_TERM`, as the key press 319This value (if set) must be greater than one's `TAPPING_TERM`, as the key press
320must be designated as a 'hold' by `process_tapping` before we send the modifier. 320must be designated as a 'hold' by `process_tapping` before we send the modifier.
321[Per-key tapping terms](tap_hold#tapping-term) can be used as a workaround. 321[Per-key tapping terms](../tap_hold#tapping-term) can be used as a workaround.
322There is no such limitation in regards to `AUTO_SHIFT_TIMEOUT` for normal keys. 322There is no such limitation in regards to `AUTO_SHIFT_TIMEOUT` for normal keys.
323 323
324**Note:** Tap Holds must be added to Auto Shift, see [here.](feature_auto_shift#auto-shift-per-key) 324**Note:** Tap Holds must be added to Auto Shift, see [here.](auto_shift#auto-shift-per-key)
325`IS_RETRO` may be helpful if one wants all Tap Holds retro shifted. 325`IS_RETRO` may be helpful if one wants all Tap Holds retro shifted.
326 326
327### Retro Shift and Tap Hold Configurations 327### Retro Shift and Tap Hold Configurations
@@ -330,7 +330,7 @@ Tap Hold Configurations work a little differently when using Retro Shift.
330Referencing `TAPPING_TERM` makes little sense, as holding longer would result in 330Referencing `TAPPING_TERM` makes little sense, as holding longer would result in
331shifting one of the keys. 331shifting one of the keys.
332 332
333`RETRO_SHIFT` enables [`PERMISSIVE_HOLD`-like behaviour](tap_hold#permissive-hold) (even if not explicitly enabled) on all mod-taps for which `RETRO_SHIFT` applies. 333`RETRO_SHIFT` enables [`PERMISSIVE_HOLD`-like behaviour](../tap_hold#permissive-hold) (even if not explicitly enabled) on all mod-taps for which `RETRO_SHIFT` applies.
334 334
335## Using Auto Shift Setup 335## Using Auto Shift Setup
336 336
diff --git a/docs/feature_autocorrect.md b/docs/features/autocorrect.md
index 1ad582207a..df3f2e0fd8 100644
--- a/docs/feature_autocorrect.md
+++ b/docs/features/autocorrect.md
@@ -113,7 +113,7 @@ Additionally, you can use the `AC_TOGG` keycode to toggle the on/off status for
113Callback function `bool process_autocorrect_user(uint16_t *keycode, keyrecord_t *record, uint8_t *typo_buffer_size, uint8_t *mods)` is available to customise incoming keycodes and handle exceptions. You can use this function to sanitise input before they are passed onto the autocorrect engine 113Callback function `bool process_autocorrect_user(uint16_t *keycode, keyrecord_t *record, uint8_t *typo_buffer_size, uint8_t *mods)` is available to customise incoming keycodes and handle exceptions. You can use this function to sanitise input before they are passed onto the autocorrect engine
114 114
115::: tip 115::: tip
116Sanitisation of input is required because autocorrect will only match 8-bit [basic keycodes](keycodes_basic) for typos. If valid modifier keys or 16-bit keycodes that are part of a user's word input (such as Shift + A) is passed through, they will fail typo letter detection. For example a [Mod-Tap](mod_tap) key such as `LCTL_T(KC_A)` is 16-bit and should be masked for the 8-bit `KC_A`. 116Sanitisation of input is required because autocorrect will only match 8-bit [basic keycodes](../keycodes_basic) for typos. If valid modifier keys or 16-bit keycodes that are part of a user's word input (such as Shift + A) is passed through, they will fail typo letter detection. For example a [Mod-Tap](../mod_tap) key such as `LCTL_T(KC_A)` is 16-bit and should be masked for the 8-bit `KC_A`.
117::: 117:::
118 118
119The default user callback function is found inside `quantum/process_keycode/process_autocorrect.c`. It covers most use-cases for QMK special functions and quantum keycodes, including [overriding autocorrect](#overriding-autocorrect) with a modifier other than shift. The `process_autocorrect_user` function is `weak` defined to allow user's copy inside `keymap.c` (or code files) to overwrite it. 119The default user callback function is found inside `quantum/process_keycode/process_autocorrect.c`. It covers most use-cases for QMK special functions and quantum keycodes, including [overriding autocorrect](#overriding-autocorrect) with a modifier other than shift. The `process_autocorrect_user` function is `weak` defined to allow user's copy inside `keymap.c` (or code files) to overwrite it.
diff --git a/docs/feature_backlight.md b/docs/features/backlight.md
index 545d7be949..94726756fd 100644
--- a/docs/feature_backlight.md
+++ b/docs/features/backlight.md
@@ -1,6 +1,6 @@
1# Backlighting {#backlighting} 1# Backlighting {#backlighting}
2 2
3Many keyboards support backlit keys by way of individual LEDs placed through or underneath the keyswitches. This feature is distinct from both the [RGB Underglow](feature_rgblight) and [RGB Matrix](feature_rgb_matrix) features as it usually allows for only a single colour per switch, though you can obviously install multiple different single coloured LEDs on a keyboard. 3Many keyboards support backlit keys by way of individual LEDs placed through or underneath the keyswitches. This feature is distinct from both the [RGB Underglow](rgblight) and [RGB Matrix](rgb_matrix) features as it usually allows for only a single colour per switch, though you can obviously install multiple different single coloured LEDs on a keyboard.
4 4
5QMK is able to control the brightness of these LEDs by switching them on and off rapidly in a certain ratio, a technique known as *Pulse Width Modulation*, or PWM. By altering the duty cycle of the PWM signal, it creates the illusion of dimming. 5QMK is able to control the brightness of these LEDs by switching them on and off rapidly in a certain ratio, a technique known as *Pulse Width Modulation*, or PWM. By altering the duty cycle of the PWM signal, it creates the illusion of dimming.
6 6
@@ -153,7 +153,7 @@ The following `#define`s apply only to the `timer` driver:
153|-----------------------|-------|----------------| 153|-----------------------|-------|----------------|
154|`BACKLIGHT_PWM_TIMER` |`1` |The timer to use| 154|`BACKLIGHT_PWM_TIMER` |`1` |The timer to use|
155 155
156Note that the choice of timer may conflict with the [Audio](feature_audio) feature. 156Note that the choice of timer may conflict with the [Audio](audio) feature.
157 157
158## ChibiOS/ARM Configuration {#arm-configuration} 158## ChibiOS/ARM Configuration {#arm-configuration}
159 159
diff --git a/docs/feature_bluetooth.md b/docs/features/bluetooth.md
index 7562a75447..1dbf15f4e1 100644
--- a/docs/feature_bluetooth.md
+++ b/docs/features/bluetooth.md
@@ -26,7 +26,7 @@ A Bluefruit UART friend can be converted to an SPI friend, however this [require
26<!-- FIXME: Document bluetooth support more completely. --> 26<!-- FIXME: Document bluetooth support more completely. -->
27## Bluetooth Rules.mk Options 27## Bluetooth Rules.mk Options
28 28
29The currently supported Bluetooth chipsets do not support [N-Key Rollover (NKRO)](reference_glossary#n-key-rollover-nkro), so `rules.mk` must contain `NKRO_ENABLE = no`. 29The currently supported Bluetooth chipsets do not support [N-Key Rollover (NKRO)](../reference_glossary#n-key-rollover-nkro), so `rules.mk` must contain `NKRO_ENABLE = no`.
30 30
31Add the following to your `rules.mk`: 31Add the following to your `rules.mk`:
32 32
diff --git a/docs/feature_bootmagic.md b/docs/features/bootmagic.md
index df0344ee8e..49fae5ba45 100644
--- a/docs/feature_bootmagic.md
+++ b/docs/features/bootmagic.md
@@ -25,7 +25,7 @@ Using Bootmagic will **always reset** the EEPROM, so you will lose any settings
25 25
26## Split Keyboards 26## Split Keyboards
27 27
28When [handedness](feature_split_keyboard#setting-handedness) is predetermined via options like `SPLIT_HAND_PIN` or `EE_HANDS`, you might need to configure a different key between halves. To identify the correct key for the right half, examine the split key matrix defined in the `<keyboard>.h` file, e.g.: 28When [handedness](split_keyboard#setting-handedness) is predetermined via options like `SPLIT_HAND_PIN` or `EE_HANDS`, you might need to configure a different key between halves. To identify the correct key for the right half, examine the split key matrix defined in the `<keyboard>.h` file, e.g.:
29 29
30```c 30```c
31#define LAYOUT_split_3x5_2( \ 31#define LAYOUT_split_3x5_2( \
@@ -80,6 +80,6 @@ You can define additional logic here. For instance, resetting the EEPROM or requ
80 80
81## Addenda 81## Addenda
82 82
83To manipulate settings that were formerly configured through the now-deprecated full Bootmagic feature, see [Magic Keycodes](keycodes_magic). 83To manipulate settings that were formerly configured through the now-deprecated full Bootmagic feature, see [Magic Keycodes](../keycodes_magic).
84 84
85The Command feature, formerly known as Magic, also allows you to control different aspects of your keyboard. While it shares some functionality with Magic Keycodes, it also allows you to do things that Magic Keycodes cannot, such as printing version information to the console. For more information, see [Command](feature_command). 85The Command feature, formerly known as Magic, also allows you to control different aspects of your keyboard. While it shares some functionality with Magic Keycodes, it also allows you to do things that Magic Keycodes cannot, such as printing version information to the console. For more information, see [Command](command).
diff --git a/docs/feature_caps_word.md b/docs/features/caps_word.md
index 666edecb6e..15361aab96 100644
--- a/docs/feature_caps_word.md
+++ b/docs/features/caps_word.md
@@ -62,7 +62,7 @@ Next, use one the following methods to activate Caps Word:
62 62
63* **Custom activation**: You can activate Caps Word from code by calling 63* **Custom activation**: You can activate Caps Word from code by calling
64 `caps_word_on()`. This may be used to activate Caps Word through [a 64 `caps_word_on()`. This may be used to activate Caps Word through [a
65 combo](feature_combo) or [tap dance](feature_tap_dance) or any means 65 combo](combo) or [tap dance](tap_dance) or any means
66 you like. 66 you like.
67 67
68### Troubleshooting: Command {#troubleshooting-command} 68### Troubleshooting: Command {#troubleshooting-command}
@@ -71,7 +71,7 @@ When using `BOTH_SHIFTS_TURNS_ON_CAPS_WORD`, you might see a compile message
71**"BOTH_SHIFTS_TURNS_ON_CAPS_WORD and Command should not be enabled at the same 71**"BOTH_SHIFTS_TURNS_ON_CAPS_WORD and Command should not be enabled at the same
72time, since both use the Left Shift + Right Shift key combination."** 72time, since both use the Left Shift + Right Shift key combination."**
73 73
74Many keyboards enable the [Command feature](feature_command), which by 74Many keyboards enable the [Command feature](command), which by
75default is also activated using the Left Shift + Right Shift key combination. To 75default is also activated using the Left Shift + Right Shift key combination. To
76fix this conflict, please disable Command by adding in rules.mk: 76fix this conflict, please disable Command by adding in rules.mk:
77 77
diff --git a/docs/feature_combo.md b/docs/features/combo.md
index b49a444804..bdb8c4b15f 100644
--- a/docs/feature_combo.md
+++ b/docs/features/combo.md
@@ -18,7 +18,7 @@ combo_t key_combos[] = {
18This will send "Escape" if you hit the A and B keys, and Ctrl+Z when you hit the C and D keys. 18This will send "Escape" if you hit the A and B keys, and Ctrl+Z when you hit the C and D keys.
19 19
20## Advanced Keycodes Support 20## Advanced Keycodes Support
21Advanced keycodes, such as [Mod-Tap](mod_tap) and [Tap Dance](feature_tap_dance) are also supported together with combos. If you use these advanced keycodes in your keymap, you will need to place the full keycode in the combo definition, e.g.: 21Advanced keycodes, such as [Mod-Tap](../mod_tap) and [Tap Dance](tap_dance) are also supported together with combos. If you use these advanced keycodes in your keymap, you will need to place the full keycode in the combo definition, e.g.:
22 22
23```c 23```c
24const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(1, KC_B), COMBO_END}; 24const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(1, KC_B), COMBO_END};
@@ -99,7 +99,7 @@ void process_combo_event(uint16_t combo_index, bool pressed) {
99 99
100This will send "john.doe@example.com" if you chord E and M together, and clear the current line with Backspace and Left-Shift. You could change this to do stuff like play sounds or change settings. 100This will send "john.doe@example.com" if you chord E and M together, and clear the current line with Backspace and Left-Shift. You could change this to do stuff like play sounds or change settings.
101 101
102It is worth noting that `COMBO_ACTION`s are not needed anymore. As of [PR#8591](https://github.com/qmk/qmk_firmware/pull/8591/), it is possible to run your own custom keycodes from combos. Just define the custom keycode, program its functionality in `process_record_user`, and define a combo with `COMBO(<key_array>, <your_custom_keycode>)`. See the first example in [Macros](feature_macros). 102It is worth noting that `COMBO_ACTION`s are not needed anymore. As of [PR#8591](https://github.com/qmk/qmk_firmware/pull/8591/), it is possible to run your own custom keycodes from combos. Just define the custom keycode, program its functionality in `process_record_user`, and define a combo with `COMBO(<key_array>, <your_custom_keycode>)`. See the first example in [Macros](../feature_macros).
103 103
104## Keycodes 104## Keycodes
105You can enable, disable and toggle the Combo feature on the fly. This is useful if you need to disable them temporarily, such as for a game. The following keycodes are available for use in your `keymap.c` 105You can enable, disable and toggle the Combo feature on the fly. This is useful if you need to disable them temporarily, such as for a game. The following keycodes are available for use in your `keymap.c`
diff --git a/docs/feature_command.md b/docs/features/command.md
index 4aba9cfb63..7ad45103c7 100644
--- a/docs/feature_command.md
+++ b/docs/features/command.md
@@ -1,6 +1,6 @@
1# Command 1# Command
2 2
3Command, formerly known as Magic, is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic Lite](feature_bootmagic). There is a lot of overlap between this functionality and the [Magic Keycodes](keycodes_magic). Wherever possible we encourage you to use that feature instead of Command. 3Command, formerly known as Magic, is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic Lite](bootmagic). There is a lot of overlap between this functionality and the [Magic Keycodes](../keycodes_magic). Wherever possible we encourage you to use that feature instead of Command.
4 4
5On some keyboards Command is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk`: 5On some keyboards Command is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk`:
6 6
diff --git a/docs/feature_digitizer.md b/docs/features/digitizer.md
index 475d5b4d51..e524877636 100644
--- a/docs/feature_digitizer.md
+++ b/docs/features/digitizer.md
@@ -1,6 +1,6 @@
1# Digitizer {#digitizer} 1# Digitizer {#digitizer}
2 2
3Digitizers allow the mouse cursor to be placed at absolute coordinates, unlike the [Pointing Device](feature_pointing_device) feature which applies relative displacements. 3Digitizers allow the mouse cursor to be placed at absolute coordinates, unlike the [Pointing Device](pointing_device) feature which applies relative displacements.
4 4
5This feature implements a stylus device with a tip switch and barrel switch (generally equivalent to the primary and secondary mouse buttons respectively). Tip pressure is not currently implemented. 5This feature implements a stylus device with a tip switch and barrel switch (generally equivalent to the primary and secondary mouse buttons respectively). Tip pressure is not currently implemented.
6 6
diff --git a/docs/feature_dip_switch.md b/docs/features/dip_switch.md
index 738331bef0..738331bef0 100644
--- a/docs/feature_dip_switch.md
+++ b/docs/features/dip_switch.md
diff --git a/docs/feature_dynamic_macros.md b/docs/features/dynamic_macros.md
index a642ced43e..a642ced43e 100644
--- a/docs/feature_dynamic_macros.md
+++ b/docs/features/dynamic_macros.md
diff --git a/docs/feature_encoders.md b/docs/features/encoders.md
index 3d1cac79af..3d1cac79af 100644
--- a/docs/feature_encoders.md
+++ b/docs/features/encoders.md
diff --git a/docs/feature_grave_esc.md b/docs/features/grave_esc.md
index 09d098ee4e..09d098ee4e 100644
--- a/docs/feature_grave_esc.md
+++ b/docs/features/grave_esc.md
diff --git a/docs/feature_haptic_feedback.md b/docs/features/haptic_feedback.md
index 16370327cb..52667965a0 100644
--- a/docs/feature_haptic_feedback.md
+++ b/docs/features/haptic_feedback.md
@@ -192,11 +192,11 @@ The Haptic Exclusion is implemented as `__attribute__((weak)) bool get_haptic_en
192With the entry of `#define NO_HAPTIC_MOD` in config.h, the following keys will not trigger feedback: 192With the entry of `#define NO_HAPTIC_MOD` in config.h, the following keys will not trigger feedback:
193 193
194* Usual modifier keys such as Control/Shift/Alt/Gui (For example `KC_LCTL`) 194* Usual modifier keys such as Control/Shift/Alt/Gui (For example `KC_LCTL`)
195* `MO()` momentary keys. See also [Layers](feature_layers). 195* `MO()` momentary keys. See also [Layers](../feature_layers).
196* `LM()` momentary keys with mod active. 196* `LM()` momentary keys with mod active.
197* `LT()` layer tap keys, when held to activate a layer. However when tapped, and the key is quickly released, and sends a keycode, haptic feedback is still triggered. 197* `LT()` layer tap keys, when held to activate a layer. However when tapped, and the key is quickly released, and sends a keycode, haptic feedback is still triggered.
198* `TT()` layer tap toggle keys, when held to activate a layer. However when tapped `TAPPING_TOGGLE` times to permanently toggle the layer, on the last tap haptic feedback is still triggered. 198* `TT()` layer tap toggle keys, when held to activate a layer. However when tapped `TAPPING_TOGGLE` times to permanently toggle the layer, on the last tap haptic feedback is still triggered.
199* `MT()` mod tap keys, when held to keep a usual modifier key pressed. However when tapped, and the key is quickly released, and sends a keycode, haptic feedback is still triggered. See also [Mod-Tap](mod_tap). 199* `MT()` mod tap keys, when held to keep a usual modifier key pressed. However when tapped, and the key is quickly released, and sends a keycode, haptic feedback is still triggered. See also [Mod-Tap](../mod_tap).
200 200
201### NO_HAPTIC_ALPHA 201### NO_HAPTIC_ALPHA
202With the entry of `#define NO_HAPTIC_ALPHA` in config.h, none of the alpha keys (A ... Z) will trigger a feedback. 202With the entry of `#define NO_HAPTIC_ALPHA` in config.h, none of the alpha keys (A ... Z) will trigger a feedback.
diff --git a/docs/feature_hd44780.md b/docs/features/hd44780.md
index 6b4209333b..6b4209333b 100644
--- a/docs/feature_hd44780.md
+++ b/docs/features/hd44780.md
diff --git a/docs/feature_joystick.md b/docs/features/joystick.md
index 75bffa605a..f3fd209d5a 100644
--- a/docs/feature_joystick.md
+++ b/docs/features/joystick.md
@@ -1,6 +1,6 @@
1# Joystick {#joystick} 1# Joystick {#joystick}
2 2
3This feature provides game controller input as a joystick device supporting up to 6 axes and 32 buttons. Axes can be read either from an [ADC-capable input pin](adc_driver), or can be virtual, so that its value is provided by your code. 3This feature provides game controller input as a joystick device supporting up to 6 axes and 32 buttons. Axes can be read either from an [ADC-capable input pin](../drivers/adc), or can be virtual, so that its value is provided by your code.
4 4
5An analog device such as a [potentiometer](https://en.wikipedia.org/wiki/Potentiometer) found on an analog joystick's axes is based on a voltage divider, where adjusting the movable wiper controls the output voltage which can then be read by the microcontroller's ADC. 5An analog device such as a [potentiometer](https://en.wikipedia.org/wiki/Potentiometer) found on an analog joystick's axes is based on a voltage divider, where adjusting the movable wiper controls the output voltage which can then be read by the microcontroller's ADC.
6 6
diff --git a/docs/feature_key_lock.md b/docs/features/key_lock.md
index 1a0a2dfb60..ba3b71ef06 100644
--- a/docs/feature_key_lock.md
+++ b/docs/features/key_lock.md
@@ -16,8 +16,8 @@ First, enable Key Lock by setting `KEY_LOCK_ENABLE = yes` in your `rules.mk`. Th
16 16
17## Caveats 17## Caveats
18 18
19Key Lock is only able to hold standard action keys and [One Shot modifier](one_shot_keys) keys (for example, if you have your Shift defined as `OSM(MOD_LSFT)`). 19Key Lock is only able to hold standard action keys and [One Shot modifier](../one_shot_keys) keys (for example, if you have your Shift defined as `OSM(MOD_LSFT)`).
20This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as `KC_LPRN`. If it's in the [Basic Keycodes](keycodes_basic) list, it can be held. 20This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as `KC_LPRN`. If it's in the [Basic Keycodes](../keycodes_basic) list, it can be held.
21 21
22Switching layers will not cancel the Key Lock. The Key Lock can be cancelled by calling the `cancel_key_lock()` function. 22Switching layers will not cancel the Key Lock. The Key Lock can be cancelled by calling the `cancel_key_lock()` function.
23 23
diff --git a/docs/feature_key_overrides.md b/docs/features/key_overrides.md
index b9fbd35966..4c568f1679 100644
--- a/docs/feature_key_overrides.md
+++ b/docs/features/key_overrides.md
@@ -103,7 +103,7 @@ const key_override_t **key_overrides = (const key_override_t *[]){
103``` 103```
104 104
105### Flexible macOS-friendly Grave Escape {#flexible-macos-friendly-grave-escape} 105### Flexible macOS-friendly Grave Escape {#flexible-macos-friendly-grave-escape}
106The [Grave Escape feature](feature_grave_esc) is limited in its configurability and has [bugs when used on macOS](feature_grave_esc#caveats). Key overrides can be used to achieve a similar functionality as Grave Escape, but with more customization and without bugs on macOS. 106The [Grave Escape feature](grave_esc) is limited in its configurability and has [bugs when used on macOS](grave_esc#caveats). Key overrides can be used to achieve a similar functionality as Grave Escape, but with more customization and without bugs on macOS.
107 107
108```c 108```c
109// Shift + esc = ~ 109// Shift + esc = ~
@@ -224,7 +224,7 @@ The duration of the key repeat delay is controlled with the `KEY_OVERRIDE_REPEAT
224 224
225## Difference to Combos {#difference-to-combos} 225## Difference to Combos {#difference-to-combos}
226 226
227Note that key overrides are very different from [combos](feature_combo). Combos require that you press down several keys almost _at the same time_ and can work with any combination of non-modifier keys. Key overrides work like keyboard shortcuts (e.g. `ctrl` + `z`): They take combinations of _multiple_ modifiers and _one_ non-modifier key to then perform some custom action. Key overrides are implemented with much care to behave just like normal keyboard shortcuts would in regards to the order of pressed keys, timing, and interaction with other pressed keys. There are a number of optional settings that can be used to really fine-tune the behavior of each key override as well. Using key overrides also does not delay key input for regular key presses, which inherently happens in combos and may be undesirable. 227Note that key overrides are very different from [combos](combo). Combos require that you press down several keys almost _at the same time_ and can work with any combination of non-modifier keys. Key overrides work like keyboard shortcuts (e.g. `ctrl` + `z`): They take combinations of _multiple_ modifiers and _one_ non-modifier key to then perform some custom action. Key overrides are implemented with much care to behave just like normal keyboard shortcuts would in regards to the order of pressed keys, timing, and interaction with other pressed keys. There are a number of optional settings that can be used to really fine-tune the behavior of each key override as well. Using key overrides also does not delay key input for regular key presses, which inherently happens in combos and may be undesirable.
228 228
229## Solution to the problem of flashing modifiers {#neutralize-flashing-modifiers} 229## Solution to the problem of flashing modifiers {#neutralize-flashing-modifiers}
230 230
diff --git a/docs/feature_leader_key.md b/docs/features/leader_key.md
index 641c2d7ae5..a36e630a36 100644
--- a/docs/feature_leader_key.md
+++ b/docs/features/leader_key.md
@@ -1,6 +1,6 @@
1# The Leader Key: A New Kind of Modifier {#the-leader-key} 1# The Leader Key: A New Kind of Modifier {#the-leader-key}
2 2
3If you're a Vim user, you probably know what a Leader key is. In contrast to [Combos](feature_combo), the Leader key allows you to hit a *sequence* of up to five keys instead, which triggers some custom functionality once complete. 3If you're a Vim user, you probably know what a Leader key is. In contrast to [Combos](combo), the Leader key allows you to hit a *sequence* of up to five keys instead, which triggers some custom functionality once complete.
4 4
5## Usage {#usage} 5## Usage {#usage}
6 6
@@ -86,7 +86,7 @@ Now, after you hit the leader key, you will have an infinite amount of time to s
86 86
87### Strict Key Processing {#strict-key-processing} 87### Strict Key Processing {#strict-key-processing}
88 88
89By default, only the "tap keycode" portions of [Mod-Taps](mod_tap) and [Layer Taps](feature_layers#switching-and-toggling-layers) are added to the sequence buffer. This means if you press eg. `LT(3, KC_A)` as part of a sequence, `KC_A` will be added to the buffer, rather than the entire `LT(3, KC_A)` keycode. 89By default, only the "tap keycode" portions of [Mod-Taps](../mod_tap) and [Layer Taps](../feature_layers#switching-and-toggling-layers) are added to the sequence buffer. This means if you press eg. `LT(3, KC_A)` as part of a sequence, `KC_A` will be added to the buffer, rather than the entire `LT(3, KC_A)` keycode.
90 90
91This gives a more expected behaviour for most users, however you may want to change this. 91This gives a more expected behaviour for most users, however you may want to change this.
92 92
diff --git a/docs/feature_led_indicators.md b/docs/features/led_indicators.md
index e28c222e76..8435c69a55 100644
--- a/docs/feature_led_indicators.md
+++ b/docs/features/led_indicators.md
@@ -1,7 +1,7 @@
1# LED Indicators 1# LED Indicators
2 2
3::: tip 3::: tip
4LED indicators on split keyboards will require state information synced to the slave half (e.g. `#define SPLIT_LED_STATE_ENABLE`). See [data sync options](feature_split_keyboard#data-sync-options) for more details. 4LED indicators on split keyboards will require state information synced to the slave half (e.g. `#define SPLIT_LED_STATE_ENABLE`). See [data sync options](split_keyboard#data-sync-options) for more details.
5::: 5:::
6 6
7QMK provides methods to read 5 of the LEDs defined in the HID spec: 7QMK provides methods to read 5 of the LEDs defined in the HID spec:
diff --git a/docs/feature_led_matrix.md b/docs/features/led_matrix.md
index 78afb36d2c..fee7b139bc 100644
--- a/docs/feature_led_matrix.md
+++ b/docs/features/led_matrix.md
@@ -2,7 +2,7 @@
2 2
3This feature allows you to use LED matrices driven by external drivers. It hooks into the backlight system so you can use the same keycodes as backlighting to control it. 3This feature allows you to use LED matrices driven by external drivers. It hooks into the backlight system so you can use the same keycodes as backlighting to control it.
4 4
5If you want to use RGB LED's you should use the [RGB Matrix Subsystem](feature_rgb_matrix) instead. 5If you want to use RGB LED's you should use the [RGB Matrix Subsystem](rgb_matrix) instead.
6 6
7## Driver configuration {#driver-configuration} 7## Driver configuration {#driver-configuration}
8--- 8---
diff --git a/docs/feature_midi.md b/docs/features/midi.md
index 89c6af0508..32c062e54d 100644
--- a/docs/feature_midi.md
+++ b/docs/features/midi.md
@@ -34,7 +34,7 @@ To enable advanced MIDI, add the following to your `config.h`:
34 34
35If you're aiming to emulate the features of something like a Launchpad or other MIDI controller you'll need to access the internal MIDI device directly. 35If you're aiming to emulate the features of something like a Launchpad or other MIDI controller you'll need to access the internal MIDI device directly.
36 36
37Because there are so many possible CC messages, not all of them are implemented as keycodes. Additionally, you might need to provide more than just two values that you would get from a keycode (pressed and released) - for example, the analog values from a fader or a potentiometer. So, you will need to implement [custom keycodes](feature_macros) if you want to use them in your keymap directly using `process_record_user()`. 37Because there are so many possible CC messages, not all of them are implemented as keycodes. Additionally, you might need to provide more than just two values that you would get from a keycode (pressed and released) - for example, the analog values from a fader or a potentiometer. So, you will need to implement [custom keycodes](../feature_macros) if you want to use them in your keymap directly using `process_record_user()`.
38 38
39 39
40For reference of all the possible control code numbers see [MIDI Specification](#midi-specification) 40For reference of all the possible control code numbers see [MIDI Specification](#midi-specification)
diff --git a/docs/feature_mouse_keys.md b/docs/features/mouse_keys.md
index 240f6bf9be..c2b3e98f42 100644
--- a/docs/feature_mouse_keys.md
+++ b/docs/features/mouse_keys.md
@@ -205,4 +205,4 @@ Tips:
205 205
206## Use with PS/2 Mouse and Pointing Device 206## Use with PS/2 Mouse and Pointing Device
207 207
208Mouse keys button state is shared with [PS/2 mouse](feature_ps2_mouse) and [pointing device](feature_pointing_device) so mouse keys button presses can be used for clicks and drags. 208Mouse keys button state is shared with [PS/2 mouse](ps2_mouse) and [pointing device](pointing_device) so mouse keys button presses can be used for clicks and drags.
diff --git a/docs/feature_oled_driver.md b/docs/features/oled_driver.md
index cb7a2f13f3..cb7a2f13f3 100644
--- a/docs/feature_oled_driver.md
+++ b/docs/features/oled_driver.md
diff --git a/docs/feature_os_detection.md b/docs/features/os_detection.md
index d0556d2549..d0556d2549 100644
--- a/docs/feature_os_detection.md
+++ b/docs/features/os_detection.md
diff --git a/docs/feature_pointing_device.md b/docs/features/pointing_device.md
index 933202a009..a6bf521a18 100644
--- a/docs/feature_pointing_device.md
+++ b/docs/features/pointing_device.md
@@ -420,7 +420,7 @@ Any pointing device with a lift/contact status can integrate inertial cursor fea
420 420
421## Split Keyboard Configuration 421## Split Keyboard Configuration
422 422
423The following configuration options are only available when using `SPLIT_POINTING_ENABLE` see [data sync options](feature_split_keyboard#data-sync-options). The rotation and invert `*_RIGHT` options are only used with `POINTING_DEVICE_COMBINED`. If using `POINTING_DEVICE_LEFT` or `POINTING_DEVICE_RIGHT` use the common configuration above to configure your pointing device. 423The following configuration options are only available when using `SPLIT_POINTING_ENABLE` see [data sync options](split_keyboard#data-sync-options). The rotation and invert `*_RIGHT` options are only used with `POINTING_DEVICE_COMBINED`. If using `POINTING_DEVICE_LEFT` or `POINTING_DEVICE_RIGHT` use the common configuration above to configure your pointing device.
424 424
425| Setting | Description | Default | 425| Setting | Description | Default |
426| ------------------------------------ | ----------------------------------------------------------------------------------------------------- | ------------- | 426| ------------------------------------ | ----------------------------------------------------------------------------------------------------- | ------------- |
@@ -434,7 +434,7 @@ The following configuration options are only available when using `SPLIT_POINTIN
434| `POINTING_DEVICE_INVERT_Y_RIGHT` | (Optional) Inverts the Y axis report. | _not defined_ | 434| `POINTING_DEVICE_INVERT_Y_RIGHT` | (Optional) Inverts the Y axis report. | _not defined_ |
435 435
436::: warning 436::: warning
437If there is a `_RIGHT` configuration option or callback, the [common configuration](feature_pointing_device#common-configuration) option will work for the left. For correct left/right detection you should setup a [handedness option](feature_split_keyboard#setting-handedness), `EE_HANDS` is usually a good option for an existing board that doesn't do handedness by hardware. 437If there is a `_RIGHT` configuration option or callback, the [common configuration](pointing_device#common-configuration) option will work for the left. For correct left/right detection you should setup a [handedness option](split_keyboard#setting-handedness), `EE_HANDS` is usually a good option for an existing board that doesn't do handedness by hardware.
438::: 438:::
439 439
440 440
@@ -458,7 +458,7 @@ If there is a `_RIGHT` configuration option or callback, the [common configurati
458 458
459## Split Keyboard Callbacks and Functions 459## Split Keyboard Callbacks and Functions
460 460
461The combined functions below are only available when using `SPLIT_POINTING_ENABLE` and `POINTING_DEVICE_COMBINED`. The 2 callbacks `pointing_device_task_combined_*` replace the single sided equivalents above. See the [combined pointing devices example](feature_pointing_device#combined-pointing-devices) 461The combined functions below are only available when using `SPLIT_POINTING_ENABLE` and `POINTING_DEVICE_COMBINED`. The 2 callbacks `pointing_device_task_combined_*` replace the single sided equivalents above. See the [combined pointing devices example](pointing_device#combined-pointing-devices)
462 462
463| Function | Description | 463| Function | Description |
464| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | 464| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
@@ -684,7 +684,7 @@ If you are having issues with pointing device drivers debug messages can be enab
684``` 684```
685 685
686::: tip 686::: tip
687The messages will be printed out to the `CONSOLE` output. For additional information, refer to [Debugging/Troubleshooting QMK](faq_debug). 687The messages will be printed out to the `CONSOLE` output. For additional information, refer to [Debugging/Troubleshooting QMK](../faq_debug).
688::: 688:::
689 689
690 690
diff --git a/docs/feature_programmable_button.md b/docs/features/programmable_button.md
index 1fdf44c29e..1fdf44c29e 100644
--- a/docs/feature_programmable_button.md
+++ b/docs/features/programmable_button.md
diff --git a/docs/feature_ps2_mouse.md b/docs/features/ps2_mouse.md
index 90f4cca827..90f4cca827 100644
--- a/docs/feature_ps2_mouse.md
+++ b/docs/features/ps2_mouse.md
diff --git a/docs/feature_rawhid.md b/docs/features/rawhid.md
index c3ecfbe099..c3ecfbe099 100644
--- a/docs/feature_rawhid.md
+++ b/docs/features/rawhid.md
diff --git a/docs/feature_repeat_key.md b/docs/features/repeat_key.md
index c353ec5b59..53495e0f4d 100644
--- a/docs/feature_repeat_key.md
+++ b/docs/features/repeat_key.md
@@ -172,7 +172,7 @@ uint16_t get_alt_repeat_key_keycode_user(uint16_t keycode, uint8_t mods) {
172#### Typing shortcuts 172#### Typing shortcuts
173 173
174A useful possibility is having Alternate Repeat press [a 174A useful possibility is having Alternate Repeat press [a
175macro](feature_macros). This way macros can be used without having to 175macro](../feature_macros). This way macros can be used without having to
176dedicate keys to them. The following defines a couple shortcuts. 176dedicate keys to them. The following defines a couple shortcuts.
177 177
178* Typing <kbd>K</kbd>, <kbd>Alt Repeat</kbd> produces "`keyboard`," with the 178* Typing <kbd>K</kbd>, <kbd>Alt Repeat</kbd> produces "`keyboard`," with the
@@ -281,11 +281,8 @@ bool remember_last_key_user(uint16_t keycode, keyrecord_t* record,
281``` 281```
282 282
283::: tip 283::: tip
284See [Layer Functions](feature_layers#functions) and [Checking Modifier 284See [Layer Functions](../feature_layers#functions) and [Checking Modifier State](../feature_advanced_keycodes#checking-modifier-state) for further details.
285::: 285:::
286State](feature_advanced_keycodes#checking-modifier-state) for further
287details.
288
289 286
290## Handle how a key is repeated 287## Handle how a key is repeated
291 288
@@ -388,7 +385,7 @@ By leveraging `get_last_keycode()` in macros, it is possible to define
388additional, distinct "Alternate Repeat"-like keys. The following defines two 385additional, distinct "Alternate Repeat"-like keys. The following defines two
389keys `ALTREP2` and `ALTREP3` and implements ten shortcuts with them for common 386keys `ALTREP2` and `ALTREP3` and implements ten shortcuts with them for common
390English 5-gram letter patterns, taking inspiration from 387English 5-gram letter patterns, taking inspiration from
391[Stenotype](feature_stenography): 388[Stenotype](stenography):
392 389
393 390
394| Typing | Produces | Typing | Produces | 391| Typing | Produces | Typing | Produces |
diff --git a/docs/feature_rgb_matrix.md b/docs/features/rgb_matrix.md
index b9c01dcbf5..f7f693f239 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/features/rgb_matrix.md
@@ -2,7 +2,7 @@
2 2
3This feature allows you to use RGB LED matrices driven by external drivers. It hooks into the RGBLIGHT system so you can use the same keycodes as RGBLIGHT to control it. 3This feature allows you to use RGB LED matrices driven by external drivers. It hooks into the RGBLIGHT system so you can use the same keycodes as RGBLIGHT to control it.
4 4
5If you want to use single color LED's you should use the [LED Matrix Subsystem](feature_led_matrix) instead. 5If you want to use single color LED's you should use the [LED Matrix Subsystem](led_matrix) instead.
6 6
7## Driver configuration {#driver-configuration} 7## Driver configuration {#driver-configuration}
8--- 8---
@@ -444,7 +444,7 @@ Configure the hardware via your `config.h`:
444``` 444```
445 445
446::: tip 446::: tip
447There are additional configuration options for ARM controllers that offer increased performance over the default bitbang driver. Please see [WS2812 Driver](ws2812_driver) for more information. 447There are additional configuration options for ARM controllers that offer increased performance over the default bitbang driver. Please see [WS2812 Driver](../drivers/ws2812) for more information.
448::: 448:::
449 449
450--- 450---
@@ -619,7 +619,7 @@ All RGB keycodes are currently shared with the RGBLIGHT system:
619 619
620 620
621::: warning 621::: warning
622By default, if you have both the [RGB Light](feature_rgblight) and the RGB Matrix feature enabled, these keycodes will work for both features, at the same time. You can disable the keycode functionality by defining the `*_DISABLE_KEYCODES` option for the specific feature. 622By default, if you have both the [RGB Light](rgblight) and the RGB Matrix feature enabled, these keycodes will work for both features, at the same time. You can disable the keycode functionality by defining the `*_DISABLE_KEYCODES` option for the specific feature.
623::: 623:::
624 624
625## RGB Matrix Effects {#rgb-matrix-effects} 625## RGB Matrix Effects {#rgb-matrix-effects}
@@ -1060,7 +1060,7 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
1060``` 1060```
1061 1061
1062::: tip 1062::: tip
1063Split keyboards will require layer state data syncing with `#define SPLIT_LAYER_STATE_ENABLE`. See [Data Sync Options](feature_split_keyboard#data-sync-options) for more details. 1063Split keyboards will require layer state data syncing with `#define SPLIT_LAYER_STATE_ENABLE`. See [Data Sync Options](split_keyboard#data-sync-options) for more details.
1064::: 1064:::
1065 1065
1066#### Examples {#indicator-examples-2} 1066#### Examples {#indicator-examples-2}
@@ -1105,7 +1105,7 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
1105``` 1105```
1106 1106
1107::: tip 1107::: tip
1108RGB indicators on split keyboards will require state information synced to the slave half (e.g. `#define SPLIT_LAYER_STATE_ENABLE`). See [data sync options](feature_split_keyboard#data-sync-options) for more details. 1108RGB indicators on split keyboards will require state information synced to the slave half (e.g. `#define SPLIT_LAYER_STATE_ENABLE`). See [data sync options](split_keyboard#data-sync-options) for more details.
1109::: 1109:::
1110 1110
1111#### Indicators without RGB Matrix Effect 1111#### Indicators without RGB Matrix Effect
diff --git a/docs/feature_rgblight.md b/docs/features/rgblight.md
index 682d8b8cba..ece1c10467 100644
--- a/docs/feature_rgblight.md
+++ b/docs/features/rgblight.md
@@ -23,7 +23,7 @@ RGBLIGHT_ENABLE = yes
23``` 23```
24 24
25::: tip 25::: tip
26There are additional configuration options for ARM controllers that offer increased performance over the default WS2812 bitbang driver. Please see [WS2812 Driver](ws2812_driver) for more information. 26There are additional configuration options for ARM controllers that offer increased performance over the default WS2812 bitbang driver. Please see [WS2812 Driver](../drivers/ws2812) for more information.
27::: 27:::
28 28
29For APA102 LEDs, add the following to your `rules.mk`: 29For APA102 LEDs, add the following to your `rules.mk`:
@@ -49,7 +49,7 @@ Then you should be able to use the keycodes below to change the RGB lighting to
49 49
50QMK uses [Hue, Saturation, and Value](https://en.wikipedia.org/wiki/HSL_and_HSV) to select colors rather than RGB. The color wheel below demonstrates how this works. 50QMK uses [Hue, Saturation, and Value](https://en.wikipedia.org/wiki/HSL_and_HSV) to select colors rather than RGB. The color wheel below demonstrates how this works.
51 51
52<img src="./public/color-wheel.svg" alt="HSV Color Wheel" width="250"/> 52<img src="../public/color-wheel.svg" alt="HSV Color Wheel" width="250"/>
53 53
54Changing the **Hue** cycles around the circle.<br> 54Changing the **Hue** cycles around the circle.<br>
55Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.<br> 55Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.<br>
@@ -87,7 +87,7 @@ Changing the **Value** sets the overall brightness.<br>
87 87
88 88
89::: warning 89::: warning
90By default, if you have both the RGB Light and the [RGB Matrix](feature_rgb_matrix) feature enabled, these keycodes will work for both features, at the same time. You can disable the keycode functionality by defining the `*_DISABLE_KEYCODES` option for the specific feature. 90By default, if you have both the RGB Light and the [RGB Matrix](rgb_matrix) feature enabled, these keycodes will work for both features, at the same time. You can disable the keycode functionality by defining the `*_DISABLE_KEYCODES` option for the specific feature.
91::: 91:::
92 92
93## Configuration 93## Configuration
@@ -218,7 +218,7 @@ const uint8_t RGBLED_GRADIENT_RANGES[] PROGMEM = {255, 170, 127, 85, 64};
218## Lighting Layers 218## Lighting Layers
219 219
220::: tip 220::: tip
221**Note:** Lighting Layers is an RGB Light feature, it will not work for RGB Matrix. See [RGB Matrix Indicators](feature_rgb_matrix#indicators) for details on how to do so. 221**Note:** Lighting Layers is an RGB Light feature, it will not work for RGB Matrix. See [RGB Matrix Indicators](rgb_matrix#indicators) for details on how to do so.
222::: 222:::
223 223
224By including `#define RGBLIGHT_LAYERS` in your `config.h` file you can enable lighting layers. These make 224By including `#define RGBLIGHT_LAYERS` in your `config.h` file you can enable lighting layers. These make
@@ -353,7 +353,7 @@ rgblight_blink_layer(2, 500);
353``` 353```
354 354
355::: warning 355::: warning
356Lighting layers on split keyboards will require layer state synced to the slave half (e.g. `#define SPLIT_LAYER_STATE_ENABLE`). See [data sync options](feature_split_keyboard#data-sync-options) for more details. 356Lighting layers on split keyboards will require layer state synced to the slave half (e.g. `#define SPLIT_LAYER_STATE_ENABLE`). See [data sync options](split_keyboard#data-sync-options) for more details.
357::: 357:::
358 358
359### Overriding RGB Lighting on/off status 359### Overriding RGB Lighting on/off status
diff --git a/docs/feature_secure.md b/docs/features/secure.md
index 5ca9eed65f..02ed20a470 100644
--- a/docs/feature_secure.md
+++ b/docs/features/secure.md
@@ -16,7 +16,7 @@ To unlock, the user must perform a set of actions. This can optionally be config
16### Automatic Locking 16### Automatic Locking
17 17
18Once unlocked, the keyboard will revert back to a locked state after the configured timeout. 18Once unlocked, the keyboard will revert back to a locked state after the configured timeout.
19The timeout can be refreshed by using the `secure_activity_event` function, for example from one of the various [hooks](custom_quantum_functions). 19The timeout can be refreshed by using the `secure_activity_event` function, for example from one of the various [hooks](../custom_quantum_functions).
20 20
21## Usage 21## Usage
22 22
diff --git a/docs/feature_send_string.md b/docs/features/send_string.md
index 97e4ccc809..ed9311e20a 100644
--- a/docs/feature_send_string.md
+++ b/docs/features/send_string.md
@@ -5,7 +5,7 @@ The Send String API is part of QMK's macro system. It allows for sequences of ke
5The full ASCII character set is supported, along with all of the keycodes in the Basic Keycode range (as these are the only ones that will actually be sent to the host). 5The full ASCII character set is supported, along with all of the keycodes in the Basic Keycode range (as these are the only ones that will actually be sent to the host).
6 6
7::: tip 7::: tip
8Unicode characters are **not** supported with this API -- see the [Unicode](feature_unicode) feature instead. 8Unicode characters are **not** supported with this API -- see the [Unicode](unicode) feature instead.
9::: 9:::
10 10
11## Usage {#usage} 11## Usage {#usage}
@@ -22,12 +22,12 @@ Add the following to your `config.h`:
22 22
23|Define |Default |Description | 23|Define |Default |Description |
24|-----------------|----------------|------------------------------------------------------------------------------------------------------------| 24|-----------------|----------------|------------------------------------------------------------------------------------------------------------|
25|`SENDSTRING_BELL`|*Not defined* |If the [Audio](feature_audio) feature is enabled, the `\a` character (ASCII `BEL`) will beep the speaker.| 25|`SENDSTRING_BELL`|*Not defined* |If the [Audio](audio) feature is enabled, the `\a` character (ASCII `BEL`) will beep the speaker.|
26|`BELL_SOUND` |`TERMINAL_SOUND`|The song to play when the `\a` character is encountered. By default, this is an eighth note of C5. | 26|`BELL_SOUND` |`TERMINAL_SOUND`|The song to play when the `\a` character is encountered. By default, this is an eighth note of C5. |
27 27
28## Keycodes {#keycodes} 28## Keycodes {#keycodes}
29 29
30The Send String functions accept C string literals, but specific keycodes can be injected with the below macros. All of the keycodes in the [Basic Keycode range](keycodes_basic) are supported (as these are the only ones that will actually be sent to the host), but with an `X_` prefix instead of `KC_`. 30The Send String functions accept C string literals, but specific keycodes can be injected with the below macros. All of the keycodes in the [Basic Keycode range](../keycodes_basic) are supported (as these are the only ones that will actually be sent to the host), but with an `X_` prefix instead of `KC_`.
31 31
32|Macro |Description | 32|Macro |Description |
33|--------------|-------------------------------------------------------------------| 33|--------------|-------------------------------------------------------------------|
@@ -48,7 +48,7 @@ The following characters are also mapped to their respective keycodes for conven
48 48
49### Language Support {#language-support} 49### Language Support {#language-support}
50 50
51By default, Send String assumes your OS keyboard layout is set to US ANSI. If you are using a different keyboard layout, you can [override the lookup tables used to convert ASCII characters to keystrokes](reference_keymap_extras#sendstring-support). 51By default, Send String assumes your OS keyboard layout is set to US ANSI. If you are using a different keyboard layout, you can [override the lookup tables used to convert ASCII characters to keystrokes](../reference_keymap_extras#sendstring-support).
52 52
53## Examples {#examples} 53## Examples {#examples}
54 54
diff --git a/docs/feature_sequencer.md b/docs/features/sequencer.md
index f5f1f549af..f5f1f549af 100644
--- a/docs/feature_sequencer.md
+++ b/docs/features/sequencer.md
diff --git a/docs/feature_space_cadet.md b/docs/features/space_cadet.md
index cbb79e10ad..0abdaebf33 100644
--- a/docs/feature_space_cadet.md
+++ b/docs/features/space_cadet.md
@@ -24,7 +24,7 @@ Firstly, in your keymap, do one of the following:
24 24
25## Caveats 25## Caveats
26 26
27Space Cadet's functionality can conflict with the default Command functionality when both Shift keys are held at the same time. See the [Command feature](feature_command) for info on how to change it, or make sure that Command is disabled in your `rules.mk` with: 27Space Cadet's functionality can conflict with the default Command functionality when both Shift keys are held at the same time. See the [Command feature](command) for info on how to change it, or make sure that Command is disabled in your `rules.mk` with:
28 28
29```make 29```make
30COMMAND_ENABLE = no 30COMMAND_ENABLE = no
diff --git a/docs/feature_split_keyboard.md b/docs/features/split_keyboard.md
index c39d0a7e08..6efa1c2a35 100644
--- a/docs/feature_split_keyboard.md
+++ b/docs/features/split_keyboard.md
@@ -20,12 +20,12 @@ Both sides must use the same MCU family, for eg two Pro Micro-compatible control
20 20
21| Transport | AVR | ARM | 21| Transport | AVR | ARM |
22|------------------------------|--------------------|--------------------| 22|------------------------------|--------------------|--------------------|
23| ['serial'](serial_driver) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> | 23| ['serial'](../drivers/serial) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> |
24| I2C | :heavy_check_mark: | | 24| I2C | :heavy_check_mark: | |
25 25
26Notes: 26Notes:
27 27
281. Both hardware and software limitations are detailed within the [driver documentation](serial_driver). 281. Both hardware and software limitations are detailed within the [driver documentation](../drivers/serial).
29 29
30## Hardware Configuration 30## Hardware Configuration
31 31
@@ -173,10 +173,10 @@ Some controllers (e.g. Blackpill with DFU compatible bootloader) will need to be
173::: 173:::
174 174
175::: tip 175::: tip
176[QMK Toolbox]() can also be used to flash EEPROM handedness files. Place the controller in bootloader mode and select menu option Tools -> EEPROM -> Set Left/Right Hand 176[QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases/) can also be used to flash EEPROM handedness files. Place the controller in bootloader mode and select menu option Tools -> EEPROM -> Set Left/Right Hand
177::: 177:::
178 178
179This setting is not changed when re-initializing the EEPROM using the `EE_CLR` key, or using the `eeconfig_init()` function. However, if you reset the EEPROM outside of the firmware's built in options (such as flashing a file that overwrites the `EEPROM`, like how the [QMK Toolbox]()'s "Reset EEPROM" button works), you'll need to re-flash the controller with the `EEPROM` files. 179This setting is not changed when re-initializing the EEPROM using the `EE_CLR` key, or using the `eeconfig_init()` function. However, if you reset the EEPROM outside of the firmware's built in options (such as flashing a file that overwrites the `EEPROM`, like how the [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases/)'s "Reset EEPROM" button works), you'll need to re-flash the controller with the `EEPROM` files.
180 180
181You can find the `EEPROM` files in the QMK firmware repo, [here](https://github.com/qmk/qmk_firmware/tree/master/quantum/split_common). 181You can find the `EEPROM` files in the QMK firmware repo, [here](https://github.com/qmk/qmk_firmware/tree/master/quantum/split_common).
182 182
@@ -307,7 +307,7 @@ This enables transmitting the current ST7565 on/off status to the slave side of
307This enables transmitting the pointing device status to the master side of the split keyboard. The purpose of this feature is to enable use pointing devices on the slave side. 307This enables transmitting the pointing device status to the master side of the split keyboard. The purpose of this feature is to enable use pointing devices on the slave side.
308 308
309::: warning 309::: warning
310There is additional required configuration for `SPLIT_POINTING_ENABLE` outlined in the [pointing device documentation](feature_pointing_device#split-keyboard-configuration). 310There is additional required configuration for `SPLIT_POINTING_ENABLE` outlined in the [pointing device documentation](pointing_device#split-keyboard-configuration).
311::: 311:::
312 312
313```c 313```c
diff --git a/docs/feature_st7565.md b/docs/features/st7565.md
index de3e44d8e9..de3e44d8e9 100644
--- a/docs/feature_st7565.md
+++ b/docs/features/st7565.md
diff --git a/docs/feature_stenography.md b/docs/features/stenography.md
index 6827117a6b..c6c2155a9a 100644
--- a/docs/feature_stenography.md
+++ b/docs/features/stenography.md
@@ -25,7 +25,7 @@ Note: Due to hardware limitations, you might not be able to run both a virtual s
25::: 25:::
26 26
27::: warning 27::: warning
28Serial stenography protocols are not supported on [V-USB keyboards](compatible_microcontrollers#atmel-avr). 28Serial stenography protocols are not supported on [V-USB keyboards](../compatible_microcontrollers#atmel-avr).
29::: 29:::
30 30
31To enable stenography protocols, add the following lines to your `rules.mk`: 31To enable stenography protocols, add the following lines to your `rules.mk`:
@@ -94,7 +94,7 @@ STENO_ENABLE = yes
94STENO_PROTOCOL = all 94STENO_PROTOCOL = all
95``` 95```
96 96
97If you want to switch protocols programatically, as part of a custom macro for example, don't use `tap_code(QK_STENO_*)`, as `tap_code` only supports [basic keycodes](keycodes_basic). Instead, you should use `steno_set_mode(STENO_MODE_*)`, whose valid arguments are `STENO_MODE_BOLT` and `STENO_MODE_GEMINI`. 97If you want to switch protocols programatically, as part of a custom macro for example, don't use `tap_code(QK_STENO_*)`, as `tap_code` only supports [basic keycodes](../keycodes_basic). Instead, you should use `steno_set_mode(STENO_MODE_*)`, whose valid arguments are `STENO_MODE_BOLT` and `STENO_MODE_GEMINI`.
98 98
99The default protocol is Gemini PR but the last protocol used is stored in non-volatile memory so QMK will remember your choice between reboots of your keyboard &mdash; assuming that your keyboard features (emulated) EEPROM. 99The default protocol is Gemini PR but the last protocol used is stored in non-volatile memory so QMK will remember your choice between reboots of your keyboard &mdash; assuming that your keyboard features (emulated) EEPROM.
100 100
diff --git a/docs/feature_swap_hands.md b/docs/features/swap_hands.md
index 7546823d84..3560fe22f0 100644
--- a/docs/feature_swap_hands.md
+++ b/docs/features/swap_hands.md
@@ -30,7 +30,7 @@ Note that the array indices are reversed same as the matrix and the values are o
30|`QK_SWAP_HANDS_TAP_TOGGLE` |`SH_TT` |Momentary swap when held, toggle when tapped | 30|`QK_SWAP_HANDS_TAP_TOGGLE` |`SH_TT` |Momentary swap when held, toggle when tapped |
31|`QK_SWAP_HANDS_ONE_SHOT` |`SH_OS` |Turn on hand swap while held or until next key press| 31|`QK_SWAP_HANDS_ONE_SHOT` |`SH_OS` |Turn on hand swap while held or until next key press|
32 32
33`SH_TT` swap-hands tap-toggle key is similar to [layer tap-toggle](feature_layers#switching-and-toggling-layers). Tapping repeatedly (5 taps by default) will toggle swap-hands on or off, like `SH_TOGG`. Tap-toggle count can be changed by defining a value for `TAPPING_TOGGLE`. 33`SH_TT` swap-hands tap-toggle key is similar to [layer tap-toggle](../feature_layers#switching-and-toggling-layers). Tapping repeatedly (5 taps by default) will toggle swap-hands on or off, like `SH_TOGG`. Tap-toggle count can be changed by defining a value for `TAPPING_TOGGLE`.
34 34
35## Encoder Mapping 35## Encoder Mapping
36 36
diff --git a/docs/feature_tap_dance.md b/docs/features/tap_dance.md
index e43daf4196..3c4040db22 100644
--- a/docs/feature_tap_dance.md
+++ b/docs/features/tap_dance.md
@@ -17,7 +17,7 @@ Optionally, you might want to set a custom `TAPPING_TERM` time by adding somethi
17#define TAPPING_TERM_PER_KEY 17#define TAPPING_TERM_PER_KEY
18``` 18```
19 19
20The `TAPPING_TERM` time is the maximum time allowed between taps of your Tap Dance key, and is measured in milliseconds. For example, if you used the above `#define` statement and set up a Tap Dance key that sends `Space` on single-tap and `Enter` on double-tap, then this key will send `ENT` only if you tap this key twice in less than 175ms. If you tap the key, wait more than 175ms, and tap the key again you'll end up sending `SPC SPC` instead. The `TAPPING_TERM_PER_KEY` definition is only needed if you control the tapping term through a [custom `get_tapping_term` function](tap_hold#tapping_term), which may be needed because `TAPPING_TERM` affects not just tap-dance keys. 20The `TAPPING_TERM` time is the maximum time allowed between taps of your Tap Dance key, and is measured in milliseconds. For example, if you used the above `#define` statement and set up a Tap Dance key that sends `Space` on single-tap and `Enter` on double-tap, then this key will send `ENT` only if you tap this key twice in less than 175ms. If you tap the key, wait more than 175ms, and tap the key again you'll end up sending `SPC SPC` instead. The `TAPPING_TERM_PER_KEY` definition is only needed if you control the tapping term through a [custom `get_tapping_term` function](../tap_hold#tapping_term), which may be needed because `TAPPING_TERM` affects not just tap-dance keys.
21 21
22Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro. That macro takes a number which will later be used as an index into the `tap_dance_actions` array and turns it into a tap-dance keycode. 22Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro. That macro takes a number which will later be used as an index into the `tap_dance_actions` array and turns it into a tap-dance keycode.
23 23
@@ -33,7 +33,7 @@ After this, you'll want to use the `tap_dance_actions` array to specify what act
33The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise. 33The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise.
34 34
35::: warning 35::: warning
36Keep in mind that only [basic keycodes](keycodes_basic) are supported here. Custom keycodes are not supported. 36Keep in mind that only [basic keycodes](../keycodes_basic) are supported here. Custom keycodes are not supported.
37::: 37:::
38 38
39Similar to the first option, the second and third option are good for simple layer-switching cases. 39Similar to the first option, the second and third option are good for simple layer-switching cases.
diff --git a/docs/feature_tri_layer.md b/docs/features/tri_layer.md
index a67ec97a89..c32e65caed 100644
--- a/docs/feature_tri_layer.md
+++ b/docs/features/tri_layer.md
@@ -8,7 +8,7 @@ TRI_LAYER_ENABLE = yes
8 8
9Note that the "upper", "lower" and "adjust" names don't have a particular significance, they are just used to identify and clarify the behavior. Layers are processed from highest numeric value to lowest, however the values are not required to be consecutive. 9Note that the "upper", "lower" and "adjust" names don't have a particular significance, they are just used to identify and clarify the behavior. Layers are processed from highest numeric value to lowest, however the values are not required to be consecutive.
10 10
11For a detailed explanation of how the layer stack works, check out [Keymap Overview](keymap#keymap-and-layers). 11For a detailed explanation of how the layer stack works, check out [Keymap Overview](../keymap#keymap-and-layers).
12 12
13## Keycodes {#keycodes} 13## Keycodes {#keycodes}
14 14
diff --git a/docs/feature_unicode.md b/docs/features/unicode.md
index f9295c1f57..7ed178c30d 100644
--- a/docs/feature_unicode.md
+++ b/docs/features/unicode.md
@@ -31,7 +31,7 @@ Add the following to your `config.h`:
31 31
32### Audio Feedback {#audio-feedback} 32### Audio Feedback {#audio-feedback}
33 33
34If you have the [Audio](feature_audio) feature enabled on your board, you can configure it to play sounds when the input mode is changed. 34If you have the [Audio](audio) feature enabled on your board, you can configure it to play sounds when the input mode is changed.
35 35
36Add the following to your `config.h`: 36Add the following to your `config.h`:
37 37
@@ -199,7 +199,7 @@ Emacs supports code point input with the `insert-char` command.
199 199
200**Mode Name:** `UNICODE_MODE_BSD` 200**Mode Name:** `UNICODE_MODE_BSD`
201 201
202Not currently implemented. If you're a BSD user and want to contribute support for this input mode, please [feel free](contributing)! 202Not currently implemented. If you're a BSD user and want to contribute support for this input mode, please [feel free](../contributing)!
203 203
204::::: 204:::::
205 205
diff --git a/docs/feature_wpm.md b/docs/features/wpm.md
index 4f4ed43739..4f4ed43739 100644
--- a/docs/feature_wpm.md
+++ b/docs/features/wpm.md
diff --git a/docs/flashing.md b/docs/flashing.md
index c1e9f2a43d..798331eb23 100644
--- a/docs/flashing.md
+++ b/docs/flashing.md
@@ -53,7 +53,7 @@ QMK maintains [a fork of the LUFA DFU bootloader](https://github.com/qmk/lufa/tr
53//#define QMK_LED E6 53//#define QMK_LED E6
54//#define QMK_SPEAKER C6 54//#define QMK_SPEAKER C6
55``` 55```
56Currently we do not recommend making `QMK_ESC` the same key as the one designated for [Bootmagic Lite](feature_bootmagic), as holding it down will cause the MCU to loop back and forth between entering and exiting the bootloader. 56Currently we do not recommend making `QMK_ESC` the same key as the one designated for [Bootmagic Lite](features/bootmagic), as holding it down will cause the MCU to loop back and forth between entering and exiting the bootloader.
57 57
58The manufacturer and product strings are automatically pulled from `config.h`, with " Bootloader" appended to the product string. 58The manufacturer and product strings are automatically pulled from `config.h`, with " Bootloader" appended to the product string.
59 59
@@ -209,7 +209,7 @@ To enable the additional features, add the following defines to your `config.h`:
209//#define QMK_SPEAKER C6 209//#define QMK_SPEAKER C6
210``` 210```
211 211
212Currently we do not recommend making `QMK_ESC` the same key as the one designated for [Bootmagic Lite](feature_bootmagic), as holding it down will cause the MCU to loop back and forth between entering and exiting the bootloader. 212Currently we do not recommend making `QMK_ESC` the same key as the one designated for [Bootmagic Lite](features/bootmagic), as holding it down will cause the MCU to loop back and forth between entering and exiting the bootloader.
213 213
214The manufacturer and product strings are automatically pulled from `config.h`, with " Bootloader" appended to the product string. 214The manufacturer and product strings are automatically pulled from `config.h`, with " Bootloader" appended to the product string.
215 215
diff --git a/docs/getting_started_make_guide.md b/docs/getting_started_make_guide.md
index 8a66a65c21..59455adb30 100644
--- a/docs/getting_started_make_guide.md
+++ b/docs/getting_started_make_guide.md
@@ -115,11 +115,11 @@ This allows you to send Unicode characters using `UM(<map index>)` in your keyma
115 115
116This allows you to send Unicode characters by inputting a mnemonic corresponding to the character you want to send. You will need to maintain a mapping table in your keymap file. All possible code points (up to `0x10FFFF`) are supported. 116This allows you to send Unicode characters by inputting a mnemonic corresponding to the character you want to send. You will need to maintain a mapping table in your keymap file. All possible code points (up to `0x10FFFF`) are supported.
117 117
118For further details, as well as limitations, see the [Unicode page](feature_unicode). 118For further details, as well as limitations, see the [Unicode page](features/unicode).
119 119
120`AUDIO_ENABLE` 120`AUDIO_ENABLE`
121 121
122This allows you output audio on the C6 pin (needs abstracting). See the [audio page](feature_audio) for more information. 122This allows you output audio on the C6 pin (needs abstracting). See the [audio page](features/audio) for more information.
123 123
124`VARIABLE_TRACE` 124`VARIABLE_TRACE`
125 125
@@ -127,7 +127,7 @@ Use this to debug changes to variable values, see the [tracing variables](unit_t
127 127
128`KEY_LOCK_ENABLE` 128`KEY_LOCK_ENABLE`
129 129
130This enables [key lock](feature_key_lock). 130This enables [key lock](features/key_lock).
131 131
132`SPLIT_KEYBOARD` 132`SPLIT_KEYBOARD`
133 133
diff --git a/docs/hand_wire.md b/docs/hand_wire.md
index 0928888f0e..cbb9179060 100644
--- a/docs/hand_wire.md
+++ b/docs/hand_wire.md
@@ -88,7 +88,7 @@ Note that these methods can be combined. Prepare your lengths of wire before mo
88 88
89### A note on split keyboards 89### A note on split keyboards
90 90
91If you are planning a split keyboard (e.g. Dactyl) each half will require a controller and a means of communicating between them (like a TRRS or hardwired cable). Further information can be found in the [QMK split keyboard documentation.](feature_split_keyboard) 91If you are planning a split keyboard (e.g. Dactyl) each half will require a controller and a means of communicating between them (like a TRRS or hardwired cable). Further information can be found in the [QMK split keyboard documentation.](features/split_keyboard)
92 92
93 93
94### Soldering 94### Soldering
diff --git a/docs/hardware_drivers.md b/docs/hardware_drivers.md
index 6960bbcaa1..694d46971a 100644
--- a/docs/hardware_drivers.md
+++ b/docs/hardware_drivers.md
@@ -16,20 +16,20 @@ Support for addressing pins on the ProMicro by their Arduino name rather than th
16 16
17## SSD1306 OLED Driver 17## SSD1306 OLED Driver
18 18
19Support for SSD1306 based OLED displays. For more information see the [OLED Driver Feature](feature_oled_driver) page. 19Support for SSD1306 based OLED displays. For more information see the [OLED Driver Feature](features/oled_driver) page.
20 20
21## WS2812 21## WS2812
22 22
23Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](feature_rgblight) page. 23Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](features/rgblight) page.
24 24
25## IS31FL3731 25## IS31FL3731
26 26
27Support for up to 2 drivers. Each driver impliments 2 charlieplex matrices to individually address LEDs using I2C. This allows up to 144 same color LEDs or 32 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](feature_rgb_matrix) page. 27Support for up to 2 drivers. Each driver impliments 2 charlieplex matrices to individually address LEDs using I2C. This allows up to 144 same color LEDs or 32 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](features/rgb_matrix) page.
28 28
29## IS31FL3733 29## IS31FL3733
30 30
31Support for up to a single driver with room for expansion. Each driver can control 192 individual LEDs or 64 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](feature_rgb_matrix) page. 31Support for up to a single driver with room for expansion. Each driver can control 192 individual LEDs or 64 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](features/rgb_matrix) page.
32 32
33## 24xx series external I2C EEPROM 33## 24xx series external I2C EEPROM
34 34
35Support for an external I2C-based EEPROM instead of using the on-chip EEPROM. For more information on how to setup the driver see the [EEPROM Driver](eeprom_driver) page. 35Support for an external I2C-based EEPROM instead of using the on-chip EEPROM. For more information on how to setup the driver see the [EEPROM Driver](drivers/eeprom) page.
diff --git a/docs/hardware_keyboard_guidelines.md b/docs/hardware_keyboard_guidelines.md
index 728e09c8a9..de67fa3bc3 100644
--- a/docs/hardware_keyboard_guidelines.md
+++ b/docs/hardware_keyboard_guidelines.md
@@ -230,7 +230,7 @@ Given the amount of functionality that QMK exposes it's very easy to confuse new
230 230
231### Magic Keycodes and Command 231### Magic Keycodes and Command
232 232
233[Magic Keycodes](keycodes_magic) and [Command](feature_command) are two related features that allow a user to control their keyboard in non-obvious ways. We recommend you think long and hard about if you're going to enable either feature, and how you will expose this functionality. Keep in mind that users who want this functionality can enable it in their personal keymaps without affecting all the novice users who may be using your keyboard as their first programmable board. 233[Magic Keycodes](keycodes_magic) and [Command](features/command) are two related features that allow a user to control their keyboard in non-obvious ways. We recommend you think long and hard about if you're going to enable either feature, and how you will expose this functionality. Keep in mind that users who want this functionality can enable it in their personal keymaps without affecting all the novice users who may be using your keyboard as their first programmable board.
234 234
235By far the most common problem new users encounter is accidentally triggering Bootmagic while they're plugging in their keyboard. They're holding the keyboard by the bottom, unknowingly pressing in alt and spacebar, and then they find that these keys have been swapped on them. We recommend leaving this feature disabled by default, but if you do turn it on consider setting `BOOTMAGIC_KEY_SALT` to a key that is hard to press while plugging your keyboard in. 235By far the most common problem new users encounter is accidentally triggering Bootmagic while they're plugging in their keyboard. They're holding the keyboard by the bottom, unknowingly pressing in alt and spacebar, and then they find that these keys have been swapped on them. We recommend leaving this feature disabled by default, but if you do turn it on consider setting `BOOTMAGIC_KEY_SALT` to a key that is hard to press while plugging your keyboard in.
236 236
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 38ed5ab18d..4c91d98fa7 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -233,7 +233,7 @@ See also: [Quantum Keycodes](quantum_keycodes#qmk-keycodes)
233 233
234## Audio Keys {#audio-keys} 234## Audio Keys {#audio-keys}
235 235
236See also: [Audio](feature_audio) 236See also: [Audio](features/audio)
237 237
238|Key |Aliases |Description | 238|Key |Aliases |Description |
239|-------------------------|---------|-------------------------------------------| 239|-------------------------|---------|-------------------------------------------|
@@ -255,7 +255,7 @@ See also: [Audio](feature_audio)
255 255
256## Auto Shift {#auto-shift} 256## Auto Shift {#auto-shift}
257 257
258See also: [Auto Shift](feature_auto_shift) 258See also: [Auto Shift](features/auto_shift)
259 259
260|Key |Aliases |Description | 260|Key |Aliases |Description |
261|----------------------|---------|--------------------------------------------| 261|----------------------|---------|--------------------------------------------|
@@ -268,7 +268,7 @@ See also: [Auto Shift](feature_auto_shift)
268 268
269## Autocorrect {#autocorrect} 269## Autocorrect {#autocorrect}
270 270
271See also: [Autocorrect](feature_autocorrect) 271See also: [Autocorrect](features/autocorrect)
272 272
273|Key |Aliases |Description | 273|Key |Aliases |Description |
274|-----------------------|---------|----------------------------------------------| 274|-----------------------|---------|----------------------------------------------|
@@ -278,7 +278,7 @@ See also: [Autocorrect](feature_autocorrect)
278 278
279## Backlighting {#backlighting} 279## Backlighting {#backlighting}
280 280
281See also: [Backlighting](feature_backlight) 281See also: [Backlighting](features/backlight)
282 282
283| Key | Aliases | Description | 283| Key | Aliases | Description |
284|---------------------------------|-----------|-------------------------------------| 284|---------------------------------|-----------|-------------------------------------|
@@ -292,7 +292,7 @@ See also: [Backlighting](feature_backlight)
292 292
293## Bluetooth {#bluetooth} 293## Bluetooth {#bluetooth}
294 294
295See also: [Bluetooth](feature_bluetooth) 295See also: [Bluetooth](features/bluetooth)
296 296
297|Key |Aliases |Description | 297|Key |Aliases |Description |
298|---------------------|---------|----------------------------------------------| 298|---------------------|---------|----------------------------------------------|
@@ -302,7 +302,7 @@ See also: [Bluetooth](feature_bluetooth)
302 302
303## Caps Word {#caps-word} 303## Caps Word {#caps-word}
304 304
305See also: [Caps Word](feature_caps_word) 305See also: [Caps Word](features/caps_word)
306 306
307|Key |Aliases |Description | 307|Key |Aliases |Description |
308|---------------------|---------|------------------------------| 308|---------------------|---------|------------------------------|
@@ -310,7 +310,7 @@ See also: [Caps Word](feature_caps_word)
310 310
311## Dynamic Macros {#dynamic-macros} 311## Dynamic Macros {#dynamic-macros}
312 312
313See also: [Dynamic Macros](feature_dynamic_macros) 313See also: [Dynamic Macros](features/dynamic_macros)
314 314
315|Key |Aliases |Description | 315|Key |Aliases |Description |
316|---------------------------------|---------|--------------------------------------------------| 316|---------------------------------|---------|--------------------------------------------------|
@@ -322,7 +322,7 @@ See also: [Dynamic Macros](feature_dynamic_macros)
322 322
323## Grave Escape {#grave-escape} 323## Grave Escape {#grave-escape}
324 324
325See also: [Grave Escape](feature_grave_esc) 325See also: [Grave Escape](features/grave_esc)
326 326
327|Key |Aliases |Description | 327|Key |Aliases |Description |
328|-----------------|---------|------------------------------------------------------------------| 328|-----------------|---------|------------------------------------------------------------------|
@@ -330,7 +330,7 @@ See also: [Grave Escape](feature_grave_esc)
330 330
331## Joystick {#joystick} 331## Joystick {#joystick}
332 332
333See also: [Joystick](feature_joystick) 333See also: [Joystick](features/joystick)
334 334
335|Key |Aliases|Description| 335|Key |Aliases|Description|
336|-----------------------|-------|-----------| 336|-----------------------|-------|-----------|
@@ -369,7 +369,7 @@ See also: [Joystick](feature_joystick)
369 369
370## Key Lock {#key-lock} 370## Key Lock {#key-lock}
371 371
372See also: [Key Lock](feature_key_lock) 372See also: [Key Lock](features/key_lock)
373 373
374|Key |Description | 374|Key |Description |
375|---------|--------------------------------------------------------------| 375|---------|--------------------------------------------------------------|
@@ -392,7 +392,7 @@ See also: [Layer Switching](feature_layers#switching-and-toggling-layers)
392 392
393## Leader Key {#leader-key} 393## Leader Key {#leader-key}
394 394
395See also: [Leader Key](feature_leader_key) 395See also: [Leader Key](features/leader_key)
396 396
397|Key |Description | 397|Key |Description |
398|---------|------------------------| 398|---------|------------------------|
@@ -400,7 +400,7 @@ See also: [Leader Key](feature_leader_key)
400 400
401## LED Matrix {#led-matrix} 401## LED Matrix {#led-matrix}
402 402
403See also: [LED Matrix](feature_led_matrix) 403See also: [LED Matrix](features/led_matrix)
404 404
405|Key |Aliases |Description | 405|Key |Aliases |Description |
406|-------------------------------|---------|-----------------------------------| 406|-------------------------------|---------|-----------------------------------|
@@ -458,7 +458,7 @@ See also: [Magic Keycodes](keycodes_magic)
458 458
459## MIDI {#midi} 459## MIDI {#midi}
460 460
461See also: [MIDI](feature_midi) 461See also: [MIDI](features/midi)
462 462
463|Key |Aliases |Description | 463|Key |Aliases |Description |
464|-------------------------------|------------------|---------------------------------| 464|-------------------------------|------------------|---------------------------------|
@@ -609,7 +609,7 @@ See also: [MIDI](feature_midi)
609 609
610## Mouse Keys {#mouse-keys} 610## Mouse Keys {#mouse-keys}
611 611
612See also: [Mouse Keys](feature_mouse_keys) 612See also: [Mouse Keys](features/mouse_keys)
613 613
614|Key |Aliases |Description | 614|Key |Aliases |Description |
615|----------------|---------|---------------------------| 615|----------------|---------|---------------------------|
@@ -699,7 +699,7 @@ See also: [Dynamic Tapping Term](tap_hold#dynamic-tapping-term)
699 699
700## RGB Lighting {#rgb-lighting} 700## RGB Lighting {#rgb-lighting}
701 701
702See also: [RGB Lighting](feature_rgblight) 702See also: [RGB Lighting](features/rgblight)
703 703
704|Key |Aliases |Description | 704|Key |Aliases |Description |
705|-------------------|----------|--------------------------------------------------------------------| 705|-------------------|----------|--------------------------------------------------------------------|
@@ -724,7 +724,7 @@ See also: [RGB Lighting](feature_rgblight)
724 724
725## RGB Matrix Lighting {#rgb-matrix-lighting} 725## RGB Matrix Lighting {#rgb-matrix-lighting}
726 726
727See also: [RGB Matrix Lighting](feature_rgb_matrix) 727See also: [RGB Matrix Lighting](features/rgb_matrix)
728 728
729|Key |Aliases |Description | 729|Key |Aliases |Description |
730|-------------------|----------|--------------------------------------------------------------------------------------| 730|-------------------|----------|--------------------------------------------------------------------------------------|
@@ -782,7 +782,7 @@ See also: [One Shot Keys](one_shot_keys)
782 782
783## Programmable Button Support {#programmable-button} 783## Programmable Button Support {#programmable-button}
784 784
785See also: [Programmable Button](feature_programmable_button) 785See also: [Programmable Button](features/programmable_button)
786 786
787|Key |Aliases|Description | 787|Key |Aliases|Description |
788|---------------------------|-------|----------------------| 788|---------------------------|-------|----------------------|
@@ -821,7 +821,7 @@ See also: [Programmable Button](feature_programmable_button)
821 821
822## Repeat Key {#repeat-key} 822## Repeat Key {#repeat-key}
823 823
824See also: [Repeat Key](feature_repeat_key) 824See also: [Repeat Key](features/repeat_key)
825 825
826|Keycode |Aliases |Description | 826|Keycode |Aliases |Description |
827|-----------------------|---------|-------------------------------------| 827|-----------------------|---------|-------------------------------------|
@@ -830,7 +830,7 @@ See also: [Repeat Key](feature_repeat_key)
830 830
831## Space Cadet {#space-cadet} 831## Space Cadet {#space-cadet}
832 832
833See also: [Space Cadet](feature_space_cadet) 833See also: [Space Cadet](features/space_cadet)
834 834
835|Key |Aliases |Description | 835|Key |Aliases |Description |
836|----------------------------------------------|---------|----------------------------------------| 836|----------------------------------------------|---------|----------------------------------------|
@@ -844,7 +844,7 @@ See also: [Space Cadet](feature_space_cadet)
844 844
845## Swap Hands {#swap-hands} 845## Swap Hands {#swap-hands}
846 846
847See also: [Swap Hands](feature_swap_hands) 847See also: [Swap Hands](features/swap_hands)
848 848
849|Key |Aliases |Description | 849|Key |Aliases |Description |
850|-----------------------------|---------|----------------------------------------------------| 850|-----------------------------|---------|----------------------------------------------------|
@@ -859,7 +859,7 @@ See also: [Swap Hands](feature_swap_hands)
859 859
860## Unicode Support {#unicode-support} 860## Unicode Support {#unicode-support}
861 861
862See also: [Unicode Support](feature_unicode) 862See also: [Unicode Support](features/unicode)
863 863
864|Key |Aliases |Description | 864|Key |Aliases |Description |
865|----------------------------|---------|----------------------------------------------------------------| 865|----------------------------|---------|----------------------------------------------------------------|
diff --git a/docs/mod_tap.md b/docs/mod_tap.md
index 0008967c52..37c2ba3473 100644
--- a/docs/mod_tap.md
+++ b/docs/mod_tap.md
@@ -55,7 +55,7 @@ For convenience, QMK includes some Mod-Tap shortcuts to make common combinations
55 55
56Currently, the `kc` argument of `MT()` is limited to the [Basic Keycode set](keycodes_basic), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. This is because QMK uses 16-bit keycodes, of which 3 bits are used for the function identifier, 1 bit for selecting right or left mods, and 4 bits to tell which mods are used, leaving only 8 bits for the keycode. Additionally, if at least one right-handed modifier is specified in a Mod-Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two - for example, Left Control and Right Shift would become Right Control and Right Shift. 56Currently, the `kc` argument of `MT()` is limited to the [Basic Keycode set](keycodes_basic), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. This is because QMK uses 16-bit keycodes, of which 3 bits are used for the function identifier, 1 bit for selecting right or left mods, and 4 bits to tell which mods are used, leaving only 8 bits for the keycode. Additionally, if at least one right-handed modifier is specified in a Mod-Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two - for example, Left Control and Right Shift would become Right Control and Right Shift.
57 57
58Expanding this would be complicated, at best. Moving to a 32-bit keycode would solve a lot of this, but would double the amount of space that the keymap matrix uses. And it could potentially cause issues, too. If you need to apply modifiers to your tapped keycode, [Tap Dance](feature_tap_dance#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this. 58Expanding this would be complicated, at best. Moving to a 32-bit keycode would solve a lot of this, but would double the amount of space that the keymap matrix uses. And it could potentially cause issues, too. If you need to apply modifiers to your tapped keycode, [Tap Dance](features/tap_dance#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this.
59 59
60You may also run into issues when using Remote Desktop Connection on Windows. Because these keycodes send key events faster than a human, Remote Desktop could miss them. 60You may also run into issues when using Remote Desktop Connection on Windows. Because these keycodes send key events faster than a human, Remote Desktop could miss them.
61To fix this, open Remote Desktop Connection, click on "Show Options", open the "Local Resources" tab, and in the keyboard section, change the drop down to "On this Computer". This will fix the issue, and allow the characters to work correctly. 61To fix this, open Remote Desktop Connection, click on "Show Options", open the "Local Resources" tab, and in the keyboard section, change the drop down to "On this Computer". This will fix the issue, and allow the characters to work correctly.
diff --git a/docs/newbs_building_firmware.md b/docs/newbs_building_firmware.md
index d7c1157b2d..f3afd6a896 100644
--- a/docs/newbs_building_firmware.md
+++ b/docs/newbs_building_firmware.md
@@ -64,8 +64,8 @@ How to complete this step is entirely up to you. Make the one change that's been
64 64
65* [Basic Keycodes](keycodes_basic) 65* [Basic Keycodes](keycodes_basic)
66* [Quantum Keycodes](quantum_keycodes) 66* [Quantum Keycodes](quantum_keycodes)
67* [Grave/Escape](feature_grave_esc) 67* [Grave/Escape](features/grave_esc)
68* [Mouse keys](feature_mouse_keys) 68* [Mouse keys](features/mouse_keys)
69 69
70::: tip 70::: tip
71While you get a feel for how keymaps work, keep each change small. Bigger changes make it harder to debug any problems that arise. 71While you get a feel for how keymaps work, keep each change small. Bigger changes make it harder to debug any problems that arise.
diff --git a/docs/platformdev_rp2040.md b/docs/platformdev_rp2040.md
index f0b006cf6e..1269ffeeb5 100644
--- a/docs/platformdev_rp2040.md
+++ b/docs/platformdev_rp2040.md
@@ -4,16 +4,16 @@ The following table shows the current driver status for peripherals on RP2040 MC
4 4
5| System | Support | 5| System | Support |
6| ---------------------------------------------------------------- | ---------------------------------------------- | 6| ---------------------------------------------------------------- | ---------------------------------------------- |
7| [ADC driver](adc_driver) | :heavy_check_mark: | 7| [ADC driver](drivers/adc) | :heavy_check_mark: |
8| [Audio](audio_driver#pwm-hardware) | :heavy_check_mark: | 8| [Audio](drivers/audio#pwm-hardware) | :heavy_check_mark: |
9| [Backlight](feature_backlight) | :heavy_check_mark: | 9| [Backlight](features/backlight) | :heavy_check_mark: |
10| [I2C driver](i2c_driver) | :heavy_check_mark: | 10| [I2C driver](drivers/i2c) | :heavy_check_mark: |
11| [SPI driver](spi_driver) | :heavy_check_mark: | 11| [SPI driver](drivers/spi) | :heavy_check_mark: |
12| [WS2812 driver](ws2812_driver) | :heavy_check_mark: using `PIO` driver | 12| [WS2812 driver](drivers/ws2812) | :heavy_check_mark: using `PIO` driver |
13| [External EEPROMs](eeprom_driver) | :heavy_check_mark: using `I2C` or `SPI` driver | 13| [External EEPROMs](drivers/eeprom) | :heavy_check_mark: using `I2C` or `SPI` driver |
14| [EEPROM emulation](eeprom_driver#wear_leveling-configuration) | :heavy_check_mark: | 14| [EEPROM emulation](drivers/eeprom#wear_leveling-configuration) | :heavy_check_mark: |
15| [serial driver](serial_driver) | :heavy_check_mark: using `SIO` or `PIO` driver | 15| [serial driver](drivers/serial) | :heavy_check_mark: using `SIO` or `PIO` driver |
16| [UART driver](uart_driver) | :heavy_check_mark: using `SIO` driver | 16| [UART driver](drivers/uart) | :heavy_check_mark: using `SIO` driver |
17 17
18## GPIO 18## GPIO
19 19
@@ -43,7 +43,7 @@ QMK RP2040 support builds upon ChibiOS and thus follows their convention for act
43| `I2C0` | `RP_I2C_USE_I2C0` | `I2CD0` | 43| `I2C0` | `RP_I2C_USE_I2C0` | `I2CD0` |
44| `I2C1` | `RP_I2C_USE_I2C1` | `I2CD1` | 44| `I2C1` | `RP_I2C_USE_I2C1` | `I2CD1` |
45 45
46To configure the I2C driver please read the [ChibiOS/ARM](i2c_driver#arm-configuration) section. 46To configure the I2C driver please read the [ChibiOS/ARM](drivers/i2c#arm-configuration) section.
47 47
48### SPI Driver 48### SPI Driver
49 49
@@ -52,7 +52,7 @@ To configure the I2C driver please read the [ChibiOS/ARM](i2c_driver#arm-configu
52| `SPI0` | `RP_SPI_USE_SPI0` | `SPID0` | 52| `SPI0` | `RP_SPI_USE_SPI0` | `SPID0` |
53| `SPI1` | `RP_SPI_USE_SPI1` | `SPID1` | 53| `SPI1` | `RP_SPI_USE_SPI1` | `SPID1` |
54 54
55To configure the SPI driver please read the [ChibiOS/ARM](spi_driver#chibiosarm-configuration) section. 55To configure the SPI driver please read the [ChibiOS/ARM](drivers/spi#chibiosarm-configuration) section.
56 56
57### UART Driver 57### UART Driver
58 58
@@ -92,7 +92,7 @@ This is the default board that is chosen, unless any other RP2040 board is selec
92| `SPI_MISO_PIN` | `GP20` | 92| `SPI_MISO_PIN` | `GP20` |
93| `SPI_MOSI_PIN` | `GP19` | 93| `SPI_MOSI_PIN` | `GP19` |
94| **Serial driver** | | 94| **Serial driver** | |
95| `SERIAL_USART_DRIVER` ([SIO Driver](serial_driver#the-sio-driver) only) | `SIOD0` | 95| `SERIAL_USART_DRIVER` ([SIO Driver](drivers/serial#the-sio-driver) only) | `SIOD0` |
96| `SOFT_SERIAL_PIN` | undefined, use `SERIAL_USART_TX_PIN` | 96| `SOFT_SERIAL_PIN` | undefined, use `SERIAL_USART_TX_PIN` |
97| `SERIAL_USART_TX_PIN` | `GP0` | 97| `SERIAL_USART_TX_PIN` | `GP0` |
98| `SERIAL_USART_RX_PIN` | `GP1` | 98| `SERIAL_USART_RX_PIN` | `GP1` |
@@ -115,9 +115,9 @@ BOARD = GENERIC_RP_RP2040
115 115
116## Split keyboard support 116## Split keyboard support
117 117
118Split keyboards are fully supported using the [serial driver](serial_driver) in both full-duplex and half-duplex configurations. Two driver subsystems are supported by the RP2040, the hardware UART based `SIO` and the Programmable IO based `PIO` driver. 118Split keyboards are fully supported using the [serial driver](drivers/serial) in both full-duplex and half-duplex configurations. Two driver subsystems are supported by the RP2040, the hardware UART based `SIO` and the Programmable IO based `PIO` driver.
119 119
120| Feature | [SIO Driver](serial_driver#the-sio-driver) | [PIO Driver](serial_driver#the-pio-driver) | 120| Feature | [SIO Driver](drivers/serial#the-sio-driver) | [PIO Driver](drivers/serial#the-pio-driver) |
121| ----------------------------- | --------------------------------------------- | --------------------------------------------- | 121| ----------------------------- | --------------------------------------------- | --------------------------------------------- |
122| Half-Duplex operation | | :heavy_check_mark: | 122| Half-Duplex operation | | :heavy_check_mark: |
123| Full-Duplex operation | :heavy_check_mark: | :heavy_check_mark: | 123| Full-Duplex operation | :heavy_check_mark: | :heavy_check_mark: |
diff --git a/docs/porting_your_keyboard_to_qmk.md b/docs/porting_your_keyboard_to_qmk.md
index c91e5ca31d..eb45790128 100644
--- a/docs/porting_your_keyboard_to_qmk.md
+++ b/docs/porting_your_keyboard_to_qmk.md
@@ -153,7 +153,7 @@ In the above example,
153* `"matrix": [0, 0]` defines the electrical position 153* `"matrix": [0, 0]` defines the electrical position
154 154
155::: tip 155::: tip
156See also: [Split Keyboard Layout Macro](feature_split_keyboard#layout-macro) and [Matrix to Physical Layout](understanding_qmk#matrix-to-physical-layout-map). 156See also: [Split Keyboard Layout Macro](features/split_keyboard#layout-macro) and [Matrix to Physical Layout](understanding_qmk#matrix-to-physical-layout-map).
157::: 157:::
158 158
159## Additional Configuration 159## Additional Configuration
diff --git a/docs/pr_checklist.md b/docs/pr_checklist.md
index e5ed1d67b6..f7b16e1d85 100644
--- a/docs/pr_checklist.md
+++ b/docs/pr_checklist.md
@@ -126,7 +126,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
126 - commented-out functions removed too 126 - commented-out functions removed too
127 - `matrix_init_board()` etc. migrated to `keyboard_pre_init_kb()`, see: [keyboard_pre_init*](custom_quantum_functions#keyboard_pre_init_-function-documentation) 127 - `matrix_init_board()` etc. migrated to `keyboard_pre_init_kb()`, see: [keyboard_pre_init*](custom_quantum_functions#keyboard_pre_init_-function-documentation)
128 - prefer `CUSTOM_MATRIX = lite` if custom matrix used, allows for standard debounce, see [custom matrix 'lite'](custom_matrix#lite) 128 - prefer `CUSTOM_MATRIX = lite` if custom matrix used, allows for standard debounce, see [custom matrix 'lite'](custom_matrix#lite)
129 - prefer LED indicator [Configuration Options](feature_led_indicators#configuration-options) to custom `led_update_*()` implementations where possible 129 - prefer LED indicator [Configuration Options](features/led_indicators#configuration-options) to custom `led_update_*()` implementations where possible
130 - hardware that's enabled at the keyboard level and requires configuration such as OLED displays or encoders should have basic functionality implemented here 130 - hardware that's enabled at the keyboard level and requires configuration such as OLED displays or encoders should have basic functionality implemented here
131- `<keyboard>.h` 131- `<keyboard>.h`
132 - `#include "quantum.h"` appears at the top 132 - `#include "quantum.h"` appears at the top
@@ -135,12 +135,12 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
135 - no duplication of `rules.mk` or `config.h` from keyboard 135 - no duplication of `rules.mk` or `config.h` from keyboard
136- `keymaps/default/keymap.c` 136- `keymaps/default/keymap.c`
137 - `QMKBEST`/`QMKURL` example macros removed 137 - `QMKBEST`/`QMKURL` example macros removed
138 - if using `MO(1)` and `MO(2)` keycodes together to access a third layer, the [Tri Layer](feature_tri_layer) feature should be used, rather than manually implementing this using `layer_on/off()` and `update_tri_layer()` functions in the keymap's `process_record_user()`. 138 - if using `MO(1)` and `MO(2)` keycodes together to access a third layer, the [Tri Layer](features/tri_layer) feature should be used, rather than manually implementing this using `layer_on/off()` and `update_tri_layer()` functions in the keymap's `process_record_user()`.
139- default (and via) keymaps should be "pristine" 139- default (and via) keymaps should be "pristine"
140 - bare minimum to be used as a "clean slate" for another user to develop their own user-specific keymap 140 - bare minimum to be used as a "clean slate" for another user to develop their own user-specific keymap
141 - what does pristine mean? no custom keycodes. no advanced features like tap dance or macros. basic mod taps and home row mods would be acceptable where their use is necessary 141 - what does pristine mean? no custom keycodes. no advanced features like tap dance or macros. basic mod taps and home row mods would be acceptable where their use is necessary
142 - standard layouts preferred in these keymaps, if possible 142 - standard layouts preferred in these keymaps, if possible
143 - should use [encoder map feature](feature_encoders#encoder-map), rather than `encoder_update_user()` 143 - should use [encoder map feature](features/encoders#encoder-map), rather than `encoder_update_user()`
144 - default keymap should not enable VIA -- the VIA integration documentation requires a keymap called `via` 144 - default keymap should not enable VIA -- the VIA integration documentation requires a keymap called `via`
145- submitters can add an example (or bells-and-whistles) keymap showcasing capabilities in the same PR but it shouldn't be embedded in the 'default' keymap 145- submitters can add an example (or bells-and-whistles) keymap showcasing capabilities in the same PR but it shouldn't be embedded in the 'default' keymap
146- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board 146- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board
diff --git a/docs/ref_functions.md b/docs/ref_functions.md
index 156c9ed20b..577273c05d 100644
--- a/docs/ref_functions.md
+++ b/docs/ref_functions.md
@@ -71,7 +71,7 @@ Do you want to set the default layer, so that it's retained even after you unplu
71 71
72To use this, you would use `set_single_persistent_default_layer(layer)`. If you have a name defined for your layer, you can use that instead (such as _QWERTY, _DVORAK or _COLEMAK). 72To use this, you would use `set_single_persistent_default_layer(layer)`. If you have a name defined for your layer, you can use that instead (such as _QWERTY, _DVORAK or _COLEMAK).
73 73
74This will set the default layer, update the persistent settings, and play a tune if you have [Audio](feature_audio) enabled on your board, and the default layer sounds set. 74This will set the default layer, update the persistent settings, and play a tune if you have [Audio](features/audio) enabled on your board, and the default layer sounds set.
75 75
76To configure the default layer sounds, you would want to define this in your `config.h` file, like this: 76To configure the default layer sounds, you would want to define this in your `config.h` file, like this:
77 77
@@ -99,7 +99,7 @@ To reset to the bootloader use `QK_BOOTLOADER` or `QK_BOOT` keycode or `reset_ke
99 99
100## Wiping the EEPROM (Persistent Storage) 100## Wiping the EEPROM (Persistent Storage)
101 101
102If you're having issues with Audio, RGB Underglow, backlighting or keys acting weird, then you can reset the EEPROM (persistent setting storage). To force an EEPROM reset, use the [`EE_CLR` keycode](quantum_keycodes) or [Bootmagic Lite](feature_bootmagic) functionality. If neither of those are an option, then you can use a custom macro to do so. 102If you're having issues with Audio, RGB Underglow, backlighting or keys acting weird, then you can reset the EEPROM (persistent setting storage). To force an EEPROM reset, use the [`EE_CLR` keycode](quantum_keycodes) or [Bootmagic Lite](features/bootmagic) functionality. If neither of those are an option, then you can use a custom macro to do so.
103 103
104To wipe the EEPROM, run `eeconfig_init()` from your function or macro to reset most of the settings to default. 104To wipe the EEPROM, run `eeconfig_init()` from your function or macro to reset most of the settings to default.
105 105
diff --git a/docs/reference_glossary.md b/docs/reference_glossary.md
index cf8c8f0d75..d24576b333 100644
--- a/docs/reference_glossary.md
+++ b/docs/reference_glossary.md
@@ -36,7 +36,7 @@ An alternative keyboard layout developed by Dr. August Dvorak in the 1930's. A s
36## Dynamic Macro 36## Dynamic Macro
37A macro which has been recorded on the keyboard and which will be lost when the keyboard is unplugged or the computer rebooted. 37A macro which has been recorded on the keyboard and which will be lost when the keyboard is unplugged or the computer rebooted.
38 38
39* [Dynamic Macro Documentation](feature_dynamic_macros) 39* [Dynamic Macro Documentation](features/dynamic_macros)
40 40
41## Eclipse 41## Eclipse
42An IDE that is popular with many C developers. 42An IDE that is popular with many C developers.
@@ -76,7 +76,7 @@ An abstraction used to allow a key to serve multiple purposes. The highest activ
76## Leader Key 76## Leader Key
77A feature that allows you to tap the leader key followed by a sequence of 1, 2, or 3 keys to activate key presses or other quantum features. 77A feature that allows you to tap the leader key followed by a sequence of 1, 2, or 3 keys to activate key presses or other quantum features.
78 78
79* [Leader Key Documentation](feature_leader_key) 79* [Leader Key Documentation](features/leader_key)
80 80
81## LED 81## LED
82Light Emitting Diode, the most common device used for indicators on a keyboard. 82Light Emitting Diode, the most common device used for indicators on a keyboard.
@@ -101,7 +101,7 @@ A key that is held down while typing another key to modify the action of that ke
101## Mousekeys 101## Mousekeys
102A feature that lets you control your mouse cursor and click from your keyboard. 102A feature that lets you control your mouse cursor and click from your keyboard.
103 103
104* [Mousekeys Documentation](feature_mouse_keys) 104* [Mousekeys Documentation](features/mouse_keys)
105 105
106## N-Key Rollover (NKRO) 106## N-Key Rollover (NKRO)
107A term that applies to keyboards that are capable of reporting any number of key-presses at once. 107A term that applies to keyboards that are capable of reporting any number of key-presses at once.
@@ -130,7 +130,7 @@ A 1 byte number that is sent as part of a HID report over USB that represents a
130## Space Cadet Shift 130## Space Cadet Shift
131A special set of shift keys which allow you to type various types of braces by tapping the left or right shift one or more times. 131A special set of shift keys which allow you to type various types of braces by tapping the left or right shift one or more times.
132 132
133* [Space Cadet Shift Documentation](feature_space_cadet) 133* [Space Cadet Shift Documentation](features/space_cadet)
134 134
135## Tap 135## Tap
136Pressing and releasing a key. In some situations you will need to distinguish between a key down and a key up event, and Tap always refers to both at once. 136Pressing and releasing a key. In some situations you will need to distinguish between a key down and a key up event, and Tap always refers to both at once.
@@ -138,7 +138,7 @@ Pressing and releasing a key. In some situations you will need to distinguish be
138## Tap Dance 138## Tap Dance
139A feature that lets you assign multiple keycodes to the same key based on how many times you press it. 139A feature that lets you assign multiple keycodes to the same key based on how many times you press it.
140 140
141* [Tap Dance Documentation](feature_tap_dance) 141* [Tap Dance Documentation](features/tap_dance)
142 142
143## Teensy 143## Teensy
144A low-cost AVR development board that is commonly used for hand-wired builds. A teensy is often chosen despite costing a few dollars more due to its halfkay bootloader, which makes flashing very simple. 144A low-cost AVR development board that is commonly used for hand-wired builds. A teensy is often chosen despite costing a few dollars more due to its halfkay bootloader, which makes flashing very simple.
@@ -149,7 +149,7 @@ A generic term for LEDs that light the underside of the board. These LEDs typica
149## Unicode 149## Unicode
150In the larger computer world Unicode is a set of encoding schemes for representing characters in any language. As it relates to QMK it means using various OS schemes to send unicode codepoints instead of scancodes. 150In the larger computer world Unicode is a set of encoding schemes for representing characters in any language. As it relates to QMK it means using various OS schemes to send unicode codepoints instead of scancodes.
151 151
152* [Unicode Documentation](feature_unicode) 152* [Unicode Documentation](features/unicode)
153 153
154## Unit Testing 154## Unit Testing
155A framework for running automated tests against QMK. Unit testing helps us be confident that our changes do not break anything. 155A framework for running automated tests against QMK. Unit testing helps us be confident that our changes do not break anything.
diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md
index 25d2e9d1d8..2db2cd1427 100644
--- a/docs/reference_info_json.md
+++ b/docs/reference_info_json.md
@@ -95,7 +95,7 @@ You can create `info.json` files at every level under `qmk_firmware/keyboards/<k
95 95
96## APA102 {#apa102} 96## APA102 {#apa102}
97 97
98Configures the [APA102](apa102_driver) driver. 98Configures the [APA102](drivers/apa102) driver.
99 99
100* `apa102` 100* `apa102`
101 * `clock_pin` (Required) 101 * `clock_pin` (Required)
@@ -108,7 +108,7 @@ Configures the [APA102](apa102_driver) driver.
108 108
109## Audio {#audio} 109## Audio {#audio}
110 110
111Configures the [Audio](feature_audio) feature. 111Configures the [Audio](features/audio) feature.
112 112
113* `audio` 113* `audio`
114 * `default` 114 * `default`
@@ -138,7 +138,7 @@ Configures the [Audio](feature_audio) feature.
138 138
139## Backlight {#backlight} 139## Backlight {#backlight}
140 140
141Configures the [Backlight](feature_backlight) feature. 141Configures the [Backlight](features/backlight) feature.
142 142
143* `backlight` 143* `backlight`
144 * `as_caps_lock` 144 * `as_caps_lock`
@@ -179,7 +179,7 @@ Configures the [Backlight](feature_backlight) feature.
179 179
180## Bluetooth {#bluetooth} 180## Bluetooth {#bluetooth}
181 181
182Configures the [Bluetooth](feature_bluetooth) feature. 182Configures the [Bluetooth](features/bluetooth) feature.
183 183
184* `bluetooth` 184* `bluetooth`
185 * `driver` 185 * `driver`
@@ -187,7 +187,7 @@ Configures the [Bluetooth](feature_bluetooth) feature.
187 187
188## Bootmagic {#bootmagic} 188## Bootmagic {#bootmagic}
189 189
190Configures the [Bootmagic](feature_bootmagic) feature. 190Configures the [Bootmagic](features/bootmagic) feature.
191 191
192* `bootmagic` 192* `bootmagic`
193 * `enabled` 193 * `enabled`
@@ -199,7 +199,7 @@ Configures the [Bootmagic](feature_bootmagic) feature.
199 199
200## Caps Word {#caps-word} 200## Caps Word {#caps-word}
201 201
202Configures the [Caps Word](feature_caps_word) feature. 202Configures the [Caps Word](features/caps_word) feature.
203 203
204* `caps_word` 204* `caps_word`
205 * `both_shifts_turns_on` 205 * `both_shifts_turns_on`
@@ -220,7 +220,7 @@ Configures the [Caps Word](feature_caps_word) feature.
220 220
221## Combo {#combo} 221## Combo {#combo}
222 222
223Configures the [Combo](feature_combo) feature. 223Configures the [Combo](features/combo) feature.
224 224
225* `combo` 225* `combo`
226 * `term` 226 * `term`
@@ -229,7 +229,7 @@ Configures the [Combo](feature_combo) feature.
229 229
230## DIP Switches {#dip-switch} 230## DIP Switches {#dip-switch}
231 231
232Configures the [DIP Switches](feature_dip_switch) feature. 232Configures the [DIP Switches](features/dip_switch) feature.
233 233
234* `dip_switch` 234* `dip_switch`
235 * `enabled` 235 * `enabled`
@@ -243,7 +243,7 @@ Configures the [DIP Switches](feature_dip_switch) feature.
243 243
244## EEPROM {#eeprom} 244## EEPROM {#eeprom}
245 245
246Configures the [EEPROM](eeprom_driver) driver. 246Configures the [EEPROM](drivers/eeprom) driver.
247 247
248* `eeprom` 248* `eeprom`
249 * `driver` 249 * `driver`
@@ -259,7 +259,7 @@ Configures the [EEPROM](eeprom_driver) driver.
259 259
260## Encoder {#encoder} 260## Encoder {#encoder}
261 261
262Configures the [Encoder](feature_encoders) feature. 262Configures the [Encoder](features/encoders) feature.
263 263
264* `encoder` 264* `encoder`
265 * `rotary` 265 * `rotary`
@@ -274,7 +274,7 @@ Configures the [Encoder](feature_encoders) feature.
274 274
275## Indicators {#indicators} 275## Indicators {#indicators}
276 276
277Configures the [LED Indicators](feature_led_indicators) feature. 277Configures the [LED Indicators](features/led_indicators) feature.
278 278
279* `indicators` 279* `indicators`
280 * `caps_lock` 280 * `caps_lock`
@@ -346,7 +346,7 @@ The ISO enter key is represented by a 1.25u×2uh key. Renderers which utilize in
346 346
347## Leader Key {#leader-key} 347## Leader Key {#leader-key}
348 348
349Configures the [Leader Key](feature_leader_key) feature. 349Configures the [Leader Key](features/leader_key) feature.
350 350
351* `leader_key` 351* `leader_key`
352 * `timing` 352 * `timing`
@@ -361,7 +361,7 @@ Configures the [Leader Key](feature_leader_key) feature.
361 361
362## LED Matrix {#led-matrix} 362## LED Matrix {#led-matrix}
363 363
364Configures the [LED Matrix](feature_led_matrix) feature. 364Configures the [LED Matrix](features/led_matrix) feature.
365 365
366* `led_matrix` 366* `led_matrix`
367 * `animations` 367 * `animations`
@@ -474,7 +474,7 @@ Configures the [LED Matrix](feature_led_matrix) feature.
474 474
475## Mouse Keys {#mouse-keys} 475## Mouse Keys {#mouse-keys}
476 476
477Configures the [Mouse Keys](feature_mouse_keys) feature. 477Configures the [Mouse Keys](features/mouse_keys) feature.
478 478
479* `mouse_key` 479* `mouse_key`
480 * `delay` 480 * `delay`
@@ -498,7 +498,7 @@ Configures [One Shot keys](one_shot_keys).
498 498
499## PS/2 {#ps2} 499## PS/2 {#ps2}
500 500
501Configures the [PS/2](feature_ps2_mouse) feature. 501Configures the [PS/2](features/ps2_mouse) feature.
502 502
503* `ps2` 503* `ps2`
504 * `clock_pin` 504 * `clock_pin`
@@ -529,7 +529,7 @@ Configures the [PS/2](feature_ps2_mouse) feature.
529 529
530## RGBLight {#rgblight} 530## RGBLight {#rgblight}
531 531
532Configures the [RGB Lighting](feature_rgblight) feature. 532Configures the [RGB Lighting](features/rgblight) feature.
533 533
534* `rgblight` 534* `rgblight`
535 * `led_count` (Required) 535 * `led_count` (Required)
@@ -603,7 +603,7 @@ Configures the [RGB Lighting](feature_rgblight) feature.
603 603
604## RGB Matrix {#rgb-matrix} 604## RGB Matrix {#rgb-matrix}
605 605
606Configures the [RGB Matrix](feature_rgb_matrix) feature. 606Configures the [RGB Matrix](features/rgb_matrix) feature.
607 607
608* `rgb_matrix` 608* `rgb_matrix`
609 * `animations` 609 * `animations`
@@ -688,7 +688,7 @@ Configures the [RGB Matrix](feature_rgb_matrix) feature.
688 688
689## Secure {#secure} 689## Secure {#secure}
690 690
691Configures the [Secure](feature_secure) feature. 691Configures the [Secure](features/secure) feature.
692 692
693* `secure` 693* `secure`
694 * `enabled` 694 * `enabled`
@@ -706,7 +706,7 @@ Configures the [Secure](feature_secure) feature.
706 706
707## Split Keyboard {#split-keyboard} 707## Split Keyboard {#split-keyboard}
708 708
709Configures the [Split Keyboard](feature_split_keyboard) feature. 709Configures the [Split Keyboard](features/split_keyboard) feature.
710 710
711* `split` 711* `split`
712 * `bootmagic` 712 * `bootmagic`
@@ -745,7 +745,7 @@ Configures the [Split Keyboard](feature_split_keyboard) feature.
745 * Mirror the activity timestamps to the secondary half. 745 * Mirror the activity timestamps to the secondary half.
746 * Default: `false` 746 * Default: `false`
747 * `detected_os` 747 * `detected_os`
748 * Mirror the [detected OS](feature_os_detection) to the secondary half. 748 * Mirror the [detected OS](features/os_detection) to the secondary half.
749 * Default: `false` 749 * Default: `false`
750 * `haptic` 750 * `haptic`
751 * Mirror the haptic state and process haptic feedback to the secondary half. 751 * Mirror the haptic state and process haptic feedback to the secondary half.
@@ -788,7 +788,7 @@ Configures the [Split Keyboard](feature_split_keyboard) feature.
788 788
789## Stenography {#stenography} 789## Stenography {#stenography}
790 790
791Configures the [Stenography](feature_stenography) feature. 791Configures the [Stenography](features/stenography) feature.
792 792
793* `stenography` 793* `stenography`
794 * `enabled` 794 * `enabled`
@@ -838,7 +838,7 @@ Configures the [Stenography](feature_stenography) feature.
838 838
839## WS2812 {#ws2812} 839## WS2812 {#ws2812}
840 840
841Configures the [WS2812](ws2812_driver) driver. 841Configures the [WS2812](drivers/ws2812) driver.
842 842
843* `ws2812` 843* `ws2812`
844 * `driver` 844 * `driver`
diff --git a/docs/syllabus.md b/docs/syllabus.md
index 82b6110c80..3082f1ebd5 100644
--- a/docs/syllabus.md
+++ b/docs/syllabus.md
@@ -24,24 +24,24 @@ These topics start to dig into some of the features that QMK supports. You don't
24 24
25* **Learn How To Configure Features** 25* **Learn How To Configure Features**
26 <!-- * Configuration Overview FIXME(skullydazed/anyone): write this document --> 26 <!-- * Configuration Overview FIXME(skullydazed/anyone): write this document -->
27 * [Audio](feature_audio) 27 * [Audio](features/audio)
28 * Lighting 28 * Lighting
29 * [Backlight](feature_backlight) 29 * [Backlight](features/backlight)
30 * [LED Matrix](feature_led_matrix) 30 * [LED Matrix](features/led_matrix)
31 * [RGB Lighting](feature_rgblight) 31 * [RGB Lighting](features/rgblight)
32 * [RGB Matrix](feature_rgb_matrix) 32 * [RGB Matrix](features/rgb_matrix)
33 * [Tap-Hold Configuration](tap_hold) 33 * [Tap-Hold Configuration](tap_hold)
34 * [Squeezing Space from AVR](squeezing_avr) 34 * [Squeezing Space from AVR](squeezing_avr)
35* **Learn More About Keymaps** 35* **Learn More About Keymaps**
36 * [Keymaps](keymap) 36 * [Keymaps](keymap)
37 * [Custom Functions and Keycodes](custom_quantum_functions) 37 * [Custom Functions and Keycodes](custom_quantum_functions)
38 * Macros 38 * Macros
39 * [Dynamic Macros](feature_dynamic_macros) 39 * [Dynamic Macros](features/dynamic_macros)
40 * [Compiled Macros](feature_macros) 40 * [Compiled Macros](feature_macros)
41 * [Tap Dance](feature_tap_dance) 41 * [Tap Dance](features/tap_dance)
42 * [Combos](feature_combo) 42 * [Combos](features/combo)
43 * [Userspace](feature_userspace) 43 * [Userspace](feature_userspace)
44 * [Key Overrides](feature_key_overrides) 44 * [Key Overrides](features/key_overrides)
45 45
46# Advanced Topics 46# Advanced Topics
47 47
@@ -53,15 +53,15 @@ Everything below here requires a lot of foundational knowledge. Besides being ab
53 * [info.json Reference](reference_info_json) 53 * [info.json Reference](reference_info_json)
54 * [Debounce API](feature_debounce_type) 54 * [Debounce API](feature_debounce_type)
55* **Advanced Features** 55* **Advanced Features**
56 * [Unicode](feature_unicode) 56 * [Unicode](features/unicode)
57 * [API](api_overview) 57 * [API](api_overview)
58 * [Bootmagic Lite](feature_bootmagic) 58 * [Bootmagic Lite](features/bootmagic)
59* **Hardware** 59* **Hardware**
60 * [How Keyboards Work](how_keyboards_work) 60 * [How Keyboards Work](how_keyboards_work)
61 * [How A Keyboard Matrix Works](how_a_matrix_works) 61 * [How A Keyboard Matrix Works](how_a_matrix_works)
62 * [Split Keyboards](feature_split_keyboard) 62 * [Split Keyboards](features/split_keyboard)
63 * [Stenography](feature_stenography) 63 * [Stenography](features/stenography)
64 * [Pointing Devices](feature_pointing_device) 64 * [Pointing Devices](features/pointing_device)
65* **Core Development** 65* **Core Development**
66 * [Coding Conventions](coding_conventions_c) 66 * [Coding Conventions](coding_conventions_c)
67 * [Compatible Microcontrollers](compatible_microcontrollers) 67 * [Compatible Microcontrollers](compatible_microcontrollers)
diff --git a/docs/tap_hold.md b/docs/tap_hold.md
index fe862894b4..9b7f6552cb 100644
--- a/docs/tap_hold.md
+++ b/docs/tap_hold.md
@@ -497,7 +497,7 @@ Do not use `MOD_xxx` constants like `MOD_LSFT` or `MOD_RALT`, since they're 5-bi
497 497
498### Retro Shift 498### Retro Shift
499 499
500[Auto Shift,](feature_auto_shift) has its own version of `retro tapping` called `retro shift`. It is extremely similar to `retro tapping`, but holding the key past `AUTO_SHIFT_TIMEOUT` results in the value it sends being shifted. Other configurations also affect it differently; see [here](feature_auto_shift#retro-shift) for more information. 500[Auto Shift,](features/auto_shift) has its own version of `retro tapping` called `retro shift`. It is extremely similar to `retro tapping`, but holding the key past `AUTO_SHIFT_TIMEOUT` results in the value it sends being shifted. Other configurations also affect it differently; see [here](features/auto_shift#retro-shift) for more information.
501 501
502## Why do we include the key record for the per key functions? 502## Why do we include the key record for the per key functions?
503 503