Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge from upstream #2

Merged
merged 121 commits into from
Oct 12, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
6037ced
rgblight support for ps2avrGB
luizribeiro May 28, 2017
964d706
Simplified ps2avrGB rgblight_set logic a bit
luizribeiro May 28, 2017
d4cd5dd
Added a build flag for using a custom rgblight driver
luizribeiro Jun 10, 2017
945f2f5
Fixed rgblight_types.h
luizribeiro Jun 10, 2017
60153e7
Always send 3 * RGBLED_NUM bytes through I2C on ps2avrGB
luizribeiro Jun 11, 2017
738b072
Fixed indentation and now using quantum keycodes for rgblight
luizribeiro Jul 4, 2017
d548626
Merge branch 'master' into ps2avrGB
luizribeiro Jul 4, 2017
f10e958
adds a default ergodox_infinity keymap
jackhumbert Sep 10, 2017
68b6de6
fix for toggle tap dance
Ptomerty Aug 24, 2017
349e001
Basic support for JM60 keyboard
mkninc Aug 25, 2017
d331e27
Use KC_GESC keycode instead of custom function
mkninc Sep 7, 2017
63cde00
Changed USB manufacturer to "JMWS"
mkninc Sep 7, 2017
a4ff8b9
Update tv44-belak keymap
belak Sep 6, 2017
7ad924b
Updates send_string functionality, adds terminal feature (#1657)
jackhumbert Sep 12, 2017
63028dd
Add jojiichan keymap
nooges Sep 13, 2017
cf00130
[planck] Adds Sean Hunter keymap(#1706)
huntse Sep 13, 2017
7da5859
updated read.md file
Sep 10, 2017
4549dcd
Add support for MF68 replacement PCB for Magicforce 68 (#1698)
nooges Sep 13, 2017
23ce0b4
Further updated ergodone readme.md (#1714)
harshitgoel96 Sep 14, 2017
a07d1f2
Some revisions to cbbrowne Planck keymap, and a preliminary xd75 keym…
cbbrowne Sep 14, 2017
17c84f2
Adapt build instructions to new keyboard name
florentc Sep 15, 2017
c02de09
Remove accidentally pasted line in MF68 readme
nooges Sep 15, 2017
19f48fa
"New" Atreus Keymap (#1717)
henxing Sep 15, 2017
5eb5b60
Add Levinson keyboard (#1723)
nooges Sep 15, 2017
ee9a20f
Cleaned, revised, and updated my keymaps to reflect new changes/defau…
khord Sep 15, 2017
afcf3a2
Update Mechmini keymap, reduce reported power consumption for iOS Cam…
krusli Sep 15, 2017
dc7d0c7
update to driver separation
jackhumbert Sep 16, 2017
5ad5c23
Merge branch 'luizribeiro-ps2avrGB'
jackhumbert Sep 16, 2017
7bcf3e2
Wording changes for the WSL install script
Sep 15, 2017
3e1f388
Adding Ergodox EZ and Atreus Dvorak 42-key layouts (#1705)
luc-vocab Sep 16, 2017
6198fed
Updated README in ergodox_infinity keyboard (#1702)
insipx Sep 16, 2017
024f045
[core] fix rgb source include
jackhumbert Sep 16, 2017
69ab37f
Got luizribeiro's ps2avrgb implementation working for Mechmini
krusli Sep 16, 2017
d281cd5
Change max brightness level for iOS
krusli Sep 16, 2017
0b7df9f
Update on/off toggle behaviour for RGB LEDs
krusli Sep 16, 2017
6cfb85f
Fixes for RGB, more colours
krusli Sep 16, 2017
a8a0245
Keymap updates
krusli Sep 16, 2017
c7ebb0f
Add RGB code (from ps2avrgb and luizribeiro/qmk_firmware)
krusli Sep 16, 2017
25aa474
Updated RGB code to use event.pressed
krusli Sep 16, 2017
2a02df8
Improve readme and PID codes for Atreus.
technomancy Sep 17, 2017
da887ea
Address issue #1713 (#1728)
khord Sep 17, 2017
8702137
Remove redundant Makefile.
shieldsd Sep 18, 2017
abba393
Added Auto Shift, tap key = normal, hold key = shifted state.
jcowgar Sep 17, 2017
d0ca713
KC_TILD should not have been listed as an auto shift key
jcowgar Sep 18, 2017
a891835
Fixed a few typos and spelling errors in auto shift feature document
jcowgar Sep 18, 2017
3173924
Adding a new layout for the planck that helps when coming from the po…
cheesemacfly Sep 18, 2017
62a02af
Fixed uk78 and turned Bootmagic off (#1725)
Rozakiin Sep 19, 2017
0c33527
convert to unix line-endings [skip ci]
qmk-bot Sep 19, 2017
32d6a8b
adds DZ60 support (#1734)
jackhumbert Sep 19, 2017
064f682
Instruct VSCode to indent using spaces, also ignore two temp files cr…
jcowgar Sep 20, 2017
b1d6005
add layout mitosis-datagrok (workman variant)
datagrok Sep 20, 2017
ea7792b
Adding my keymap with Colemak Mod-DH
tuesdayjohn Sep 19, 2017
31e78d2
Turkish planck keymap (#1675)
bbaserdem Sep 21, 2017
d77e55d
move keymap to rules.mk
jackhumbert Sep 21, 2017
4c75285
add filess
jackhumbert Sep 21, 2017
72e9939
Clone Nyquist keyboard for Viterbi
nooges Aug 15, 2017
92b74e2
Rename cloned Nyquist files to Viterbi, create temporary keymaps
nooges Aug 15, 2017
9482317
Adjust Viterbi pinout
nooges Aug 29, 2017
37b9715
Update default Viterbi layout
nooges Aug 29, 2017
8c02748
Update Viterbi keymaps
nooges Sep 19, 2017
878774b
Contribute a DZ60 keymap for 67 key configuration
yanfali Sep 20, 2017
aef36ad
add conditional for planck-mitch keymap
jackhumbert Sep 25, 2017
957e442
updated keycodes media descriptions
surlyjake Sep 25, 2017
c8d365f
platform descriptions to match master keycodes.md documentation
surlyjake Sep 25, 2017
809c925
Fixed typo of "multually" to "mutually"
burchill Sep 25, 2017
1ad941e
Add shell.nix for NixOS users
lluchs Sep 24, 2017
169d46c
Add my gherkin keymap, and update readme and config
itsaferbie Sep 24, 2017
56d7506
Removed unneeded code from keymap
itsaferbie Sep 24, 2017
a67c930
XD75RE Custom layout, and clarification in readme.md (#1754)
skewwhiffy Sep 25, 2017
5dab2ef
Update Viterbi default layout (#1753)
nooges Sep 25, 2017
a005327
Move work from pinky fingers to thumbs and index fingers (#1749)
phreed Sep 25, 2017
f1c7b81
New layout for XD60/64 (#1748)
cideM Sep 25, 2017
692c4e7
Added Obelus
jetpacktuxedo Jun 8, 2017
e2480a2
`?=` -> `=`
Sep 25, 2017
791b9cc
remove all makefiles from keyboard directories
jackhumbert Sep 27, 2017
6ec7cce
Support for KBP V60 Type R 60% keyboard (#1770)
mechmerlin Sep 29, 2017
d28fb63
updated drashna's keymaps (#1769)
drashna Sep 29, 2017
b736f25
added matrixman layout
Sep 26, 2017
5fd6826
Clueboard 60% support (#1746)
skullydazed Sep 29, 2017
f1451b4
Fix HSV Color Wheel image on RGB Light page (#1773)
kavu Sep 29, 2017
25285a1
Don't process keycodes on the slave
fredizzimo Sep 30, 2017
67eeb88
Fix dynamic macros on ChibiOS keyboards
fredizzimo Sep 30, 2017
efbc4d2
Add new planck layout (#1778)
tehwalris Oct 3, 2017
cc52ac5
code_friendly_qwerty keymap
ideasman42 Sep 30, 2017
1cd336d
ergodox: Update algernon's layout to v1.11
algernon Oct 1, 2017
03de0c8
Reference to rules.mk in tap dance docs added
Oct 2, 2017
01bf8e1
Mbsurfer Let's Split keymap updates (#1787)
coryshaw1 Oct 3, 2017
29bcffb
Edited a minor typo in feature_bootmagic.md.
Sebb767 Oct 4, 2017
0cc6245
Minor typo
khord Oct 3, 2017
e446edd
Adding my Roadkit keymap (#1798)
khord Oct 5, 2017
c206650
[cleanup] consistent 2 space indentation
ideasman42 Sep 30, 2017
e0834cf
Update Let's Split readme
khord Oct 3, 2017
ea81926
Add new 4x12 ortho layout & add credit to XD75 port (#1782)
BenKesselring Oct 6, 2017
ee13228
Generic Pointing Device (#1767)
Snipeye Oct 6, 2017
d2bbfb9
Increase one-shot timeout for planck/keymaps/dshields and remove unus…
shieldsd Sep 27, 2017
120089d
Consistent fabian layouts for amj40, let's split, planck and xd75 (#1…
fabiant7t Oct 6, 2017
18f78b6
Fix Clueboard readme links (#1816)
johu Oct 6, 2017
8d7cc11
correct layer numbers in keymaps
r2d2rogers Oct 2, 2017
357d930
correct extraneous t
r2d2rogers Oct 2, 2017
d8c62e4
Fixed typo in docs. (#1818)
lyuts Oct 7, 2017
6d2cb1d
Add my layouts (#1822)
KMontag42 Oct 10, 2017
20031ab
Contribute GH60 layout (#1820)
agarciadom Oct 10, 2017
cfd118d
Added Dichotemy Keyboard, updated docs for Pointing Device (#1817)
Snipeye Oct 10, 2017
31808df
Added ISO Hungarian friendly keymap (#1808)
Pittyolo Oct 10, 2017
d6a446b
Qwerty Code Friendly: relocate insert key
ideasman42 Oct 4, 2017
c5f847a
neue Datei: keyboards/lets_split/keymaps/DE_simple/Makefile
DerMeerkamp Sep 22, 2017
56c2487
geändert: keyboards/lets_split/keymaps/DE_simple/keymap.c
DerMeerkamp Sep 30, 2017
951285d
neue Datei: readme.md
DerMeerkamp Sep 30, 2017
2cda124
geändert: keymap.c
DerMeerkamp Sep 30, 2017
f3e61af
geändert: readme.md
DerMeerkamp Sep 30, 2017
34084b4
geändert: readme.md
DerMeerkamp Oct 3, 2017
e0e80c0
Cleanup of my keymaps (#1802)
drashna Oct 10, 2017
f88f042
Updated my Gherkin Keymap
itsaferbie Oct 1, 2017
01ac8a6
ErgoDone keyboard: Improved structure of readme and augmented it with…
marcostrauss Oct 3, 2017
b91ffba
#1792 added in waits from tmk for locking switches
Oct 2, 2017
109b2ae
Fix missing teensy path
keisuke333 Oct 2, 2017
966e266
Add option to reverse PS2 mouse axes and scrolling
Sep 22, 2017
ee8860a
add stock layout for xd75 (#1731)
Oct 10, 2017
b3ad561
newkb-atreus-xk
Oct 10, 2017
2db4ad2
Write a contributing guide. (#1827)
skullydazed Oct 11, 2017
db5afb0
Fix the presentation of the contribution guide
skullydazed Oct 11, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ util/Win_Check_Output.txt
# Let these ones be user specific, since we have so many different configurations
.vscode/launch.json
.vscode/tasks.json
.vscode/last.sql
.vscode/temp.sql
.stfolder

# ignore image files
Expand All @@ -47,8 +49,9 @@ util/Win_Check_Output.txt
*.gif

# Do not ignore MiniDox left/right hand eeprom files
!keyboards/minidox/*.eep
!keyboards/minidox/*.eep

# things travis sees
secrets.tar
id_rsa_*
/.vs
2 changes: 2 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// Place your settings in this file to overwrite default and user settings.
{
// Unofficially, QMK uses spaces for indentation
"editor.insertSpaces": true,
// Configure glob patterns for excluding files and folders.
"files.exclude": {
"**/.build": true,
Expand Down
20 changes: 19 additions & 1 deletion common_features.mk
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/fauxclicky.c
endif

ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/pointing_device.c
endif

ifeq ($(strip $(UCIS_ENABLE)), yes)
OPT_DEFS += -DUCIS_ENABLE
UNICODE_COMMON = yes
Expand All @@ -93,10 +97,14 @@ endif

ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
OPT_DEFS += -DRGBLIGHT_ENABLE
SRC += ws2812.c
SRC += $(QUANTUM_DIR)/rgblight.c
CIE1931_CURVE = yes
LED_BREATHING_TABLE = yes
ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
else
SRC += ws2812.c
endif
endif

ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
Expand All @@ -115,6 +123,11 @@ ifeq ($(strip $(PRINTING_ENABLE)), yes)
SRC += $(TMK_DIR)/protocol/serial_uart.c
endif

ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes)
OPT_DEFS += -DAUTO_SHIFT_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c
endif

ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
OPT_DEFS += $(SERIAL_DEFS)
Expand Down Expand Up @@ -153,6 +166,11 @@ ifeq ($(strip $(LED_TABLES)), yes)
SRC += $(QUANTUM_DIR)/led_tables.c
endif

ifeq ($(strip $(TERMINAL_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_terminal.c
OPT_DEFS += -DTERMINAL_ENABLE
endif

QUANTUM_SRC:= \
$(QUANTUM_DIR)/quantum.c \
$(QUANTUM_DIR)/keymap_common.c \
Expand Down
5 changes: 4 additions & 1 deletion docs/_summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
* [Install Build Tools](getting_started_build_tools.md)
* Alternative: [Vagrant Guide](getting_started_vagrant_guide.md)
* [Build/Compile instructions](getting_started_make_guide.md)
* [Contributing to QMK](contributing.md)
* [How to Use Github](getting_started_github.md)

* [FAQ](faq.md)
Expand All @@ -21,13 +22,15 @@
* [Leader Key](feature_leader_key.md)
* [Macros](macros.md)
* [Mouse keys](mouse_keys.md)
* [Pointing Device](feature_pointing_device.md)
* [PS2 Mouse](feature_ps2_mouse.md)
* [Space Cadet](space_cadet_shift.md)
* [Tap Dance](tap_dance.md)
* [Audio](feature_audio.md)
* [Thermal Printer](feature_thermal_printer.md)
* [Stenography](stenography.md)
* [Unicode](unicode.md)
* [Terminal](feature_terminal.md)

* Reference
* [Glossary](glossary.md)
Expand All @@ -50,11 +53,11 @@
* [The `config.h` File](config_options.md)
* [Customizing Functionality](custom_quantum_functions.md)
* [Documentation Best Practices](documentation_best_practices.md)
* [Documentation Templates](documentation_templates.md)
* [Unit Testing](unit_testing.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)
Expand Down
2 changes: 1 addition & 1 deletion docs/adding_a_keyboard_to_qmk.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ When developing your keyboard, keep in mind that all warnings will be treated as

## Licenses

If you're adapting your keyboard's setup from another project, but not using the same code, but sure to update the copyright header at the top of the files to show your name, it this format:
If you're adapting your keyboard's setup from another project, but not using the same code, but sure to update the copyright header at the top of the files to show your name, in this format:

Copyright 2017 Your Name <your@email.com>

Expand Down
16 changes: 0 additions & 16 deletions docs/adding_features_to_qmk.md

This file was deleted.

147 changes: 147 additions & 0 deletions docs/contributing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# How To Contribute

👍🎉 First off, thanks for taking the time to read this and contribute! 🎉👍

Third-party contributions help us grow and improve QMK. We want to make the pull request and contribution process useful and easy for both contributors and maintainers. To this end we've put together some guidelines for contributors to help your pull request be accepted without major changes.

* [Project Overview](#project-overview)
* [Coding Conventions](#coding-conventions)
* [General Guidelines](#general-guidelines)
* [What does the Code of Conduct mean for me?](#what-does-the-code-of-conduct-mean-for-me)

## I Don't Want To Read This Whole Thing I Just Have a Question!

If you'd like to ask questions about QMK you can do so on the [OLKB Subreddit](https://reddit.com/r/olkb) or on [Gitter](https://gitter.im/qmk/qmk_firmware).

Please keep these things in mind:

* It may take several hours for someone to respond to your question. Please be patient!
* Everyone involved with QMK is donating their time and energy. We don't get paid to work on or answer questions about QMK.
* Try to ask your question so it's as easy to answer as possible. If you're not sure how to do that these are some good guides:
* https://opensource.com/life/16/10/how-ask-technical-questions
* http://www.catb.org/esr/faqs/smart-questions.html

# Project Overview

QMK is largely written in C, with specific features and parts written in C++. It targets embedded processors found in keyboards, particularly AVR ([LUFA](http://www.fourwalledcubicle.com/LUFA.php)) and ARM ([ChibiOS](http://www.chibios.com)). If you are already well versed in Arduino programming you'll find a lot of the concepts and limitations familiar. Prior experience with Arduino is not required to successfully contribute to QMK.

<!-- FIXME: We should include a list of resources for learning C here. -->

# Where can I go for help?

If you need help you can [open an issue](https://github.com/qmk/qmk_firmware/issues) or [chat on gitter](http://gitter.im/QMK/qmk_firmware).

# How Do I Make a Contribution?

Never made an open source contribution before? Wondering how contributions work in QMK? Here's a quick rundown!

0. Sign up for a [GitHub](https://github.com) account.
1. Put together a keymap to contribute, [find an issue](https://github.com/qmk/qmk_firmware/issues) you are interested in addressing, or [a feature](https://github.com/qmk/qmk_firmware/issues?q=is%3Aopen+is%3Aissue+label%3Afeature) you would like to add.
2. Fork the repository associated with the issue to your GitHub account. This means that you will have a copy of the repository under `your-GitHub-username/qmk_firmware`.
3. Clone the repository to your local machine using `git clone https://github.com/github-username/repository-name.git`.
4. If you're working on a new feature consider opening an issue to talk with us about the work you're about to undertake.
5. Create a new branch for your fix using `git checkout -b branch-name-here`.
6. Make the appropriate changes for the issue you are trying to address or the feature that you want to add.
7. Use `git add insert-paths-of-changed-files-here` to add the file contents of the changed files to the "snapshot" git uses to manage the state of the project, also known as the index.
8. Use `git commit -m "Insert a short message of the changes made here"` to store the contents of the index with a descriptive message.
9. Push the changes to your repository on GitHub using `git push origin branch-name-here`.
10. Submit a pull request to [QMK Firmware](https://github.com/qmk/qmk_firmware/pull/new/master).
11. Title the pull request with a short description of the changes made and the issue or bug number associated with your change. For example, you can title an issue like so "Added more log outputting to resolve #4352".
12. In the description of the pull request explain the changes that you made, any issues you think exist with the pull request you made, and any questions you have for the maintainer. It's OK if your pull request is not perfect (no pull request is), the reviewer will be able to help you fix any problems and improve it!
13. Wait for the pull request to be reviewed by a maintainer.
14. Make changes to the pull request if the reviewing maintainer recommends them.
15. Celebrate your success after your pull request is merged!

# Coding conventions

Most of our style is pretty easy to pick up on, but right now it's not entirely consistent. You should match the style of the code surrounding your change, but if that code is inconsistent or unclear use the following guidelines:

* We indent using two spaces (soft tabs)
* We use One True Brace Style
* Opening Brace: At the end of the same line as the statement that opens the block
* Closing Brace: Lined up with the first character of the statement that opens the block
* Else If: Place the closing brace at the beginning of the line and the next opening brace at the end of the same line.
* Optional Braces: Always include optional braces.
* Good: if (condition) { return false; }
* Bad: if (condition) return false;
* We use C style comments: /* */
* Think of them as a story describing the feature
* Use them liberally to explain why particular decisions were made.
* Do not write obvious comments
* If you not sure if a comment is obvious, go ahead and include it.
* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.

# General Guidelines

We have a few different types of changes in QMK, each requiring a different level of rigor. We'd like you to keep the following guidelines in mind no matter what type of change you're making.

* Separate PR's into logical units. For example, do not submit one PR covering two separate features, instead submit a separate PR for each feature.
* Check for unnecessary whitespace with `git diff --check` before committing.
* Make sure your code change actually compiles.
* Keymaps: Make sure that `make keyboard-revision-your_new_keymap` does not return an error
* Keyboards: Make sure that `make keyboard-all` does not return any errors
* Core: Make sure that `make allkb` does not return any errors.
* Make sure commit messages are understandable on their own. You should put a short description (no more than 70 characters) on the first line, the second line should be empty, and on the 3rd and later lines you should describe your commit in detail, if required. Example:

```
Adjust the fronzlebop for the kerpleplork

The kerpleplork was intermittently failing with error code 23. The root cause was the fronzlebop setting, which causes the kerpleplork to activate every N iterations.

Limited experimentation on the devices I have available shows that 7 is high enough to avoid confusing the kerpleplork, but I'd like to get some feedback from people with ARM devices to be sure.
```

## Documentation

Documentation is one of the easiest ways to get started contributing to QMK. Finding places where the documentation is wrong or incomplete and fixing those is easy! We also very badly need someone to edit our documentation, so if you have editing skills but aren't sure where or how to jump in please [reach out for help](#where-can-i-go-for-help)!

You'll find all our documentation in the `qmk_firmware/docs` directory, or if you'd rather use a web based workflow you can click "Suggest An Edit" at the top of each page on http://docs.qmk.fm/.

## Keymaps

Most first-time QMK contributors start with their personal keymaps. We try to keep keymap standards pretty casual (keymaps, after all, reflect the personality of their creators) but we do ask that you follow these guidelines to make it easier for others to discover and learn from your keymap.

* Write a `readme.md` using [the template](https://docs.qmk.fm/documentation_templates.html#).
* All Keymap PR's are squashed, so if you care about how your commits are squashed you should do it yourself
* Do not lump features in with keymap PR's. Submit the feature first and then a second PR for the keymap.

## Keyboards

Keyboards are the raison d'être for QMK. Some keyboards are community maintained, while others are maintained by the people responsible for making a particular keyboard. The `readme.md` should tell you who maintains a particular keyboard. If you have questions relating to a particular keyboard you can [Open An Issue](https://github.com/qmk/qmk_firmware/issues) and tag the maintainer in your question.

We also ask that you follow these guidelines:

* Write a `readme.md` using [the template](https://docs.qmk.fm/documentation_templates.html#).
* Keep the number of commits reasonable or we will squash your PR
* Do not lump core features in with new keyboards. Submit the feature first and then submit a separate PR for the keyboard.

## Quantum/TMK Core

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)

Feature and Bug Fix PR's affect all keyboards. We are also in the process of restructuring QMK. For this reason it is especially important for significant changes to be discussed before implementation has happened. If you open a PR without talking to us first please be prepared to do some significant rework if your choices do not mesh well with our planned direction.

Here are some things to keep in mind when working on your feature or bug fix.

* **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 allow for slightly different configurations, and even different chip-bases. Try to make a feature supported in ARM and AVR, or automatically disabled on platforms it doesn't work on.
* **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.

We also ask that you follow these guidelines:

* Keep the number of commits reasonable or we will squash your PR
* Do not lump keyboards or keymaps in with core changes. Submit your core changes first.
* Write [Unit Tests](http://docs.qmk.fm/unit_testing.html) for your feature
* Follow the style of the file you are editing. If the style is unclear or there are mixed styles you should conform to the [coding conventions](#coding-conventions) above.

## Refactoring

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), we'd love to talk about how QMK can be improved.

# What does the Code of Conduct mean for me?

Our Code of Conduct means that you are responsible for treating everyone on the project with respect and courtesy regardless of their identity. If you are the victim of any inappropriate behavior or comments as described in our Code of Conduct, we are here for you and will do the best to ensure that the abuser is reprimanded appropriately, per our code.
Loading