summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--book.json47
-rw-r--r--docs/README.md25
-rw-r--r--docs/_summary.md69
-rw-r--r--docs/adding_features_to_qmk.md17
-rw-r--r--docs/basic_how_keyboards_work.md58
-rw-r--r--docs/basic_keycodes.md186
-rw-r--r--docs/build_environment_setup.md30
-rw-r--r--docs/build_guide.md103
-rw-r--r--docs/build_old.md187
-rw-r--r--docs/config_options.md133
-rw-r--r--docs/custom_quantum_functions.md139
-rw-r--r--docs/cygwin_guide.md352
-rw-r--r--docs/differences_from_tmk.md7
-rw-r--r--docs/documentation_best_practices.md39
-rw-r--r--docs/eclipse.md4
-rw-r--r--docs/embedding.md64
-rw-r--r--docs/faq.md72
-rw-r--r--docs/faq_build.md63
-rw-r--r--docs/faq_keymap.md94
-rw-r--r--docs/features/README.md (renamed from docs/home.md)33
-rw-r--r--docs/git_subtree.md7
-rw-r--r--docs/glossary.md29
-rw-r--r--docs/hand_wire.md66
-rw-r--r--docs/hhkb_alt_controller.md5
-rw-r--r--docs/how_to_github.md63
-rw-r--r--docs/key_functions.md23
-rw-r--r--docs/keycodes.md219
-rw-r--r--docs/keymap_config_h_example.h8
-rw-r--r--docs/keymap_examples.md37
-rw-r--r--docs/keymap_makefile_example.mk21
-rw-r--r--docs/keymap_old.md685
-rw-r--r--docs/kiibohd.asciidoc29
-rw-r--r--docs/license_clarification.md38
-rw-r--r--docs/license_clarification_details.md1272
-rw-r--r--docs/macros.md8
-rw-r--r--docs/make_instructions.md6
-rw-r--r--docs/mbed_cortex_porting.md36
-rw-r--r--docs/memory_write_error,_use_debug_for_more_info.md21
-rw-r--r--docs/mouse_keys.md86
-rw-r--r--docs/other_projects.md62
-rw-r--r--docs/pcb_guide.md151
-rw-r--r--docs/previously_asked_questions.asciidoc14
-rw-r--r--docs/quantum_keycodes.md349
-rw-r--r--docs/report_descriptor.md1
-rw-r--r--docs/tap_dance.md8
-rw-r--r--docs/test_for_asciidoc.asciidoc17
-rw-r--r--docs/tmk_based_projects.md34
-rw-r--r--docs/tmk_own_projects.md69
-rw-r--r--docs/tmk_readme.md243
-rw-r--r--docs/understanding_qmk.md172
-rw-r--r--docs/unicode.md (renamed from docs/unicode_and_additional_language_support.md)12
-rw-r--r--docs/usb_hid.md11
-rw-r--r--docs/vagrant_guide.md18
53 files changed, 1426 insertions, 4116 deletions
diff --git a/book.json b/book.json
index ff19e2974a..887d2a6431 100644
--- a/book.json
+++ b/book.json
@@ -1,24 +1,39 @@
{
"structure": {
- "readme": "home.md",
"summary": "_summary.md"
},
- "plugins" : ["toolbar", "edit-link", "anchors"],
+ "plugins" : [
+ "anchors",
+ "edit-link",
+ "forkmegithub",
+ "git-author",
+ "hints",
+ "numbered-headings",
+ "page-toc",
+ "terminal",
+ "toolbar"
+ ],
"pluginsConfig": {
- "edit-link": {
- "base": "https://github.com/qmk/qmk_firmware/edit/master/docs",
- "label": "Suggest an edit"
- },
- "toolbar": {
- "buttons":
- [
- {
- "label": "QMK Firmware",
- "icon": "fa fa-github",
- "url": "https://github.com/qmk/qmk_firmware"
- }
- ]
- }
+ "edit-link": {
+ "base": "https://github.com/qmk/qmk_firmware/edit/master/docs",
+ "label": "Suggest an edit"
+ },
+ "forkmegithub": {
+ "color": "red",
+ "url": "https://github.com/qmk/qmk_firmware"
+ },
+ "page-toc": {
+ "selector": ".markdown-section h1, .markdown-section h2"
+ },
+ "toolbar": {
+ "buttons": [
+ {
+ "label": "QMK Firmware",
+ "icon": "fa fa-github",
+ "url": "https://github.com/qmk/qmk_firmware"
+ }
+ ]
+ }
},
"root": "./docs/"
}
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000000..06597a2b69
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,25 @@
+# Quantum Mechanical Keyboard Firmware
+
+## What is QMK Firmware? {#what-is-qmk-firmware}
+
+QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains QMK Firmware, QMK Flasher, qmk.fm, and these docs. QMK Firmware is a keyboard firmware based on the [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). It has also been ported to ARM chips using ChibiOS. You can use it to power your own hand-wired or custom keyboard PCB.
+
+## How to get it {#how-to-get-it}
+
+If you plan on contributing a keymap, keyboard, or features to QMK, the easiest thing to do is [fork the repo through Github](https://github.com/qmk/qmk_firmware#fork-destination-box), and clone your repo locally to make your changes, push them, then open a [Pull Request](https://github.com/qmk/qmk_firmware/pulls) from your fork.
+
+Otherwise, you can either download it directly ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), or clone it via git (`git@github.com:qmk/qmk_firmware.git`), or https (`https://github.com/qmk/qmk_firmware.git`).
+
+## How to compile {#how-to-compile}
+
+Before you are able to compile, you'll need to [install an environment](build_environment_setup.md) for AVR or/and ARM development. Once that is complete, you'll use the `make` command to build a keyboard and keymap with the following notation:
+
+ make planck-rev4-default
+
+This would build the `rev4` revision of the `planck` with the `default` keymap. Not all keyboards have revisions (also called subprojects), in which case, it can be omitted:
+
+ make preonic-default
+
+## How to customize {#how-to-customize}
+
+QMK has lots of [features](features/README.md) to explore, and a good deal of [reference documentation](reference/README.md) to dig through. Most features are taken advantage of by modifying your [keymap](keymap.md), and changing the [keycodes](keycodes.md).
diff --git a/docs/_summary.md b/docs/_summary.md
index c5e29cb520..8a649a3370 100644
--- a/docs/_summary.md
+++ b/docs/_summary.md
@@ -1,32 +1,45 @@
+* [Getting started](README.md)
+ * [QMK Overview](qmk_overview.md)
+ * [Build Environment Setup](build_environment_setup.md)
+ * [Vagrant Guide](vagrant_guide.md)
+ * [Make instructions](make_instructions.md)
+ * [FAQ: Creating a Keymap](faq_keymap.md)
+ * [FAQ: Compiling QMK](faq_build.md)
+ * [How to Github](how_to_github.md)
-### Getting started
-* [Introduction](home.md)
-* [QMK Overview](qmk_overview.md)
-* [Build Environment Setup](build_environment_setup.md)
-* [Make instructions](make_instructions.md)
+* [Features](features/README.md)
+ * [Layer switching](key_functions.md)
+ * [Leader Key](leader_key.md)
+ * [Macros](macros.md)
+ * [Dynamic Macros](dynamic_macros.md)
+ * [Space Cadet](space_cadet_shift.md)
+ * [Tap Dance](tap_dance.md)
+ * [Mouse keys](mouse_keys.md)
+ * [Unicode](unicode.md)
-### Making a keymap
-* [Keymap overview](keymap.md)
-* [Custom Quantum Functions](custom_quantum_functions.md)
-* [Keycodes](keycodes.md)
-* [Layer switching](key_functions.md)
-* [Leader Key](leader_key.md)
-* [Macros](macros.md)
-* [Dynamic Macros](dynamic_macros.md)
-* [Space Cadet](space_cadet_shift.md)
-* [Tap Dance](tap_dance.md)
-* [Mouse keys](mouse_keys.md)
-* [FAQ: Creating a Keymap](faq_keymap.md)
-* [FAQ: Compiling QMK](faq_build.md)
+* Reference
+ * [Glossary](glossary.md)
+ * [Keymap overview](keymap.md)
+ * [Keycodes](keycodes.md)
+ * [Basic Keycodes](basic_keycodes.md)
+ * [Quantum Keycodes](quantum_keycodes.md)
+ * [The `config.h` File](config_options.md)
+ * [Customizing Functionality](custom_quantum_functions.md)
+ * [Documentation Best Practices](documentation_best_practices.md)
+ * [Unit Testing](unit_testing.md)
-### For hardware makers and modders
-* [Adding a keyboard to QMK](adding_a_keyboard_to_qmk.md)
-* [Porting your keyboard to QMK](porting_your_keyboard_to_qmk.md)
-* [Modding your keyboard](modding_your_keyboard.md)
-* [Adding features to QMK](adding_features_to_qmk.md)
-* [ISP flashing guide](isp_flashing_guide.md)
+* For Makers and Modders
+ * [Adding a keyboard to QMK](adding_a_keyboard_to_qmk.md)
+ * [Adding features to QMK](adding_features_to_qmk.md)
+ * [Hand Wiring Guide](hand_wiring.md)
+ * [ISP flashing guide](isp_flashing_guide.md)
+ * [Modding your keyboard](modding_your_keyboard.md)
+ * [Porting your keyboard to QMK](porting_your_keyboard_to_qmk.md)
+
+* For a Deeper Understanding
+ * [How Keyboards Work](basic_how_keyboards_work.md)
+ * [Understanding QMK](understanding_qmk.md)
-### Other topics
-* [General FAQ](faq.md)
-* [Differences from TMK](differences_from_tmk.md)
-* [Using Eclipse with QMK](eclipse.md)
+* Other Topics
+ * [General FAQ](faq.md)
+ * [Using Eclipse with QMK](eclipse.md)
diff --git a/docs/adding_features_to_qmk.md b/docs/adding_features_to_qmk.md
index f6f7cba208..fb036496c7 100644
--- a/docs/adding_features_to_qmk.md
+++ b/docs/adding_features_to_qmk.md
@@ -1,7 +1,16 @@
-If you have an idea for a custom feature or extra hardware connection, we'd love to accept it into QMK! These are generally done via [pull request](https://github.com/qmk/qmk_firmware/pulls) after forking, and here are some things to keep in mind when creating one:
+# How To Add Features To QMK
-* **Disable by default** - memory is a pretty limited on most chips QMK supports, and it's important that current keymaps aren't broken, so please allow your feature to be turned **on**, rather than being turned off. If you think it should be on by default, or reduces the size of the code, [open an issue](https://github.com/qmk/qmk_firmware/issues) for everyone to discuss it!
+If you have an idea for a custom feature or extra hardware connection, we'd love to accept it into QMK!
+
+Before you put a lot of work into building your new feature you should make sure you are implementing it in the best way. You can get a basic understanding of QMK by reading [Understaning QMK](understanding_qmk.html), which will take you on a tour of the QMK program flow. From here you should talk to us to get a sense of the best way to implement your idea. There are two main ways to do this:
+
+* [Chat on Gitter](https://gitter.im/qmk/qmk_firmware)
+* [Open an Issue](https://github.com/qmk/qmk_firmware/issues/new)
+
+Once you have implemented your new feature you will generally submit a [pull request](https://github.com/qmk/qmk_firmware/pulls). Here are some things to keep in mind when creating one:
+
+* **Disabled by default** - memory is a pretty limited on most chips QMK supports, and it's important that current keymaps aren't broken, so please allow your feature to be turned **on**, rather than being turned off. If you think it should be on by default, or reduces the size of the code, please talk with us about it.
* **Compile locally before submitting** - hopefully this one is obvious, but things need to compile! Our Travis system will catch any issues, but it's generally faster for you to compile a few keyboards locally instead of waiting for the results to come back.
* **Consider subprojects and different chip-bases** - there are several keyboards that have subprojects that have allow for slightly different configurations, and even different chip-bases. Try to make a feature supported in ARM and AVR, or automatically disabled in one that doesn't work.
-* **Explain your feature** - submitting a markdown write-up of what your feature does with your PR may be needed, and it will allow a collaborator to easily copy it into the wiki for documentation (after proofing and editing).
-* **Don't refactor code** - to maintain a clear vision of how things are laid out in QMK, we try to plan out refactors in-depth, and have a collaborator make the changes. If you have an idea for refactoring, or suggestions, [open an issue](https://github.com/qmk/qmk_firmware/issues). \ No newline at end of file
+* **Explain your feature** - Document it in `docs/`, either as a new file or as part of an existing file. If you don't document it other people won't be able to benefit from your hard work.
+* **Don't refactor code** - to maintain a clear vision of how things are laid out in QMK, we try to plan out refactors in-depth, and have a collaborator make the changes. If you have an idea for refactoring, or suggestions, [open an issue](https://github.com/qmk/qmk_firmware/issues).
diff --git a/docs/basic_how_keyboards_work.md b/docs/basic_how_keyboards_work.md
index 73c3f5c5fc..3969c5680d 100644
--- a/docs/basic_how_keyboards_work.md
+++ b/docs/basic_how_keyboards_work.md
@@ -23,20 +23,14 @@ in the next sections.
Whenever you press a key, the firmware of your keyboard can register this event.
It can register when the key is pressed, held and released.
-This usually happens with a [periodic scan of key presses with a frequency around 100 hz](https://github.com/benblazak/ergodox-firmware/blob/master/references.md#typical-keyboard-information).
-This speed often is limited by the mechanical key response time, the protocol
-to transfer those key presses (here USB HID), and by the software it is used in.
+This usually happens with a periodic scan of key presses. This speed often is limited by the mechanical key response time, the protocol to transfer those key presses (here USB HID), and by the software it is used in.
## 2. What the Firmware Sends
-The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf)
-tells what a keyboard can actually send through USB to have a chance to be
-properly recognised. This includes a pre-defined list of keycodes which are
-simple numbers from `0x00` to `0xE7`. The firmware assigns a keycode to each
-key of the keyboard.
+The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) tells what a keyboard can actually send through USB to have a chance to be properly recognised. This includes a pre-defined list of scancodes which are simple numbers from `0x00` to `0xE7`. The firmware assigns a scancode to each key of the keyboard.
-The firmware does not send actually letters or characters, but only keycodes.
-Thus, by modifying the firmware, you only can modify what keycode is sent over
+The firmware does not send actually letters or characters, but only scancodes.
+Thus, by modifying the firmware, you only can modify what scancode is sent over
USB for a given key.
## 3. What the Operating System Does
@@ -45,49 +39,31 @@ Once the keycode reaches the operating system, a piece of software has to have
it match an actual character thanks to a keyboard layout. For example, if your
layout is set to QWERTY, a sample of the matching table is as follow:
-``` text
| keycode | character |
-|---------+-----------|
-| 0x04 | a/A |
-| 0x05 | b/B |
-| 0x06 | c/C |
-| ... | ... |
-| 0x1C | y/Y |
-| 0x1D | z/Z |
-| ... | ... |
-|---------+-----------|
-```
+|---------|-----------|
+| 0x04 | a/A |
+| 0x05 | b/B |
+| 0x06 | c/C |
+| ... | ... |
+| 0x1C | y/Y |
+| 0x1D | z/Z |
+| ... | ... |
## Back to the firmware
-As the layout is generally fixed (unless you create your own), the firmware can
-actually call a keycode by its layout name directly to ease things for you.
-
-This is exactly what is done here with `KC_A` actually representing `0x04` in
-QWERTY. The full list can be found in `keycode.txt`.
+As the layout is generally fixed (unless you create your own), the firmware can actually call a keycode by its layout name directly to ease things for you. This is exactly what is done here with `KC_A` actually representing `0x04` in QWERTY. The full list can be found in `keycode.txt`.
## List of Characters You Can Send
-Putting aside shortcuts, having a limited set of keycodes mapped to a limited
-layout means that **the list of characters you can assign to a given key only
-is the ones present in the layout**.
+Putting aside shortcuts, having a limited set of keycodes mapped to a limited layout means that **the list of characters you can assign to a given key only is the ones present in the layout**.
-For example, this means that if you have a QWERTY US layout, and you want to
-assign 1 key to produce `€` (euro currency symbol), you are unable to do so,
-because the QWERTY US layout does not have such mapping. You could fix that by
-using a QWERTY UK layout, or a QWERTY US International.
+For example, this means that if you have a QWERTY US layout, and you want to assign 1 key to produce `€` (euro currency symbol), you are unable to do so, because the QWERTY US layout does not have such mapping. You could fix that by using a QWERTY UK layout, or a QWERTY US International.
-You may wonder why a keyboard layout containing all of Unicode is not devised
-then? The limited number of keycode available through USB simply disallow such
-a thing.
+You may wonder why a keyboard layout containing all of Unicode is not devised then? The limited number of keycode available through USB simply disallow such a thing.
## How to (Maybe) Enter Unicode Characters
-You can have the firmware send *sequences of keys* to use the [software Unicode
-Input
-Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of
-the target operating system, thus effectively entering characters independently
-of the layout defined in the OS.
+You can have the firmware send *sequences of keys* to use the [software Unicode Input Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of the target operating system, thus effectively entering characters independently of the layout defined in the OS.
Yet, it does come with multiple disadvantages:
diff --git a/docs/basic_keycodes.md b/docs/basic_keycodes.md
new file mode 100644
index 0000000000..2be3ada155
--- /dev/null
+++ b/docs/basic_keycodes.md
@@ -0,0 +1,186 @@
+# Basic keycodes
+
+## Letters and Numbers
+
+|KC_1|KC_2|KC_3|KC_4|KC_5|KC_6|KC_7|KC_8|
+|----|----|----|----|----|----|----|----|
+|KC_9|KC_0|KC_F1|KC_F2|KC_F3|KC_F4|KC_F5|KC_F6|
+|KC_F7|KC_F8|KC_F9|KC_F10|KC_F11|KC_F12|KC_F13|KC_F14|
+|KC_F15|KC_F16|KC_F17|KC_F18|KC_F19|KC_F20|KC_F21|KC_F22|
+|KC_F23|KC_F24|KC_A|KC_B|KC_C|KC_D|KC_E|KC_F|
+|KC_G|KC_H|KC_I|KC_J|KC_K|KC_L|KC_M|KC_N|
+|KC_O|KC_P|KC_Q|KC_R|KC_S|KC_T|KC_U|KC_V|
+|KC_W|KC_X|KC_Y|KC_Z|||||
+
+## Punctuation
+
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|KC_ENTER|KC_ENT|`Return (ENTER)`|
+|KC_ESCAPE|KC_ESC|`ESCAPE`|
+|KC_BSPACE|KC_BSPC|`DELETE (Backspace)`|
+|KC_TAB||`Tab`|
+|KC_SPACE|KC_SPC|Spacebar|
+|KC_MINUS|KC_MINS|`-` and `_`|
+|KC_EQUAL|KC_EQL|`=` and `+`|
+|KC_LBRACKET|KC_LBRC|`[` and `{`|
+|KC_RBRACKET|KC_RBRC|`]` and `}`|
+|KC_BSLASH|KC_BSLS|`\` and <code>&#124;</code> |
+|KC_NONUS_HASH|KC_NUHS|Non-US `#` and `~`|
+|KC_NONUS_BSLASH|KC_NUBS|Non-US `\` and <code>&#124;</code> |
+|KC_INT1|KC_RO|JIS `\` and <code>&#124;</code> |
+|KC_INT2|KC_KANA|International216|
+|KC_INT3|KC_JYEN|Yen Symbol (`¥`)|
+|KC_SCOLON|KC_SCLN|`;` and `:`|
+|KC_QUOTE|KC_QUOT|`‘` and `“`|
+|KC_GRAVE|KC_GRV|Grave Accent and Tilde|
+|KC_COMMA|KC_COMM|`,` and `<`|
+|KC_DOT||`.` and `>`|
+|KC_SLASH|KC_SLSH|`/` and `?`|
+|KC_CAPSLOCK|KC_CAPS|Caps Lock|
+
+## Modifiers
+
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|KC_LCTRL|KC_LCTL|LeftControl|
+|KC_LSHIFT|KC_LSFT|LeftShift|
+|KC_LALT||LeftAlt|
+|KC_LGUI||Left GUI(Windows/Apple/Meta key)|
+|KC_RCTRL|KC_RCTL|RightControl|
+|KC_RSHIFT|KC_RSFT|RightShift|
+|KC_RALT||RightAlt|
+|KC_RGUI||Right GUI(Windows/Apple/Meta key)|
+|KC_LOCKING_CAPS||Locking Caps Lock|
+|KC_LOCKING_NUM||Locking Num Lock|
+|KC_LOCKING_SCROLL||Locking Scroll Lock|
+|KC_INT4|KC_HENK|JIS Henken|
+|KC_INT5|KC_MHEN|JIS Muhenken|
+
+## Commands
+
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|KC_PSCREEN|KC_PSCR|PrintScreen|
+|KC_SCROLLLOCK|KC_SLCK|Scroll Lock|
+|KC_PAUSE|KC_PAUS|Pause|
+|KC_INSERT|KC_INS|Insert|
+|KC_HOME||Home|
+|KC_PGUP||PageUp|
+|KC_DELETE|KC_DEL|Delete Forward|
+|KC_END||End|
+|KC_PGDOWN|KC_PGDN|PageDown|
+|KC_RIGHT|KC_RGHT|RightArrow|
+|KC_LEFT||LeftArrow|
+|KC_DOWN||DownArrow|
+|KC_UP||UpArrow|
+|KC_APPLICATION|KC_APP|Application|
+|KC_POWER||Power|
+|KC_EXECUTE||Execute|
+|KC_HELP||Help|
+|KC_MENU||Menu|
+|KC_SELECT||Select|
+|KC_AGAIN||Again|
+|KC_UNDO||Undo|
+|KC_CUT||Cut|
+|KC_COPY||Copy|
+|KC_PASTE||Paste|
+|KC_FIND||Find|
+|KC_ALT_ERASE||Alternate Erase|
+|KC_SYSREQ||SysReq/Attention|
+|KC_CANCEL||Cancel|
+|KC_CLEAR||Clear|
+|KC_PRIOR||Prior|
+|KC_RETURN||Return|
+|KC_SEPARATOR||Separator|
+|KC_OUT||Out|
+|KC_OPER||Oper|
+|KC_CLEAR_AGAIN||Clear/Again|
+|KC_CRSEL||CrSel/Props|
+|KC_EXSEL||ExSel|
+|KC_SYSTEM_POWER|KC_PWR|System Power Down|
+|KC_SYSTEM_SLEEP|KC_SLEP|System Sleep|
+|KC_SYSTEM_WAKE|KC_WAKE|System Wake|
+|KC_MAIL|KC_MAIL||
+|KC_CALCULATOR|KC_CALC||
+|KC_MY_COMPUTER|KC_MYCM||
+|KC_WWW_SEARCH|KC_WSCH||
+|KC_WWW_HOME|KC_WHOM||
+|KC_WWW_BACK|KC_WBAK||
+|KC_WWW_FORWARD|KC_WFWD||
+|KC_WWW_STOP|KC_WSTP||
+|KC_WWW_REFRESH|KC_WREF||
+|KC_WWW_FAVORITES|KC_WFAV||
+
+## Media Keys
+
+Windows and Mac use different key codes for next track and previous track. Make sure you choose the keycode that corresponds to your OS.
+
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|KC_STOP||Stop|
+|KC__MUTE||Mute|
+|KC__VOLUP||Volume Up|
+|KC__VOLDOWN||Volume Down|
+|KC_AUDIO_MUTE|KC_MUTE||
+|KC_AUDIO_VOL_UP|KC_VOLU||
+|KC_AUDIO_VOL_DOWN|KC_VOLD||
+|KC_MEDIA_NEXT_TRACK|KC_MNXT|Next Track (Windows)|
+|KC_MEDIA_PREV_TRACK|KC_MPRV|Previous Track (Windows)|
+|KC_MEDIA_FAST_FORWARD|KC_MFFD|Next Track (macOS)|
+|KC_MEDIA_REWIND|KC_MRWD|Previous Track (macOS)|
+|KC_MEDIA_STOP|KC_MSTP||
+|KC_MEDIA_PLAY_PAUSE|KC_MPLY||
+|KC_MEDIA_SELECT|KC_MSEL||
+
+## Numpad
+
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|KC_NUMLOCK|KC_NLCK|Keypad Num Lock and Clear|
+|KC_KP_SLASH|KC_PSLS|Keypad /|
+|KC_KP_ASTERISK|KC_PAST|Keypad *|
+|KC_KP_MINUS|KC_PMNS|Keypad -|
+|KC_KP_PLUS|KC_PPLS|Keypad +|
+|KC_KP_ENTER|KC_PENT|Keypad ENTER|
+|KC_KP_1|KC_P1|Keypad 1 and End|
+|KC_KP_2|KC_P2|Keypad 2 and Down Arrow|
+|KC_KP_3|KC_P3|Keypad 3 and PageDn|
+|KC_KP_4|KC_P4|Keypad 4 and Left Arrow|
+|KC_KP_5|KC_P5|Keypad 5|
+|KC_KP_6|KC_P6|Keypad 6 and Right Arrow|
+|KC_KP_7|KC_P7|Keypad 7 and Home|
+|KC_KP_8|KC_P8|Keypad 8 and Up Arrow|
+|KC_KP_9|KC_P9|Keypad 9 and PageUp|
+|KC_KP_0|KC_P0|Keypad 0 and Insert|
+|KC_KP_DOT|KC_PDOT|Keypad . and Delete|
+|KC_KP_EQUAL|KC_PEQL|Keypad =|
+|KC_KP_COMMA|KC_PCMM|Keypad Comma|
+|KC_KP_EQUAL_AS400||Keypad Equal Sign|
+
+## Special Keys
+
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|KC_NO||Ignore this key. (NOOP) |
+
+## Mousekey
+
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|KC_MS_UP|KC_MS_U|Mouse Cursor Up|
+|KC_MS_DOWN|KC_MS_D|Mouse Cursor Down|
+|KC_MS_LEFT|KC_MS_L|Mouse Cursor Left|
+|KC_MS_RIGHT|KC_MS_R|Mouse Cursor Right|
+|KC_MS_BTN1|KC_BTN1|Mouse Button 1|
+|KC_MS_BTN2|KC_BTN2|Mouse Button 2|
+|KC_MS_BTN3|KC_BTN3|Mouse Button 3|
+|KC_MS_BTN4|KC_BTN4|Mouse Button 4|
+|KC_MS_BTN5|KC_BTN5|Mouse Button 5|
+|KC_MS_WH_UP|KC_WH_U|Mouse Wheel Up|
+|KC_MS_WH_DOWN|KC_WH_D|Mouse Wheel Down|
+|KC_MS_WH_LEFT|KC_WH_L|Mouse Wheel Left|
+|KC_MS_WH_RIGHT|KC_WH_R|Mouse Wheel Right|
+|KC_MS_ACCEL0|KC_ACL0|Mouse Acceleration 0|
+|KC_MS_ACCEL1|KC_ACL1|Mouse Acceleration 1|
+|KC_MS_ACCEL2|KC_ACL2|Mouse Acceleration 2| \ No newline at end of file
diff --git a/docs/build_environment_setup.md b/docs/build_environment_setup.md
index 442038a58d..2282e9d131 100644
--- a/docs/build_environment_setup.md
+++ b/docs/build_environment_setup.md
@@ -1,19 +1,25 @@
-### Windows 10
+# Build Environment Setup
-#### Creators Update
+This page describes setting up the build environment for QMK. These instructions cover AVR processors (such as the atmega32u4.)
+
+<!-- FIXME: We should have ARM instructions somewhere. -->
+
+# Windows 10
+
+## Creators Update
If you have Windows 10 with Creators Update or later, you can build and flash the firmware directly. Before the Creators Update, only building was possible. If you don't have it yet or if are unsure, follow [these instructions](https://support.microsoft.com/en-us/instantanswers/d4efb316-79f0-1aa1-9ef3-dcada78f3fa0/get-the-windows-10-creators-update).
-#### Windows Subsystem for Linux
+## Windows Subsystem for Linux
In addition to the Creators Update, you need Windows 10 Subystem for Linux, so install it following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). If you already have the Windows 10 Subsystem for Linux from the Anniversary update it's recommended that you [upgrade](https://betanews.com/2017/04/14/upgrade-windows-subsystem-for-linux/) it to 16.04LTS, because some keyboards don't compile with the toolchains included in 14.04LTS. Note that you need to know what your are doing if you chose the `sudo do-release-upgrade` method.
-#### Git
+## Git
If you already have cloned the repository on your Windows file system you can ignore this section.
You will need to clone the repository to your Windows file system using the normal Git for Windows and **not** the WSL Git. So if you haven't installed Git before, [download](https://git-scm.com/download/win) and install it. Then [set it up](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup), it's important that you setup the e-mail and user name, especially if you are planning to contribute.
Once Git is installed, open the Git bash command and change the directory to where you want to clone QMK, note that you have to use forward slashes, and that your c drive is accessed like this `/c/path/to/where/you/want/to/go`. Then run `git clone --recurse-submodules https://github.com/qmk/qmk_firmware`, this will create