`
!> Notification, damnit!
+::: info
+This is an info box.
+:::
+
+::: tip
+This is a tip.
+:::
+
+::: warning
+This is a warning.
+:::
+
+::: danger
+This is a dangerous warning.
+:::
+
+::: details
+This is a details block.
+:::
+
### Keyboard keys
,
@@ -242,6 +263,20 @@ Content three
+::::tabs
+=== tab a
+a content 2
+=== tab b
+b content 2
+=== tab c
+:::tabs
+== nested tab a
+nested a content 2
+== nested tab b
+nested b content 2
+:::
+::::
+
## Details sections
Expandable:
@@ -254,4 +289,10 @@ Expandable:
This is some inner content.
+## Embed
+
+[example embed](__capabilities_inc.md ':include')
+
+
+
[1]: https://en.wikipedia.org/wiki/Eclipse_(software)
diff --git a/docs/__capabilities_inc.md b/docs/__capabilities_inc.md
new file mode 100644
index 0000000000..d2cf010d36
--- /dev/null
+++ b/docs/__capabilities_inc.md
@@ -0,0 +1 @@
+Lorem ipsum dolor sit amet.
diff --git a/docs/_aliases.json b/docs/_aliases.json
new file mode 100644
index 0000000000..0dfcdea1e2
--- /dev/null
+++ b/docs/_aliases.json
@@ -0,0 +1,77 @@
+{
+ "/adding_a_keyboard_to_qmk": "/hardware_keyboard_guidelines",
+ "/build_environment_setup": "/newbs_getting_started",
+ "/cli_dev_configuration": "/cli_configuration",
+ "/dynamic_macros": "/feature_dynamic_macros",
+ "/feature_common_shortcuts": "/feature_advanced_keycodes",
+ "/flashing_bootloadhid": "/flashing",
+ "/getting_started_build_tools": "/newbs_getting_started",
+ "/getting_started_getting_help": "/support",
+ "/glossary": "/reference_glossary",
+ "/key_lock": "/feature_key_lock",
+ "/make_instructions": "/getting_started_make_guide",
+ "/python_development": "/cli_development",
+ "/space_cadet_shift": "/feature_space_cadet_shift",
+ "/tap_dance": "/feature_tap_dance",
+ "/tutorial": "/newbs",
+ "/unicode": "/feature_unicode",
+
+ "/features/bluetooth": "/features/wireless",
+
+ "/adc_driver": "/drivers/adc",
+ "/apa102_driver": "/drivers/apa102",
+ "/audio_driver": "/drivers/audio",
+ "/eeprom_driver": "/drivers/eeprom",
+ "/feature_audio": "/features/audio",
+ "/feature_auto_shift": "/features/auto_shift",
+ "/feature_autocorrect": "/features/autocorrect",
+ "/feature_backlight": "/features/backlight",
+ "/feature_bluetooth": "/features/wireless",
+ "/feature_bootmagic": "/features/bootmagic",
+ "/feature_caps_word": "/features/caps_word",
+ "/feature_combo": "/features/combo",
+ "/feature_command": "/features/command",
+ "/feature_digitizer": "/features/digitizer",
+ "/feature_dip_switch": "/features/dip_switch",
+ "/feature_dynamic_macros": "/features/dynamic_macros",
+ "/feature_encoders": "/features/encoders",
+ "/feature_grave_esc": "/features/grave_esc",
+ "/feature_haptic_feedback": "/features/haptic_feedback",
+ "/feature_hd44780": "/features/hd44780",
+ "/feature_joystick": "/features/joystick",
+ "/feature_key_lock": "/features/key_lock",
+ "/feature_key_overrides": "/features/key_overrides",
+ "/feature_leader_key": "/features/leader_key",
+ "/feature_led_indicators": "/features/led_indicators",
+ "/feature_led_matrix": "/features/led_matrix",
+ "/feature_midi": "/features/midi",
+ "/feature_mouse_keys": "/features/mouse_keys",
+ "/feature_oled_driver": "/features/oled_driver",
+ "/feature_os_detection": "/features/os_detection",
+ "/feature_pointing_device": "/features/pointing_device",
+ "/feature_programmable_button": "/features/programmable_button",
+ "/feature_ps2_mouse": "/features/ps2_mouse",
+ "/feature_rawhid": "/features/rawhid",
+ "/feature_repeat_key": "/features/repeat_key",
+ "/feature_rgb_matrix": "/features/rgb_matrix",
+ "/feature_rgblight": "/features/rgblight",
+ "/feature_secure": "/features/secure",
+ "/feature_send_string": "/features/send_string",
+ "/feature_sequencer": "/features/sequencer",
+ "/feature_space_cadet": "/features/space_cadet",
+ "/feature_split_keyboard": "/features/split_keyboard",
+ "/feature_st7565": "/features/st7565",
+ "/feature_stenography": "/features/stenography",
+ "/feature_swap_hands": "/features/swap_hands",
+ "/feature_tap_dance": "/features/tap_dance",
+ "/feature_tri_layer": "/features/tri_layer",
+ "/feature_unicode": "/features/unicode",
+ "/feature_wpm": "/features/wpm",
+ "/flash_driver": "/drivers/flash",
+ "/gpio_control": "/drivers/gpio",
+ "/i2c_driver": "/drivers/i2c",
+ "/serial_driver": "/drivers/serial",
+ "/spi_driver": "/drivers/spi",
+ "/uart_driver": "/drivers/uart",
+ "/ws2812_driver": "/drivers/ws2812"
+}
diff --git a/docs/_langs.md b/docs/_langs.md
deleted file mode 100644
index 8b08c34513..0000000000
--- a/docs/_langs.md
+++ /dev/null
@@ -1,4 +0,0 @@
-- Translations
- - [:uk: English](/)
- - [:cn: 简体中文](/zh-cn/)
- - [:jp: 日本語](/ja/)
diff --git a/docs/_sidebar.json b/docs/_sidebar.json
new file mode 100644
index 0000000000..d237b0e1d0
--- /dev/null
+++ b/docs/_sidebar.json
@@ -0,0 +1,315 @@
+[
+ {
+ "text": "Tutorial",
+ "items": [
+ { "text": "Introduction", "link": "/newbs" },
+ { "text": "Setup", "link": "/newbs_getting_started" },
+ { "text": "Building Your First Firmware", "link": "/newbs_building_firmware" },
+ { "text": "Flashing Firmware", "link": "/newbs_flashing" },
+ { "text": "Getting Help/Support", "link": "/support" },
+ { "text": "External Userspace", "link": "/newbs_external_userspace" },
+ { "text": "Other Resources", "link": "/newbs_learn_more_resources" },
+ { "text": "Syllabus", "link": "/syllabus" }
+ ]
+ },
+ {
+ "text": "FAQs",
+ "items": [
+ { "text": "General FAQ", "link": "/faq_general" },
+ { "text": "Build/Compile QMK", "link": "/faq_build" },
+ { "text": "Troubleshooting QMK", "link": "/faq_misc" },
+ { "text": "Debugging QMK", "link": "/faq_debug" },
+ { "text": "Keymap FAQ", "link": "/faq_keymap" },
+ { "text": "Squeezing Space from AVR", "link": "/squeezing_avr" },
+ { "text": "Glossary", "link": "/reference_glossary" }
+ ]
+ },
+ {
+ "text": "Licensing",
+ "items": [
+ { "text": "License Violations", "link": "/license_violations" },
+ { "text": "Proprietary Libraries", "link": "/proprietary_libs" }
+ ]
+ },
+ {
+ "text": "Configurator",
+ "items": [
+ { "text": "Overview", "link": "/newbs_building_firmware_configurator" },
+ { "text": "Step by Step", "link": "/configurator_step_by_step" },
+ { "text": "Troubleshooting", "link": "/configurator_troubleshooting" },
+ { "text": "Architecture", "link": "/configurator_architecture" },
+ {
+ "text": "QMK API",
+ "items": [
+ { "text": "Overview", "link": "/api_overview" },
+ { "text": "API Documentation", "link": "/api_docs" },
+ { "text": "Keyboard Support", "link": "/reference_configurator_support" },
+ { "text": "Adding Default Keymaps", "link": "/configurator_default_keymaps" }
+ ]
+ }
+ ]
+ },
+ {
+ "text": "CLI",
+ "items": [
+ { "text": "Overview", "link": "/cli" },
+ { "text": "Configuration", "link": "/cli_configuration" },
+ { "text": "Commands", "link": "/cli_commands" },
+ { "text": "Tab Completion", "link": "/cli_tab_complete" }
+ ]
+ },
+ {
+ "text": "Using QMK",
+ "items": [
+ {
+ "text": "Guides",
+ "items": [
+ { "text": "Customizing Functionality", "link": "/custom_quantum_functions" },
+ { "text": "Driver Installation with Zadig", "link": "/driver_installation_zadig" },
+ { "text": "Community Modules", "link": "/features/community_modules" },
+ { "text": "Keymap Overview", "link": "/keymap" },
+ {
+ "text": "Development Environments",
+ "items": [{ "text": "Docker Guide", "link": "/getting_started_docker" }]
+ },
+ { "text": "Flashing", "link": "/flashing" },
+ {
+ "text": "IDEs",
+ "items": [
+ { "text": "Using Eclipse with QMK", "link": "/other_eclipse" },
+ { "text": "Using VSCode with QMK", "link": "/other_vscode" }
+ ]
+ },
+ {
+ "text": "Git Best Practices",
+ "items": [
+ { "text": "Introduction", "link": "/newbs_git_best_practices" },
+ { "text": "Your Fork", "link": "/newbs_git_using_your_master_branch" },
+ { "text": "Merge Conflicts", "link": "/newbs_git_resolving_merge_conflicts" },
+ { "text": "Fixing Your Branch", "link": "/newbs_git_resynchronize_a_branch" }
+ ]
+ }
+ ]
+ },
+ {
+ "text": "Simple Keycodes",
+ "items": [
+ { "text": "Full List", "link": "/keycodes" },
+ { "text": "Basic Keycodes", "link": "/keycodes_basic" },
+ { "text": "Language-Specific Keycodes", "link": "/reference_keymap_extras" },
+ { "text": "Modifier Keys", "link": "/feature_advanced_keycodes" },
+ { "text": "Quantum Keycodes", "link": "/quantum_keycodes" },
+ { "text": "Magic Keycodes", "link": "/keycodes_magic" }
+ ]
+ },
+ {
+ "text": "Advanced Keycodes",
+ "items": [
+ { "text": "Command", "link": "/features/command" },
+ { "text": "Dynamic Macros", "link": "/features/dynamic_macros" },
+ { "text": "Grave Escape", "link": "/features/grave_esc" },
+ { "text": "Leader Key", "link": "/features/leader_key" },
+ { "text": "Mod-Tap", "link": "/mod_tap" },
+ { "text": "Macros", "link": "/feature_macros" },
+ { "text": "Mouse Keys", "link": "/features/mouse_keys" },
+ { "text": "Programmable Button", "link": "/features/programmable_button" },
+ { "text": "Repeat Key", "link": "/features/repeat_key" },
+ { "text": "Space Cadet Shift", "link": "/features/space_cadet" },
+ { "text": "US ANSI Shifted Keys", "link": "/keycodes_us_ansi_shifted" }
+ ]
+ },
+ {
+ "text": "Software Features",
+ "items": [
+ { "text": "Auto Shift", "link": "/features/auto_shift" },
+ { "text": "Autocorrect", "link": "/features/autocorrect" },
+ { "text": "Caps Word", "link": "/features/caps_word" },
+ { "text": "Combos", "link": "/features/combo" },
+ { "text": "Debounce API", "link": "/feature_debounce_type" },
+ { "text": "Digitizer", "link": "/features/digitizer" },
+ { "text": "EEPROM", "link": "/feature_eeprom" },
+ { "text": "Key Lock", "link": "/features/key_lock" },
+ { "text": "Key Overrides", "link": "/features/key_overrides" },
+ { "text": "Layers", "link": "/feature_layers" },
+ { "text": "Layer Lock", "link": "/features/layer_lock" },
+ { "text": "One Shot Keys", "link": "/one_shot_keys" },
+ { "text": "OS Detection", "link": "/features/os_detection" },
+ { "text": "Raw HID", "link": "/features/rawhid" },
+ { "text": "Secure", "link": "/features/secure" },
+ { "text": "Send String", "link": "/features/send_string" },
+ { "text": "Sequencer", "link": "/features/sequencer" },
+ { "text": "Swap Hands", "link": "/features/swap_hands" },
+ { "text": "Tap Dance", "link": "/features/tap_dance" },
+ { "text": "Tap-Hold Configuration", "link": "/tap_hold" },
+ { "text": "Tri Layer", "link": "/features/tri_layer" },
+ { "text": "Unicode", "link": "/features/unicode" },
+ { "text": "Userspace", "link": "/feature_userspace" },
+ { "text": "WPM Calculation", "link": "/features/wpm" }
+ ]
+ },
+ {
+ "text": "Hardware Features",
+ "items": [
+ {
+ "text": "Displays",
+ "items": [
+ {
+ "text": "Quantum Painter",
+ "link": "quantum_painter",
+ "items": [
+ { "text": "Quantum Painter LVGL Integration", "link": "/quantum_painter_lvgl" }
+ ]
+ },
+ { "text": "HD44780 LCD Driver", "link": "/features/hd44780" },
+ { "text": "ST7565 LCD Driver", "link": "/features/st7565" },
+ { "text": "OLED Driver", "link": "/features/oled_driver" }
+ ]
+ },
+ {
+ "text": "Lighting",
+ "items": [
+ { "text": "Backlight", "link": "/features/backlight" },
+ { "text": "LED Matrix", "link": "/features/led_matrix" },
+ { "text": "RGB Lighting", "link": "/features/rgblight" },
+ { "text": "RGB Matrix", "link": "/features/rgb_matrix" }
+ ]
+ },
+ { "text": "Audio", "link": "/features/audio" },
+ { "text": "Battery", "link": "/features/battery" },
+ { "text": "Bootmagic", "link": "/features/bootmagic" },
+ { "text": "Converters", "link": "/feature_converters" },
+ { "text": "Custom Matrix", "link": "/custom_matrix" },
+ { "text": "DIP Switch", "link": "/features/dip_switch" },
+ { "text": "Encoders", "link": "/features/encoders" },
+ { "text": "Haptic Feedback", "link": "/features/haptic_feedback" },
+ { "text": "Joystick", "link": "/features/joystick" },
+ { "text": "LED Indicators", "link": "/features/led_indicators" },
+ { "text": "MIDI", "link": "/features/midi" },
+ { "text": "Pointing Device", "link": "/features/pointing_device" },
+ { "text": "PS/2 Mouse", "link": "/features/ps2_mouse" },
+ { "text": "Split Keyboard", "link": "/features/split_keyboard" },
+ { "text": "Stenography", "link": "/features/stenography" },
+ { "text": "Wireless", "link": "/features/wireless" }
+ ]
+ },
+ {
+ "text": "Keyboard Building",
+ "items": [
+ { "text": "Easy Maker for One Offs", "link": "/easy_maker" },
+ { "text": "Porting Keyboards", "link": "/porting_your_keyboard_to_qmk" },
+ { "text": "Hand Wiring Guide", "link": "/hand_wire" },
+ { "text": "ISP Flashing Guide", "link": "/isp_flashing_guide" }
+ ]
+ }
+ ]
+ },
+ {
+ "text": "Developing QMK",
+ "items": [
+ { "text": "PR Checklist", "link": "/pr_checklist" },
+ {
+ "text": "Breaking Changes",
+ "items": [
+ { "text": "Overview", "link": "/breaking_changes" },
+ { "text": "My Pull Request Was Flagged", "link": "/breaking_changes_instructions" },
+ {
+ "text": "Most Recent ChangeLog",
+ "link": "/ChangeLog/20250831"
+ },
+ { "text": "Past Breaking Changes", "link": "/breaking_changes_history" },
+ { "text": "Deprecation Policy", "link": "/support_deprecation_policy" }
+ ]
+ },
+
+ {
+ "text": "C Development",
+ "items": [
+ { "text": "ARM Debugging Guide", "link": "/arm_debugging" },
+ { "text": "Coding Conventions", "link": "/coding_conventions_c" },
+ { "text": "Compatible Microcontrollers", "link": "/compatible_microcontrollers" },
+ {
+ "text": "Drivers",
+ "link": "hardware_drivers",
+ "items": [
+ { "text": "ADC Driver", "link": "/drivers/adc" },
+ { "text": "APA102 Driver", "link": "/drivers/apa102" },
+ { "text": "Audio Driver", "link": "/drivers/audio" },
+ { "text": "Battery Driver", "link": "/drivers/battery" },
+ { "text": "EEPROM Driver", "link": "/drivers/eeprom" },
+ { "text": "Flash Driver", "link": "/drivers/flash" },
+ { "text": "I2C Driver", "link": "/drivers/i2c" },
+ { "text": "'serial' Driver", "link": "/drivers/serial" },
+ { "text": "SPI Driver", "link": "/drivers/spi" },
+ { "text": "UART Driver", "link": "/drivers/uart" },
+ { "text": "WS2812 Driver", "link": "/drivers/ws2812" }
+ ]
+ },
+ { "text": "GPIO Controls", "link": "/drivers/gpio" },
+ { "text": "Keyboard Guidelines", "link": "/hardware_keyboard_guidelines" }
+ ]
+ },
+
+ {
+ "text": "Python Development",
+ "items": [
+ { "text": "Coding Conventions", "link": "/coding_conventions_python" },
+ { "text": "QMK CLI Development", "link": "/cli_development" }
+ ]
+ },
+
+ {
+ "text": "Configurator Development",
+ "items": [
+ {
+ "text": "QMK API",
+ "items": [
+ { "text": "Development Environment", "link": "/api_development_environment" },
+ { "text": "Architecture Overview", "link": "/api_development_overview" }
+ ]
+ }
+ ]
+ },
+
+ {
+ "text": "Hardware Platform Development",
+ "items": [
+ {
+ "text": "Arm/ChibiOS",
+ "items": [
+ { "text": "Selecting an MCU", "link": "/platformdev_selecting_arm_mcu" },
+ { "text": "Early initialization", "link": "/platformdev_chibios_earlyinit" },
+ { "text": "Raspberry Pi RP2040", "link": "/platformdev_rp2040" },
+ { "text": "Proton C", "link": "/platformdev_proton_c" },
+ { "text": "WeAct Blackpill F4x1", "link": "/platformdev_blackpill_f4x1" }
+ ]
+ }
+ ]
+ },
+
+ {
+ "text": "QMK Reference",
+ "items": [
+ { "text": "Contributing to QMK", "link": "/contributing" },
+ { "text": "Config Options", "link": "/config_options" },
+ { "text": "Data Driven Configuration", "link": "/data_driven_config" },
+ { "text": "Make Documentation", "link": "/getting_started_make_guide" },
+ { "text": "Documentation Best Practices", "link": "/documentation_best_practices" },
+ { "text": "Documentation Templates", "link": "/documentation_templates" },
+ { "text": "Community Layouts", "link": "/feature_layouts" },
+ { "text": "Unit Testing", "link": "/unit_testing" },
+ { "text": "Useful Functions", "link": "/ref_functions" },
+ { "text": "info.json Format", "link": "/reference_info_json" }
+ ]
+ },
+
+ {
+ "text": "For a Deeper Understanding",
+ "items": [
+ { "text": "How Keyboards Work", "link": "/how_keyboards_work" },
+ { "text": "How a Matrix Works", "link": "/how_a_matrix_works" },
+ { "text": "Understanding QMK", "link": "/understanding_qmk" }
+ ]
+ }
+ ]
+ }
+]
diff --git a/docs/_summary.md b/docs/_summary.md
deleted file mode 100644
index fb584955ce..0000000000
--- a/docs/_summary.md
+++ /dev/null
@@ -1,204 +0,0 @@
-* Tutorial
- * [Introduction](newbs.md)
- * [Setup](newbs_getting_started.md)
- * [Building Your First Firmware](newbs_building_firmware.md)
- * [Flashing Firmware](newbs_flashing.md)
- * [Getting Help/Support](support.md)
- * [External Userspace](newbs_external_userspace.md)
- * [Other Resources](newbs_learn_more_resources.md)
- * [Syllabus](syllabus.md)
-
-* FAQs
- * [General FAQ](faq_general.md)
- * [Build/Compile QMK](faq_build.md)
- * [Troubleshooting QMK](faq_misc.md)
- * [Debugging QMK](faq_debug.md)
- * [Keymap FAQ](faq_keymap.md)
- * [Squeezing Space from AVR](squeezing_avr.md)
- * [Glossary](reference_glossary.md)
-
-* Configurator
- * [Overview](newbs_building_firmware_configurator.md)
- * [Step by Step](configurator_step_by_step.md)
- * [Troubleshooting](configurator_troubleshooting.md)
- * [Architecture](configurator_architecture.md)
- * QMK API
- * [Overview](api_overview.md)
- * [API Documentation](api_docs.md)
- * [Keyboard Support](reference_configurator_support.md)
- * [Adding Default Keymaps](configurator_default_keymaps.md)
-
-* CLI
- * [Overview](cli.md)
- * [Configuration](cli_configuration.md)
- * [Commands](cli_commands.md)
- * [Tab Completion](cli_tab_complete.md)
-
-* Using QMK
- * Guides
- * [Customizing Functionality](custom_quantum_functions.md)
- * [Driver Installation with Zadig](driver_installation_zadig.md)
- * [Keymap Overview](keymap.md)
- * Development Environments
- * [Docker Guide](getting_started_docker.md)
- * Flashing
- * [Flashing](flashing.md)
- * [Flashing ATmega32A (ps2avrgb)](flashing_bootloadhid.md)
- * IDEs
- * [Using Eclipse with QMK](other_eclipse.md)
- * [Using VSCode with QMK](other_vscode.md)
- * Git Best Practices
- * [Introduction](newbs_git_best_practices.md)
- * [Your Fork](newbs_git_using_your_master_branch.md)
- * [Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
- * [Fixing Your Branch](newbs_git_resynchronize_a_branch.md)
-
- * Simple Keycodes
- * [Full List](keycodes.md)
- * [Basic Keycodes](keycodes_basic.md)
- * [Language-Specific Keycodes](reference_keymap_extras.md)
- * [Modifier Keys](feature_advanced_keycodes.md)
- * [Quantum Keycodes](quantum_keycodes.md)
- * [Magic Keycodes](keycodes_magic.md)
-
- * Advanced Keycodes
- * [Command](feature_command.md)
- * [Dynamic Macros](feature_dynamic_macros.md)
- * [Grave Escape](feature_grave_esc.md)
- * [Leader Key](feature_leader_key.md)
- * [Mod-Tap](mod_tap.md)
- * [Macros](feature_macros.md)
- * [Mouse Keys](feature_mouse_keys.md)
- * [Programmable Button](feature_programmable_button.md)
- * [Repeat Key](feature_repeat_key.md)
- * [Space Cadet Shift](feature_space_cadet.md)
- * [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
-
- * Software Features
- * [Auto Shift](feature_auto_shift.md)
- * [Autocorrect](feature_autocorrect.md)
- * [Caps Word](feature_caps_word.md)
- * [Combos](feature_combo.md)
- * [Debounce API](feature_debounce_type.md)
- * [Digitizer](feature_digitizer.md)
- * [EEPROM](feature_eeprom.md)
- * [Key Lock](feature_key_lock.md)
- * [Key Overrides](feature_key_overrides.md)
- * [Layers](feature_layers.md)
- * [One Shot Keys](one_shot_keys.md)
- * [OS Detection](feature_os_detection.md)
- * [Raw HID](feature_rawhid.md)
- * [Secure](feature_secure.md)
- * [Send String](feature_send_string.md)
- * [Sequencer](feature_sequencer.md)
- * [Swap Hands](feature_swap_hands.md)
- * [Tap Dance](feature_tap_dance.md)
- * [Tap-Hold Configuration](tap_hold.md)
- * [Tri Layer](feature_tri_layer.md)
- * [Unicode](feature_unicode.md)
- * [Userspace](feature_userspace.md)
- * [WPM Calculation](feature_wpm.md)
-
- * Hardware Features
- * Displays
- * [Quantum Painter](quantum_painter.md)
- * [Quantum Painter LVGL Integration](quantum_painter_lvgl.md)
- * [HD44780 LCD Driver](feature_hd44780.md)
- * [ST7565 LCD Driver](feature_st7565.md)
- * [OLED Driver](feature_oled_driver.md)
- * Lighting
- * [Backlight](feature_backlight.md)
- * [LED Matrix](feature_led_matrix.md)
- * [RGB Lighting](feature_rgblight.md)
- * [RGB Matrix](feature_rgb_matrix.md)
- * [Audio](feature_audio.md)
- * [Bluetooth](feature_bluetooth.md)
- * [Bootmagic Lite](feature_bootmagic.md)
- * [Converters](feature_converters.md)
- * [Custom Matrix](custom_matrix.md)
- * [DIP Switch](feature_dip_switch.md)
- * [Encoders](feature_encoders.md)
- * [Haptic Feedback](feature_haptic_feedback.md)
- * [Joystick](feature_joystick.md)
- * [LED Indicators](feature_led_indicators.md)
- * [MIDI](feature_midi.md)
- * [Pointing Device](feature_pointing_device.md)
- * [PS/2 Mouse](feature_ps2_mouse.md)
- * [Split Keyboard](feature_split_keyboard.md)
- * [Stenography](feature_stenography.md)
-
- * Keyboard Building
- * [Easy Maker for One Offs](easy_maker.md)
- * [Porting Keyboards](porting_your_keyboard_to_qmk.md)
- * [Hand Wiring Guide](hand_wire.md)
- * [ISP Flashing Guide](isp_flashing_guide.md)
-
-* Developing QMK
- * [PR Checklist](pr_checklist.md)
- * Breaking Changes
- * [Overview](breaking_changes.md)
- * [My Pull Request Was Flagged](breaking_changes_instructions.md)
- * [Most Recent ChangeLog](ChangeLog/20240225.md "QMK v0.24.0 - 2024 Feb 25")
- * [Past Breaking Changes](breaking_changes_history.md)
-
- * C Development
- * [ARM Debugging Guide](arm_debugging.md)
- * [Coding Conventions](coding_conventions_c.md)
- * [Compatible Microcontrollers](compatible_microcontrollers.md)
- * [Drivers](hardware_drivers.md)
- * [ADC Driver](adc_driver.md)
- * [APA102 Driver](apa102_driver.md)
- * [Audio Driver](audio_driver.md)
- * [I2C Driver](i2c_driver.md)
- * [SPI Driver](spi_driver.md)
- * [WS2812 Driver](ws2812_driver.md)
- * [EEPROM Driver](eeprom_driver.md)
- * [Flash Driver](flash_driver.md)
- * ['serial' Driver](serial_driver.md)
- * [UART Driver](uart_driver.md)
- * [GPIO Controls](gpio_control.md)
- * [Keyboard Guidelines](hardware_keyboard_guidelines.md)
-
- * Python Development
- * [Coding Conventions](coding_conventions_python.md)
- * [QMK CLI Development](cli_development.md)
-
- * Configurator Development
- * QMK API
- * [Development Environment](api_development_environment.md)
- * [Architecture Overview](api_development_overview.md)
-
- * Hardware Platform Development
- * Arm/ChibiOS
- * [Selecting an MCU](platformdev_selecting_arm_mcu.md)
- * [Early initialization](platformdev_chibios_earlyinit.md)
- * [Raspberry Pi RP2040](platformdev_rp2040.md)
- * [Proton C](platformdev_proton_c.md)
- * [WeAct Blackpill F4x1](platformdev_blackpill_f4x1.md)
-
- * QMK Reference
- * [Contributing to QMK](contributing.md)
- * [Translating the QMK Docs](translating.md)
- * [Config Options](config_options.md)
- * [Data Driven Configuration](data_driven_config.md)
- * [Make Documentation](getting_started_make_guide.md)
- * [Documentation Best Practices](documentation_best_practices.md)
- * [Documentation Templates](documentation_templates.md)
- * [Community Layouts](feature_layouts.md)
- * [Unit Testing](unit_testing.md)
- * [Useful Functions](ref_functions.md)
- * [info.json Format](reference_info_json.md)
-
- * For a Deeper Understanding
- * [How Keyboards Work](how_keyboards_work.md)
- * [How a Matrix Works](how_a_matrix_works.md)
- * [Understanding QMK](understanding_qmk.md)
-
- * QMK Internals (In Progress)
- * [Defines](internals/defines.md)
- * [Input Callback Reg](internals/input_callback_reg.md)
- * [Midi Device](internals/midi_device.md)
- * [Midi Device Setup Process](internals/midi_device_setup_process.md)
- * [Midi Util](internals/midi_util.md)
- * [Send Functions](internals/send_functions.md)
- * [Sysex Tools](internals/sysex_tools.md)
diff --git a/docs/adc_driver.md b/docs/adc_driver.md
deleted file mode 100644
index dd928e1e7f..0000000000
--- a/docs/adc_driver.md
+++ /dev/null
@@ -1,173 +0,0 @@
-# ADC Driver
-
-QMK 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.md).
-
-This 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.
-
-## Usage
-
-To use this driver, add the following to your `rules.mk`:
-
-```make
-ANALOG_DRIVER_REQUIRED = yes
-```
-
-Then place this include at the top of your code:
-
-```c
-#include "analog.h"
-```
-
-## Channels
-
-### AVR
-
-|Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328/P|
-|-------|-------------|-------------|---------|----------|
-|0 |`F0` |`F0` |`A0` |`C0` |
-|1 |`F1` |`F1` |`A1` |`C1` |
-|2 |`F2` | |`A2` |`C2` |
-|3 |`F3` | |`A3` |`C3` |
-|4 |`F4` |`F4` |`A4` |`C4` |
-|5 |`F5` |`F5` |`A5` |`C5` |
-|6 |`F6` |`F6` |`A6` |* |
-|7 |`F7` |`F7` |`A7` |* |
-|8 | |`D4` | | |
-|9 | |`D6` | | |
-|10 | |`D7` | | |
-|11 | |`B4` | | |
-|12 | |`B5` | | |
-|13 | |`B6` | | |
-
-\* The ATmega328/P possesses two extra ADC channels; however, they are not present on the DIP pinout, and are not shared with GPIO pins. You can use `adc_read()` directly to gain access to these.
-
-### ARM
-
-#### STM32
-
-Note that some of these pins are doubled-up on ADCs with the same channel. This is because the pins can be used for either ADC.
-
-Also note that the F0 and F3 use different numbering schemes. The F0 has a single ADC and the channels are 0-indexed, whereas the F3 has 4 ADCs and the channels are 1-indexed. This is because the F0 uses the `ADCv1` implementation of the ADC, whereas the F3 uses the `ADCv3` implementation.
-
-|ADC|Channel|STM32F0xx|STM32F1xx|STM32F3xx|STM32F4xx|
-|---|-------|---------|---------|---------|---------|
-|1 |0 |`A0` |`A0` | |`A0` |
-|1 |1 |`A1` |`A1` |`A0` |`A1` |
-|1 |2 |`A2` |`A2` |`A1` |`A2` |
-|1 |3 |`A3` |`A3` |`A2` |`A3` |
-|1 |4 |`A4` |`A4` |`A3` |`A4` |
-|1 |5 |`A5` |`A5` |`F4` |`A5` |
-|1 |6 |`A6` |`A6` |`C0` |`A6` |
-|1 |7 |`A7` |`A7` |`C1` |`A7` |
-|1 |8 |`B0` |`B0` |`C2` |`B0` |
-|1 |9 |`B1` |`B1` |`C3` |`B1` |
-|1 |10 |`C0` |`C0` |`F2` |`C0` |
-|1 |11 |`C1` |`C1` | |`C1` |
-|1 |12 |`C2` |`C2` | |`C2` |
-|1 |13 |`C3` |`C3` | |`C3` |
-|1 |14 |`C4` |`C4` | |`C4` |
-|1 |15 |`C5` |`C5` | |`C5` |
-|1 |16 | | | | |
-|2 |0 | |`A0`¹ | |`A0`² |
-|2 |1 | |`A1`¹ |`A4` |`A1`² |
-|2 |2 | |`A2`¹ |`A5` |`A2`² |
-|2 |3 | |`A3`¹ |`A6` |`A3`² |
-|2 |4 | |`A4`¹ |`A7` |`A4`² |
-|2 |5 | |`A5`¹ |`C4` |`A5`² |
-|2 |6 | |`A6`¹ |`C0` |`A6`² |
-|2 |7 | |`A7`¹ |`C1` |`A7`² |
-|2 |8 | |`B0`¹ |`C2` |`B0`² |
-|2 |9 | |`B1`¹ |`C3` |`B1`² |
-|2 |10 | |`C0`¹ |`F2` |`C0`² |
-|2 |11 | |`C1`¹ |`C5` |`C1`² |
-|2 |12 | |`C2`¹ |`B2` |`C2`² |
-|2 |13 | |`C3`¹ | |`C3`² |
-|2 |14 | |`C4`¹ | |`C4`² |
-|2 |15 | |`C5`¹ | |`C5`² |
-|2 |16 | | | | |
-|3 |0 | |`A0`¹ | |`A0`² |
-|3 |1 | |`A1`¹ |`B1` |`A1`² |
-|3 |2 | |`A2`¹ |`E9` |`A2`² |
-|3 |3 | |`A3`¹ |`E13` |`A3`² |
-|3 |4 | |`F6`¹ | |`F6`² |
-|3 |5 | |`F7`¹ |`B13` |`F7`² |
-|3 |6 | |`F8`¹ |`E8` |`F8`² |
-|3 |7 | |`F9`¹ |`D10` |`F9`² |
-|3 |8 | |`F10`¹ |`D11` |`F10`² |
-|3 |9 | | |`D12` |`F3`² |
-|3 |10 | |`C0`¹ |`D13` |`C0`² |
-|3 |11 | |`C1`¹ |`D14` |`C1`² |
-|3 |12 | |`C2`¹ |`B0` |`C2`² |
-|3 |13 | |`C3`¹ |`E7` |`C3`² |
-|3 |14 | | |`E10` |`F4`² |
-|3 |15 | | |`E11` |`F5`² |
-|3 |16 | | |`E12` | |
-|4 |1 | | |`E14` | |
-|4 |2 | | |`E15` | |
-|4 |3 | | |`B12` | |
-|4 |4 | | |`B14` | |
-|4 |5 | | |`B15` | |
-|4 |6 | | |`E8` | |
-|4 |7 | | |`D10` | |
-|4 |8 | | |`D11` | |
-|4 |9 | | |`D12` | |
-|4 |10 | | |`D13` | |
-|4 |11 | | |`D14` | |
-|4 |12 | | |`D8` | |
-|4 |13 | | |`D9` | |
-|4 |14 | | | | |
-|4 |15 | | | | |
-|4 |16 | | | | |
-
-¹ As of ChibiOS 20.3.4, the ADC driver for STM32F1xx devices supports only ADC1, therefore any configurations involving ADC2 or ADC3 cannot actually be used. In particular, pins `F6`…`F10`, which are present at least on some STM32F103x[C-G] devices, cannot be used as ADC inputs because of this driver limitation.
-
-² Not all STM32F4xx devices have ADC2 and/or ADC3, therefore some configurations shown in this table may be unavailable; in particular, pins `F4`…`F10` cannot be used as ADC inputs on devices which do not have ADC3. Check the device datasheet to confirm which pin functions are supported.
-
-#### RP2040
-
-RP2040 has only a single ADC (`ADCD1` in ChibiOS); in the QMK API the index for that ADC is 0.
-
-|Channel|Pin |
-|-------|-------------------|
-|0 |`GP26` |
-|1 |`GP27` |
-|2 |`GP28` |
-|3 |`GP29` |
-|4 |Temperature sensor*|
-
-
-* The temperature sensor is disabled by default and needs to be enabled by the RP2040-specific function: `adcRPEnableTS(&ADCD1)`. The ADC must be initialized before calling that function; an easy way to ensure that is to perform a dummy conversion.
-
-## Functions
-
-### AVR
-
-|Function |Description |
-|----------------------------|-------------------------------------------------------------------------------------------------------------------|
-|`analogReference(mode)` |Sets the analog voltage reference source. Must be one of `ADC_REF_EXTERNAL`, `ADC_REF_POWER` or `ADC_REF_INTERNAL`.|
-|`analogReadPin(pin)` |Reads the value from the specified pin, eg. `F6` for ADC6 on the ATmega32U4. |
-|`pinToMux(pin)` |Translates a given pin to a mux value. If an unsupported pin is given, returns the mux value for "0V (GND)". |
-|`adc_read(mux)` |Reads the value from the ADC according to the specified mux. See your MCU's datasheet for more information. |
-
-### ARM
-
-|Function |Description |
-|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-|`analogReadPin(pin)` |Reads the value from the specified pin, eg. `A0` for channel 0 on the STM32F0 and ADC1 channel 1 on the STM32F3. Note that if a pin can be used for multiple ADCs, it will pick the lower numbered ADC for this function. eg. `C0` will be channel 6 of ADC 1 when it could be used for ADC 2 as well.|
-|`analogReadPinAdc(pin, adc)`|Reads the value from the specified pin and ADC, eg. `C0, 1` will read from channel 6, ADC 2 instead of ADC 1. Note that the ADCs are 0-indexed for this function. |
-|`pinToMux(pin)` |Translates a given pin to a channel and ADC combination. If an unsupported pin is given, returns the mux value for "0V (GND)". |
-|`adc_read(mux)` |Reads the value from the ADC according to the specified pin and ADC combination. See your MCU's datasheet for more information. |
-
-## Configuration
-
-## ARM
-
-The ARM implementation of the ADC has a few additional options that you can override in your own keyboards and keymaps to change how it operates. Please consult the corresponding `hal_adc_lld.h` in ChibiOS for your specific microcontroller for further documentation on your available options.
-
-|`#define` |Type |Default |Description |
-|---------------------|------|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-|`ADC_CIRCULAR_BUFFER`|`bool`|`false` |If `true`, then the implementation will use a circular buffer. |
-|`ADC_NUM_CHANNELS` |`int` |`1` |Sets the number of channels that will be scanned as part of an ADC operation. The current implementation only supports `1`. |
-|`ADC_BUFFER_DEPTH` |`int` |`2` |Sets the depth of each result. Since we are only getting a 10-bit result by default, we set this to 2 bytes so we can contain our one value. This could be set to 1 if you opt for an 8-bit or lower result.|
-|`ADC_SAMPLING_RATE` |`int` |`ADC_SMPR_SMP_1P5` |Sets the sampling rate of the ADC. By default, it is set to the fastest setting. |
-|`ADC_RESOLUTION` |`int` |`ADC_CFGR1_RES_10BIT` or `ADC_CFGR_RES_10BITS`|The resolution of your result. We choose 10 bit by default, but you can opt for 12, 10, 8, or 6 bit. Different MCUs use slightly different names for the resolution constants. |
diff --git a/docs/apa102_driver.md b/docs/apa102_driver.md
deleted file mode 100644
index 1da2de6ca3..0000000000
--- a/docs/apa102_driver.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# APA102 Driver :id=apa102-driver
-
-This driver provides support for APA102 addressable RGB LEDs. They are similar to the [WS2812](ws2812_driver.md) LEDs, but have increased data and refresh rates.
-
-## Usage :id=usage
-
-In most cases, the APA102 driver code is automatically included if you are using either the [RGBLight](feature_rgblight.md) or [RGB Matrix](feature_rgb_matrix.md) feature with the `apa102` driver set, and you would use those APIs instead.
-
-However, if you need to use the driver standalone, add the following to your `rules.mk`:
-
-```make
-APA102_DRIVER_REQUIRED = yes
-```
-
-You can then call the APA102 API by including `apa102.h` in your code.
-
-## Basic Configuration :id=basic-configuration
-
-Add the following to your `config.h`:
-
-|Define |Default |Description |
-|---------------------------|-------------|------------------------------------------------------------------|
-|`APA102_DI_PIN` |*Not defined*|The GPIO pin connected to the DI pin of the first LED in the chain|
-|`APA102_CI_PIN` |*Not defined*|The GPIO pin connected to the CI pin of the first LED in the chain|
-|`APA102_DEFAULT_BRIGHTNESS`|`31` |The default global brightness level of the LEDs, from 0 to 31 |
-
-## API :id=api
-
-### `void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds)`
-
-Send RGB data to the APA102 LED chain.
-
-#### Arguments :id=api-apa102-setleds-arguments
-
- - `rgb_led_t *start_led`
- A pointer to the LED array.
- - `uint16_t num_leds`
- The length of the LED array.
-
----
-
-### `void apa102_set_brightness(uint8_t brightness)`
-
-Set the global brightness.
-
-#### Arguments :id=api-apa102-set-brightness-arguments
-
- - `uint8_t brightness`
- The brightness level to set, from 0 to 31.
diff --git a/docs/api_development_overview.md b/docs/api_development_overview.md
index e55d034100..eb164bec52 100644
--- a/docs/api_development_overview.md
+++ b/docs/api_development_overview.md
@@ -4,7 +4,7 @@ This page attempts to introduce developers to the QMK Compiler. It does not go i
# Overview
-The QMK Compile API consists of a few movings parts:
+The QMK Compile API consists of a few moving parts:

diff --git a/docs/api_docs.md b/docs/api_docs.md
index 3324bc545b..f4ba19c42a 100644
--- a/docs/api_docs.md
+++ b/docs/api_docs.md
@@ -67,7 +67,7 @@ Once your compile job has finished you'll check the `result` key. The value of t
* `firmware_source_url`: A list of URLs for the full firmware source code
* `output`: The stdout and stderr for this compile job. Errors will be found here.
-## Constants :id=qmk-constants
+## Constants {#qmk-constants}
If you're writing a tool that leverages constants used within QMK, the API is used to publish "locked-in" versions of those constants in order to ensure that any third-party tooling has a canonical set of information to work with.
@@ -81,9 +81,13 @@ $ curl https://keyboards.develop.qmk.fm/v1/constants_metadata.json # For `develo
{"last_updated": "2022-11-26 12:00:00 GMT", "constants": {"keycodes": ["0.0.1", "0.0.2"]}}
```
-!> Versions exported by the `master` endpoint are locked-in. Any extra versions that exist on the `develop` endpoint which don't exist in `master` are subject to change.
+::: warning
+Versions exported by the `master` endpoint are locked-in. Any extra versions that exist on the `develop` endpoint which don't exist in `master` are subject to change.
+:::
-?> Only keycodes are currently published, but over time all other "externally visible" IDs are expected to appear on these endpoints.
+::: tip
+Only keycodes are currently published, but over time all other "externally visible" IDs are expected to appear on these endpoints.
+:::
To retrieve the constants associated with a subsystem, the endpoint format is as follows:
```
diff --git a/docs/api_overview.md b/docs/api_overview.md
index f851a48a4a..c8ec42e947 100644
--- a/docs/api_overview.md
+++ b/docs/api_overview.md
@@ -4,12 +4,12 @@ The QMK API provides an asynchronous API that Web and GUI tools can use to compi
## App Developers
-If you are an app developer interested in using this API in your application you should head over to [Using The API](api_docs.md).
+If you are an app developer interested in using this API in your application you should head over to [Using The API](api_docs).
## Keyboard Maintainers
-If you would like to enhance your keyboard's support in the QMK Compiler API head over to the [Keyboard Support](reference_configurator_support.md) section.
+If you would like to enhance your keyboard's support in the QMK Compiler API head over to the [Keyboard Support](reference_configurator_support) section.
## Backend Developers
-If you are interested in working on the API itself you should start by setting up a [Development Environment](api_development_environment.md), then check out [Hacking On The API](api_development_overview.md).
+If you are interested in working on the API itself you should start by setting up a [Development Environment](api_development_environment), then check out [Hacking On The API](api_development_overview).
diff --git a/docs/audio_driver.md b/docs/audio_driver.md
deleted file mode 100644
index 03c0a824df..0000000000
--- a/docs/audio_driver.md
+++ /dev/null
@@ -1,237 +0,0 @@
-# Audio Driver :id=audio-driver
-
-The [Audio feature](feature_audio.md) 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.
-
-Not 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.
-
-
-## AVR :id=avr
-
-Boards built around an Atmega32U4 can use two sets of PWM capable pins, each driving a separate speaker.
-The possible configurations are:
-
-| | Timer3 | Timer1 |
-|--------------|-------------|--------------|
-| one speaker | C4,C5 or C6 | |
-| one speaker | | B4, B5 or B7 |
-| two speakers | C4,C5 or C6 | B4, B5 or B7 |
-
-Currently there is only one/default driver for AVR based boards, which is automatically configured to:
-
-```make
-AUDIO_DRIVER = pwm_hardware
-```
-
-
-## ARM :id=arm
-
-For Arm based boards, QMK depends on ChibiOS - hence any MCU supported by the later is likely usable, as long as certain hardware peripherals are available.
-
-Supported wiring configurations, with their ChibiOS/MCU peripheral requirement are listed below;
-piezo speakers are marked with :one: for the first/primary and :two: for the secondary.
-
- | driver | GPTD6` on a Single Key
-See the [Grave Escape](feature_grave_esc.md) feature.
+See the [Grave Escape](features/grave_esc) feature.
## Eject on Mac OSX
diff --git a/docs/faq_misc.md b/docs/faq_misc.md
index 287ca7711d..133dbcf612 100644
--- a/docs/faq_misc.md
+++ b/docs/faq_misc.md
@@ -1,6 +1,6 @@
# Miscellaneous FAQ
-## How do I test my keyboard? :id=testing
+## How do I test my keyboard? {#testing}
Testing your keyboard is usually pretty straightforward. Press every single key and make sure it sends the keys you expect. You can use [QMK Configurator](https://config.qmk.fm/#/test/)'s test mode to check your keyboard, even if it doesn't run QMK.
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index 171243301d..a6f8bc8372 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -1,32 +1,43 @@
-# Modifier Keys :id=modifier-keys
+# Modifier Keys {#modifier-keys}
These allow you to combine a modifier with a keycode. When pressed, the keydown event for the modifier, then `kc` will be sent. On release, the keyup event for `kc`, then the modifier will be sent.
-|Key |Aliases |Description |
-|----------|----------------------------------|------------------------------------------------------|
-|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` |
-|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
-|`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` |
-|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)` |Hold Left GUI and press `kc` |
-|`RCTL(kc)`| |Hold Right Control and press `kc` |
-|`RSFT(kc)`| |Hold Right Shift and press `kc` |
-|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt and press `kc` |
-|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)` |Hold Right GUI and press `kc` |
-|`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` |
-|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` |
-|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` |
-|`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` |
-|`LCA(kc)` | |Hold Left Control and Alt and press `kc` |
-|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` |
-|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt (AltGr) and press `kc` |
-|`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` |
-|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` |
-|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
-|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc` |
+|Key |Aliases |Description |
+|----------|-------------------------------|-------------------------------------------------------------------------------|
+|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` |
+|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
+|`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` |
+|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
+|`LCS(kc)` | |Hold Left Control and Left Shift and press `kc` |
+|`LCA(kc)` | |Hold Left Control and Left Alt and press `kc` |
+|`LCG(kc)` | |Hold Left Control and Left GUI and press `kc` |
+|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` |
+|`LSG(kc)` | |Hold Left Shift and Left GUI and press `kc` |
+|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` |
+|`LCSG(kc)`| |Hold Left Control, Left Shift and Left GUI and press `kc` |
+|`LCAG(kc)`| |Hold Left Control, Left Alt and Left GUI and press `kc` |
+|`LSAG(kc)`| |Hold Left Shift, Left Alt and Left GUI and press `kc` |
+|`RCTL(kc)`| |Hold Right Control and press `kc` |
+|`RSFT(kc)`| |Hold Right Shift and press `kc` |
+|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt and press `kc` |
+|`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` |
+|`RCA(kc)` | |Hold Right Control and Right Alt and press `kc` |
+|`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` |
+|`RCG(kc)` | |Hold Right Control and Right GUI and press `kc` |
+|`RSA(kc)` | |Hold Right Shift and Right Alt and press `kc` |
+|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` |
+|`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` |
+|`RCSG(kc)`| |Hold Right Control, Right Shift and Right GUI and press `kc` |
+|`RCAG(kc)`| |Hold Right Control, Right Alt and Right GUI and press `kc` |
+|`RSAG(kc)`| |Hold Right Shift, Right Alt and Right GUI and press `kc` |
+|`MEH(kc)` | |Hold Left Control, Left Shift and Left Alt and press `kc` |
+|`HYPR(kc)`| |Hold Left Control, Left Shift, Left Alt and Left GUI and press `kc`1|
-You can also chain them, for example `LCTL(LALT(KC_DEL))` or `C(A(KC_DEL))` makes a key that sends Control+Alt+Delete with a single keypress.
+1. More information on the Hyper key can be found on [this blog post by Brett Terpstra](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/).
-# Checking Modifier State :id=checking-modifier-state
+You can also chain them, for example `LCTL(LALT(KC_DEL))`, `C(A(KC_DEL))`, or `LCA(KC_DEL)` all make a key that sends Control+Alt+Delete with a single keypress.
+
+# Checking Modifier State {#checking-modifier-state}
The current modifier state can mainly be accessed with two functions: `get_mods()` for normal modifiers and modtaps and `get_oneshot_mods()` for one-shot modifiers (unless they're held, in which case they act like normal modifier keys).
@@ -35,7 +46,7 @@ The presence of one or more specific modifiers in the current modifier state can
Thus, to give an example, `01000010` would be the internal representation of LShift+RAlt.
For more information on bitwise operators in C, click [here](https://en.wikipedia.org/wiki/Bitwise_operations_in_C) to open the Wikipedia page on the topic.
-In practice, this means that you can check whether a given modifier is active with `get_mods() & MOD_BIT(KC_