diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 9a4d98b9c2..d5d8b01de5 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -1,10 +1,10 @@
# Code Of Conduct
-QMK strives to be an inclusive and tolerant community. We welcome participation from anyone regardless of age, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, political belief, race, religion, or sexual identity and orientation.
+QMK strives to be an inclusive, tolerant, and welcoming community. We encourage participation from anyone regardless of age, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, political belief, race, religion, or sexual identity and orientation.
-> “A gentle word turns away wrath, but a harsh word stirs up anger.”
+> “A gentle word turns away wrath, but a harsh word stirs up anger."
-Our users, contributors, and collaborators are expected to treat each other with respect, to assume good intentions, and to gently correct, where possible, rather than react with escalation. Some examples of behavior we will not tolerate include, but is not limited to:
+Our users, contributors, and collaborators are expected to treat each other with kindness and respect, to assume good intentions, and to gently correct, where possible, rather than react with escalation. While our goal is to be as accurate as possible, kindness and understanding are more valuable than correctness. Some examples of behavior we will not tolerate include, but is not limited to:
* The use of sexualized language or imagery
* Unwelcome advances, sexual or otherwise
diff --git a/docs/_sidebar.md b/docs/_sidebar.md
index a4216122a2..6c56bb2e51 100644
--- a/docs/_sidebar.md
+++ b/docs/_sidebar.md
@@ -44,8 +44,8 @@
* [PS/2 Mouse](feature_ps2_mouse.md)
* [RGB Lighting](feature_rgblight.md)
* [RGB Matrix](feature_rgb_matrix.md)
- * [Space Cadet Shift](feature_space_cadet.md)
- * [Space Cadet Shift Enter](feature_space_shift_cadet.md)
+ * [Space Cadet Shift](feature_space_cadet_shift.md)
+ * [Space Cadet Shift Enter](feature_space_cadet_shift_enter.md)
* [Stenography](feature_stenography.md)
* [Swap Hands](feature_swap_hands.md)
* [Tap Dance](feature_tap_dance.md)
diff --git a/docs/_summary.md b/docs/_summary.md
index a4216122a2..6c56bb2e51 100644
--- a/docs/_summary.md
+++ b/docs/_summary.md
@@ -44,8 +44,8 @@
* [PS/2 Mouse](feature_ps2_mouse.md)
* [RGB Lighting](feature_rgblight.md)
* [RGB Matrix](feature_rgb_matrix.md)
- * [Space Cadet Shift](feature_space_cadet.md)
- * [Space Cadet Shift Enter](feature_space_shift_cadet.md)
+ * [Space Cadet Shift](feature_space_cadet_shift.md)
+ * [Space Cadet Shift Enter](feature_space_cadet_shift_enter.md)
* [Stenography](feature_stenography.md)
* [Swap Hands](feature_swap_hands.md)
* [Tap Dance](feature_tap_dance.md)
diff --git a/docs/faq_keymap.md b/docs/faq_keymap.md
index 674d207aa9..447b892262 100644
--- a/docs/faq_keymap.md
+++ b/docs/faq_keymap.md
@@ -87,14 +87,14 @@ On **Xorg** you can use `compose` key, instead.
And see this for **Unicode** input.
* http://en.wikipedia.org/wiki/Unicode_input
+## `Fn` Key on macOS
-## Apple/Mac Keyboard `Fn`
-Not supported.
+Unlike most Fn keys, the one on Apple keyboards actually has its own keycode... sort of. It takes the place of the sixth keycode in a basic 6KRO HID report -- so an Apple keyboard is in fact only 5KRO.
-Apple/Mac keyboard sends keycode for Fn unlike most of other keyboards.
-I think you can send Apple Fn key using Apple venter specific Page 0xff01 and usage 0x0003. But you have to change HID Report Descriptor for this, of course.
+It is technically possible to get QMK to send this key. However, doing so requires modification of the report format to add the state of the Fn key.
+Even worse, it is not recognized unless the keyboard's VID and PID match that of a real Apple keyboard. The legal issues that official QMK support for this feature may create mean it is unlikely to happen.
-https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/AppleHIDUsageTables.h
+See [this issue](https://github.com/qmk/qmk_firmware/issues/2179) for detailed information.
## Media Control Keys in Mac OSX
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index f03a7121c4..493a99fd73 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -133,7 +133,7 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac
?> Due to the way that keycodes are structured, any modifiers specified as part of `kc`, such as `LCTL()` or `KC_LPRN`, will only activate when held instead of tapped.
-?> Additionally, if there is at least one right modifier, any other modifiers will turn into their right equivalents, so it is not possible to "mix and match" the two.
+?> Additionally, if there is at least one right-handed modifier, any other modifiers in a chain of functions will turn into their right-handed equivalents, so it is not possible to "mix and match" the two.
# One Shot Keys
diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md
index 5336e85266..6140e6a0ab 100644
--- a/docs/feature_backlight.md
+++ b/docs/feature_backlight.md
@@ -1,10 +1,20 @@
# Backlighting
-
+Many keyboards support backlit keys by way of individual LEDs placed through or underneath the keyswitches. QMK is able to control the brightness of these LEDs by switching them on and off rapidly in a certain ratio, a technique known as *Pulse Width Modulation*, or PWM. By altering the duty cycle of the PWM signal, it creates the illusion of dimming.
-## Backlight Keycodes
+The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
-These keycodes control the backlight. Most keyboards use this for single color in-switch lighting.
+## Usage
+
+Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following:
+
+```make
+BACKLIGHT_ENABLE = yes
+```
+
+You should then be able to use the keycodes below to change the backlight level.
+
+## Keycodes
|Key |Description |
|---------|------------------------------------------|
@@ -16,24 +26,28 @@ These keycodes control the backlight. Most keyboards use this for single color i
|`BL_DEC` |Decrease the backlight level |
|`BL_BRTG`|Toggle backlight breathing |
-Note that for backlight breathing, you need to have `#define BACKLIGHT_BREATHING` in your config.h.
+## Caveats
+
+This feature is distinct from both the [RGB underglow](feature_rgblight.md) and [RGB matrix](feature_rgb_matrix.md) features as it usually allows for only a single colour per switch, though you can obviously use multiple different coloured LEDs on a keyboard.
+
+Hardware PWM is only supported on certain pins of the MCU, so if the backlighting is not connected to one of them, a software implementation will be used, and backlight breathing will not be available. Currently the supported pins are `B5`, `B6`, `B7`, and `C6`.
+
+## Configuration
-## Configuration Options in `config.h`
+To change the behaviour of the backlighting, `#define` these in your `config.h`:
-* `BACKLIGHT_PIN B7` defines the pin that controlls the LEDs. Unless you design your own keyboard, you don't need to set this.
-* `BACKLIGHT_LEVELS 3` defines the number of brightness levels (maximum 15 excluding off).
-* `BACKLIGHT_BREATHING` if defined, enables backlight breathing. Note that this is only available if `BACKLIGHT_PIN` is B5, B6 or B7.
-* `BREATHING_PERIOD 6` defines the length of one backlight "breath" in seconds.
+|Define |Default |Description |
+|---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
+|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
+|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 15 excluding off) |
+|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if hardware PWM is used |
+|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
-## Notes on Implementation
+## Hardware PWM Implementation
-To change the brightness when using pins B5, B6 or B7, the PWM (Pulse Width Modulation) functionality of the on-chip timer is used.
-The timer is a counter that counts up to a certain TOP value (`0xFFFF` set in ICR1) before resetting to 0.
-We also set an OCR1x register.
-When the counter reaches the value stored in that register, the PWM pin drops to low.
-The PWM pin is pulled high again when the counter resets to 0.
-Therefore, OCR1x basically sets the duty cycle of the LEDs and as such the brightness where `0` is the darkest and `0xFFFF` the brightest setting.
+When using the supported pins for backlighting, QMK will use a hardware timer configured to output a PWM signal. This timer will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
+The desired brightness is calculated and stored in the `OCRxx` register. When the counter reaches this value, the backlight pin will go low, and is pulled high again when the counter resets.
+In this way `OCRxx` essentially controls the duty cycle of the LEDs, and thus the brightness, where `0x0000` is completely off and `0xFFFF` is completely on.
-To enable the breathing effect, we register an interrupt handler to be called whenever the counter resets (with `ISR(TIMER1_OVF_vect)`).
-In this handler, which gets called roughly 244 times per second, we compute the desired brightness using a precomputed brightness curve.
-To disable breathing, we can just disable the respective interrupt vector and reset the brightness to the desired level.
+The breathing effect is achieved by registering an interrupt handler for `TIMER1_OVF_vect` that is called whenever the counter resets, roughly 244 times per second.
+In this handler, the value of an incrementing counter is mapped onto a precomputed brightness curve. To turn off breathing, the interrupt handler is simply disabled, and the brightness reset to the level stored in EEPROM.
diff --git a/docs/feature_bootmagic.md b/docs/feature_bootmagic.md
index beef6c467e..d6915d3559 100644
--- a/docs/feature_bootmagic.md
+++ b/docs/feature_bootmagic.md
@@ -1,89 +1,100 @@
-# Bootmagic and Magic Keycodes
+# Bootmagic
-There are 3 separate but related features that allow you to change the behavior of your keyboard without reflashing. While each of them have similar functionality you access that functionality in different ways depending on how your keyboard is configured.
+There are three separate but related features that allow you to change the behavior of your keyboard without reflashing. While each of them have similar functionality, it is accessed in different ways depending on how your keyboard is configured.
-Bootmagic is a system for configuring your keyboard while it initializes. To trigger a Bootmagic command you hold down the bootmagic key (`KC_SPACE` on most keyboards) and one or more command keys.
+**Bootmagic** is a system for configuring your keyboard while it initializes. To trigger a Bootmagic command, hold down the Bootmagic key and one or more command keys.
-Bootmagic Keycodes allow you to access the Bootmagic functionality after your keyboard has initialized. To use Bootmagic Keycodes you assign keycodes starting with `MAGIC_`, much in the same way you define any other key.
+**Bootmagic Keycodes** are prefixed with `MAGIC_`, and allow you to access the Bootmagic functionality *after* your keyboard has initialized. To use the keycodes, assign them to your keymap as you would any other keycode.
-Command is a feature that allows you to control different aspects of your keyboard. Command used to be called Magic. Command is typically accessed by holding Left and Right Shift at the same time, although that can be customized. While it shares some functionality with Bootmagic it also allows you to access functionality that Bootmagic does not. For more information see the [Command](feature_command.md) documentation page.
+**Command**, formerly known as **Magic**, is another feature that allows you to control different aspects of your keyboard. While it shares some functionality with Bootmagic, it also allows you to do things that Bootmagic does not, such as printing version information to the console. For more information, see [Command](feature_command.md).
-## Enabling Bootmagic
+On some keyboards Bootmagic is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk` with:
-Bootmagic is disabled by default. To use Bootmagic you need to enable it in your `rules.mk` file:
+```make
+BOOTMAGIC_ENABLE = yes
+```
- BOOTMAGIC_ENABLE = yes
+## Hotkeys
-## Bootmagic Hotkeys and Keycodes
+Hold down the Bootmagic key (Space by default) and the desired hotkey while plugging in your keyboard. For example, holding Space+`B` should cause it to enter the bootloader.
-This table describes the default Hotkeys for Bootmagic and the Keycodes for Magic. These may be overriden at the Keyboard or Keymap level. Some functionality is not available in both methods.
+|Hotkey |Description |
+|------------------|---------------------------------------------|
+|Escape |Ignore Bootmagic configuration in EEPROM |
+|`B` |Enter the bootloader |
+|`D` |Toggle debugging over serial |
+|`X` |Toggle key matrix debugging |
+|`K` |Toggle keyboard debugging |
+|`M` |Toggle mouse debugging |
+|Backspace |Clear the EEPROM |
+|Caps Lock |Toggle treating Caps Lock as Left Control |
+|Left Control |Toggle swapping Caps Lock and Left Control |
+|Left Alt |Toggle swapping Left Alt and Left GUI |
+|Right Alt |Toggle swapping Right Alt and Right GUI |
+|Left GUI |Toggle the GUI keys (useful when gaming) |
+|`
|Toggle swapping `
and Escape|
+|`\` |Toggle swapping `\` and Backspace |
+|`N` |Toggle N-Key Rollover (NKRO) |
+|`0` |Make layer 0 the default layer |
+|`1` |Make layer 1 the default layer |
+|`2` |Make layer 2 the default layer |
+|`3` |Make layer 3 the default layer |
+|`4` |Make layer 4 the default layer |
+|`5` |Make layer 5 the default layer |
+|`6` |Make layer 6 the default layer |
+|`7` |Make layer 7 the default layer |
-To use the Hotkey hold down `BOOTMAGIC_KEY_SALT` (`KC_SPACE` by default) and the Hotkey while plugging in your keyboard. To use the Keycode assign that keycode to a layer. For example, if you hold down Space+B while plugging in most keyboards, you will enter bootloader mode.
+## Keycodes
-|Hotkey |Keycode |Description |
-|-----------|----------------------------------|--------------------------------------------------------|
-|`ESC` | |Skip bootmagic and saved eeprom configuration |
-|`B` |`RESET` |Enter bootloader instead of firmware |
-|`D` |`DEBUG` |Enable debugging (writes messages to serial) |
-|`X` | |Enable matrix debugging |
-|`K` | |Enable keyboard debugging |
-|`M` | |Enable mouse debugging |
-|`BACKSPACE`| |Clear the saved settings from flash |
-|`CAPSLOCK` |`MAGIC_CAPSLOCK_TO_CONTROL` |Treat `Capslock` as `Control` |
-| |`MAGIC_UNCAPSLOCK_TO_CONTROL` |Stop treating CapsLock as Control |
-|`LCTRL` |`MAGIC_SWAP_CONTROL_CAPSLOCK` |Swap `Control` and `Capslock` |
-| |`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |Unswap Left Control and Caps Lock |
-| |`MAGIC_SWAP_ALT_GUI` |Swap Alt and GUI on both sides |
-| |`MAGIC_UNSWAP_ALT_GUI` |Unswap Left Alt and GUI |
-|`LALT` |`MAGIC_SWAP_LALT_LGUI` |Swap Left `Alt` and `GUI`, e.g. for OSX Opt and Cmd |
-| |`MAGIC_UNSWAP_LALT_LGUI` |Unswap Left Alt and GUI |
-|`RALT` |`MAGIC_SWAP_RALT_RGUI` |Swap Right `Alt` and `GUI` |
-| |`MAGIC_UNSWAP_RALT_RGUI` |Unswap Right Alt and GUI |
-|`LGUI` |`MAGIC_NO_GUI` |Disable GUI key - e.g. disable Windows key during gaming|
-| |`MAGIC_UNNO_GUI` |Enable the GUI key |
-|`GRAVE` |`MAGIC_SWAP_GRAVE_ESC` |Swap `\`~` and `ESC` |
-| |`MAGIC_UNSWAP_GRAVE_ESC` |Unswap `\`~` and Escape |
-|`BACKSLASH`|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |Swap Blackslash and Backspace |
-| |`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|Unswap Backslash and Backspace |
-|`N` |`MAGIC_HOST_NKRO` |Force N-Key Rollover (NKRO) on |
-| |`MAGIC_UNHOST_NKRO` |Force NKRO off |
-| |`MAGIC_TOGGLE_NKRO` |Toggle NKRO on or off |
-|`0` |`DF(0)` |Make Layer 0 the default layer at bootup |
-|`1` |`DF(1)` |Make Layer 1 the default layer at bootup |
-|`2` |`DF(2)` |Make Layer 2 the default layer at bootup |
-|`3` |`DF(3)` |Make Layer 3 the default layer at bootup |
-|`4` |`DF(4)` |Make Layer 4 the default layer at bootup |
-|`5` |`DF(5)` |Make Layer 5 the default layer at bootup |
-|`6` |`DF(6)` |Make Layer 6 the default layer at bootup |
-|`7` |`DF(7)` |Make Layer 7 the default layer at bootup |
+|Keycode |Aliases |Description |
+|----------------------------------|---------|------------------------------------------|
+|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Left Control |
+|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Left Control |
+|`MAGIC_HOST_NKRO` | |Force N-Key Rollover (NKRO) on |
+|`MAGIC_UNHOST_NKRO` | |Force NKRO off |
+|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off |
+|`MAGIC_NO_GUI` | |Disable the GUI keys (useful when gaming) |
+|`MAGIC_UNNO_GUI` | |Enable the GUI keys |
+|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides (for macOS)|
+|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Left Alt and Left GUI |
+|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace |
+|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace |
+|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Left Control and Caps Lock |
+|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Left Control and Caps Lock |
+|`MAGIC_SWAP_GRAVE_ESC` | |Swap `
and Escape |
+|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap `
and Escape |
+|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and Left GUI |
+|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and Left GUI |
+|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and Right GUI |
+|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and Right GUI |
-## Bootmagic Configuration
+## Configuration
-When setting up your keyboard and/or keymap there are a number of `#define`s that control the behavior of Bootmagic. To use these put them in your `config.h`, either at the keyboard or keymap level.
+If you would like to change the hotkey assignments for Bootmagic, `#define` these in your `config.h` at either the keyboard or keymap level.
-|Define |Default|Description |
-|-------|-------|------------|
-|`BOOTMAGIC_KEY_SALT`|`KC_SPACE`|The key to hold down to trigger Bootmagic during initialization.|
-|`BOOTMAGIC_KEY_SKIP`|`KC_ESC`|The Hotkey to ignore saved eeprom configuration.|
-|`BOOTMAGIC_KEY_EEPROM_CLEAR`|`KC_BSPACE`|The hotkey to clear the saved eeprom configuration.|
-|`BOOTMAGIC_KEY_BOOTLOADER`|`KC_B`|The hotkey to enter the bootloader.|
-|`BOOTMAGIC_KEY_DEBUG_ENABLE`|`KC_D`|The hotkey to enable debug mode.|
-|`BOOTMAGIC_KEY_DEBUG_MATRIX`|`KC_X`|The hotkey to enable matrix debugging mode.|
-|`BOOTMAGIC_KEY_DEBUG_KEYBOARD`|`KC_K`|The hotkey to enable keyboard debugging mode.|
-|`BOOTMAGIC_KEY_DEBUG_MOUSE`|`KC_M`|The hotkey to enable mouse debugging mode.|
-|`BOOTMAGIC_KEY_SWAP_CONTROL_CAPSLOCK`|`KC_LCTRL`||
-|`BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL`|`KC_CAPSLOCK`||
-|`BOOTMAGIC_KEY_SWAP_LALT_LGUI`|`KC_LALT`||
-|`BOOTMAGIC_KEY_SWAP_RALT_RGUI`|`KC_RALT`||
-|`BOOTMAGIC_KEY_NO_GUI`|`KC_LGUI`||
-|`BOOTMAGIC_KEY_SWAP_GRAVE_ESC`|`KC_GRAVE`||
-|`BOOTMAGIC_KEY_SWAP_BACKSLASH_BACKSPACE`|`KC_BSLASH`||
-|`BOOTMAGIC_HOST_NKRO`|`KC_N`||
-|`BOOTMAGIC_KEY_DEFAULT_LAYER_0`|`KC_0`|Hotkey to set Layer 0 as the default layer|
-|`BOOTMAGIC_KEY_DEFAULT_LAYER_1`|`KC_1`|Hotkey to set Layer 1 as the default layer|
-|`BOOTMAGIC_KEY_DEFAULT_LAYER_2`|`KC_2`|Hotkey to set Layer 2 as the default layer|
-|`BOOTMAGIC_KEY_DEFAULT_LAYER_3`|`KC_3`|Hotkey to set Layer 3 as the default layer|
-|`BOOTMAGIC_KEY_DEFAULT_LAYER_4`|`KC_4`|Hotkey to set Layer 4 as the default layer|
-|`BOOTMAGIC_KEY_DEFAULT_LAYER_5`|`KC_5`|Hotkey to set Layer 5 as the default layer|
-|`BOOTMAGIC_KEY_DEFAULT_LAYER_6`|`KC_6`|Hotkey to set Layer 6 as the default layer|
-|`BOOTMAGIC_KEY_DEFAULT_LAYER_7`|`KC_7`|Hotkey to set Layer 7 as the default layer|
+|Define |Default |Description |
+|----------------------------------------|-------------|---------------------------------------------------|
+|`BOOTMAGIC_KEY_SALT` |`KC_SPACE` |The Bootmagic key |
+|`BOOTMAGIC_KEY_SKIP` |`KC_ESC` |Ignore Bootmagic configuration in EEPROM |
+|`BOOTMAGIC_KEY_EEPROM_CLEAR` |`KC_BSPACE` |Clear the EEPROM configuration |
+|`BOOTMAGIC_KEY_BOOTLOADER` |`KC_B` |Enter the bootloader |
+|`BOOTMAGIC_KEY_DEBUG_ENABLE` |`KC_D` |Toggle debugging over serial |
+|`BOOTMAGIC_KEY_DEBUG_MATRIX` |`KC_X` |Toggle matrix debugging |
+|`BOOTMAGIC_KEY_DEBUG_KEYBOARD` |`KC_K` |Toggle keyboard debugging |
+|`BOOTMAGIC_KEY_DEBUG_MOUSE` |`KC_M` |Toggle mouse debugging |
+|`BOOTMAGIC_KEY_SWAP_CONTROL_CAPSLOCK` |`KC_LCTRL` |Swap Left Control and Caps Lock |
+|`BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL` |`KC_CAPSLOCK`|Toggle treating Caps Lock as Left Control |
+|`BOOTMAGIC_KEY_SWAP_LALT_LGUI` |`KC_LALT` |Toggle swapping Left Alt and Left GUI (for macOS) |
+|`BOOTMAGIC_KEY_SWAP_RALT_RGUI` |`KC_RALT` |Toggle swapping Right Alt and Right GUI (for macOS)|
+|`BOOTMAGIC_KEY_NO_GUI` |`KC_LGUI` |Toggle the GUI keys (useful when gaming) |
+|`BOOTMAGIC_KEY_SWAP_GRAVE_ESC` |`KC_GRAVE` |Toggle swapping `
and Escape |
+|`BOOTMAGIC_KEY_SWAP_BACKSLASH_BACKSPACE`|`KC_BSLASH` |Toggle swapping `\` and Backspace |
+|`BOOTMAGIC_HOST_NKRO` |`KC_N` |Toggle N-Key Rollover (NKRO) |
+|`BOOTMAGIC_KEY_DEFAULT_LAYER_0` |`KC_0` |Make layer 0 the default layer |
+|`BOOTMAGIC_KEY_DEFAULT_LAYER_1` |`KC_1` |Make layer 1 the default layer |
+|`BOOTMAGIC_KEY_DEFAULT_LAYER_2` |`KC_2` |Make layer 2 the default layer |
+|`BOOTMAGIC_KEY_DEFAULT_LAYER_3` |`KC_3` |Make layer 3 the default layer |
+|`BOOTMAGIC_KEY_DEFAULT_LAYER_4` |`KC_4` |Make layer 4 the default layer |
+|`BOOTMAGIC_KEY_DEFAULT_LAYER_5` |`KC_5` |Make layer 5 the default layer |
+|`BOOTMAGIC_KEY_DEFAULT_LAYER_6` |`KC_6` |Make layer 6 the default layer |
+|`BOOTMAGIC_KEY_DEFAULT_LAYER_7` |`KC_7` |Make layer 7 the default layer |
diff --git a/docs/feature_command.md b/docs/feature_command.md
index ad987aaf60..ca2ecce0da 100644
--- a/docs/feature_command.md
+++ b/docs/feature_command.md
@@ -1,52 +1,50 @@
-# Command (Formerly known as Magic)
+# Command
-Command is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic](feature_bootmagic.md). There is a lot of overlap between this functionality and the [Bootmagic Keycodes](feature_bootmagic.md). Whenever possible we encourage you to use that functionality instead of Command.
+Command, formerly known as Magic, is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic](feature_bootmagic.md). There is a lot of overlap between this functionality and the [Bootmagic Keycodes](feature_bootmagic.md#keycodes). Wherever possible we encourage you to use that feature instead of Command.
-## Enabling Command
+On some keyboards Command is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk`:
-By default Command is disabled. You can enable it in your `rules.mk` file:
-
- COMMAND_ENABLE = yes
+```make
+COMMAND_ENABLE = yes
+```
## Usage
-To use Command you hold down the key combination defined by `IS_COMMAND`. By default that combination is both shift keys. While holding the key combination press the key corresponding to the command you want.
-
-For example, to write the current QMK version to the QMK Toolbox console, you can press `Left Shift`+`Right Shift`+`V`.
+To use Command, hold down the key combination defined by the `IS_COMMAND()` macro. By default this is Left Shift+Right Shift. Then, press the key corresponding to the command you want. For example, to output the current QMK version to the QMK Toolbox console, press Left Shift+Right Shift+`V`.
## Configuration
-The following values can be defined in `config.h` to control the behavior of Command.
-
-|Define |Default | Description |
-|-------|--------|-------------|
-|`IS_COMMAND()` |`(keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))`|Key combination to activate Command|
-|`MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS` |`true` |Do layer switching with Function row|
-|`MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS` |`true` |Do layer switching with number keys.|
-|`MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM`|`false` |Do layer switching with custom keys (`MAGIC_KEY_LAYER0..9` below.)|
-|`MAGIC_KEY_HELP1` |`H` |Show help.|
-|`MAGIC_KEY_HELP2` |`SLASH` |Show help.|
-|`MAGIC_KEY_DEBUG` |`D` |Turn on debug mode.|
-|`MAGIC_KEY_DEBUG_MATRIX` |`X` |Turn on matrix debugging.|
-|`MAGIC_KEY_DEBUG_KBD` |`K` |Turn on keyboard debugging.|
-|`MAGIC_KEY_DEBUG_MOUSE` |`M` |Turn on mouse debugging.|
-|`MAGIC_KEY_VERSION` |`V` |Write the QMK version to the console|
-|`MAGIC_KEY_STATUS` |`S` |Show the current keyboard status|
-|`MAGIC_KEY_CONSOLE` |`C` |Enable the Command Console|
-|`MAGIC_KEY_LAYER0_ALT1` |`ESC` |Alternate access to layer 0|
-|`MAGIC_KEY_LAYER0_ALT2` |`GRAVE` |Alternate access to layer 0|
-|`MAGIC_KEY_LAYER0` |`0` |Change default layer to 0|
-|`MAGIC_KEY_LAYER1` |`1` |Change default layer to 1|
-|`MAGIC_KEY_LAYER2` |`2` |Change default layer to 2|
-|`MAGIC_KEY_LAYER3` |`3` |Change default layer to 3|
-|`MAGIC_KEY_LAYER4` |`4` |Change default layer to 4|
-|`MAGIC_KEY_LAYER5` |`5` |Change default layer to 5|
-|`MAGIC_KEY_LAYER6` |`6` |Change default layer to 6|
-|`MAGIC_KEY_LAYER7` |`7` |Change default layer to 7|
-|`MAGIC_KEY_LAYER8` |`8` |Change default layer to 8|
-|`MAGIC_KEY_LAYER9` |`9` |Change default layer to 9|
-|`MAGIC_KEY_BOOTLOADER` |`PAUSE` |Exit keyboard and enter bootloader|
-|`MAGIC_KEY_LOCK` |`CAPS` |Lock the keyboard so nothing can be typed|
-|`MAGIC_KEY_EEPROM` |`E` |Erase EEPROM settings|
-|`MAGIC_KEY_NKRO` |`N` |Toggle NKRO on/off|
-|`MAGIC_KEY_SLEEP_LED` |`Z` |Toggle LED when computer is sleeping on/off|
+If you would like to change the key assignments for Command, `#define` these in your `config.h` at either the keyboard or keymap level. All keycode assignments here must omit the `KC_` prefix.
+
+|Define |Default |Description |
+|------------------------------------|--------------------------------------------------------------------------------------|------------------------------------------------|
+|`IS_COMMAND()` |(keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
|The key combination to activate Command |
+|`MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS` |`true` |Set default layer with the Function row |
+|`MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS` |`true` |Set default layer with the number keys |
+|`MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM`|`false` |Set default layer with `MAGIC_KEY_LAYER0..9` |
+|`MAGIC_KEY_DEBUG` |`D` |Toggle debugging over serial |
+|`MAGIC_KEY_DEBUG_MATRIX` |`X` |Toggle key matrix debugging |
+|`MAGIC_KEY_DEBUG_KBD` |`K` |Toggle keyboard debugging |
+|`MAGIC_KEY_DEBUG_MOUSE` |`M` |Toggle mouse debugging |
+|`MAGIC_KEY_CONSOLE` |`C` |Enable the Command console |
+|`MAGIC_KEY_VERSION` |`V` |Print the running QMK version to the console |
+|`MAGIC_KEY_STATUS` |`S` |Print the current keyboard status to the console|
+|`MAGIC_KEY_HELP1` |`H` |Print Command help to the console |
+|`MAGIC_KEY_HELP2` |`SLASH` |Print Command help to the console (alternate) |
+|`MAGIC_KEY_LAYER0` |`0` |Make layer 0 the default layer |
+|`MAGIC_KEY_LAYER1` |`1` |Make layer 1 the default layer |
+|`MAGIC_KEY_LAYER2` |`2` |Make layer 2 the default layer |
+|`MAGIC_KEY_LAYER3` |`3` |Make layer 3 the default layer |
+|`MAGIC_KEY_LAYER4` |`4` |Make layer 4 the default layer |
+|`MAGIC_KEY_LAYER5` |`5` |Make layer 5 the default layer |
+|`MAGIC_KEY_LAYER6` |`6` |Make layer 6 the default layer |
+|`MAGIC_KEY_LAYER7` |`7` |Make layer 7 the default layer |
+|`MAGIC_KEY_LAYER8` |`8` |Make layer 8 the default layer |
+|`MAGIC_KEY_LAYER9` |`9` |Make layer 9 the default layer |
+|`MAGIC_KEY_LAYER0_ALT1` |`ESC` |Make layer 0 the default layer (alternate) |
+|`MAGIC_KEY_LAYER0_ALT2` |`GRAVE` |Make layer 0 the default layer (alternate) |
+|`MAGIC_KEY_BOOTLOADER` |`PAUSE` |Enter the bootloader |
+|`MAGIC_KEY_LOCK` |`CAPS` |Lock the keyboard so nothing can be typed |
+|`MAGIC_KEY_EEPROM` |`E` |Clear the EEPROM |
+|`MAGIC_KEY_NKRO` |`N` |Toggle N-Key Rollover (NKRO) |
+|`MAGIC_KEY_SLEEP_LED` |`Z` |Toggle LED when computer is sleeping |
diff --git a/docs/feature_dynamic_macros.md b/docs/feature_dynamic_macros.md
index 9803557e9e..0d11a28641 100644
--- a/docs/feature_dynamic_macros.md
+++ b/docs/feature_dynamic_macros.md
@@ -4,10 +4,10 @@ QMK supports temporary macros created on the fly. We call these Dynamic Macros.
You can store one or two macros and they may have a combined total of 128 keypresses. You can increase this size at the cost of RAM.
-To enable them, first add a new element to the `planck_keycodes` enum — `DYNAMIC_MACRO_RANGE`:
+To enable them, first add a new element to the end of your `keycodes` enum — `DYNAMIC_MACRO_RANGE`:
```c
-enum planck_keycodes {
+enum keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
DVORAK,
@@ -20,7 +20,7 @@ enum planck_keycodes {
};
```
-It must be the last element because `dynamic_macros.h` will add some more keycodes after it.
+Your `keycodes` enum may have a slightly different name. You must add `DYNAMIC_MACRO_RANGE` as the last element because `dynamic_macros.h` will add some more keycodes after it.
Below it, include the `dynamic_macro.h` header:
diff --git a/docs/feature_grave_esc.md b/docs/feature_grave_esc.md
index a8e45f3a9a..c6fa160221 100644
--- a/docs/feature_grave_esc.md
+++ b/docs/feature_grave_esc.md
@@ -1,17 +1,24 @@
# Grave Escape
-Grave Escape is a feature that allows you to share the grave key (`
and `~`) on the same key as Escape. When `KC_GESC` is used it will act as `KC_ESC`, unless Shift or GUI is pressed, in which case it will act as `KC_GRAVE`.
+If you're using a 60% keyboard, or any other layout with no F-row, you will have noticed that there is no dedicated Escape key. Grave Escape is a feature that allows you to share the grave key (`
and `~`) with Escape.
+## Usage
+
+Replace the `KC_GRAVE` key in your keymap (usually to the left of the `1` key) with `KC_GESC`. When pressed it will behave like `KC_ESC`, but with Shift or GUI held it will send `KC_GRAVE`.
+
+## Keycodes
|Key |Aliases |Description |
|---------|-----------|------------------------------------------------------------------|
|`KC_GESC`|`GRAVE_ESC`|Escape when pressed, `
when Shift or GUI are held|
-There are several possible key combinations this will break, among them Ctrl+Shift+Esc on Windows and Cmd+Opt+Esc on macOS. You can use these options in your `config.h` to work around this:
+## Configuration
+
+There are several possible key combinations this will break, among them Control+Shift+Escape on Windows and Command+Option+Escape on macOS. To work around this, you can `#define` these options in your `config.h`:
-| Option | Description |
-|--------|-------------|
-| `GRAVE_ESC_ALT_OVERRIDE` | Always send Escape if Alt is pressed. |
-| `GRAVE_ESC_CTRL_OVERRIDE` | Always send Escape if Ctrl is pressed. |
-| `GRAVE_ESC_GUI_OVERRIDE` | Always send Escape if GUI is pressed. |
-| `GRAVE_ESC_SHIFT_OVERRIDE` | Always send Escape if SHIFT is pressed. |
+|Define |Description |
+|--------------------------|-----------------------------------------|
+|`GRAVE_ESC_ALT_OVERRIDE` |Always send Escape if Alt is pressed |
+|`GRAVE_ESC_CTRL_OVERRIDE` |Always send Escape if Control is pressed |
+|`GRAVE_ESC_GUI_OVERRIDE` |Always send Escape if GUI is pressed |
+|`GRAVE_ESC_SHIFT_OVERRIDE`|Always send Escape if Shift is pressed |
diff --git a/docs/feature_key_lock.md b/docs/feature_key_lock.md
index 225e7136ff..718d9c5bd1 100644
--- a/docs/feature_key_lock.md
+++ b/docs/feature_key_lock.md
@@ -1,11 +1,22 @@
-## Key Lock: Holding Down Keys for You
+# Key Lock
-Sometimes, you need to hold down a specific key for a long period of time. Whether this is while typing in ALL CAPS, or playing a video game that hasn't implemented auto-run, Key Lock is here to help. Key Lock adds a new keycode, `KC_LOCK`, that will hold down the next key you hit for you. The key is released when you hit it again. Here's an example: let's say you need to type in all caps for a few sentences. You hit KC_LOCK, and then shift. Now, shift will be considered held until you hit it again. You can think of key lock as caps lock, but supercharged.
+Sometimes you may find yourself needing to hold down a specific key for a long period of time. Key Lock holds down the next key you press for you. Press it again, and it will be released.
-Here's how to use it:
+Let's say you need to type in ALL CAPS for a few sentences. Hit `KC_LOCK`, and then Shift. Now, Shift will be considered held until you tap it again. You can think of Key Lock as Caps Lock, but supercharged.
-1. Pick a key on your keyboard. This will be the key lock key. Assign it the keycode `KC_LOCK`. This will be a single-action key: you won't be able to use it for anything else.
-2. Enable key lock by including `KEY_LOCK_ENABLE = yes` in your Makefile.
-3. That's it!
+## Usage
-Important: switching layers does not cancel the key lock. Additionally, key lock is only able to hold standard action keys and One Shot modifier keys (for example, if you have your shift defined as `OSM(KC_LSFT)`; see [One Shot Keys](quantum_keycodes.md#one-shot-keys)). This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as KC_LPRN. If it's in the [Basic Keycodes](keycodes_basic.md) list, it can be held. If it's not, then it can't be.
+First, enable Key Lock by setting `KEY_LOCK_ENABLE = yes` in your `rules.mk`. Then pick a key in your keymap and assign it the keycode `KC_LOCK`.
+
+## Keycodes
+
+|Keycode |Description |
+|---------|--------------------------------------------------------------|
+|`KC_LOCK`|Hold down the next key pressed, until the key is pressed again|
+
+## Caveats
+
+Key Lock is only able to hold standard action keys and [One Shot modifier](quantum_keycodes.md#one-shot-keys) keys (for example, if you have your Shift defined as `OSM(KC_LSFT)`).
+This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as `KC_LPRN`. If it's in the [Basic Keycodes](keycodes_basic.md) list, it can be held.
+
+Switching layers will not cancel the Key Lock.
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index cb7aa666cf..ed33c7ea4e 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -80,7 +80,7 @@ All RGB keycodes are currently shared with the RGBLIGHT system:
These are the effects that are currently available:
enum rgb_matrix_effects {
- RGB_MATRIX_SOLID_COLOR = 1,
+ RGB_MATRIX_SOLID_COLOR = 1,
RGB_MATRIX_ALPHAS_MODS,
RGB_MATRIX_DUAL_BEACON,
RGB_MATRIX_GRADIENT_UP_DOWN,
@@ -93,7 +93,7 @@ These are the effects that are currently available:
RGB_MATRIX_RAINBOW_MOVING_CHEVRON,
RGB_MATRIX_JELLYBEAN_RAINDROPS,
#ifdef RGB_MATRIX_KEYPRESSES
- RGB_MATRIX_SOLID_REACTIVE,
+ RGB_MATRIX_SOLID_REACTIVE,
RGB_MATRIX_SPLASH,
RGB_MATRIX_MULTISPLASH,
RGB_MATRIX_SOLID_SPLASH,
@@ -107,7 +107,7 @@ These are the effects that are currently available:
Custom layer effects can be done by defining this in your `.c`:
void rgb_matrix_indicators_kb(void) {
- // rgb_matrix_set_color(index, red, green, blue);
+ rgb_matrix_set_color(index, red, green, blue);
}
A similar function works in the keymap as `rgb_matrix_indicators_user`.
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index e0918d11bd..d48941a04f 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -1,131 +1,46 @@
# RGB Lighting
-If you've installed addressable RGB lights on your keyboard you can control them with QMK. Currently we support the following addressable LEDs on Atmel AVR processors:
+QMK has the ability to control RGB LEDs attached to your keyboard. This is commonly called *underglow*, due to the LEDs often being mounted on the bottom of the keyboard, producing a nice diffused effect when combined with a translucent case.
-* WS2811 and variants (WS2812, WS2812B, WS2812C, etc)
-* SK6812RGBW
-
-Some keyboards come with RGB LEDs pre-installed. Others have to have LEDs installed after the fact. See below for information on modifying your keyboard.
-
-## Selecting Colors
-
-QMK uses Hue, Saturation, and Value to set color rather than using RGB. You can use the color wheel below to see how this works. Changing the Hue will cycle around the circle. Saturation will affect the intensity of the color, which you can see as you move from the inner part to the outer part of the wheel. Value sets the overall brightness.
-
-
-
-If you would like to learn more about HSV you can start with the [Wikipedia article](https://en.wikipedia.org/wiki/HSL_and_HSV).
+
-## Configuration
+Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard.
-Before RGB Lighting can be used you have to enable it in `rules.mk`:
+Currently QMK supports the following addressable LEDs on AVR microcontrollers (however, the white LED in RGBW variants is not supported):
- RGBLIGHT_ENABLE = yes
+ * WS2811, WS2812, WS2812B, WS2812C, etc.
+ * SK6812, SK6812MINI, SK6805
-You can configure the behavior of the RGB lighting by defining values inside `config.h`.
+These LEDs are called "addressable" because instead of using a wire per color, each LED contains a small microchip that understands a special protocol sent over a single wire. The chip passes on the remaining data to the next LED, allowing them to be chained together. In this way, you can easily control the color of the individual LEDs.
-### Required Configuration
+## Usage
-At minimum you have to define the pin your LED strip is connected to and the number of LEDs connected.
+On keyboards with onboard RGB LEDs, it is usually enabled by default. If it is not working for you, check that your `rules.mk` includes the following:
-```c
-#define RGB_DI_PIN D7 // The pin the LED strip is connected to
-#define RGBLED_NUM 14 // Number of LEDs in your strip
+```make
+RGBLIGHT_ENABLE = yes
```
-### Optional Configuration
-
-You can change the behavior of the RGB Lighting by setting these configuration values. Use `#define ` in a `config.h` at the keyboard, revision, or keymap level.
-
-| Option | Default Value | Description |
-|--------|---------------|-------------|
-| `RGBLIGHT_HUE_STEP` | 10 | How many hues you want to have available. |
-| `RGBLIGHT_SAT_STEP` | 17 | How many steps of saturation you'd like. |
-| `RGBLIGHT_VAL_STEP` | 17 | The number of levels of brightness you want. |
-| `RGBLIGHT_LIMIT_VAL` | 255 | Limit the val of HSV to limit the maximum brightness simply. |
-| `RGBLIGHT_SLEEP` | | `#define` this will shut off the lights when the host goes to sleep |
-
-
-### Animations
-
-If you have `#define RGBLIGHT_ANIMATIONS` in your `config.h` you will have a number of animation modes you can cycle through using the `RGB_MOD` key. You can also `#define` other options to tweak certain animations.
-
-| Option | Default Value | Description |
-|--------|---------------|-------------|
-| `RGBLIGHT_ANIMATIONS` | | `#define` this to enable animation modes. |
-| `RGBLIGHT_EFFECT_BREATHE_CENTER` | 1.85 | Used to calculate the curve for the breathing animation. Valid values 1.0-2.7. |
-| `RGBLIGHT_EFFECT_BREATHE_MAX` | 255 | The maximum brightness for the breathing mode. Valid values 1-255. |
-| `RGBLIGHT_EFFECT_SNAKE_LENGTH` | 4 | The number of LEDs to light up for the "snake" animation. |
-| `RGBLIGHT_EFFECT_KNIGHT_LENGTH` | 3 | The number of LEDs to light up for the "knight" animation. |
-| `RGBLIGHT_EFFECT_KNIGHT_OFFSET` | 0 | Start the knight animation this many LEDs from the start of the strip. |
-| `RGBLIGHT_EFFECT_KNIGHT_LED_NUM` | RGBLED_NUM | The number of LEDs to have the "knight" animation travel. |
-| `RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL` | 1000 | How long to wait between light changes for the "christmas" animation. Specified in ms. |
-| `RGBLIGHT_EFFECT_CHRISTMAS_STEP` | 2 | How many LED's to group the red/green colors by for the christmas mode. |
-
-You can also tweak the behavior of the animations by defining these consts in your `keymap.c`. These mostly affect the speed different modes animate at.
-
-```c
-// How long (in ms) to wait between animation steps for the breathing mode
-const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
-
-// How long (in ms) to wait between animation steps for the rainbow mode
-const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30};
-
-// How long (in ms) to wait between animation steps for the swirl mode
-const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20};
-
-// How long (in ms) to wait between animation steps for the snake mode
-const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
+At minimum you must define the data pin your LED strip is connected to, and the number of LEDs in the strip, in your `config.h`. If your keyboard has onboard RGB LEDs, and you are simply creating a keymap, you usually won't need to modify these.
-// How long (in ms) to wait between animation steps for the knight modes
-const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31};
+|Define |Description |
+|------------|---------------------------------------------|
+|`RGB_DI_PIN`|The pin connected to the data pin of the LEDs|
+|`RGBLED_NUM`|The number of LEDs connected |
-// These control which colors are selected for the gradient mode
-const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
-```
+Then you should be able to use the keycodes below to change the RGB lighting to your liking.
-### LED Control
+### Color Selection
-Look in `rgblights.h` for all available functions, but if you want to control all or some LEDs your goto functions are:
+QMK uses [Hue, Saturation, and Value](https://en.wikipedia.org/wiki/HSL_and_HSV) to select colors rather than RGB. The color wheel below demonstrates how this works.
-```c
-// turn all lights off (stored in EEPROM)
-rgblight_disable();
-// turn lights on, based on their previous state (stored in EEPROM)
-rgblight_enable();
-
-// turn all lights off (not stored in EEPROM)
-rgblight_disable_noeeprom();
-// turn lights on, based on their previous state (not stored in EEPROM)
-rgblight_enable_noeeprom();
-
-// where r/g/b is a number from 0..255. Turns all the LEDs to this color (ignores mode, not stored in EEPROM).
-rgblight_setrgb(r, g, b);
-// HSV color control - h is a value from 0..360 and s/v is a value from 0..255 (stored in EEPROM)
-rgblight_sethsv(h, s, v);
-// HSV color control - h is a value from 0..360 and s/v is a value from 0..255 (not stored in EEPROM)
-rgblight_sethsv_noeeprom(h, s, v);
-
-// Sets the mode, if rgb animations are enabled (stored in eeprom)
-rgblight_mode(x);
-// Sets the mode, if rgb animations are enabled (not stored in eeprom)
-rgblight_mode_noeeprom(x);
-// MODE 1, solid color
-// MODE 2-5, breathing
-// MODE 6-8, rainbow mood
-// MODE 9-14, rainbow swirl
-// MODE 15-20, snake
-// MODE 21-23, knight
-// MODE 24, xmas
-// MODE 25-34, static rainbow
-
-rgblight_setrgb_at(r,g,b, LED); // control a single LED. 0 <= LED < RGBLED_NUM
-rgblight_sethsv_at(h,s,v, LED); // control a single LED. 0 <= LED < RGBLED_NUM
-```
-You can find a list of predefined colors at [`quantum/rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h). Free to add to this list!
+
-## RGB Lighting Keycodes
+Changing the **Hue** cycles around the circle.
+Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.
+Changing the **Value** sets the overall brightness.
-These control the RGB Lighting functionality.
+## Keycodes
|Key |Aliases |Description |
|-------------------|----------|--------------------------------------------------------------------|
@@ -146,25 +61,97 @@ These control the RGB Lighting functionality.
|`RGB_MODE_KNIGHT` |`RGB_M_K` |"Knight Rider" animation mode |
|`RGB_MODE_XMAS` |`RGB_M_X` |Christmas animation mode |
|`RGB_MODE_GRADIENT`|`RGB_M_G` |Static gradient animation mode |
-|`RGB_MODE_RGBTEST `|`RGB_M_T` |Red,Green,Blue test animation mode |
+|`RGB_MODE_RGBTEST` |`RGB_M_T` |Red, Green, Blue test animation mode |
-note: for backwards compatibility, `RGB_SMOD` is an alias for `RGB_MOD`.
+?> For backwards compatibility, `RGB_SMOD` is another alias of `RGB_MOD`.
-## Hardware Modification
+## Configuration
-
+Your RGB lighting can be configured by placing these `#define`s in your `config.h`:
+
+|Define |Default |Description |
+|---------------------|-------------|-----------------------------------------------------------------------------|
+|`RGBLIGHT_HUE_STEP` |`10` |The number of steps to cycle through the hue by |
+|`RGBLIGHT_SAT_STEP` |`17` |The number of steps to increment the saturation by |
+|`RGBLIGHT_VAL_STEP` |`17` |The number of steps to increment the brightness by |
+|`RGBLIGHT_LIMIT_VAL` |`255` |The maximum brightness level |
+|`RGBLIGHT_SLEEP` |*Not defined*|If defined, the RGB lighting will be switched off when the host goes to sleep|
+
+## Animations
+
+Not only can this lighting be whatever color you want, if `RGBLIGHT_ANIMATIONS` is defined, you also have a number of animation modes at your disposal:
+
+|Mode |Description |
+|-----|---------------------|
+|1 |Solid color |
+|2-5 |Solid color breathing|
+|6-8 |Cycling rainbow |
+|9-14 |Swirling rainbow |
+|15-20|Snake |
+|21-23|Knight |
+|24 |Christmas |
+|25-34|Static gradient |
+|35 |RGB Test |
+|36 |Alternating |
+
+Check out [this video](https://youtube.com/watch?v=VKrpPAHlisY) for a demonstration.
+
+The following options can be used to tweak the various animations:
+
+|Define |Default |Description |
+|------------------------------------|-------------|-------------------------------------------------------------------------------------|
+|`RGBLIGHT_ANIMATIONS` |*Not defined*|If defined, enables additional animation modes |
+|`RGBLIGHT_EFFECT_BREATHE_CENTER` |`1.85` |Used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 |
+|`RGBLIGHT_EFFECT_BREATHE_MAX` |`255` |The maximum brightness for the breathing mode. Valid values are 1 to 255 |
+|`RGBLIGHT_EFFECT_SNAKE_LENGTH` |`4` |The number of LEDs to light up for the "Snake" animation |
+|`RGBLIGHT_EFFECT_KNIGHT_LENGTH` |`3` |The number of LEDs to light up for the "Knight" animation |
+|`RGBLIGHT_EFFECT_KNIGHT_OFFSET` |`0` |The number of LEDs to start the "Knight" animation from the start of the strip by |
+|`RGBLIGHT_EFFECT_KNIGHT_LED_NUM` |`RGBLED_NUM` |The number of LEDs to have the "Knight" animation travel |
+|`RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL`|`1000` |How long to wait between light changes for the "Christmas" animation, in milliseconds|
+|`RGBLIGHT_EFFECT_CHRISTMAS_STEP` |`2` |The number of LEDs to group the red/green colors by for the "Christmas" animation |
+
+You can also modify the speeds that the different modes animate at:
-Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY).
+```c
+// How long (in milliseconds) to wait between animation steps for each of the "Solid color breathing" animations
+const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
-For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring the VCC, GND, and DI, you can enable the underglow in your Makefile.
+// How long (in milliseconds) to wait between animation steps for each of the "Cycling rainbow" animations
+const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30};
- RGBLIGHT_ENABLE = yes
+// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
+const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20};
+
+// How long (in milliseconds) to wait between animation steps for each of the "Snake" animations
+const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
-In order to use the underglow animation functions, you need to have `#define RGBLIGHT_ANIMATIONS` in your `config.h`.
+// How long (in milliseconds) to wait between animation steps for each of the "Knight" animations
+const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31};
-Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default:
+// These control which hues are selected for each of the "Static gradient" modes
+const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
+```
- #define RGB_DI_PIN F4 // The pin your RGB strip is wired to
- #define RGBLED_NUM 14 // Number of LEDs
+## Functions
+
+If you need to change your RGB lighting in code, for example in a macro to change the color whenever you switch layers, QMK provides a set of functions to assist you. See [`rgblight.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight.h) for the full list, but the most commonly used functions include:
+
+|Function |Description |
+|-----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|`rgblight_enable()` |Turn LEDs on, based on their previous state |
+|`rgblight_enable_noeeprom()` |Turn LEDs on, based on their previous state (not written to EEPROM) |
+|`rgblight_disable()` |Turn LEDs off |
+|`rgblight_disable_noeeprom()` |Turn LEDs off (not written to EEPROM) |
+|`rgblight_mode(x)` |Set the mode, if RGB animations are enabled |
+|`rgblight_mode_noeeprom(x)` |Set the mode, if RGB animations are enabled (not written to EEPROM) |
+|`rgblight_setrgb(r, g, b)` |Set all LEDs to the given RGB value where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
+|`rgblight_setrgb_at(r, g, b, led)` |Set a single LED to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM) |
+|`rgblight_sethsv(h, s, v)` |Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 |
+|`rgblight_sethsv_noeeprom(h, s, v)`|Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 (not written to EEPROM) |
+|`rgblight_sethsv_at(h, s, v, led)` |Set a single LED to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255, and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM)|
+
+Additionally, [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h) defines several predefined shortcuts for various colors. Feel free to add to this list!
+
+## Hardware Modification
-You'll need to edit `RGB_DI_PIN` to the pin you have your `DI` on your RGB strip wired to.
+If your keyboard lacks onboard underglow LEDs, you may often be able to solder on an RGB LED strip yourself. You will need to find an unused pin to wire to the data pin of your LED strip. Some keyboards may break out unused pins from the MCU to make soldering easier. The other two pins, VCC and GND, must also be connected to the appropriate power pins.
diff --git a/docs/feature_space_cadet.md b/docs/feature_space_cadet.md
deleted file mode 100644
index 6e60948ab9..0000000000
--- a/docs/feature_space_cadet.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## Space Cadet Shift: The Future, Built In
-
-Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds.
-
-To use it, use `KC_LSPO` (Left Shift, Parenthesis Open) for your left Shift on your keymap, and `KC_RSPC` (Right Shift, Parenthesis Close) for your right Shift.
-
-It's defaulted to work on US keyboards, but if your layout uses different keys for parenthesis, you can define those in your `config.h` like this:
-
- #define LSPO_KEY KC_9
- #define RSPC_KEY KC_0
-
-You can also choose between different rollover behaviors of the shift keys by defining:
-
- #define DISABLE_SPACE_CADET_ROLLOVER
-
-in your `config.h`. Disabling rollover allows you to use the opposite shift key to cancel the space cadet state in the event of an erroneous press instead of emitting a pair of parentheses when the keys are released.
-
-The only other thing you're going to want to do is create a `Makefile` in your keymap directory and set the following:
-
-```
-COMMAND_ENABLE = no # Commands for debug and configuration
-```
-
-This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time.
diff --git a/docs/feature_space_cadet_shift.md b/docs/feature_space_cadet_shift.md
new file mode 100644
index 0000000000..bec7cbd3d9
--- /dev/null
+++ b/docs/feature_space_cadet_shift.md
@@ -0,0 +1,33 @@
+# Space Cadet Shift: The Future, Built In
+
+Steve Losh described the [Space Cadet Shift](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) quite well. Essentially, when you tap Left Shift on its own, you get an opening parenthesis; tap Right Shift on its own and you get the closing one. When held, the Shift keys function as normal. Yes, it's as cool as it sounds.
+
+## Usage
+
+Replace the Left Shift key in your keymap with `KC_LSPO` (Left Shift, Parenthesis Open), and Right Shift with `KC_RSPC` (Right Shift, Parenthesis Close).
+
+## Keycodes
+
+|Keycode |Description |
+|---------|--------------------------------------|
+|`KC_LSPO`|Left Shift when held, `(` when tapped |
+|`KC_RSPC`|Right Shift when held, `)` when tapped|
+
+## Caveats
+
+Space Cadet's functionality can conflict with the default Command functionality when both Shift keys are held at the same time. Make sure that Command is disabled in your `rules.mk` with:
+
+```make
+COMMAND_ENABLE = no
+```
+
+## Configuration
+
+By default Space Cadet assumes a US ANSI layout, but if your layout uses different keys for parentheses, you can redefine them in your `config.h`.
+You can also disable the rollover, allowing you to use the opposite Shift key to cancel the Space Cadet state in the event of an erroneous press, instead of emitting a pair of parentheses when the keys are released.
+
+|Define |Default |Description |
+|------------------------------|-------------|------------------------------------------------------------|
+|`LSPO_KEY` |`KC_9` |The keycode to send when Left Shift is tapped |
+|`RSPC_KEY` |`KC_0` |The keycode to send when Right Shift is tapped |
+|`DISABLE_SPACE_CADET_ROLLOVER`|*Not defined*|If defined, use the opposite Shift key to cancel Space Cadet|
diff --git a/docs/feature_space_cadet_shift_enter.md b/docs/feature_space_cadet_shift_enter.md
new file mode 100644
index 0000000000..56a569b139
--- /dev/null
+++ b/docs/feature_space_cadet_shift_enter.md
@@ -0,0 +1,31 @@
+# Space Cadet Shift Enter
+
+Based on the [Space Cadet Shift](feature_space_cadet_shift.md) feature. Tap the Shift key on its own, and it behaves like Enter. When held, the Shift functions as normal.
+
+## Usage
+
+Replace any Shift key in your keymap with `KC_SFTENT` (Shift, Enter), and you're done.
+
+## Keycodes
+
+|Keycode |Description |
+|-----------|----------------------------------------|
+|`KC_SFTENT`|Right Shift when held, Enter when tapped|
+
+## Caveats
+
+As with Space Cadet Shift, this feature may conflict with Command, so it should be disabled in your `rules.mk` with:
+
+```make
+COMMAND_ENABLE = no
+```
+
+This feature also uses the same timers as Space Cadet Shift, so using them in tandem may produce strange results.
+
+## Configuration
+
+By default Space Cadet assumes a US ANSI layout, but if you'd like to use a different key for Enter, you can redefine it in your `config.h`:
+
+|Define |Default |Description |
+|------------|--------|------------------------------------------------|
+|`SFTENT_KEY`|`KC_ENT`|The keycode to send when the Shift key is tapped|
diff --git a/docs/feature_space_shift_cadet.md b/docs/feature_space_shift_cadet.md
deleted file mode 100644
index ad610b579c..0000000000
--- a/docs/feature_space_shift_cadet.md
+++ /dev/null
@@ -1,26 +0,0 @@
-## Space Cadet Shift Enter: The future, built in
-
-Based on the Space Cadet Shift by Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/)
-Essentially, you hit the Shift on its own, and it acts as the enter key. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. This solution works better than using a macro since the timers defined in quantum allow us to tell when another key is pressed, rather than just having a janky timer than results in accidental endlines.
-
-To use it, use `KC_SFTENT` (Shift, Enter) for any Shift on your keymap.
-
-It's defaulted to work on US keyboards, but if you'd like to use a different key for Enter, you can define those in your `config.h` like this:
-
- #define SFTENT_KEY KC_ENT
-
-
-The only other thing you're going to want to do is create a `rules.mk` in your keymap directory and set the following:
-
-```
-COMMAND_ENABLE = no # Commands for debug and configuration
-```
-
-This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time.
-
-
-
-
-
-PLEASE NOTE: this feature uses the same timers as the Space Cadet Shift feature, so using them in tandem may produce unwanted results.
-
diff --git a/docs/feature_swap_hands.md b/docs/feature_swap_hands.md
index 92e8e3b107..09e01d50d3 100644
--- a/docs/feature_swap_hands.md
+++ b/docs/feature_swap_hands.md
@@ -22,9 +22,9 @@ Note that the array indices are reversed same as the matrix and the values are o
|Key |Description |
|-----------|-------------------------------------------------------------------------|
|`SH_T(key)`|Sends `key` with a tap; momentary swap when held. |
-|`SW_ON` |Turns on swapping and leaves it on. |
-|`SW_OFF` |Turn off swapping and leaves it off. Good for returning to a known state.|
-|`SW_MON` |Swaps hands when pressed, returns to normal when released (momentary). |
-|`SW_MOFF` |Momentarily turns off swap. |
+|`SH_ON` |Turns on swapping and leaves it on. |
+|`SH_OFF` |Turn off swapping and leaves it off. Good for returning to a known state.|
+|`SH_MON` |Swaps hands when pressed, returns to normal when released (momentary). |
+|`SH_MOFF` |Momentarily turns off swap. |
|`SH_TG` |Toggles swap on and off with every key press. |
|`SH_TT` |Toggles with a tap; momentary when held. |
diff --git a/docs/feature_tap_dance.md b/docs/feature_tap_dance.md
index 99298fbda8..93d1908831 100644
--- a/docs/feature_tap_dance.md
+++ b/docs/feature_tap_dance.md
@@ -196,22 +196,20 @@ SRC += your_name.c
Pretty simple. It is a nice way to keep some rules common on all your keymaps.
-### In `/qmk_firmware/users//.h`
+### In `/qmk_firmware/users//.h`
You will need a few things in this file:
```c
-#ifndef YOUR_NAME
-#define YOUR_NAME
+#pragma once
#include "quantum.h"
#include "process_keycode/process_tap_dance.h"
-
typedef struct {
bool is_press_action;
int state;
-} xtap;
+} tap;
enum {
SINGLE_TAP = 1,
@@ -225,9 +223,9 @@ enum {
//Tap dance enums
enum {
- CTL_X = 0,
- SOME_OTHER_DANCE
-}
+ X_CTL = 0,
+ SOME_OTHER_DANCE
+};
int cur_dance (qk_tap_dance_state_t *state);
@@ -241,7 +239,7 @@ void x_reset (qk_tap_dance_state_t *state, void *user_data);
And then in your user's `.c` file you implement the functions above:
```c
-#include "gordon.h"
+#include ".h"
#include "quantum.h"
#include "action.h"
#include "process_keycode/process_tap_dance.h"
@@ -335,4 +333,4 @@ qk_tap_dance_action_t tap_dance_actions[] = {
};
```
-And then simply use TD(X_CTL) anywhere in your keymap.
+And then simply use `TD(X_CTL)` anywhere in your keymap after including `.h`.
diff --git a/docs/features.md b/docs/features.md
index d8ca3780df..b10e0cc1de 100644
--- a/docs/features.md
+++ b/docs/features.md
@@ -19,7 +19,7 @@ QMK has a staggering number of features for building your keyboard. It can take
* [PS2 Mouse](feature_ps2_mouse.md) - Driver for connecting a PS/2 mouse directly to your keyboard.
* [RGB Light](feature_rgblight.md) - RGB lighting for your keyboard.
* [RGB Matrix](feature_rgb_matrix.md) - RGB Matrix lights for per key lighting.
-* [Space Cadet](feature_space_cadet.md) - Use your left/right shift keys to type parenthesis and brackets.
+* [Space Cadet](feature_space_cadet_shift.md) - Use your left/right shift keys to type parenthesis and brackets.
* [Stenography](feature_stenography.md) - Put your keyboard into Plover mode for stenography use.
* [Swap Hands](feature_swap_hands.md) - Mirror your keyboard for one handed usage.
* [Tap Dance](feature_tap_dance.md) - Make a single key do as many things as you want.
diff --git a/docs/hardware_drivers.md b/docs/hardware_drivers.md
index 46e6a71015..336bc908ef 100644
--- a/docs/hardware_drivers.md
+++ b/docs/hardware_drivers.md
@@ -25,3 +25,7 @@ You can make use of uGFX within QMK to drive character and graphic LCD's, LED ar
## WS2812 (AVR Only)
Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](feature_rgblight.md) page.
+
+## IS31FL3731 (AVR Only)
+
+Support for up to 2 drivers. Each driver impliments 2 charlieplex matrices to individually address LEDs using I2C. This allows up to 144 same color LEDs or 32 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](feature_rgb_matrix.md) page.
diff --git a/docs/isp_flashing_guide.md b/docs/isp_flashing_guide.md
index 8abc454868..008f944cc3 100644
--- a/docs/isp_flashing_guide.md
+++ b/docs/isp_flashing_guide.md
@@ -19,59 +19,80 @@ If you're having trouble flashing/erasing your board, and running into cryptic e
Memory write error, use debug for more info.
commands.c:360: Error writing memory data. (err -4)
-You're likely going to need to ISP flash your board/device to get it working again. Luckily, this process is pretty straight-forward, provided you have any extra programmable keyboard, Arduino, or Teensy 2.0/Teensy 2.0++. There are also dedicated ISP flashers available for this, but most cost >$15, and it's assumed that if you are googling this error, this is the first you've heard about ISP flashing, and don't have one readily available (whereas you might have some other AVR board). __We'll be using a Teensy 2.0 with Windows 10 in this guide__ - if you are comfortable doing this on another system, please consider editing this guide and contributing those instructions!
+You're likely going to need to ISP flash your board/device to get it working again. Luckily, this process is pretty straight-forward, provided you have any extra programmable keyboard, Pro Micro, or Teensy 2.0/Teensy 2.0++. There are also dedicated ISP flashers available for this, but most cost >$15, and it's assumed that if you are googling this error, this is the first you've heard about ISP flashing, and don't have one readily available (whereas you might have some other AVR board). __We'll be using a Teensy 2.0 or Pro Micro with Windows 10 in this guide__ - if you are comfortable doing this on another system, please consider editing this guide and contributing those instructions!
## Software Needed
-* [The Arduino IDE](https://www.arduino.cc/en/Main/Software)
-* [Teensyduino](https://www.pjrc.com/teensy/td_download.html) (if you're using a Teensy)
-* [WinAVR](http://www.ladyada.net/learn/avr/setup-win.html) (Windows)
+* [Teensy Loader](https://www.pjrc.com/teensy/loader.html) (if using a Teensy)
+* QMK Toolbox (flash as usual - be sure to select the correct MCU) or `avrdude` via [WinAVR](http://www.ladyada.net/learn/avr/setup-win.html) (for Teensy & Pro Micro)
## Wiring
This is pretty straight-forward - we'll be connecting like-things to like-things in the following manner:
- Flasher B0 <-> Keyboard RESET
- Flasher B1 <-> Keyboard B1 (SCLK)
- Flasher B2 <-> Keyboard B2 (MOSI)
- Flasher B3 <-> Keyboard B3 (MISO)
- Flasher VCC <-> Keyboard VCC
- Flasher GND <-> Keyboard GND
+### Teensy 2.0
-## The ISP Firmware
+ Teensy B0 <-> Keyboard RESET
+ Teensy B1 <-> Keyboard B1 (SCLK)
+ Teensy B2 <-> Keyboard B2 (MOSI)
+ Teensy B3 <-> Keyboard B3 (MISO)
+ Teensy VCC <-> Keyboard VCC
+ Teensy GND <-> Keyboard GND
+
+### Pro Micro
-Make sure your keyboard is unplugged from any device, and plug in your Teensy.
+ Pro Micro 10 (B6) <-> Keyboard RESET
+ Pro Micro 15 (B1) <-> Keyboard B1 (SCLK)
+ Pro Micro 16 (B2) <-> Keyboard B2 (MOSI)
+ Pro Micro 14 (B3) <-> Keyboard B3 (MISO)
+ Pro Micro VCC <-> Keyboard VCC
+ Pro Micro GND <-> Keyboard GND
+
+## The ISP Firmware (now pre-compiled)
-1. Run Arduino after you have everything installed
-2. Select `Tools > Board * > Teensy 2.0`
-3. Click `File > Examples > 11.ArduinoISP > ArduinoISP`
+The only difference between the .hex files below is which pin is connected to RESET. You can use them on other boards as well, as long as you're aware of the pins being used. If for some reason neither of these pins are available, [create an issue](https://github.com/qmk/qmk_firmware/issues/new), and we can generate one for you!
-Then scroll down until you see something that looks like this block of code:
+* Teensy 2.0: [`util/teensy_2.0_ISP_B0.hex`](https://github.com/qmk/qmk_firmware/blob/master/util/teensy_2.0_ISP_B0.hex) (`B0`)
+* Pro Micro: [`util/pro_micro_ISP_B6_10.hex`](https://github.com/qmk/qmk_firmware/blob/master/util/pro_mico_ISP_B6_10.hex) (`B6/10`)
- // Configure which pins to use:
+**Flash your Teenys/Pro Micro with one of these and continue - you won't need the file after flashing your ISP device.**
- // The standard pin configuration.
- #ifndef ARDUINO_HOODLOADER2
+## Just the Bootloader File
- #define RESET 0 // Use 0 (B0) instead of 10
- #define LED_HB 11 // Use 11 (LED on the Teensy 2.0)
- #define LED_ERR 8 // This won't be used unless you have an LED hooked-up to 8 (D3)
- #define LED_PMODE 7 // This won't be used unless you have an LED hooked-up to 7 (D2)
+If you just want to get things back to normal, you can flash only a bootloader from [`util/` folder](https://github.com/qmk/qmk_firmware/tree/master/util), and use your normal process to flash the firmware afterwards. Be sure to flash the correct bootloader for your chip:
-And make the changes in the last four lines. If you're using something besides the Teensy 2.0, you'll want to choose something else that makes sense for `LED_HB`. We define `RESET` as `0`/`B0` because that's what's close - if you want to use another pin for some reason, [you can use the pinouts to choose something else](https://www.pjrc.com/teensy/pinout.html).
+* [`atmega32u4`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32u4_1_0_0.hex) - Most keyboards, Planck Rev 1-5, Preonic Rev 1-2
+* [`at90usb1286`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_at90usb128x_1_0_1.hex) - Planck Light Rev 1
-Once you've made your changes, you can click the Upload button (right arrow), which will open up the Teensy flasher app - you'll need to press the reset button on the Teensy the first time, but after that, it's automatic (you shouldn't be flashing this more than once, though). Once flashed, the orange LED on the Teensy will flash on and off, indicating it's ready for some action.
+If you're not sure what your board uses, look in the `rules.mk` file for the keyboard in QMK. The `MCU =` line will have the value you need. It may differ between different versions of the board.
-## The `.hex` File
+### Advanced/Production Techniques
-Before flashing your firmware, you're going to need to and do a little preparation. We'll be appending [this bootloader (also a .hex file)](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32u4_1_0_0.hex) to the end of our firmware by opening the original .hex file in a text editor, and removing the last line, which should be `:00000001FF` (this is an EOF message). After that's been removed, copy the entire bootloader's contents and paste it at the end of the original file, and save it.
+If you'd like to flash both the bootloader **and** the regular firmware at the same time, you need to combine the files.
-It's possible to use other bootloaders here in the same way, but __you need a bootloader__, otherwise you'll have to ISP to write new firmware to your keyboard.
+1. Open the original firmware .hex file in a text editor
+2. Remove the last line (which should be `:00000001FF` - this is an EOF message)
+3. Copy the entire bootloader's contents onto a new line (with no empty lines between) and paste it at the end of the original file
+4. Save it as a new file by naming it `__production.hex`
-## Flashing Your Firmware
+It's possible to use other bootloaders here in the same way, but __you need a bootloader__, otherwise you'll have to use ISP again to write new firmware to your keyboard.
+
+## Flashing Your Bootloader/Production File
Make sure your keyboard is unplugged from any device, and plug in your Teensy.
+### QMK Toolbox
+
+1. `AVRISP device connected` will show up in yellow
+2. Select the correct bootloader/production .hex file with the `Open` dialog (spaces can't be in the path)
+3. Be sure the correct `Microcontroller` option is selected
+4. Hit `Flash`
+5. Wait, as nothing will output for a while, especially with production files
+
+If the verification and fuse checks are ok, you're done! Your board may restart automatically, otherwise, unplug your Teensy and plug in your keyboard - you can leave your Teensy wired to your keyboard while testing things, but it's recommended that you desolder it/remove the wiring once you're sure everything works.
+
+### Command Line
+
Open `cmd` and navigate to your where your modified .hex file is. We'll pretend this file is called `main.hex`, and that your Teensy 2.0 is on the `COM3` port - if you're unsure, you can open your Device Manager, and look for `Ports > USB Serial Device`. Use that COM port here. You can confirm it's the right port with:
avrdude -c avrisp -P COM3 -p atmega32u4
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 1dc378caf8..dbafecb829 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -8,40 +8,8 @@ This is a reference only. Each group of keys links to the page documenting their
|Key |Aliases |Description |
|-----------------------|--------------------|-----------------------------------------------|
-|`KC_1` | |`1` and `!` |
-|`KC_2` | |`2` and `@` |
-|`KC_3` | |`3` and `#` |
-|`KC_4` | |`4` and `$` |
-|`KC_5` | |`5` and `%` |
-|`KC_6` | |`6` and `^` |
-|`KC_7` | |`7` and `&` |
-|`KC_8` | |`8` and `*` |
-|`KC_9` | |`9` and `(` |
-|`KC_0` | |`0` and `)` |
-|`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_NO` |`XXXXXXX` |Ignore this key (NOOP) |
+|`KC_TRANSPARENT` |`KC_TRNS`, `_______`|Use the next lowest non-transparent key |
|`KC_A` | |`a` and `A` |
|`KC_B` | |`b` and `B` |
|`KC_C` | |`c` and `C` |
@@ -68,6 +36,16 @@ This is a reference only. Each group of keys links to the page documenting their
|`KC_X` | |`x` and `X` |
|`KC_Y` | |`y` and `Y` |
|`KC_Z` | |`z` and `Z` |
+|`KC_1` | |`1` and `!` |
+|`KC_2` | |`2` and `@` |
+|`KC_3` | |`3` and `#` |
+|`KC_4` | |`4` and `$` |
+|`KC_5` | |`5` and `%` |
+|`KC_6` | |`6` and `^` |
+|`KC_7` | |`7` and `&` |
+|`KC_8` | |`8` and `*` |
+|`KC_9` | |`9` and `(` |
+|`KC_0` | |`0` and `)` |
|`KC_ENTER` |`KC_ENT` |Return (Enter) |
|`KC_ESCAPE` |`KC_ESC` |Escape |
|`KC_BSPACE` |`KC_BSPC` |Delete (Backspace) |
@@ -79,33 +57,28 @@ This is a reference only. Each group of keys links to the page documenting their
|`KC_RBRACKET` |`KC_RBRC` |`]` and `}` |
|`KC_BSLASH` |`KC_BSLS` |`\` and |
|
|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |
-|`KC_NONUS_BSLASH` |`KC_NUBS` |Non-US `\` and |
|
-|`KC_INT1` |`KC_RO` |JIS `\` and |
|
-|`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana |
-|`KC_INT3` |`KC_JYEN` |JIS `¥` |
|`KC_SCOLON` |`KC_SCLN` |`;` and `:` |
|`KC_QUOTE` |`KC_QUOT` |`'` and `"` |
-|`KC_GRAVE` |`KC_GRV` |`
and `~` |
+|`KC_GRAVE` |`KC_GRV`, `KC_ZKHK` |`
and `~`, JIS Zenkaku/Hankaku|
|`KC_COMMA` |`KC_COMM` |`,` and `<` |
|`KC_DOT` | |`.` and `>` |
|`KC_SLASH` |`KC_SLSH` |`/` and `?` |
-|`KC_CAPSLOCK` |`KC_CAPS` |Caps Lock |
-|`KC_LCTRL` |`KC_LCTL` |Left Control |
-|`KC_LSHIFT` |`KC_LSFT` |Left Shift |
-|`KC_LALT` | |Left Alt |
-|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
-|`KC_RCTRL` |`KC_RCTL` |Right Control |
-|`KC_RSHIFT` |`KC_RSFT` |Right Shift |
-|`KC_RALT` | |Right Alt |
-|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key) |
-|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
-|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
-|`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock |
-|`KC_INT4` |`KC_HENK` |JIS Henkan |
-|`KC_INT5` |`KC_MHEN` |JIS Muhenkan |
+|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS`|Caps Lock |
+|`KC_F1` | |F1 |
+|`KC_F2` | |F2 |
+|`KC_F3` | |F3 |
+|`KC_F4` | |F4 |
+|`KC_F5` | |F5 |
+|`KC_F6` | |F6 |
+|`KC_F7` | |F7 |
+|`KC_F8` | |F8 |
+|`KC_F9` | |F9 |
+|`KC_F10` | |F10 |
+|`KC_F11` | |F11 |
+|`KC_F12` | |F12 |
|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
|`KC_SCROLLLOCK` |`KC_SLCK` |Scroll Lock |
-|`KC_PAUSE` |`KC_PAUS` |Pause |
+|`KC_PAUSE` |`KC_PAUS`, `KC_BRK` |Pause |
|`KC_INSERT` |`KC_INS` |Insert |
|`KC_HOME` | |Home |
|`KC_PGUP` | |Page Up |
@@ -116,22 +89,80 @@ This is a reference only. Each group of keys links to the page documenting their
|`KC_LEFT` | |Left Arrow |
|`KC_DOWN` | |Down Arrow |
|`KC_UP` | |Up Arrow |
+|`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 Page Down |
+|`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 Page Up |
+|`KC_KP_0` |`KC_P0` |Keypad `0` and Insert |
+|`KC_KP_DOT` |`KC_PDOT` |Keypad `.` and Delete |
+|`KC_NONUS_BSLASH` |`KC_NUBS` |Non-US `\` and |
|
|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key) |
-|`KC_POWER` | |Deprecated by MS in favor of `KC_SYSTEM_POWER`.|
-|`KC_EXECUTE` | |Execute |
+|`KC_POWER` | |System Power (macOS) |
+|`KC_KP_EQUAL` |`KC_PEQL` |Keypad `=` |
+|`KC_F13` | |F13 |
+|`KC_F14` | |F14 |
+|`KC_F15` | |F15 |
+|`KC_F16` | |F16 |
+|`KC_F17` | |F17 |
+|`KC_F18` | |F18 |
+|`KC_F19` | |F19 |
+|`KC_F20` | |F20 |
+|`KC_F21` | |F21 |
+|`KC_F22` | |F22 |
+|`KC_F23` | |F23 |
+|`KC_F24` | |F24 |
+|`KC_EXECUTE` |`KC_EXEC` |Execute |
|`KC_HELP` | |Help |
|`KC_MENU` | |Menu |
-|`KC_SELECT` | |Select |
-|`KC_AGAIN` | |Again |
+|`KC_SELECT` |`KC_SLCT` |Select |
+|`KC_STOP` | |Stop |
+|`KC_AGAIN` |`KC_AGIN` |Again |
|`KC_UNDO` | |Undo |
|`KC_CUT` | |Cut |
|`KC_COPY` | |Copy |
-|`KC_PASTE` | |Paste |
+|`KC_PASTE` |`KC_PSTE` |Paste |
|`KC_FIND` | |Find |
-|`KC_ALT_ERASE` | |Alternate Erase |
+|`KC__MUTE` | |Mute (macOS) |
+|`KC__VOLUP` | |Volume Up (macOS) |
+|`KC__VOLDOWN` | |Volume Down (macOS) |
+|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
+|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
+|`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock |
+|`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` |
+|`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards |
+|`KC_INT1` |`KC_RO` |JIS `\` and |
|
+|`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana |
+|`KC_INT3` |`KC_JYEN` |JIS `¥` |
+|`KC_INT4` |`KC_HENK` |JIS Henkan |
+|`KC_INT5` |`KC_MHEN` |JIS Muhenkan |
+|`KC_INT6` | |JIS Numpad `,` |
+|`KC_INT7` | |International 7 |
+|`KC_INT8` | |International 8 |
+|`KC_INT9` | |International 9 |
+|`KC_LANG1` |`KC_HAEN` |Hangul/English |
+|`KC_LANG2` |`KC_HANJ` |Hanja |
+|`KC_LANG3` | |JIS Katakana |
+|`KC_LANG4` | |JIS Hiragana |
+|`KC_LANG5` | |JIS Zenkaku/Hankaku |
+|`KC_LANG6` | |Language 6 |
+|`KC_LANG7` | |Language 7 |
+|`KC_LANG8` | |Language 8 |
+|`KC_LANG9` | |Language 9 |
+|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
|`KC_SYSREQ` | |SysReq/Attention |
|`KC_CANCEL` | |Cancel |
-|`KC_CLEAR` | |Clear |
+|`KC_CLEAR` |`KC_CLR` |Clear |
|`KC_PRIOR` | |Prior |
|`KC_RETURN` | |Return |
|`KC_SEPARATOR` | |Separator |
@@ -140,56 +171,38 @@ This is a reference only. Each group of keys links to the page documenting their
|`KC_CLEAR_AGAIN` | |Clear/Again |
|`KC_CRSEL` | |CrSel/Props |
|`KC_EXSEL` | |ExSel |
-|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down. Recommended over `KC_POWER`.|
+|`KC_LCTRL` |`KC_LCTL` |Left Control |
+|`KC_LSHIFT` |`KC_LSFT` |Left Shift |
+|`KC_LALT` | |Left Alt |
+|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
+|`KC_RCTRL` |`KC_RCTL` |Right Control |
+|`KC_RSHIFT` |`KC_RSFT` |Right Shift |
+|`KC_RALT` | |Right Alt |
+|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key) |
+|`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` | |
-|`KC_STOP` | |Stop |
-|`KC__MUTE` | |Mute (macOS) |
-|`KC__VOLUP` | |Volume Up (macOS) |
-|`KC__VOLDOWN` | |Volume Down (macOS) |
-|`KC_AUDIO_MUTE` |`KC_MUTE` |Mute (Windows/macOS/Linux) |
-|`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up (Windows/macOS/Linux) |
-|`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down (Windows/macOS/Linux) |
+|`KC_AUDIO_MUTE` |`KC_MUTE` |Mute |
+|`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up |
+|`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down |
|`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` |Stop Track |
+|`KC_MEDIA_STOP` |`KC_MSTP` |Stop Track (Windows) |
|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY` |Play/Pause Track |
-|`KC_MEDIA_SELECT` |`KC_MSEL` | |
+|`KC_MEDIA_SELECT` |`KC_MSEL` |Launch Media Player (Windows) |
|`KC_MEDIA_EJECT` |`KC_EJCT` |Eject (macOS) |
-|`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 Page Down |
-|`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 Page Up |
-|`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 `,` |
-|`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards |
-|`KC_NO` | |Ignore this key (NOOP) |
-|`KC_TRANSPARENT` |`KC_TRNS` |Use the next lowest non-transparent key |
+|`KC_MAIL` | |Launch Mail (Windows) |
+|`KC_CALCULATOR` |`KC_CALC` |Launch Calculator (Windows) |
+|`KC_MY_COMPUTER` |`KC_MYCM` |Launch My Computer (Windows) |
+|`KC_WWW_SEARCH` |`KC_WSCH` |Browser Search (Windows) |
+|`KC_WWW_HOME` |`KC_WHOM` |Browser Home (Windows) |
+|`KC_WWW_BACK` |`KC_WBAK` |Browser Back (Windows) |
+|`KC_WWW_FORWARD` |`KC_WFWD` |Browser Forward (Windows) |
+|`KC_WWW_STOP` |`KC_WSTP` |Browser Stop (Windows) |
+|`KC_WWW_REFRESH` |`KC_WREF` |Browser Refresh (Windows) |
+|`KC_WWW_FAVORITES` |`KC_WFAV` |Browser Favorites (Windows) |
+|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD` |Next Track (macOS) |
+|`KC_MEDIA_REWIND` |`KC_MRWD` |Previous Track (macOS) |
## [Quantum Keycodes](quantum_keycodes.md#qmk-keycodes)
@@ -269,7 +282,7 @@ This is a reference only. Each group of keys links to the page documenting their
|`OUT_BT` |Bluetooth only |
-## [Layer Switching](feature_advanced_keycodes.md# Switching and Toggling Layers)
+## [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers)
|Key |Description |
|-----------------|---------------------------------------------------------------------|
@@ -391,29 +404,29 @@ This is a reference only. Each group of keys links to the page documenting their
## [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
-|Key |Aliases |Description |
-|------------------------|------------------|-------------------|
-|`KC_TILDE` |`KC_TILD` |`~` |
-|`KC_EXCLAIM` |`KC_EXLM` |`!` |
-|`KC_AT` | |`@` |
-|`KC_HASH` | |`#` |
-|`KC_DOLLAR` |`KC_DLR` |`$` |
-|`KC_PERCENT` |`KC_PERC` |`%` |
-|`KC_CIRCUMFLEX` |`KC_CIRC` |`^` |
-|`KC_AMPERSAND` |`KC_AMPR` |`&` |
-|`KC_ASTERISK` |`KC_ASTR` |`*` |
-|`KC_LEFT_PAREN` |`KC_LPRN` |`(` |
-|`KC_RIGHT_PAREN` |`KC_RPRN` |`)` |
-|`KC_UNDERSCORE` |`KC_UNDS` |`_` |
-|`KC_PLUS` | |`+` |
-|`KC_LEFT_CURLY_BRACE` |`KC_LCBR` |`{` |
-|`KC_RIGHT_CURLY_BRACE` |`KC_RCBR` |`}` |
-|`KC_PIPE` | ||
|
-|`KC_COLON` |`KC_COLN` |`:` |
-|`KC_DOUBLE_QUOTE` |`KC_DQT`/`KC_DQUO`|`"` |
-|`KC_LEFT_ANGLE_BRACKET` |`KC_LT`/`KC_LABK` |`<` |
-|`KC_RIGHT_ANGLE_BRACKET`|`KC_GT`/`KC_RABK` |`>` |
-|`KC_QUESTION` |`KC_QUES` |`?` |
+|Key |Aliases |Description |
+|------------------------|-------------------|-------------------|
+|`KC_TILDE` |`KC_TILD` |`~` |
+|`KC_EXCLAIM` |`KC_EXLM` |`!` |
+|`KC_AT` | |`@` |
+|`KC_HASH` | |`#` |
+|`KC_DOLLAR` |`KC_DLR` |`$` |
+|`KC_PERCENT` |`KC_PERC` |`%` |
+|`KC_CIRCUMFLEX` |`KC_CIRC` |`^` |
+|`KC_AMPERSAND` |`KC_AMPR` |`&` |
+|`KC_ASTERISK` |`KC_ASTR` |`*` |
+|`KC_LEFT_PAREN` |`KC_LPRN` |`(` |
+|`KC_RIGHT_PAREN` |`KC_RPRN` |`)` |
+|`KC_UNDERSCORE` |`KC_UNDS` |`_` |
+|`KC_PLUS` | |`+` |
+|`KC_LEFT_CURLY_BRACE` |`KC_LCBR` |`{` |
+|`KC_RIGHT_CURLY_BRACE` |`KC_RCBR` |`}` |
+|`KC_PIPE` | ||
|
+|`KC_COLON` |`KC_COLN` |`:` |
+|`KC_DOUBLE_QUOTE` |`KC_DQUO`, `KC_DQT`|`"` |
+|`KC_LEFT_ANGLE_BRACKET` |`KC_LABK`, `KC_LT` |`<` |
+|`KC_RIGHT_ANGLE_BRACKET`|`KC_RABK`, `KC_GT` |`>` |
+|`KC_QUESTION` |`KC_QUES` |`?` |
## [Switching and Toggling Layers](feature_advanced_keycodes.md#switching-and-toggling-layers)
diff --git a/docs/keycodes_basic.md b/docs/keycodes_basic.md
index c6ca4ad992..8445b05ef3 100644
--- a/docs/keycodes_basic.md
+++ b/docs/keycodes_basic.md
@@ -47,117 +47,145 @@ The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07
|Key |Description|
|--------|-----------|
-|`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_F1` |F1 |
+|`KC_F2` |F2 |
+|`KC_F3` |F3 |
+|`KC_F4` |F4 |
+|`KC_F5` |F5 |
+|`KC_F6` |F6 |
+|`KC_F7` |F7 |
+|`KC_F8` |F8 |
+|`KC_F9` |F9 |
+|`KC_F10`|F10 |
+|`KC_F11`|F11 |
+|`KC_F12`|F12 |
+|`KC_F13`|F13 |
+|`KC_F14`|F14 |
+|`KC_F15`|F15 |
+|`KC_F16`|F16 |
+|`KC_F17`|F17 |
+|`KC_F18`|F18 |
+|`KC_F19`|F19 |
+|`KC_F20`|F20 |
+|`KC_F21`|F21 |
+|`KC_F22`|F22 |
+|`KC_F23`|F23 |
+|`KC_F24`|F24 |
## Punctuation
-|Key |Aliases |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 |
|
-|`KC_NONUS_HASH` |`KC_NUHS`|Non-US `#` and `~` |
-|`KC_NONUS_BSLASH`|`KC_NUBS`|Non-US `\` and |
|
-|`KC_INT1` |`KC_RO` |JIS `\` and |
|
-|`KC_INT2` |`KC_KANA`|JIS Katakana/Hiragana |
-|`KC_INT3` |`KC_JYEN`|JIS `¥` |
-|`KC_SCOLON` |`KC_SCLN`|`;` and `:` |
-|`KC_QUOTE` |`KC_QUOT`|`'` and `"` |
-|`KC_GRAVE` |`KC_GRV` |`
and `~` |
-|`KC_COMMA` |`KC_COMM`|`,` and `<` |
-|`KC_DOT` | |`.` and `>` |
-|`KC_SLASH` |`KC_SLSH`|`/` and `?` |
-|`KC_CAPSLOCK` |`KC_CAPS`|Caps Lock |
+|Key |Aliases |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 |
|
+|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |
+|`KC_SCOLON` |`KC_SCLN` |`;` and `:` |
+|`KC_QUOTE` |`KC_QUOT` |`'` and `"` |
+|`KC_GRAVE` |`KC_GRV`, `KC_ZKHK`|`
and `~`, JIS Zenkaku/Hankaku|
+|`KC_COMMA` |`KC_COMM` |`,` and `<` |
+|`KC_DOT` | |`.` and `>` |
+|`KC_SLASH` |`KC_SLSH` |`/` and `?` |
+|`KC_NONUS_BSLASH`|`KC_NUBS` |Non-US `\` and |
|
+
+## Lock Keys
+
+|Key |Aliases |Description |
+|-------------------|--------------------|-------------------------|
+|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS`|Caps Lock |
+|`KC_SCROLLLOCK` |`KC_SLCK` |Scroll Lock |
+|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear|
+|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
+|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
+|`KC_LOCKING_SCROLL`|`KC_LSCR` |Locking Scroll Lock |
## Modifiers
-|Key |Aliases |Description |
-|-------------------|--------------------|------------------------------------|
-|`KC_LCTRL` |`KC_LCTL` |Left Control |
-|`KC_LSHIFT` |`KC_LSFT` |Left Shift |
-|`KC_LALT` | |Left Alt |
-|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
-|`KC_RCTRL` |`KC_RCTL` |Right Control |
-|`KC_RSHIFT` |`KC_RSFT` |Right Shift |
-|`KC_RALT` | |Right Alt |
-|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key)|
-|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
-|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
-|`KC_LOCKING_SCROLL`|`KC_LSCR` |Locking Scroll Lock |
-|`KC_INT4` |`KC_HENK` |JIS Henkan |
-|`KC_INT5` |`KC_MHEN` |JIS Muhenkan |
+|Key |Aliases |Description |
+|-----------|--------------------|------------------------------------|
+|`KC_LCTRL` |`KC_LCTL` |Left Control |
+|`KC_LSHIFT`|`KC_LSFT` |Left Shift |
+|`KC_LALT` | |Left Alt |
+|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
+|`KC_RCTRL` |`KC_RCTL` |Right Control |
+|`KC_RSHIFT`|`KC_RSFT` |Right Shift |
+|`KC_RALT` | |Right Alt |
+|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key)|
+
+## International
+
+|Key |Aliases |Description |
+|----------|---------|-------------------------------|
+|`KC_INT1` |`KC_RO` |JIS `\` and |
|
+|`KC_INT2` |`KC_KANA`|JIS Katakana/Hiragana |
+|`KC_INT3` |`KC_JYEN`|JIS `¥` |
+|`KC_INT4` |`KC_HENK`|JIS Henkan |
+|`KC_INT5` |`KC_MHEN`|JIS Muhenkan |
+|`KC_INT6` | |JIS Numpad `,` |
+|`KC_INT7` | |International 7 |
+|`KC_INT8` | |International 8 |
+|`KC_INT9` | |International 9 |
+|`KC_LANG1`|`KC_HAEN`|Hangul/English |
+|`KC_LANG2`|`KC_HANJ`|Hanja |
+|`KC_LANG3`| |JIS Katakana |
+|`KC_LANG4`| |JIS Hiragana |
+|`KC_LANG5`| |JIS Zenkaku/Hankaku |
+|`KC_LANG6`| |Language 6 |
+|`KC_LANG7`| |Language 7 |
+|`KC_LANG8`| |Language 8 |
+|`KC_LANG9`| |Language 9 |
## Commands
-|Key |Aliases |Description |
-|------------------|---------|------------------------------|
-|`KC_PSCREEN` |`KC_PSCR`|Print Screen |
-|`KC_SCROLLLOCK` |`KC_SLCK`|Scroll Lock |
-|`KC_PAUSE` |`KC_PAUS`|Pause |
-|`KC_INSERT` |`KC_INS` |Insert |
-|`KC_HOME` | |Home |
-|`KC_PGUP` | |Page Up |
-|`KC_DELETE` |`KC_DEL` |Forward Delete |
-|`KC_END` | |End |
-|`KC_PGDOWN` |`KC_PGDN`|Page Down |
-|`KC_RIGHT` |`KC_RGHT`|Right Arrow |
-|`KC_LEFT` | |Left Arrow |
-|`KC_DOWN` | |Down Arrow |
-|`KC_UP` | |Up Arrow |
-|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key)|
-|`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 |
+|Key |Aliases |Description |
+|------------------|-------------------|------------------------------|
+|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
+|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`|Pause |
+|`KC_INSERT` |`KC_INS` |Insert |
+|`KC_HOME` | |Home |
+|`KC_PGUP` | |Page Up |
+|`KC_DELETE` |`KC_DEL` |Forward Delete |
+|`KC_END` | |End |
+|`KC_PGDOWN` |`KC_PGDN` |Page Down |
+|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
+|`KC_LEFT` | |Left Arrow |
+|`KC_DOWN` | |Down Arrow |
+|`KC_UP` | |Up Arrow |
+|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key)|
+|`KC_POWER` | |System Power (macOS/Linux) |
+|`KC_EXECUTE` |`KC_EXEC` |Execute |
+|`KC_HELP` | |Help |
+|`KC_MENU` | |Menu |
+|`KC_SELECT` |`KC_SLCT` |Select |
+|`KC_STOP` | |Stop |
+|`KC_AGAIN` |`KC_AGIN` |Again |
+|`KC_UNDO` | |Undo |
+|`KC_CUT` | |Cut |
+|`KC_COPY` | |Copy |
+|`KC_PASTE` |`KC_PSTE` |Paste |
+|`KC_FIND` | |Find |
+|`KC__MUTE` | |Mute (macOS) |
+|`KC__VOLUP` | |Volume Up (macOS) |
+|`KC__VOLDOWN` | |Volume Down (macOS) |
+|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
+|`KC_SYSREQ` | |SysReq/Attention |
+|`KC_CANCEL` | |Cancel |
+|`KC_CLEAR` |`KC_CLR` |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 |
## Media Keys
@@ -165,42 +193,37 @@ These keycodes are not part of the Keyboard/Keypad usage page. The `SYSTEM_` key
Windows and macOS use different keycodes for "next track" and "previous track". Make sure you choose the keycode that corresponds to your OS.
-|Key |Aliases |Description |
-|-----------------------|---------|---------------------------------|
-|`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_STOP` | |Stop |
-|`KC_WWW_FAVORITES` |`KC_WFAV`| |
-|`KC__MUTE` | |Mute (macOS) |
-|`KC__VOLUP` | |Volume Up (macOS) |
-|`KC__VOLDOWN` | |Volume Down (macOS) |
-|`KC_AUDIO_MUTE` |`KC_MUTE`|Mute (Windows/macOS/Linux) |
-|`KC_AUDIO_VOL_UP` |`KC_VOLU`|Volume Up (Windows/macOS/Linux) |
-|`KC_AUDIO_VOL_DOWN` |`KC_VOLD`|Volume Down (Windows/macOS/Linux)|
-|`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`|Stop Track |
-|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY`|Play/Pause Track |
-|`KC_MEDIA_SELECT` |`KC_MSEL`| |
-|`KC_MEDIA_EJECT` |`KC_EJCT`|Eject (macOS) |
+|Key |Aliases |Description |
+|-----------------------|---------|-----------------------------|
+|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |
+|`KC_SYSTEM_SLEEP` |`KC_SLEP`|System Sleep |
+|`KC_SYSTEM_WAKE` |`KC_WAKE`|System Wake |
+|`KC_AUDIO_MUTE` |`KC_MUTE`|Mute |
+|`KC_AUDIO_VOL_UP` |`KC_VOLU`|Volume Up |
+|`KC_AUDIO_VOL_DOWN` |`KC_VOLD`|Volume Down |
+|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT`|Next Track (Windows) |
+|`KC_MEDIA_PREV_TRACK` |`KC_MPRV`|Previous Track (Windows) |
+|`KC_MEDIA_STOP` |`KC_MSTP`|Stop Track (Windows) |
+|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY`|Play/Pause Track |
+|`KC_MEDIA_SELECT` |`KC_MSEL`|Launch Media Player (Windows)|
+|`KC_MEDIA_EJECT` |`KC_EJCT`|Eject (macOS) |
+|`KC_MAIL` | |Launch Mail (Windows) |
+|`KC_CALCULATOR` |`KC_CALC`|Launch Calculator (Windows) |
+|`KC_MY_COMPUTER` |`KC_MYCM`|Launch My Computer (Windows) |
+|`KC_WWW_SEARCH` |`KC_WSCH`|Browser Search (Windows) |
+|`KC_WWW_HOME` |`KC_WHOM`|Browser Home (Windows) |
+|`KC_WWW_BACK` |`KC_WBAK`|Browser Back (Windows) |
+|`KC_WWW_FORWARD` |`KC_WFWD`|Browser Forward (Windows) |
+|`KC_WWW_STOP` |`KC_WSTP`|Browser Stop (Windows) |
+|`KC_WWW_REFRESH` |`KC_WREF`|Browser Refresh (Windows) |
+|`KC_WWW_FAVORITES` |`KC_WFAV`|Browser Favorites (Windows) |
+|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD`|Next Track (macOS) |
+|`KC_MEDIA_REWIND` |`KC_MRWD`|Previous Track (macOS) |
## Number Pad
|Key |Aliases |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 `-` |
@@ -225,7 +248,7 @@ Windows and macOS use different keycodes for "next track" and "previous track".
In addition to these, keycodes in the range of `0xA5-DF` are reserved for internal use by TMK.
-|Key |Aliases |Description |
-|----------------|---------|---------------------------------------|
-|`KC_NO` | |Ignore this key (NOOP) |
-|`KC_TRANSPARENT`|`KC_TRNS`|Use the next lowest non-transparent key|
+|Key |Aliases |Description |
+|----------------|--------------------|---------------------------------------|
+|`KC_NO` |`XXXXXXX` |Ignore this key (NOOP) |
+|`KC_TRANSPARENT`|`KC_TRNS`, `_______`|Use the next lowest non-transparent key|
diff --git a/docs/keycodes_us_ansi_shifted.md b/docs/keycodes_us_ansi_shifted.md
index 5163b3bf15..e7abaa7099 100644
--- a/docs/keycodes_us_ansi_shifted.md
+++ b/docs/keycodes_us_ansi_shifted.md
@@ -1,31 +1,33 @@
# US ANSI Shifted Symbols
-These keycodes correspond to characters that are "shifted" on a standard US ANSI keyboards. They do not have dedicated keycodes but are instead typed by holding down shift and then sending a keycode.
+These keycodes correspond to characters that are "shifted" on a standard US ANSI keyboard. They do not have keycodes of their own but are simply shortcuts for `LSFT(kc)`, and as such send a Left Shift with the unshifted keycode, not the symbol itself.
-It's important to remember that all of these keycodes send a left shift - this may cause unintended actions if unaccounted for. The short code is preferred in most situations.
+## Caveats
-## US ANSI Shifted Keycodes
+Unfortunately, these keycodes cannot be used in Mod-Taps or Layer-Taps, since any modifiers specified in the keycode are ignored.
-|Key |Aliases |Description |
-|------------------------|------------------|-------------------|
-|`KC_TILDE` |`KC_TILD` |`~` |
-|`KC_EXCLAIM` |`KC_EXLM` |`!` |
-|`KC_AT` | |`@` |
-|`KC_HASH` | |`#` |
-|`KC_DOLLAR` |`KC_DLR` |`$` |
-|`KC_PERCENT` |`KC_PERC` |`%` |
-|`KC_CIRCUMFLEX` |`KC_CIRC` |`^` |
-|`KC_AMPERSAND` |`KC_AMPR` |`&` |
-|`KC_ASTERISK` |`KC_ASTR` |`*` |
-|`KC_LEFT_PAREN` |`KC_LPRN` |`(` |
-|`KC_RIGHT_PAREN` |`KC_RPRN` |`)` |
-|`KC_UNDERSCORE` |`KC_UNDS` |`_` |
-|`KC_PLUS` | |`+` |
-|`KC_LEFT_CURLY_BRACE` |`KC_LCBR` |`{` |
-|`KC_RIGHT_CURLY_BRACE` |`KC_RCBR` |`}` |
-|`KC_PIPE` | ||
|
-|`KC_COLON` |`KC_COLN` |`:` |
-|`KC_DOUBLE_QUOTE` |`KC_DQT`/`KC_DQUO`|`"` |
-|`KC_LEFT_ANGLE_BRACKET` |`KC_LT`/`KC_LABK` |`<` |
-|`KC_RIGHT_ANGLE_BRACKET`|`KC_GT`/`KC_RABK` |`>` |
-|`KC_QUESTION` |`KC_QUES` |`?` |
+## Keycodes
+
+|Key |Aliases |Description |
+|------------------------|-------------------|-------------------|
+|`KC_TILDE` |`KC_TILD` |`~` |
+|`KC_EXCLAIM` |`KC_EXLM` |`!` |
+|`KC_AT` | |`@` |
+|`KC_HASH` | |`#` |
+|`KC_DOLLAR` |`KC_DLR` |`$` |
+|`KC_PERCENT` |`KC_PERC` |`%` |
+|`KC_CIRCUMFLEX` |`KC_CIRC` |`^` |
+|`KC_AMPERSAND` |`KC_AMPR` |`&` |
+|`KC_ASTERISK` |`KC_ASTR` |`*` |
+|`KC_LEFT_PAREN` |`KC_LPRN` |`(` |
+|`KC_RIGHT_PAREN` |`KC_RPRN` |`)` |
+|`KC_UNDERSCORE` |`KC_UNDS` |`_` |
+|`KC_PLUS` | |`+` |
+|`KC_LEFT_CURLY_BRACE` |`KC_LCBR` |`{` |
+|`KC_RIGHT_CURLY_BRACE` |`KC_RCBR` |`}` |
+|`KC_PIPE` | ||
|
+|`KC_COLON` |`KC_COLN` |`:` |
+|`KC_DOUBLE_QUOTE` |`KC_DQUO`, `KC_DQT`|`"` |
+|`KC_LEFT_ANGLE_BRACKET` |`KC_LABK`, `KC_LT` |`<` |
+|`KC_RIGHT_ANGLE_BRACKET`|`KC_RABK`, `KC_GT` |`>` |
+|`KC_QUESTION` |`KC_QUES` |`?` |
diff --git a/docs/redirects.json b/docs/redirects.json
index 43e9064081..814518f405 100644
--- a/docs/redirects.json
+++ b/docs/redirects.json
@@ -34,7 +34,7 @@
},
{
"from": "space_cadet_shift.html",
- "to": "feature_space_cadet.html"
+ "to": "feature_space_cadet_shift.html"
},
{
"from": "tap_dance.html",
diff --git a/docs/reference_glossary.md b/docs/reference_glossary.md
index 754c1469e3..29d07f26d3 100644
--- a/docs/reference_glossary.md
+++ b/docs/reference_glossary.md
@@ -133,7 +133,7 @@ A 1 byte number that is sent as part of a HID report over USB that represents a
## Space Cadet Shift
A special set of shift keys which allow you to type various types of braces by tapping the left or right shift one or more times.
-* [Space Cadet Shift Documentation](feature_space_cadet.md)
+* [Space Cadet Shift Documentation](feature_space_cadet_shift.md)
## Tap
Pressing and releasing a key. In some situations you will need to distinguish between a key down and a key up event, and Tap always refers to both at once.
diff --git a/keyboards/1up60rgb/readme.md b/keyboards/1up60rgb/readme.md
index 0e132e44df..a16ab7ea86 100644
--- a/keyboards/1up60rgb/readme.md
+++ b/keyboards/1up60rgb/readme.md
@@ -4,7 +4,7 @@ Firmware for custom keyboard PCB with 60% key layout.
Keyboard Maintainer: [rempired](https://github.com/rempired)
Hardware Supported: 1upkeyboards 60% RGB
-Hardware Availability: [1upkeyboards](https://1upkeyboards.com/rgb-underglow-1up-pcb.html)
+Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/1up-rgb-underglow-pcb/)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/4x4/4x4.c b/keyboards/4x4/4x4.c
new file mode 100644
index 0000000000..963b6d00d4
--- /dev/null
+++ b/keyboards/4x4/4x4.c
@@ -0,0 +1,29 @@
+
+#include "4x4.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/4x4/4x4.h b/keyboards/4x4/4x4.h
new file mode 100644
index 0000000000..db67ab34e9
--- /dev/null
+++ b/keyboards/4x4/4x4.h
@@ -0,0 +1,62 @@
+
+#ifndef FOURX4_H
+#define FOURX4_H
+
+#include "quantum.h"
+#define ___ KC_NO
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT_ortho_4x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23, \
+ K30, K31, K32, K33 \
+) \
+{ \
+ { K00, K01, K02, K03, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K10, K11, K12, K13, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K20, K21, K22, K23, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K30, K31, K32, K33, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___} \
+}
+#define LAYOUT_ortho_4x8( \
+ K00, K01, K02, K03, K04, K05, K06, K07, \
+ K10, K11, K12, K13, K14, K15, K16, K17, \
+ K20, K21, K22, K23, K24, K25, K26, K27, \
+ K30, K31, K32, K33, K34, K35, K36, K37\
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K30, K31, K32, K33, K34, K35, K35, K37, ___, ___, ___, ___, ___, ___, ___, ___} \
+}
+#define LAYOUT_ortho_4x12( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, ___, ___, ___, ___}, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, ___, ___, ___, ___}, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, ___, ___, ___, ___}, \
+ { K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, K3a, K3b, ___, ___, ___, ___} \
+}
+
+#define LAYOUT_ortho_4x16( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e, K0f, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e, K1f, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e, K2f, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, K3f \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e, K0f }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e, K1f }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e, K2f }, \
+ { K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, K3f } \
+}
+
+#endif
diff --git a/keyboards/4x4/config.h b/keyboards/4x4/config.h
new file mode 100644
index 0000000000..e66e9433a9
--- /dev/null
+++ b/keyboards/4x4/config.h
@@ -0,0 +1,202 @@
+
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x4444
+#define MANUFACTURER di0ib
+#define PRODUCT The 4x4 Keyboard
+#define DESCRIPTION A modular compact keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B2, D1, D0, D4 }
+#define MATRIX_COL_PINS { C6, D7, E6, B4, B5, B6, B7, D6, F7, F6, F5, F4, F1, F0, B3, B1 }
+#define UNUSED_PINS
+
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN C7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/4x4/keymaps/default/config.h b/keyboards/4x4/keymaps/default/config.h
new file mode 100644
index 0000000000..d533d806c9
--- /dev/null
+++ b/keyboards/4x4/keymaps/default/config.h
@@ -0,0 +1,5 @@
+
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/4x4/keymaps/default/keymap.c b/keyboards/4x4/keymaps/default/keymap.c
new file mode 100644
index 0000000000..144ec05c17
--- /dev/null
+++ b/keyboards/4x4/keymaps/default/keymap.c
@@ -0,0 +1,124 @@
+
+#include QMK_KEYBOARD_H
+
+#define PAD 0
+#define _QW 1
+#define NUM 2
+#define DIR 3
+
+// Readability keycodes
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Single 4x4 board only
+ * .-----------------------------------.
+ * | 7 | 8 | 9 | / |
+ * |--------+--------+--------+--------|
+ * | 4 | 5 | 6 | * |
+ * |--------+--------+--------+--------|
+ * | 1 | 2 | 3 | - |
+ * |--------+--------+--------+--------|
+ * | 0 | QWERTY | . | + |
+ * '-----------------------------------'
+ */
+
+ [PAD] = LAYOUT_ortho_4x4(
+ KC_KP_7, KC_KP_8, KC_KP_9, KC_PSLS,
+ KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST,
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS,
+ KC_KP_0, DF(_QW), KC_KP_DOT, KC_PPLS
+ ),
+
+/* QWERTY
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | Q | W | E | R | T | Y | U | I | O | P | BACKSP | 7 | 8 | 9 | / |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | TAB | A | S | D | F | G | H | J | K | L | ; | ' | 4 | 5 | 6 | * |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SHIFT | Z | X | C | V | B | N | M | , | . | / | ENT/SFT| 1 | 2 | 3 | - |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | LGUI | ALT | ALT | NUM | SHIFT | SPACE | DIR | RGUI | RALT | DEL | CTRL | 0 | 0 | . | + |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW] = LAYOUT_ortho_4x16(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_KP_7, KC_KP_8, KC_KP_9, KC_PSLS,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, MO(NUM), KC_LSFT, KC_SPC, MO(DIR), KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT, KC_PPLS
+ ),
+
+/* NUMBERS
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | NUMLOCK| / | * | - | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | + | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F11 | F12 | | | | ENTER | SHIFT | RGUI | ./ALT | BKSC | | | | ENTER | |
+ * | | | | | | | | | | |CTRLhold| | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |
+ * | | | | | | | ENTER | SHIFT | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [NUM] = LAYOUT_ortho_4x16(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_PPLS, _______,
+ _______, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT, _______,
+ _______, _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/* DIRECTIONS
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | RESET | TAB | up | | INS | CTRL | SHIFT | PgUp | Home | - | = | DEL | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | CAPSLK | left | down | right | PrScr | SHIFT | CTRL | PgDn | End | [ | ] | \ | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | P-Brk | | | | | | | RGUI | ALT | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | KEYPAD | | | | | | | | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [DIR] = LAYOUT_ortho_4x16(
+ RESET, KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_LSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_DEL, _______, _______, _______, _______,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_LCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______,
+ _______, KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_RALT, _______, _______, _______, _______, _______, _______,
+ DF(PAD), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ keyevent_t event = record->event;
+ (void)event;
+
+ switch (id) {
+
+ }
+ return MACRO_NONE;
+}
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/4x4/readme.md b/keyboards/4x4/readme.md
new file mode 100644
index 0000000000..3ca074fddd
--- /dev/null
+++ b/keyboards/4x4/readme.md
@@ -0,0 +1,23 @@
+# 4x4
+
+
+===
+
+**Modular keypad/keyboard**
+The basic unit is a 4x4 matrix with 16 keys. Up to 4 of these can be connected to each other side by side.
+4x4, 4x8, 4x12 and 4x16 are possible.
+There are pads for header pins on each side that complete the circuits from board to board. These can be permanently connected with solder bridges or temporarily with pin headers and shunt jumpers.
+**_All configurations are powered by a SINGLE Arduino Micro or clone (NOT a Pro Micro)._**
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/4x4)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: 4x4 PCB
+Hardware Availability: [4x4x4x4x4 project on 40% Keyboards](http://www.40percent.club/2018/01/4x4x4x4x4.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 4x4:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+First pass at adding support for the 4x4 keyboard. Compiles but completely untested. Intended to kick-start development.
diff --git a/keyboards/4x4/rules.mk b/keyboards/4x4/rules.mk
new file mode 100644
index 0000000000..3ea4476dbe
--- /dev/null
+++ b/keyboards/4x4/rules.mk
@@ -0,0 +1,74 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+LAYOUT = ortho_4x4 ortho_4x8 ortho_4x12 ortho_4x16
diff --git a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c b/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
index ba343ce4db..3672a40c1f 100644
--- a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
+++ b/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
@@ -5,15 +5,9 @@
#define BASE 0
#define KEYNAV 1
#define KEYSEL 2
-#define MOUSE 3
-#define COMBINED 4
-#define BROWSER_CONTROL 5
+#define COMBINED 3
+#define BROWSER_CONTROL 4
-// macros
-#define MOUSE_TOGGLE 1
-#define MOUSE_LOCK 2
-
-static bool mouse_lock = false;
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
@@ -63,18 +57,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TILD, KC_GRAVE, KC_CIRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_PIPE, KC_BSLS
),
- [MOUSE] = LAYOUT(
- KC_TRNS, KC_PGUP, KC_MS_WH_UP, KC_UP, KC_TRNS, KC_UP, KC_HOME, KC_MS_U, KC_END, KC_MS_WH_UP,
- KC_MS_ACCEL0, KC_PGDN, KC_MS_WH_DOWN, KC_DOWN, KC_TRNS, KC_DOWN, KC_MS_L, KC_MS_D, KC_MS_R, KC_MS_WH_DOWN,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MEH(KC_X), MEH(KC_Y), MEH(KC_Z), KC_F5, RCTL(KC_W),
- KC_TRNS, M(MOUSE_LOCK), KC_TRNS, KC_MS_ACCEL0, KC_TRNS, KC_BTN3, KC_BTN1, KC_BTN2, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT)
- ),
-
[BROWSER_CONTROL] = LAYOUT(
- KC_TRNS, KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, KC_TRNS,
- KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT),
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), RSFT(RCTL(KC_TAB)), KC_TRNS, KC_TRNS, KC_TRNS
+ MEH(KC_0), KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, MEH(KC_9),
+ MEH(KC_1), KC_MS_L, KC_MS_D, KC_MS_R, MEH(KC_6), KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT),
+ MEH(KC_2), MEH(KC_3), MEH(KC_4), MEH(KC_5), MEH(KC_7), MEH(KC_8), RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), RSFT(RCTL(KC_TAB)), KC_TRNS, KC_TRNS, KC_TRNS
),
};
@@ -116,30 +103,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case MOUSE_TOGGLE:
- if (record->event.pressed) {
- layer_on(MOUSE);
- } else {
- if(!mouse_lock)
- layer_off(MOUSE);
- }
- break;
- case MOUSE_LOCK:
- if (record->event.pressed)
- {
- if(mouse_lock)
- {
- mouse_lock = false;
- layer_off(MOUSE);
- }
- else
- mouse_lock = true;
- }
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/bfake/readme.md b/keyboards/bfake/readme.md
index 47db914985..ca12b49962 100644
--- a/keyboards/bfake/readme.md
+++ b/keyboards/bfake/readme.md
@@ -11,4 +11,34 @@ Make example for this keyboard (after setting up your build environment):
make bfake:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
\ No newline at end of file
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/bmini/readme.md b/keyboards/bmini/readme.md
index 01017e175c..38dc493075 100644
--- a/keyboards/bmini/readme.md
+++ b/keyboards/bmini/readme.md
@@ -11,4 +11,34 @@ Make example for this keyboard (after setting up your build environment):
make bmini:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
\ No newline at end of file
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/canoe/readme.md b/keyboards/canoe/readme.md
index 4a83efd82a..f58ffe4fd6 100644
--- a/keyboards/canoe/readme.md
+++ b/keyboards/canoe/readme.md
@@ -11,4 +11,34 @@ Make example for this keyboard (after setting up your build environment):
make canoe:default
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/catch22/README.md b/keyboards/catch22/README.md
new file mode 100644
index 0000000000..8d4a22398f
--- /dev/null
+++ b/keyboards/catch22/README.md
@@ -0,0 +1,17 @@
+# Catch 22 Budget Hotswap Macropad
+
+GB by /u/rockydbull run in July 2018, PCB designed with help from /u/Kilgarah.
+
+Designed to be a budget project board to enjoy hotswapping/switch testing/macro making fun. The board is controlled by a pro micro clone made famous by other projects like the lets split, iris, and nyquist and allows for full QMK implementation. Each Catch22 kit will contain:
+
+ * 2 pcbs (one to solder to and one to be a base)(green color)
+ * 1 pcb material switch plate( green color) with cut out for pcb mount cherry stabilizers
+ * 40 throughhole diodes (22 for the pcb and the remaining as extras in case you lose one and to use to make the pro micro removeable without desoldering)
+ * 22 Kailh hotswap sockets
+ * 1 smd reset button
+ * 1 dip socket to mount between the pcb and pro micro if you choose to make it removeable without desoldering
+ * 5 (12mm) m2 standoffs
+ * 10 m2 screws
+ * Genuine Cherry pcb mount 2u stabilizer
+ * 4 rubber bumpons
+ * Pro Micro is included in kit
diff --git a/keyboards/catch22/catch22.c b/keyboards/catch22/catch22.c
new file mode 100644
index 0000000000..11a983936e
--- /dev/null
+++ b/keyboards/catch22/catch22.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2018 QMK Community
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "catch22.h"
diff --git a/keyboards/catch22/catch22.h b/keyboards/catch22/catch22.h
new file mode 100644
index 0000000000..6eefb9cd51
--- /dev/null
+++ b/keyboards/catch22/catch22.h
@@ -0,0 +1,33 @@
+/*
+Copyright 2018 QMK Community
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K01, K02, K03, K04, \
+ K11, K12, K13, K14, \
+K20, K21, K22, K23, K24, \
+K30, K31, K32, K33, K34, \
+ K41, K42, K43, K44 \
+) { \
+ { KC_NO, K01, K02, K03, K04 }, \
+ { KC_NO, K11, K12, K13, K14 }, \
+ { K20, K21, K22, K23, K24 }, \
+ { K30, K31, K32, K33, K34 }, \
+ { KC_NO, K41, K42, K43, K44 }, \
+}
diff --git a/keyboards/catch22/config.h b/keyboards/catch22/config.h
new file mode 100644
index 0000000000..cb7ca7d84c
--- /dev/null
+++ b/keyboards/catch22/config.h
@@ -0,0 +1,56 @@
+/*
+Copyright 2018 QMK Contributors
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xCA22
+#define DEVICE_VER 0x0001
+#define MANUFACTURER rockydbull
+#define PRODUCT Catch22 Hotswap Macropad
+#define DESCRIPTION Budget 22 Key Hotswap Macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 5
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
+#define MATRIX_COL_PINS { B5, B4, E6, D7, C6 }
+#define UNUSED_PINS { }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 50
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ false \
+)
+
+/* prevent stuck modifiers */
+#define PREVENT_STUCK_MODIFIERS
+
+#ifdef RGBLIGHT_ENABLE
+#define RGB_DI_PIN F6
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 6
+#endif
diff --git a/keyboards/catch22/info.json b/keyboards/catch22/info.json
new file mode 100644
index 0000000000..eb95b8561d
--- /dev/null
+++ b/keyboards/catch22/info.json
@@ -0,0 +1,10 @@
+{
+ "keyboard_name": "catch22",
+ "width": 5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"A", "x":1, "y":0}, {"label":"B", "x":2, "y":0}, {"label":"C", "x":3, "y":0}, {"label":"D", "x":4, "y":0}, {"label":"E", "x":1, "y":1}, {"label":"F", "x":2, "y":1}, {"label":"G", "x":3, "y":1}, {"label":"H", "x":4, "y":1}, {"label":"I", "x":0, "y":2}, {"label":"J", "x":1, "y":2}, {"label":"K", "x":2, "y":2}, {"label":"L", "x":3, "y":2}, {"label":"M", "x":4, "y":2}, {"label":"1", "x":0, "y":3, "h":2}, {"label":"N", "x":1, "y":3}, {"label":"O", "x":2, "y":3}, {"label":"P", "x":3, "y":3}, {"label":"Q", "x":4, "y":3}, {"label":"R", "x":1, "y":4}, {"label":"S", "x":2, "y":4}, {"label":"T", "x":3, "y":4}, {"label":"U", "x":4, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/catch22/keymaps/default/keymap.c b/keyboards/catch22/keymaps/default/keymap.c
new file mode 100644
index 0000000000..f36478d440
--- /dev/null
+++ b/keyboards/catch22/keymaps/default/keymap.c
@@ -0,0 +1,31 @@
+#include QMK_KEYBOARD_H
+
+#define _BASE 0
+#define _FN 1
+
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BASE] = LAYOUT( /* Base */
+ KC_NLCK, KC_PSLS, KC_PAST, KC_BSPC, \
+ KC_P7, KC_P8, KC_P9, KC_PEQL, \
+ MO(_FN), KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_PENT, KC_P1, KC_P2, KC_P3, KC_PMNS, \
+ KC_SPC, KC_P0, KC_PDOT, KC_TAB \
+),
+[_FN] = LAYOUT(
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUI, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, \
+ KC_2, _______, _______, _______, _______, \
+ _______, _______, _______, _______ \
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
+{
+ return MACRO_NONE;
+};
diff --git a/keyboards/catch22/rules.mk b/keyboards/catch22/rules.mk
new file mode 100644
index 0000000000..2b76e465cf
--- /dev/null
+++ b/keyboards/catch22/rules.mk
@@ -0,0 +1,60 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Bootloader
+BOOTLOADER = caterina
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Custom backlighting code is used, so this should not be enabled
+AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below
+RGBLIGHT_ENABLE = yes # This can be enabled if a ws2812 strip is connected to the expansion port.
+
diff --git a/keyboards/ckeys/obelus/keymaps/default/keymap.c b/keyboards/ckeys/obelus/keymaps/default/keymap.c
index a9b15e9347..c2c8e4a052 100644
--- a/keyboards/ckeys/obelus/keymaps/default/keymap.c
+++ b/keyboards/ckeys/obelus/keymaps/default/keymap.c
@@ -18,7 +18,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |
* `---------------------- '
*/
-[0] = KEYMAP( /* LAYER SELECT */
+[0] = LAYOUT( /* LAYER SELECT */
KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
TO(4), KC_TRNS, KC_TRNS, KC_TRNS, \
TO(1), TO(2), TO(3), KC_TRNS, \
@@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | 0 | . | / | = |
* `---------------------- '
*/
-[1] = KEYMAP( /* NUMPAD */
+[1] = LAYOUT( /* NUMPAD */
KC_P7, KC_P8, KC_P9, KC_PAST, \
KC_P4, KC_P5, KC_P6, KC_PMNS, \
KC_P1, KC_P2, KC_P3, KC_PPLS, \
@@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |
* `---------------------- '
*/
-[5] = KEYMAP( /* NUMPAD SUPPLEMENT */
+[5] = LAYOUT( /* NUMPAD SUPPLEMENT */
KC_NLCK, KC_TRNS, KC_TRNS, TO(0), \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
@@ -69,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |LEFT |DOWN |RIGHT|ENTER|
* `---------------------- '
*/
-[2] = KEYMAP( /* NAV CLUSTER */
+[2] = LAYOUT( /* NAV CLUSTER */
KC_INS, KC_PGUP, KC_TAB, KC_PSCR, \
KC_DEL, KC_PGDN, KC_VOLD, KC_VOLU, \
KC_HOME, KC_UP, KC_END, TO(0), \
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |CTRL | C | R |SPACE|
* `---------------------- '
*/
-[3] = KEYMAP( /* GAMING */
+[3] = LAYOUT( /* GAMING */
LT(4, KC_ESC), KC_1, KC_2, KC_3, \
KC_TAB, KC_Q, KC_W, KC_E, \
KC_LSFT, KC_A, KC_S, KC_D, \
@@ -103,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |TOGGL|MODE | | |
* `---------------------- '
*/
-[4] = KEYMAP( /* NUMPAD SUPPLEMENT */
+[4] = LAYOUT( /* NUMPAD SUPPLEMENT */
KC_NO, KC_NO, KC_NO, KC_NO, \
KC_NO, KC_NO, KC_NO, KC_NO, \
KC_NO, KC_NO, KC_NO, KC_NO, \
diff --git a/keyboards/ckeys/obelus/obelus.h b/keyboards/ckeys/obelus/obelus.h
index 8444be897c..21bc4d723f 100644
--- a/keyboards/ckeys/obelus/obelus.h
+++ b/keyboards/ckeys/obelus/obelus.h
@@ -7,7 +7,7 @@
// The following is an example using the Planck MIT layout
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
-#define KEYMAP( \
+#define LAYOUT( \
k00, k01, k02, k03, \
k10, k11, k12, k13, \
k20, k21, k22, k23, \
diff --git a/keyboards/contra/keymaps/maxr1998/keymap.c b/keyboards/contra/keymaps/maxr1998/keymap.c
index cbd8a99fca..afdd3d94ac 100644
--- a/keyboards/contra/keymaps/maxr1998/keymap.c
+++ b/keyboards/contra/keymaps/maxr1998/keymap.c
@@ -20,19 +20,13 @@
enum contra_layers {
_QWERTZ,
_FUNC,
- _NUMPAD,
_NUMROW
};
+#define KC_I3 LM(_NUMROW, MOD_LALT)
+#define KC_NR MO(_NUMROW)
+#define NR_L3 SAFE_RANGE
#define FUN MO(_FUNC)
-#define NPK TT(_NUMPAD)
-//#define SPEC_S LM(_NUMROW, (KC_LSFT))
-//#define SPEC_L3 LM(_NUMROW, (DE_ALGR))
-
-enum custom_keycodes {
- SPEC_S = SAFE_RANGE,
- SPEC_L3
-};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -44,21 +38,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Y | X | C | V | B | N | M | , | . | Up | Shift|
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | Sup | Alt | NumP | Spec | Space | Sp_A | Fun | Left | Down | Right|
+ * | Ctrl | Sup | Alt | i3 | NumR | Space | Spec | Fun | Left | Down | Right|
* `-----------------------------------------------------------------------------------'
*/
[_QWERTZ] = {
{KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_PLUS, KC_ENT },
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT},
- {KC_LCTL, KC_LGUI, KC_LALT, NPK, SPEC_S, KC_SPC, KC_SPC, SPEC_L3, FUN, KC_LEFT, KC_DOWN, KC_RGHT}
+ {KC_LCTL, KC_LGUI, KC_LALT, KC_I3, KC_NR, KC_SPC, KC_SPC, NR_L3, FUN, KC_LEFT, KC_DOWN, KC_RGHT}
},
/* Function layer
* ,-----------------------------------------------------------------------------------.
* | | | | | | | | Ü | | Ö | | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Lock | Ä | | | | | | RGBS | RGBB | RGBS | | |
+ * | Lock | Ä | ß | | | | | RGBS | RGBB | RGBS | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | | | | | RGBH-| RGBT | RGBH+| PgUp | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -67,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_FUNC] = {
{_______, _______, _______, _______, _______, _______, _______, DE_UE, _______, DE_OE, _______, KC_DEL },
- {KC_LOCK, DE_AE, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, RGB_M_SW,_______, _______},
+ {KC_LOCK, DE_AE, DE_SS, _______, _______, _______, _______, RGB_M_P, RGB_M_B, RGB_M_SW,_______, _______},
{_______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_TOG, RGB_HUI, KC_PGUP, _______},
{_______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_END }
},
@@ -76,51 +70,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------------------------------------.
* | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | | | | | | | | | | |
+ * | | | | | | | | | | | #' | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | ><| | | | | | | | | | _ - | |
+ * | | <> | | | | | | | | | | -_ | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | ---- | ---- | | | ---- | ---- | | | |
* `-----------------------------------------------------------------------------------'
*/
[_NUMROW] = {
{_______, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS },
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DE_HASH, _______},
{_______, DE_LESS, _______, _______, _______, _______, _______, _______, _______, _______, DE_MINS, _______},
{_______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______}
-},
-
-/* Numpad layer
- * ,-----------------------------------------------------------------------------------.
- * | | + | 7 | 8 | 9 | | | | | | | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | - | 4 | 5 | 6 | | | | | | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | * | 1 | 2 | 3 | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | / | 0 | ---- | ---- | | | ---- | ---- | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_NUMPAD] = {
- {DEBUG, KC_PPLS, KC_P7, KC_P8, KC_P9, _______, _______, _______, _______, _______, _______, _______},
- {_______, KC_PMNS, KC_P4, KC_P5, KC_P6, _______, _______, _______, _______, _______, _______, _______},
- {_______, KC_PAST, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______},
- {_______, KC_PSLS, KC_P0, _______, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______}
}
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case SPEC_S:
- if (record->event.pressed) {
- register_code(KC_LSFT);
- layer_on(_NUMROW);
- } else {
- layer_off(_NUMROW);
- unregister_code(KC_LSFT);
- }
- return false;
- case SPEC_L3:
+ if (keycode == NR_L3) {
if (record->event.pressed) {
register_code(DE_ALGR);
layer_on(_NUMROW);
@@ -129,9 +95,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
unregister_code(DE_ALGR);
}
return false;
- default:
- return true;
}
+ return true;
}
void led_set_user(uint8_t usb_led) {
diff --git a/keyboards/contra/keymaps/maxr1998/readme.md b/keyboards/contra/keymaps/maxr1998/readme.md
index c18140acaf..18d57e2cbc 100644
--- a/keyboards/contra/keymaps/maxr1998/readme.md
+++ b/keyboards/contra/keymaps/maxr1998/readme.md
@@ -1 +1,2 @@
-# Contra Layout by Maxr1998
\ No newline at end of file
+# Contra Layout by Maxr1998
+
\ No newline at end of file
diff --git a/keyboards/contra/keymaps/maxr1998/rules.mk b/keyboards/contra/keymaps/maxr1998/rules.mk
index bd395e10f7..75a476114f 100644
--- a/keyboards/contra/keymaps/maxr1998/rules.mk
+++ b/keyboards/contra/keymaps/maxr1998/rules.mk
@@ -1,8 +1,13 @@
RGBLIGHT_ENABLE = yes
KEY_LOCK_ENABLE = yes
+EXTRAFLAGS += -flto
+UNICODE_ENABLE = no
+MOUSEKEY_ENABLE = no
+
### Debugging ###
-#CONSOLE_ENABLE = yes
+CONSOLE_ENABLE = no # yes
+COMMAND_ENABLE = no
ifndef QUANTUM_DIR
include ../../../../Makefile
diff --git a/keyboards/converter/m0110_usb/README.md b/keyboards/converter/m0110_usb/README.md
new file mode 100644
index 0000000000..3041eb0b4a
--- /dev/null
+++ b/keyboards/converter/m0110_usb/README.md
@@ -0,0 +1,51 @@
+M0110(A) keyboard converter
+======================================
+This is a port of the original M0110 converter from TMK to QMK. The original converter was designed to work with **ATmega32U2** and **ATmega32U4** based microcontrollers to convert Apple M0110/M0110A keyboards and M0120 numpads to USB. This port has been tested to be compatible with the [**Adafruit Feather 32U4 BLE**](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le).
+
+
+### Enabling Bluetooth for the Adafruit Feather 32U4 BLE
+----------------------------------------------------
+Simply add `BLUETOOTH = AdafruitBLE` to your `rules.mk` file. This enables code specifically for the Adafruit Feather 32U4 BLE. If enabled, the device will use the `PRODUCT` and `DESCRIPTION` values from `config.h` for the device name displayed by the Feather on host devices. You can simply change these values to change the device name.
+
+
+### Pins
+----
+This port utilizes the same pins that the TMK converter used. `PD1` is used for `CLOCK` and `PD0` is used for the `DATA` from the keyboard. These pins can be changed in `config.h`.
+
+
+### Other important hardware notes from the original TMK converter Readme:
+>### Hardware
+>--------
+>You can buy preassembled [TMK converter] or make yourown with AVR dev board like PJRC [Teensy].
+>
+>Port of the MCU `PD1` is assigned to `CLOCK` line and `PD0` to `DATA` by default, you can change pin configuration with editing `config.h`.
+>
+>[](http://i.imgur.com/yEp2eRi.jpg)
+>
+>#### 4P4C phone handset cable
+>Note that original cable used with Mac is **straight** while phone handset cable is **crossover**.
+>
+>
+>
+>[Teensy]: http://www.pjrc.com/teensy/
+>[TMK converter]: https://geekhack.org/index.php?topic=72052.0
+>
+>
+>#### Socket Pinout
+>-
+>
+>
+>
+>
+>#### Pull-up Resistor
+>You may need pull-up resistors on signal lines(`CLOCK`, `DATA`) in particular when you have long or coiled cable. **1k-10k Ohm** will be OK >for this purpose. In that case the converter may not read signal from keyboard correctly without pull-up resistors.
+>
+
+[**View the original TMK converter Readme**](https://github.com/tmk/tmk_keyboard/tree/master/converter/m0110_usb)\
+[**View the original TMK converter Repository**](https://github.com/tmk/tmk_keyboard/tree/master/converter/m0110_usb)
+
+
+### QMK Port Changelog
+---------
+- 2018/08/01 - Original Release
+
diff --git a/keyboards/converter/m0110_usb/config.h b/keyboards/converter/m0110_usb/config.h
new file mode 100644
index 0000000000..79abb9a889
--- /dev/null
+++ b/keyboards/converter/m0110_usb/config.h
@@ -0,0 +1,59 @@
+/*
+Copyright 2011,2012 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+
+--------------
+
+Ported to QMK by Techsock
+*/
+
+#pragma once
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0110
+#define DEVICE_VER 0x0101
+#define MANUFACTURER Apple
+#define PRODUCT M0110(A)
+#define DESCRIPTION Converts M0110(A) to USB and/or BT
+
+/* matrix size */
+#define MATRIX_ROWS 14
+#define MATRIX_COLS 8
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* magic key */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LALT) | MOD_BIT(KC_LGUI)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LALT) | MOD_BIT(KC_LCTL)) \
+)
+
+/* boot magic key */
+#define BOOTMAGIC_KEY_SALT KC_M
+
+/* ports */
+#define M0110_CLOCK_PORT PORTD
+#define M0110_CLOCK_PIN PIND
+#define M0110_CLOCK_DDR DDRD
+#define M0110_CLOCK_BIT 1
+#define M0110_DATA_PORT PORTD
+#define M0110_DATA_PIN PIND
+#define M0110_DATA_DDR DDRD
+#define M0110_DATA_BIT 0
+
+
diff --git a/keyboards/converter/m0110_usb/keymaps/default/keymap.c b/keyboards/converter/m0110_usb/keymaps/default/keymap.c
new file mode 100644
index 0000000000..c2eeb5144e
--- /dev/null
+++ b/keyboards/converter/m0110_usb/keymaps/default/keymap.c
@@ -0,0 +1,92 @@
+/*
+Copyright 2011,2012,2015 Jun Wako
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+
+--------------
+
+Ported to QMK by Techsock
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Default:
+ * M0110 M0120
+ * ,---------------------------------------------------------. ,---------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Nlk| =| /| *|
+ * |---------------------------------------------------------| |---------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| -|
+ * |---------------------------------------------------------| |---------------|
+ * |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
+ * |---------------------------------------------------------| |---------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | 1| 2| 3| |
+ * `---------------------------------------------------------' |-----------|Ent|
+ * |Opt|Mac | Space |Fn |Opt| | 0| .| |
+ * `-----------------------------------------------' `---------------'
+ * M0110A
+ * ,---------------------------------------------------------. ,---------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Nlk| =| /| *|
+ * |---------------------------------------------------------| |---------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
+ * |-----------------------------------------------------' | |---------------|
+ * |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
+ * |---------------------------------------------------------| |---------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shft|Up | | 1| 2| 3| |
+ * |---------------------------------------------------------| |-----------|Ent|
+ * |Opt |Mac | Space | \|Lft|Rgt|Dn | | 0| .| |
+ * `---------------------------------------------------------' `---------------'
+ */
+
+ [0] = LAYOUT_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_EQL, KC_PSLS, KC_PAST, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PMNS, \
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LALT, KC_LGUI, KC_SPC, MO(1), LT(1, KC_BSLASH), KC_LEFT, KC_RGHT, KC_DOWN, KC_P0, KC_PDOT),
+
+
+ /* Cursor Layer:
+ * M0110 M0120
+ * ,---------------------------------------------------------. ,---------------.
+ * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| =| /| *|
+ * |---------------------------------------------------------| |---------------|
+ * |Tab |Hom| Up|PgU|Rst| | | |Psc|Slk|Pau|Up |INS| | | 7| 8| 9| -|
+ * |---------------------------------------------------------| |---------------|
+ * |Ctrl |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Return| | 4| 5| 6| +|
+ * |---------------------------------------------------------| |---------------|
+ * |Shift |End| |PgD| | | | |End|PgD|Dow|Shift | | 1| 2| 3| |
+ * `---------------------------------------------------------' |-----------|Ent|
+ * |Opt|Mac | Space |Fn |Opt| | 0| .| |
+ * `-----------------------------------------------' `---------------'
+ * M0110A
+ * ,---------------------------------------------------------. ,---------------.
+ * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| =| /| *|
+ * |---------------------------------------------------------| |---------------|
+ * |Tab |Hom| Up|PgU| | | | |Psc|Slk|Pau|Up |INS| | | 7| 8| 9| -|
+ * |-----------------------------------------------------' | |---------------|
+ * |Caps |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Return| | 4| 5| 6| +|
+ * |---------------------------------------------------------| |---------------|
+ * |Ctrl |End| |PgD| | | | |End|PgD|Dow|Shft|PgU| | 1| 2| 3| |
+ * |---------------------------------------------------------| |-----------|Ent|
+ * |Opt |Mac | Space | \|Hom|End|PgD| | 0| .| |
+ * `---------------------------------------------------------' `---------------'
+ */
+
+ [1] = LAYOUT_ansi(
+ KC_ESC, 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_DEL, KC_NLCK, KC_EQL, KC_PSLS, KC_PAST, \
+ KC_TAB, KC_HOME, KC_UP, KC_PGUP, RESET, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_INS, KC_P7, KC_P8, KC_P9, KC_PMNS, \
+ KC_LCAP, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LCTL, KC_END, KC_NO, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_PGDN, KC_DOWN, KC_PGUP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LALT, KC_LGUI, KC_SPC, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_PGDN, KC_P0, KC_PDOT),
+
+};
\ No newline at end of file
diff --git a/keyboards/converter/m0110_usb/m0110_usb.c b/keyboards/converter/m0110_usb/m0110_usb.c
new file mode 100644
index 0000000000..a2f98cced6
--- /dev/null
+++ b/keyboards/converter/m0110_usb/m0110_usb.c
@@ -0,0 +1,3 @@
+#include "m0110_usb.h"
+#include
+#include "quantum.h"
diff --git a/keyboards/converter/m0110_usb/m0110_usb.h b/keyboards/converter/m0110_usb/m0110_usb.h
new file mode 100644
index 0000000000..88e74024fc
--- /dev/null
+++ b/keyboards/converter/m0110_usb/m0110_usb.h
@@ -0,0 +1,131 @@
+/*
+Copyright 2011,2012,2014,2015 Jun Wako
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+
+--------------
+
+Ported to QMK by Techsock
+*/
+
+#ifndef M0110_USB_H
+#define M0110_USB_H
+#endif
+
+#include "quantum.h"
+
+/* Common layout for M0110 and M0110A
+ * This keymap works with both keyboards. As you can see, the M0110A is
+ * a superset of M0110 keyboard, only one exception is 'Enter'(34) of M0110
+ * does not exist on the M0110A.
+ *
+ * ,---------------------------------------------------------. ,---------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| =| /| *|
+ * |---------------------------------------------------------| |---------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
+ * |-----------------------------------------------------' | |---------------|
+ * |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
+ * |---------------------------------------------------------| |---------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
+ * |---------------------------------------------------------| |-----------|Ent|
+ * |Opt |Mac | Space |Ent| \|Lft|Rgt|Dn | | 0| .| |
+ * `---------------------------------------------------------' `---------------'
+ *
+ * M0110A scan codes
+ * ,---------------------------------------------------------. ,---------------.
+ * | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18| 33| | 47| 68| 6D| 62|
+ * |---------------------------------------------------------| |---------------|
+ * | 30| 0C| 0D| 0E| 0F| 11| 10| 20| 22| 1F| 23| 21| 1E| | | 59| 5B| 5C| 4E|
+ * |-----------------------------------------------------' | |---------------|
+ * | 39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24| | 56| 57| 58| 66|
+ * |---------------------------------------------------------| |---------------|
+ * | 38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 38| 4D| | 53| 54| 55| |
+ * `---------------------------------------------------------' |-----------| 4C|
+ * | 3A| 37| 31 | 2A| 46| 42| 48| | 52| 41| |
+ * `---------------------------------------------------------' `---------------'
+ *
+ * M0110 + M0120 scan codes
+ * ,---------------------------------------------------------. ,---------------.
+ * | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18| 33| | 47| 68| 6D| 62|
+ * |---------------------------------------------------------| |---------------|
+ * | 30| 0C| 0D| 0E| 0F| 11| 10| 20| 22| 1F| 23| 21| 1E| 2A| | 59| 5B| 5C| 4E|
+ * |---------------------------------------------------------| |---------------|
+ * | 39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24| | 56| 57| 58| 66|
+ * |---------------------------------------------------------| |---------------|
+ * | 38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 38| | 53| 54| 55| |
+ * `---------------------------------------------------------' |-----------| 4C|
+ * | 3A| 37| 31 | 34| 3A| | 52| 41| |
+ * `------------------------------------------------' `---------------'
+ * Two right and left keys of 38 and 3A are identical, you cannot discriminate those two.
+ */
+#define LAYOUT_ansi( \
+ K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K68,K6D,K62, \
+ K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K4E, \
+ K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K66, \
+ K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K4D, K53,K54,K55,K4C, \
+ K3A,K37, K31, K34,K2A,K46,K42,K48, K52, K41 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, KC_NO, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, KC_NO, KC_NO, K37 }, \
+ { K38, K39, K3A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, K41, K42, KC_NO, KC_NO, KC_NO, K46, K47 }, \
+ { K48, KC_NO, KC_NO, KC_NO, K4C, K4D, K4E, KC_NO }, \
+ { KC_NO, KC_NO, K52, K53, K54, K55, K56, K57 }, \
+ { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, K62, KC_NO, KC_NO, KC_NO, K66, KC_NO }, \
+ { K68, KC_NO, KC_NO, KC_NO, KC_NO, K6D, KC_NO, KC_NO }, \
+}
+
+/* International keyboard layout for M0110 + M0120
+ * https://en.wikipedia.org/wiki/File:Apple_Macintosh_Plus_Keyboard.jpg
+ * Probably International keyboard layout of M0110A doesn't exist.
+ *
+ * M0110 + M0120 scan codes
+ * ,---------------------------------------------------------. ,---------------.
+ * | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18| 33| | 47| 68| 6D| 62|
+ * |---------------------------------------------------------| |---------------|
+ * | 30| 0C| 0D| 0E| 0F| 11| 10| 20| 22| 1F| 23| 21| 1E| 2A| | 59| 5B| 5C| 4E|
+ * |------------------------------------------------------, | |---------------|
+ * | 39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24| | | 56| 57| 58| 66|
+ * |---------------------------------------------------------| |---------------|
+ * | 38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 0A| 38| | 53| 54| 55| |
+ * `---------------------------------------------------------' |-----------| 4C|
+ * | 3A| 37| 34 | 31| 3A| | 52| 41| |
+ * `------------------------------------------------' `---------------'
+ * Two right and left keys of 38 and 3A are identical, you cannot discriminate those two.
+ */
+#define LAYOUT_iso( \
+ K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K68,K6D,K62, \
+ K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K59,K5B,K5C,K4E, \
+ K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,K24, K56,K57,K58,K66, \
+ K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C,K0A, K53,K54,K55,K4C, \
+ K3A,K37, K34, K31, K52, K41 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, KC_NO, KC_NO, K37 }, \
+ { K38, K39, K3A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, K41, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K47 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, K4C, KC_NO, K4E, KC_NO }, \
+ { KC_NO, KC_NO, K52, K53, K54, K55, K56, K57 }, \
+ { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, K62, KC_NO, KC_NO, KC_NO, K66, KC_NO }, \
+ { K68, KC_NO, KC_NO, KC_NO, KC_NO, K6D, KC_NO, KC_NO }, \
+}
diff --git a/keyboards/converter/m0110_usb/matrix.c b/keyboards/converter/m0110_usb/matrix.c
new file mode 100644
index 0000000000..098f9de0ff
--- /dev/null
+++ b/keyboards/converter/m0110_usb/matrix.c
@@ -0,0 +1,121 @@
+/*
+Copyright 2011,2012 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+
+--------------
+
+Ported to QMK by Techsock
+*/
+
+#include
+#include
+#include
+#include "print.h"
+#include "util.h"
+#include "debug.h"
+#include "host.h"
+#include "m0110.h"
+#include "matrix.h"
+#include "report.h"
+#include "timer.h"
+
+
+#define CAPS 0x39
+#define CAPS_BREAK (CAPS | 0x80)
+#define ROW(key) ((key)>>3&0x0F)
+#define COL(key) ((key)&0x07)
+
+
+static bool is_modified = false;
+
+// matrix state buffer(1:on, 0:off)
+static uint8_t *matrix;
+static uint8_t _matrix0[MATRIX_ROWS];
+
+static void register_key(uint8_t key);
+
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_init(void)
+{
+ m0110_init();
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00;
+ matrix = _matrix0;
+
+ matrix_init_quantum();
+ return;
+}
+
+uint8_t matrix_scan(void)
+{
+ uint8_t key;
+
+ is_modified = false;
+ key = m0110_recv_key();
+
+ if (key == M0110_NULL) {
+ return 0;
+ } else if (key == M0110_ERROR) {
+ return 0;
+ } else {
+ is_modified = true;
+ register_key(key);
+ }
+
+ if (debug_enable) {
+ print("["); phex(key); print("]\n");
+ }
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+void matrix_print(void){
+
+}
+
+inline
+uint8_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+inline
+static void register_key(uint8_t key)
+{
+ if (key&0x80) {
+ matrix[ROW(key)] &= ~(1<
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Use I2C or Serial */
+
+#define USE_I2C
+#define USE_SERIAL
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+#define PREVENT_STUCK_MODIFIERS
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 150
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/crkbd/keymaps/like_jis/glcdfont.c b/keyboards/crkbd/keymaps/like_jis/glcdfont.c
new file mode 100644
index 0000000000..4e7b27bc0c
--- /dev/null
+++ b/keyboards/crkbd/keymaps/like_jis/glcdfont.c
@@ -0,0 +1,244 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#ifndef FONT5X7_H
+#define FONT5X7_H
+
+#ifdef __AVR__
+ #include
+ #include
+#elif defined(ESP8266)
+ #include
+#else
+ #define PROGMEM
+#endif
+
+// Standard ASCII 5x7 font
+
+static const unsigned char font[] PROGMEM = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
+0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
+0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
+0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
+0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
+0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
+0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
+0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
+0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
+0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
+0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
+0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
+0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
+0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
+0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
+0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
+0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
+0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
+0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
+0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
+0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
+0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
+0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
+0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
+0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
+0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
+0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
+0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
+0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
+0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
+0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
+0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
+0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
+0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
+0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
+0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
+0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
+0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
+0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
+0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
+0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
+0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
+0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
+0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
+0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
+0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
+0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
+0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
+0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
+0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
+0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
+0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
+0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
+0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
+0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
+0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
+0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
+0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
+0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
+0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
+0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
+0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
+0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
+0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
+0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
+0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
+0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
+0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
+0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
+0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
+0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
+0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
+0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
+0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
+0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
+0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
+0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
+0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
+0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
+0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
+0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
+0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
+0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
+0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
+0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
+0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
+0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
+0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
+0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
+0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
+0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
+0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
+0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
+0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
+0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
+0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
+0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
+0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
+0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
+0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
+0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
+0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
+0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
+0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
+0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
+0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
+0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
+0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
+0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
+0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
+0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
+0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
+0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
+0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
+0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
+0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
+0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
+0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
+0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE,
+0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0,
+0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF,
+0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70,
+0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E,
+0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0,
+0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E,
+0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
+0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
+0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
+0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
+0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
+0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
+0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
+0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
+0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE,
+0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F,
+0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07,
+0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D,
+0x0B, 0x07, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
+0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07,
+0x01, 0x01, 0x01, 0x03, 0x06, 0x06,
+0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E,
+0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30,
+0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC,
+0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8,
+0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0,
+0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC,
+0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8,
+0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0,
+0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC,
+0x7C, 0x38, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
+0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
+0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
+0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
+0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
+0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
+0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x03, 0x07,
+0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F,
+0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C,
+0x78, 0x70, 0x70, 0x70, 0x70, 0x70,
+0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E,
+0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38,
+0x38, 0x18, 0x0C, 0x06, 0x03, 0x01,
+0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F,
+0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03,
+0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00,
+0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E,
+0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F,
+0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C,
+0x0C, 0x04, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+#endif // FONT5X7_H
diff --git a/keyboards/crkbd/keymaps/like_jis/keymap.c b/keyboards/crkbd/keymaps/like_jis/keymap.c
new file mode 100644
index 0000000000..0dd9c15500
--- /dev/null
+++ b/keyboards/crkbd/keymaps/like_jis/keymap.c
@@ -0,0 +1,229 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+#include "../lib/mode_icon_reader.c"
+#include "../lib/layer_state_reader.c"
+#include "../lib/host_led_state_reader.c"
+#include "../lib/logo_reader.c"
+#include "../lib/keylogger.c"
+#include "../lib/timelogger.c"
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ RGBRST
+};
+
+#define KC______ KC_TRNS
+#define KC_XXXXX KC_NO
+#define KC_KANJI KC_GRV
+
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+
+#define KC_RST RESET
+
+#define KC_LRST RGBRST
+#define KC_LTOG RGB_TOG
+#define KC_LHUI RGB_HUI
+#define KC_LHUD RGB_HUD
+#define KC_LSAI RGB_SAI
+#define KC_LSAD RGB_SAD
+#define KC_LVAI RGB_VAI
+#define KC_LVAD RGB_VAD
+#define KC_LSMOD RGB_SMOD
+
+#define KC_KNRM AG_NORM
+#define KC_KSWP AG_SWAP
+#define KC_GUAP LALT_T(KC_APP)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LSFT, A, S, D, F, G, H, J, K, L, UP, ENT,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LCTRL, Z, X, C, V, B, N, M, COMM, LEFT, DOWN, RGHT,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LGUI, LOWER, BSPC, SPC, RAISE, GUAP \
+ //`--------------------' `--------------------'
+ ),
+
+ [_LOWER] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ TAB, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ _____, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, SCLN, QUOT, BSLS,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ _____, F11, F12, XXXXX, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ _____, _____, DEL, XXXXX, _____, APP \
+ //`--------------------' `--------------------'
+ ),
+
+ [_RAISE] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ _____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, XXXXX,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 4, 5, 6, QUOT, XXXXX,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, XXXXX,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ _____, _____, XXXXX, XXXXX, _____, LALT \
+ //`--------------------' `--------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ RST, LRST, KNRM, KSWP, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LSMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ _____, _____, XXXXX, XXXXX, _____, XXXXX \
+ //`--------------------' `--------------------'
+ )
+};
+
+int RGB_current_mode;
+
+// Setting ADJUST layer RGB back to default
+inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+void matrix_scan_user(void) {
+ iota_gfx_task();
+}
+
+inline void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (is_master) {
+ matrix_write_ln(matrix, read_layer_state());
+ matrix_write_ln(matrix, read_keylog());
+ matrix_write_ln(matrix, read_keylogs());
+ //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
+ //matrix_write_ln(matrix, read_host_led_state());
+ //matrix_write_ln(matrix, read_timelog());
+ } else {
+ matrix_write(matrix, read_logo());
+ }
+}
+
+inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+ matrix_clear(&matrix);
+ matrix_render_user(&matrix);
+ matrix_update(&display, &matrix);
+}
+
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ #ifdef SSD1306OLED
+ if (record->event.pressed) {
+ set_keylog(keycode, record);
+ set_timelog();
+ }
+ #endif
+
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ break;
+
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ default:
+ return true;
+ }
+
+ return false;
+}
diff --git a/keyboards/crkbd/keymaps/like_jis/rules.mk b/keyboards/crkbd/keymaps/like_jis/rules.mk
new file mode 100644
index 0000000000..3f1bd9108d
--- /dev/null
+++ b/keyboards/crkbd/keymaps/like_jis/rules.mk
@@ -0,0 +1,21 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/dz60/dz60.c b/keyboards/dz60/dz60.c
index 33122846c9..b54ff01170 100644
--- a/keyboards/dz60/dz60.c
+++ b/keyboards/dz60/dz60.c
@@ -22,7 +22,13 @@ void led_init_ports(void) {
}
void led_set_kb(uint8_t usb_led) {
- // Code for caps lock LED as reported by the OS
- // Set this per keymap, instead of globally
- led_set_user(usb_led);
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 2);
+ PORTB &= ~(1 << 2);
+ } else {
+ DDRB &= ~(1 << 2);
+ PORTB &= ~(1 << 2);
+ }
+
+ led_set_user(usb_led);
}
diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h
index dfd8c00d0f..f755ce3c71 100644
--- a/keyboards/dz60/dz60.h
+++ b/keyboards/dz60/dz60.h
@@ -49,6 +49,20 @@
{ KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, KC_NO, KC_NO } \
}
+#define LAYOUT_60_hhkb( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
+ K401, K403, K406, K411, K413 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
+ { KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO } \
+}
+
#define LAYOUT_2_shifts( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json
index 48297a4f53..0cdacdeaec 100644
--- a/keyboards/dz60/info.json
+++ b/keyboards/dz60/info.json
@@ -37,6 +37,10 @@
"key_count": 62,
"layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
},
+ "LAYOUT_60_hhkb": {
+ "key_count": 60,
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"label":"\\", "x":13, "y":0}, {"label":"`", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
+ },
"LAYOUT_directional_625_space": {
"key_count": 65,
"layout": [{"label":"K000", "x":0, "y":0}, {"label":"K001", "x":1, "y":0}, {"label":"K002", "x":2, "y":0}, {"label":"K003", "x":3, "y":0}, {"label":"K004", "x":4, "y":0}, {"label":"K005", "x":5, "y":0}, {"label":"K006", "x":6, "y":0}, {"label":"K007", "x":7, "y":0}, {"label":"K008", "x":8, "y":0}, {"label":"K009", "x":9, "y":0}, {"label":"K010", "x":10, "y":0}, {"label":"K011", "x":11, "y":0}, {"label":"K012", "x":12, "y":0}, {"label":"K013", "x":13, "y":0}, {"label":"K014", "x":14, "y":0}, {"label":"K100", "x":0, "y":1, "w":1.5}, {"label":"K102", "x":1.5, "y":1}, {"label":"K103", "x":2.5, "y":1}, {"label":"K104", "x":3.5, "y":1}, {"label":"K105", "x":4.5, "y":1}, {"label":"K106", "x":5.5, "y":1}, {"label":"K107", "x":6.5, "y":1}, {"label":"K108", "x":7.5, "y":1}, {"label":"K109", "x":8.5, "y":1}, {"label":"K110", "x":9.5, "y":1}, {"label":"K111", "x":10.5, "y":1}, {"label":"K112", "x":11.5, "y":1}, {"label":"K113", "x":12.5, "y":1}, {"label":"K114", "x":13.5, "y":1, "w":1.5}, {"label":"K200", "x":0, "y":2, "w":1.75}, {"label":"K202", "x":1.75, "y":2}, {"label":"K203", "x":2.75, "y":2}, {"label":"K204", "x":3.75, "y":2}, {"label":"K205", "x":4.75, "y":2}, {"label":"K206", "x":5.75, "y":2}, {"label":"K207", "x":6.75, "y":2}, {"label":"K208", "x":7.75, "y":2}, {"label":"K209", "x":8.75, "y":2}, {"label":"K210", "x":9.75, "y":2}, {"label":"K211", "x":10.75, "y":2}, {"label":"K212", "x":11.75, "y":2}, {"label":"K213", "x":12.75, "y":2, "w":2.25}, {"label":"K300", "x":0, "y":3, "w":2}, {"label":"K301", "x":2, "y":3}, {"label":"K302", "x":3, "y":3}, {"label":"K303", "x":4, "y":3}, {"label":"K304", "x":5, "y":3}, {"label":"K305", "x":6, "y":3}, {"label":"K306", "x":7, "y":3}, {"label":"K307", "x":8, "y":3}, {"label":"K308", "x":9, "y":3}, {"label":"K309", "x":10, "y":3}, {"label":"K310", "x":11, "y":3}, {"label":"K312", "x":12, "y":3}, {"label":"K313", "x":13, "y":3}, {"label":"K314", "x":14, "y":3}, {"label":"K400", "x":0, "y":4, "w":1.25}, {"label":"K401", "x":1.25, "y":4, "w":1.25}, {"label":"K403", "x":2.5, "y":4, "w":1.25}, {"label":"K406", "x":3.75, "y":4, "w":6.25}, {"label":"K410", "x":10, "y":4}, {"label":"K411", "x":11, "y":4}, {"label":"K412", "x":12, "y":4}, {"label":"K413", "x":13, "y":4}, {"label":"K414", "x":14, "y":4}]
diff --git a/keyboards/dz60/keymaps/default/keymap.c b/keyboards/dz60/keymaps/default/keymap.c
index fdc2795d24..426b10989d 100644
--- a/keyboards/dz60/keymaps/default/keymap.c
+++ b/keyboards/dz60/keymaps/default/keymap.c
@@ -59,11 +59,3 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
break;
}
}
-
-void led_set_user(uint8_t usb_led) {
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 2); PORTB &= ~(1 << 2);
- } else {
- DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
- }
-}
diff --git a/keyboards/dz60/keymaps/frogger/keymap.c b/keyboards/dz60/keymaps/frogger/keymap.c
new file mode 100644
index 0000000000..86a4687913
--- /dev/null
+++ b/keyboards/dz60/keymaps/frogger/keymap.c
@@ -0,0 +1,92 @@
+#include QMK_KEYBOARD_H
+
+#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+#define ______ KC_TRNS
+
+#define LAYER_1 1
+#define LAYER_2 2
+#define LAYER_3 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | LAY1 | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | LAY2|
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | Cmd | Alt | LAY1 | LAY2 | SPACE | RAlt | LAY1 | L | D | R |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_2_shifts(
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC,
+
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+
+ MO(LAYER_1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+
+ KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(LAYER_2),
+
+ KC_LCTL, KC_LGUI, KC_LALT, MO(LAYER_1), MO(LAYER_1), KC_SPC, KC_RALT, MO(LAYER_1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ /* Layer 1
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
+ * |-----------------------------------------------------------------------------------------+
+ * | | PREV | PLAY | NEXT | | | | | Up | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | Home| Left | Down | Right | End | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |VOL+| |
+ * |-----------------------------------------------------------------------------------------+s
+ * | | | | | | | |VOL-| MUTE |
+ * `-----------------------------------------------------------------------------------------'
+ KC_VOLD, KC_VOLU, KC_MUTE,
+ KC_MPRV, KC_MPLY, KC_MNXT,
+ */
+
+ LAYOUT_2_shifts(
+ KC_ESC, 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_DEL,
+
+ ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, ______, ______, KC_UP, ______, ______, ______, ______, ______,
+
+ ______, ______, ______, ______, ______, ______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, ______, ______,
+
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_VOLU, ______,
+
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_VOLD, KC_MUTE
+ ),
+
+ /* Layer 2
+ * ,-----------------------------------------------------------------------------------------.
+ * | RESET | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | RESET |
+ * |-----------------------------------------------------------------------------------------+
+ * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | BL T| BL M| BL+ | BL- | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_2_shifts(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______, RESET,
+
+ ______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, ______, ______, ______, ______, ______,
+
+ ______, BL_TOGG, BL_STEP, BL_INC, BL_DEC, ______, ______, ______, ______, ______, ______, ______, ______,
+
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______
+ ),
+};
diff --git a/keyboards/dz60/keymaps/frogger/readme.md b/keyboards/dz60/keymaps/frogger/readme.md
new file mode 100644
index 0000000000..1704717155
--- /dev/null
+++ b/keyboards/dz60/keymaps/frogger/readme.md
@@ -0,0 +1,6 @@
+
+
+# Frogger's Keyboard Layout
+
+This layouts is for someone with a dedicated arrow keys, but still wants arrows on home row as well. I have one layer which is functionality, and another layer
+which is really more around backlight stuff, because I rarely use it. Instead of a 2.25u shift as pictured, I have 2 1u keys.
diff --git a/keyboards/dz60/keymaps/iso_uk/keymap.c b/keyboards/dz60/keymaps/iso_uk/keymap.c
index de06d23521..1c15a59df8 100644
--- a/keyboards/dz60/keymaps/iso_uk/keymap.c
+++ b/keyboards/dz60/keymaps/iso_uk/keymap.c
@@ -84,11 +84,3 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
break;
}
}
-
-void led_set_user(uint8_t usb_led) {
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 2); PORTB &= ~(1 << 2);
- } else {
- DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
- }
-}
diff --git a/keyboards/dz60/keymaps/krusli/keymap.c b/keyboards/dz60/keymaps/krusli/keymap.c
index c79cb7f910..36e7b801a3 100644
--- a/keyboards/dz60/keymaps/krusli/keymap.c
+++ b/keyboards/dz60/keymaps/krusli/keymap.c
@@ -19,11 +19,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_NO, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
};
-
-void led_set_user(uint8_t usb_led) {
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 2); PORTB &= ~(1 << 2);
- } else {
- DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
- }
-}
diff --git a/keyboards/dz60/keymaps/macos_arrow/keymap.c b/keyboards/dz60/keymaps/macos_arrow/keymap.c
index 5beaf6d8d7..f4b03ddc95 100644
--- a/keyboards/dz60/keymaps/macos_arrow/keymap.c
+++ b/keyboards/dz60/keymaps/macos_arrow/keymap.c
@@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* ,-----------------------------------------------------------------------------------------.
* | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del |
* |-----------------------------------------------------------------------------------------+
- * | | | | | | | | | UP | | | | | Reset |
+ * | | | | | | | | | UP | | | | | |
* |-----------------------------------------------------------------------------------------+
* | | | | | | | | Left| Down|Right| | | |
* |-----------------------------------------------------------------------------------------+
@@ -44,15 +44,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_FL] = LAYOUT(
KC_GRV, 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_DEL,
- ______, ______, ______, ______, ______, ______, ______, ______, KC_UP, ______, ______, ______, ______, RESET,
+ ______, ______, ______, ______, ______, ______, ______, ______, KC_UP, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, KC_LEFT, KC_DOWN, KC_RIGHT, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______),
/* ,-----------------------------------------------------------------------------------------.
- * | | BR- | BR+ | F3 | F4 | | |PREV |PLAY |NEXT |MUTE | V- | V+ | Eject |
+ * |Eject| BR- | BR+ | F3 | F4 | | |PREV |PLAY |NEXT |MUTE | V- | V+ | |
* |-----------------------------------------------------------------------------------------+
- * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | Reset |
* |-----------------------------------------------------------------------------------------+
* | | | | | | | | | | | | | |
* |-----------------------------------------------------------------------------------------+
@@ -62,8 +62,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------------'
*/
[_ML] = LAYOUT(
- ______, BR_DOWN, BR_UP, ______, ______, KC_F5, KC_F6, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, ______, KC_MEDIA_EJECT,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ KC_MEDIA_EJECT, BR_DOWN, BR_UP, ______, ______, KC_F5, KC_F6, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, ______, ______,
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, RESET,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______),
diff --git a/keyboards/dz60/keymaps/macos_arrow/readme.md b/keyboards/dz60/keymaps/macos_arrow/readme.md
index bd8740bd41..bba8148ba5 100644
--- a/keyboards/dz60/keymaps/macos_arrow/readme.md
+++ b/keyboards/dz60/keymaps/macos_arrow/readme.md
@@ -37,7 +37,7 @@ My build used the following components:
,-----------------------------------------------------------------------------------------.
| ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del |
|-----------------------------------------------------------------------------------------+
-| | | | | | | | | UP | | | | | Reset |
+| | | | | | | | | UP | | | | | |
|-----------------------------------------------------------------------------------------+
| | | | | | | | Left| Down|Right| | | |
|-----------------------------------------------------------------------------------------+
@@ -55,7 +55,7 @@ The function layer is activated by the `Caps-Lock` (`Hyper`) key to access `F` k
,-----------------------------------------------------------------------------------------.
| | BR- | BR+ | F3 | F4 | | |PREV |PLAY |NEXT |MUTE | V- | V+ | Eject |
|-----------------------------------------------------------------------------------------+
-| | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | Reset |
|-----------------------------------------------------------------------------------------+
| | | | | | | | | | | | | |
|-----------------------------------------------------------------------------------------+
diff --git a/keyboards/dz60/keymaps/macos_arrow/rules.mk b/keyboards/dz60/keymaps/macos_arrow/rules.mk
new file mode 100644
index 0000000000..e1cfb3e508
--- /dev/null
+++ b/keyboards/dz60/keymaps/macos_arrow/rules.mk
@@ -0,0 +1,2 @@
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = no
\ No newline at end of file
diff --git a/keyboards/dz60/rules.mk b/keyboards/dz60/rules.mk
index 2bfa663cf1..f290c305e2 100644
--- a/keyboards/dz60/rules.mk
+++ b/keyboards/dz60/rules.mk
@@ -55,4 +55,4 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = yes
-LAYOUTS = 60_ansi 60_iso
+LAYOUTS = 60_ansi 60_iso 60_hhkb
diff --git a/keyboards/ergodone/keymaps/eozaki/keymap.c b/keyboards/ergodone/keymaps/eozaki/keymap.c
new file mode 100644
index 0000000000..a6d17b61c2
--- /dev/null
+++ b/keyboards/ergodone/keymaps/eozaki/keymap.c
@@ -0,0 +1,223 @@
+#include QMK_KEYBOARD_H
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | ~ | | ' | 6 | 7 | 8 | 9 | 0 | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | ~ | | " | Y | U | I | O | P | - |
+ * |--------+------+------+------+------+------| ` | | |------+------+------+------+------+--------|
+ * | Ctrl | A | S | D | F | G |------| |------| H | J | K | L | ; | \ |
+ * |--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
+ * | LAlt | Z | X | C | V | B | [ | | ] | N | M | , | . | / | LShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | LT-1 | F4 | F5 | F6 | F11 | | Left | Down | Up | Right| RAlt |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | L1 | Prev | | Vol+ | L2 |
+ * ,------|------|------| |------+--------+------.
+ * | | | Play | | Vol- | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | Next | | Mute | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LSFT(KC_GRV),
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_GRV,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC,
+ LT(SYMB, KC_F2), KC_F4, KC_F5, KC_F6, KC_F11,
+ TG(SYMB), KC_MPRV,
+ KC_MPLY,
+ KC_SPC,KC_BSPC,KC_MNXT,
+ // right hand
+ KC_QUOT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
+ LSFT(KC_QUOT), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_BSLS,
+ KC_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_LSFT,
+ KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_RALT,
+ KC_VOLU, TG(MDIA),
+ KC_VOLD,
+ KC_MUTE,KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | EPRM | | | | | | | . | 0 | = | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Animat| | |Toggle|Solid |
+ * ,------|------|------| |------+------+------.
+ * |Bright|Bright| | | |Hue- |Hue+ |
+ * |ness- |ness+ |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ RGB_MOD,KC_TRNS,
+ KC_TRNS,
+ RGB_VAD,RGB_VAI,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ RGB_TOG, RGB_SLD,
+ KC_TRNS,
+ KC_TRNS, RGB_HUD, RGB_HUI
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = LAYOUT_ergodox(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ break;
+ case 1:
+ if (record->event.pressed) { // For resetting EEPROM
+ eeconfig_init();
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodone/keymaps/eozaki/readme.md b/keyboards/ergodone/keymaps/eozaki/readme.md
new file mode 100644
index 0000000000..bfde2b2c8e
--- /dev/null
+++ b/keyboards/ergodone/keymaps/eozaki/readme.md
@@ -0,0 +1,13 @@
+# ErgoDox EZ Based Configuration
+
+## Changelog
+
+* Aug 2018:
+ * New custom L0 layout.
+* Dec 2016:
+ * Added LED keys
+ * Refreshed layout graphic, comes from http://configure.ergodox-ez.com now.
+* Sep 22, 2016:
+ * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM.
+* Feb 2, 2016 (V1.1):
+ * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows).
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_42_key/README.md b/keyboards/ergodox_ez/keymaps/dvorak_42_key/README.md
index 4e5f25f092..5730a61051 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_42_key/README.md
+++ b/keyboards/ergodox_ez/keymaps/dvorak_42_key/README.md
@@ -12,7 +12,8 @@ Layers
* BASE: basic dvorak layout
* KEYNAV: arrow-key navigation. Momentary toggle held by thumb allows the right hand to navigate through text as well as copy/paste/cut, page up/page down
* KEYSEL: similar to KEYNAV, except for shift-selection
-* COMBINED: this is a layer that combines numbers, brackets and special characters. !@#$%^&*( can be type by shift+COMBINED+1/2/3/etc..
-* MOUSE: mouse navigation, as well as browser tab-left/tab-right shortcuts
+* COMBINED: this is a layer that combines numbers, brackets and special characters. !@#$%^&*( can be typed by shift+COMBINED+1/2/3/etc..
+* BROWSER_CONTROL: primarily browser left/right tab, open new tab/delete tab, but also mouse keys.
* SHELL_NAV: Linux Bash shortcuts (move forward/backward in command line, Ctrl+C, recall last argument, etc
-* SHELL_SCREEN: Linux screen (run multiple terminals in one window) shortcuts such as open new tabs, switch between tabs
\ No newline at end of file
+* SHELL_SCREEN: Linux screen (run multiple terminals in one window) shortcuts such as open new tabs, switch between tabs
+* SCREEN_NAV: special layer for copy/pasting within Linux screen, allows using various copy/paste buffers
\ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
index 088449e2fe..94d035c6b9 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
@@ -15,8 +15,6 @@
// pushing dev branch
// git push origin dev:dev
-static bool mouse_lock = false;
-
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
EPRM,
@@ -40,7 +38,12 @@ enum custom_keycodes {
SHELL_SCREEN_LIST,
SHELL_MKE,
SHELL_HTCSTATUS,
+ SHELL_HTCBOUNCE,
+ SHELL_DUMPTLOG,
+ SHELL_EXPAND_OE_LOGPATTERN,
+ SHELL_EXPAND_OE_TRANPATTERN,
+
// Cloud9 macros
CLOUD9_TAB_LEFT,
CLOUD9_TAB_RIGHT,
@@ -57,19 +60,15 @@ enum custom_keycodes {
#define KEYSEL 2 // arrow navigation + shift (allow text selection)
#define SHELL_NAV 3 // bash shortcuts
#define SHELL_SCREEN 4 // linux screen shortcuts
-#define SCREEN_NAV 5 // navigate between linux screen tabs
-#define MOUSE 6 // mouse layer (can be locked with lock key), unmapped for now
-#define BROWSER_CONTROL 7 // control browser and mouse
-#define COMBINED 8 // combined numbers and symbols layer
+#define SCREEN_NAV 5 // navigate between linux screen tabs
+#define BROWSER_CONTROL 6 // control browser and mouse
+#define COMBINED 7 // combined numbers and symbols layer
// macros
-#define MOUSE_TOGGLE 1
-#define MOUSE_LOCK 2
#define SCREEN_TAB_LEFT 4
#define SCREEN_TAB_RIGHT 5
#define SCREEN_NEW_TAB 6
-#define SWITCH_NDS 7
#define SCREEN_COPY_MODE 8
#define SCREEN_PASTE 9
#define SCREEN_RENAME 10
@@ -93,9 +92,8 @@ enum custom_keycodes {
#define SCREEN_PASTEREG_1 28
#define SCREEN_PASTEREG_2 29
#define SCREEN_PASTEREG_3 30
-#define SHELL_WRITE_LOGPATTERN 31
-#define SHELL_WRITE_TRANPATTERN 32
-#define SHELL_EXPAND_PATTERN 33
+#define DEL_TO_HOME 36
+
@@ -175,13 +173,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
// left thumb cluster
- KC_TRNS,KC_TRNS,KC_TRNS,TO(MOUSE),KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+
// right hand
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MEH(KC_G),
KC_TRNS,KC_NO, KC_HOME, KC_UP, KC_END, KC_PGUP, MEH(KC_H),
LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), MEH(KC_I),
- KC_TRNS,KC_NO, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, MEH(KC_J),
+ KC_TRNS,M(DEL_TO_HOME),RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, MEH(KC_J),
KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), MEH(KC_K),
// right thumb cluster
@@ -218,7 +217,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[SHELL_NAV] = LAYOUT_ergodox(
// left hand
KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS,KC_TRNS, SHELL_PGREP, SHELL_PLESS, SHELL_LESS, KC_TRNS, SHELL_H3,
+ KC_TRNS,KC_TRNS, SHELL_PGREP, SHELL_PLESS, SHELL_LESS, SHELL_HTCBOUNCE, SHELL_H3,
KC_TRNS,SHELL_MKE, SHELL_CDPRE, SHELL_LSLTR, SHELL_LS, SHELL_LSLA,
KC_TRNS,SHELL_SCREEN_LIST, SHELL_SCREENRD, SHELL_SCREEN_NEW, SHELL_TAILF, SHELL_HTCSTATUS, SHELL_AMMCOLO,
// bottom row
@@ -228,10 +227,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(SHELL_WRITE_TRANPATTERN),
- RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, M(SHELL_WRITE_LOGPATTERN),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, SHELL_EXPAND_OE_TRANPATTERN,
+ RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, SHELL_EXPAND_OE_LOGPATTERN,
LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), RCTL(KC_W),
- RCTL(KC_C), RCTL(KC_U), LALT(KC_DOT), RCTL(KC_R), MEH(KC_V), RCTL(KC_K), M(SHELL_EXPAND_PATTERN),
+ RCTL(KC_C), RCTL(KC_U), LALT(KC_DOT), RCTL(KC_R), MEH(KC_V), RCTL(KC_K), SHELL_DUMPTLOG,
// bottom row (match functionality of base layer)
KC_BSPC, RCTL(KC_W), KC_DELETE, LALT(KC_D), RCTL(KC_U),
// thumb cluster
@@ -320,30 +319,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS),
-
-
- [MOUSE] = LAYOUT_ergodox(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_PGUP, KC_MS_WH_UP, KC_UP, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_MS_ACCEL0, KC_PGDN, KC_MS_WH_DOWN, KC_DOWN, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, M(MOUSE_LOCK), KC_TRNS, KC_MS_ACCEL0,
-
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_BTN3, KC_TRNS,
- // right hand
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_UP, KC_HOME, KC_MS_U, KC_END, KC_MS_WH_UP, KC_TRNS,
- KC_DOWN, KC_MS_L, KC_MS_D, KC_MS_R, KC_MS_WH_DOWN, KC_TRNS,
- KC_TRNS, MEH(KC_X), MEH(KC_Y), MEH(KC_Z), KC_F5, RCTL(KC_W), KC_TRNS,
- // browser tab control
- RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_BTN1, KC_BTN2
- ),
-
+
+
[BROWSER_CONTROL] = LAYOUT_ergodox(
// left hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -379,26 +356,6 @@ const uint16_t PROGMEM fn_actions[] = {
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
- case MOUSE_TOGGLE:
- if (record->event.pressed) {
- layer_on(MOUSE);
- } else {
- if(!mouse_lock)
- layer_off(MOUSE);
- }
- break;
- case MOUSE_LOCK:
- if (record->event.pressed)
- {
- if(mouse_lock)
- {
- mouse_lock = false;
- layer_off(MOUSE);
- }
- else
- mouse_lock = true;
- }
- break;
case SCREEN_TAB_LEFT:
if (record->event.pressed) {
return MACRO( D(LCTL), T(A), U(LCTL), T(P), END);
@@ -478,40 +435,19 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if (record->event.pressed) {
return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END);
}
- break;
+ break;
- case SHELL_WRITE_LOGPATTERN:
+ case DEL_TO_HOME:
if (record->event.pressed) {
- return MACRO( D(LSFT),
- T(8),
- T(8),
- U(LSFT),
- T(L),
- T(O),
- T(G),
- T(LEFT),
- T(LEFT),
- T(LEFT),
- T(LEFT),
- END);
- }
- break;
-
- case SHELL_WRITE_TRANPATTERN:
- if (record->event.pressed) {
- return MACRO( D(LSFT),
- T(8),
- T(8),
- U(LSFT), T(T), T(R), T(A), T(N), T(LEFT), T(LEFT), T(LEFT), T(LEFT), T(LEFT), END);
- }
- break;
-
- case SHELL_EXPAND_PATTERN:
- if (record->event.pressed) {
- return MACRO( D(LALT), T(F), U(LALT), D(LCTL), T(X), U(LCTL), D(LSFT), T(8), D(LSFT), END);
- }
- break;
-
+ return MACRO(
+ // delete to the beginning of the line
+ D(LSFT), T(HOME), U(LSFT),
+ T(DELETE),
+ END);
+ }
+ break;
+
+
}
return MACRO_NONE;
};
@@ -599,15 +535,29 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
break;
case SHELL_MKE:
- SEND_STRING("mke\n");
+ SEND_STRING("mki -j8\n");
return true;
break;
case SHELL_HTCSTATUS:
SEND_STRING("htcStatus -j ");
return true;
- break;
- // Cloud9 macros
- case CLOUD9_TAB_LEFT:
+ break;
+ case SHELL_HTCBOUNCE:
+ SEND_STRING("htcBounce -j ");
+ return true;
+ break;
+ case SHELL_EXPAND_OE_LOGPATTERN:
+ SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.log"SS_LCTRL("x")SS_LSFT("8"));
+ break;
+ case SHELL_EXPAND_OE_TRANPATTERN:
+ SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.tran"SS_LCTRL("x")SS_LSFT("8"));
+ break;
+ case SHELL_DUMPTLOG:
+ SEND_STRING(" | dumptlog - ");
+ return true;
+ break;
+ // Cloud9 macros
+ case CLOUD9_TAB_LEFT:
SEND_STRING(SS_LCTRL("["));
return true;
break;
@@ -664,8 +614,7 @@ void matrix_scan_user(void) {
case SCREEN_NAV:
ergodox_right_led_3_on();
break;
- case MOUSE:
- case BROWSER_CONTROL:
+ case BROWSER_CONTROL:
ergodox_right_led_2_on();
ergodox_right_led_3_on();
break;
diff --git a/keyboards/facew/readme.md b/keyboards/facew/readme.md
index 727c04d931..f948e7a46f 100644
--- a/keyboards/facew/readme.md
+++ b/keyboards/facew/readme.md
@@ -15,10 +15,39 @@ Hardware Availability: https://mechanicalkeyboards.com/shop/index.php?l=product_
- The FaceW Sprit Edition can be purchased on [mechanicalkeyboards.com](www.mechanicalkeyboards.com)
- Uses ps2avru instead of ps2avrgb
- To put in reset mode hold `q` while inserting the USB cable
-- When flashing, type `bootloadHID -r yourfile.hex` and wait awhile
Make example for this keyboard (after setting up your build environment):
make facew:default
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/fleuron/config.h b/keyboards/fleuron/config.h
new file mode 100644
index 0000000000..a3ff43b06b
--- /dev/null
+++ b/keyboards/fleuron/config.h
@@ -0,0 +1,194 @@
+/*
+Copyright 2018 James Underwood
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER You
+#define PRODUCT Fleuron v1
+#define DESCRIPTION A 6x16 ortho
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, F1, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { C7, B6, B3, B5, B4, D7, D4, D5, D3, D2, D1, D0, B7, B0, B1, B2 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+#define RGB_DI_PIN E6 // The pin the LED strip is connected to
+#define RGBLED_NUM 18 // Number of LEDs in your strip
+#define RGBLIGHT_ANIMATIONS
+
+#endif
diff --git a/keyboards/fleuron/fleuron.c b/keyboards/fleuron/fleuron.c
new file mode 100644
index 0000000000..12f950f367
--- /dev/null
+++ b/keyboards/fleuron/fleuron.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 James Underwood
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "fleuron.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/fleuron/fleuron.h b/keyboards/fleuron/fleuron.h
new file mode 100644
index 0000000000..abdccf2371
--- /dev/null
+++ b/keyboards/fleuron/fleuron.h
@@ -0,0 +1,44 @@
+/* Copyright 2018 James Underwood
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#ifndef FLEURON_H
+#define FLEURON_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_ortho_6x16( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k4e, k4f, \
+ k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a, k5b, k5c, k5d, k5e, k5f \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k4e, k4f }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a, k5b, k5c, k5d, k5e, k5f } \
+}
+
+#define LAYOUT_fleuron_grid LAYOUT_ortho_6x16
+
+#endif
diff --git a/keyboards/fleuron/info.json b/keyboards/fleuron/info.json
new file mode 100644
index 0000000000..2f357d3bf0
--- /dev/null
+++ b/keyboards/fleuron/info.json
@@ -0,0 +1,109 @@
+{
+ "keyboard_name": "Fleuron v1.0",
+ "url": "",
+ "maintainer": "qmk",
+ "bootloader": "",
+ "width": 16,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_ortho_6x16": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"Home", "x":13, "y":0},
+ {"label":"PgUp", "x":14, "y":0},
+ {"label":"Bksp", "x":15, "y":0},
+ {"label":"`", "x":0, "y":1},
+ {"label":"1", "x":1, "y":1},
+ {"label":"2", "x":2, "y":1},
+ {"label":"3", "x":3, "y":1},
+ {"label":"4", "x":4, "y":1},
+ {"label":"5", "x":5, "y":1},
+ {"label":"6", "x":6, "y":1},
+ {"label":"7", "x":7, "y":1},
+ {"label":"8", "x":8, "y":1},
+ {"label":"9", "x":9, "y":1},
+ {"label":"0", "x":10, "y":1},
+ {"label":"Bksp", "x":11, "y":1},
+ {"label":"Delete", "x":12, "y":1},
+ {"label":"End", "x":13, "y":1},
+ {"label":"PgDn", "x":14, "y":1},
+ {"label":"", "x":15, "y":1},
+ {"label":"Tab", "x":0, "y":2},
+ {"label":"q", "x":1, "y":2},
+ {"label":"w", "x":2, "y":2},
+ {"label":"e", "x":3, "y":2},
+ {"label":"r", "x":4, "y":2},
+ {"label":"t", "x":5, "y":2},
+ {"label":"y", "x":6, "y":2},
+ {"label":"u", "x":7, "y":2},
+ {"label":"i", "x":8, "y":2},
+ {"label":"o", "x":9, "y":2},
+ {"label":"p", "x":10, "y":2},
+ {"label":"\\", "x":11, "y":2},
+ {"label":"7", "x":12, "y":2},
+ {"label":"8", "x":13, "y":2},
+ {"label":"9", "x":14, "y":2},
+ {"label":"*", "x":15, "y":2},
+ {"label":"Caps Lock", "x":0, "y":3},
+ {"label":"a", "x":1, "y":3},
+ {"label":"s", "x":2, "y":3},
+ {"label":"d", "x":3, "y":3},
+ {"label":"f", "x":4, "y":3},
+ {"label":"g", "x":5, "y":3},
+ {"label":"h", "x":6, "y":3},
+ {"label":"j", "x":7, "y":3},
+ {"label":"k", "x":8, "y":3},
+ {"label":"l", "x":9, "y":3},
+ {"label":";", "x":10, "y":3},
+ {"label":"'", "x":11, "y":3},
+ {"label":"4", "x":12, "y":3},
+ {"label":"5", "x":13, "y":3},
+ {"label":"6", "x":14, "y":3},
+ {"label":"-", "x":15, "y":3},
+ {"label":"Shift", "x":0, "y":4},
+ {"label":"z", "x":1, "y":4},
+ {"label":"x", "x":2, "y":4},
+ {"label":"c", "x":3, "y":4},
+ {"label":"v", "x":4, "y":4},
+ {"label":"b", "x":5, "y":4},
+ {"label":"n", "x":6, "y":4},
+ {"label":"m", "x":7, "y":4},
+ {"label":",", "x":8, "y":4},
+ {"label":".", "x":9, "y":4},
+ {"label":"/", "x":10, "y":4},
+ {"label":"Enter", "x":11, "y":4},
+ {"label":"1", "x":12, "y":4},
+ {"label":"2", "x":13, "y":4},
+ {"label":"3", "x":14, "y":4},
+ {"label":"+", "x":15, "y":4},
+ {"label":"RGB", "x":0, "y":5},
+ {"label":"Ctrl", "x":1, "y":5},
+ {"label":"Win", "x":2, "y":5},
+ {"label":"Alt", "x":3, "y":5},
+ {"label":"Lower", "x":4, "y":5},
+ {"label":"Space", "x":5, "y":5},
+ {"label":"Space", "x":6, "y":5},
+ {"label":"Raise", "x":7, "y":5},
+ {"label":"\u2190", "x":8, "y":5},
+ {"label":"\u2193", "x":9, "y":5},
+ {"label":"\u2191", "x":10, "y":5},
+ {"label":"\u2192", "x":11, "y":5},
+ {"label":"0", "x":12, "y":5},
+ {"label":"00", "x":13, "y":5},
+ {"label":".", "x":14, "y":5},
+ {"label":"Enter", "x":15, "y":5}]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/fleuron/keymaps/default/config.h b/keyboards/fleuron/keymaps/default/config.h
new file mode 100644
index 0000000000..1ce0a168f5
--- /dev/null
+++ b/keyboards/fleuron/keymaps/default/config.h
@@ -0,0 +1,18 @@
+/* Copyright 2018 James Underwood
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+// Place overrides here
\ No newline at end of file
diff --git a/keyboards/fleuron/keymaps/default/keymap.c b/keyboards/fleuron/keymaps/default/keymap.c
new file mode 100644
index 0000000000..3314013669
--- /dev/null
+++ b/keyboards/fleuron/keymaps/default/keymap.c
@@ -0,0 +1,168 @@
+/* Copyright 2018 James Underwood
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+enum custom_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ DZ,
+ LOWER,
+ RAISE
+};
+
+/*
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+*/
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = LAYOUT_ortho_6x16(
+ /* Qwerty
+ * ,---------------------------------------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Home | PgUp | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | Del | End | PgDn | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | 7 | 8 | 9 | * |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------+------|
+ * | Caps | A | S | D | F | G | H | J | K | L | ; | " | 4 | 5 | 6 | - |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | 1 | 2 | 3 | + |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RGB | Ctrl | Alt | GUI |Lower |Shift |Space |Raise | Left | Down | Up |Right | 0 | 00 | . |Enter |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+ KC_ESC, 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_HOME, KC_PGUP, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, KC_END, KC_PGDN, KC_PSLS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PAST, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_P4, KC_P5, KC_P6, KC_PMNS, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, KC_P1, KC_P2, KC_P3, KC_PPLS, \
+ RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_P0, DZ, KC_PDOT, KC_PENT \
+),
+
+[_LOWER] = LAYOUT_ortho_6x16(
+ /* Lower
+ * ,---------------------------------------------------------------------------------------------------------------.
+ * |RESET | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | _ | + | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | { | } | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |RGBtog| | | | | | | | Home | PgUp | PgDn | End | | | | |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______, _______, _______, \
+ RGB_TOG, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, _______ \
+),
+
+[_RAISE] = LAYOUT_ortho_6x16(
+ /* Raise
+ * ,---------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | - | = | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | [ | ] | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Prev | Vol- | Vol+ | Next | | | | |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MRWD, KC_VOLD, KC_VOLU, KC_MFFD, _______, _______, _______, _______ \
+)
+};
+
+/*
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case DZ:
+ SEND_STRING("00"); // Double 0 macro for numpad
+ return false;
+ break;
+ case LOWER:
+
+ }
+ }
+ return true;
+};
+*/
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ break;
+ case DZ:
+ if (record->event.pressed) {
+ SEND_STRING("00"); // Double 0 macro for numpad
+ return false;
+ break;
+ }
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/fleuron/keymaps/default/readme.md b/keyboards/fleuron/keymaps/default/readme.md
new file mode 100644
index 0000000000..ad065932b9
--- /dev/null
+++ b/keyboards/fleuron/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for fleuron
\ No newline at end of file
diff --git a/keyboards/fleuron/keymaps/dollartacos/config.h b/keyboards/fleuron/keymaps/dollartacos/config.h
new file mode 100644
index 0000000000..1ce0a168f5
--- /dev/null
+++ b/keyboards/fleuron/keymaps/dollartacos/config.h
@@ -0,0 +1,18 @@
+/* Copyright 2018 James Underwood
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+// Place overrides here
\ No newline at end of file
diff --git a/keyboards/fleuron/keymaps/dollartacos/keymap.c b/keyboards/fleuron/keymaps/dollartacos/keymap.c
new file mode 100644
index 0000000000..e38dd8bd57
--- /dev/null
+++ b/keyboards/fleuron/keymaps/dollartacos/keymap.c
@@ -0,0 +1,162 @@
+/* Copyright 2018 James Underwood
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+enum custom_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ DZ,
+ LOWER,
+ RAISE
+};
+
+/*
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+*/
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = LAYOUT_fleuron_grid(
+ /* Qwerty
+ * ,---------------------------------------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Mute | Play | Next |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | Del | / | * | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | 7 | 8 | 9 | * |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------+------|
+ * | Caps | A | S | D | F | G | H | J | K | L | ; | " | 4 | 5 | 6 | - |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | 1 | 2 | 3 | + |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RGB | Ctrl | Alt |Lower | Cmd |Enter | Bksp |Space | Raise| Left | Down | Up |Right | 0 | . |Enter |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+ KC_ESC, 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__MUTE, KC_MPLY, KC_MFFD, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, KC_PSLS, KC_PAST, KC_PSLS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PAST, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_P4, KC_P5, KC_P6, KC_PMNS, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, KC_P1, KC_P2, KC_P3, KC_PPLS, \
+ RGB_MOD, KC_LCTL, KC_LALT, LOWER, KC_LGUI, KC_ENT, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+),
+
+[_LOWER] = LAYOUT_fleuron_grid(
+ /* Lower
+ * ,---------------------------------------------------------------------------------------------------------------.
+ * |RESET | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | _ | + | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | { | } | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |RGBtog| | | | | | | | | Home | PgUp | PgDn | End | | | |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______, _______, _______, \
+ RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______ \
+),
+
+[_RAISE] = LAYOUT_fleuron_grid(
+ /* Raise
+ * ,---------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | - | = | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | [ | ] | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | Prev | Vol- | Vol+ | Next | | | |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MRWD, KC_VOLD, KC_VOLU, KC_MFFD, _______, _______, _______ \
+)
+};
+
+/*
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case DZ:
+ SEND_STRING("00"); // Double 0 macro for numpad
+ return false;
+ break;
+ case LOWER:
+
+ }
+ }
+ return true;
+};
+*/
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/fleuron/keymaps/dollartacos/readme.md b/keyboards/fleuron/keymaps/dollartacos/readme.md
new file mode 100644
index 0000000000..d370b574c0
--- /dev/null
+++ b/keyboards/fleuron/keymaps/dollartacos/readme.md
@@ -0,0 +1 @@
+# Dollartaco's keymap for fleuron
\ No newline at end of file
diff --git a/keyboards/fleuron/readme.md b/keyboards/fleuron/readme.md
new file mode 100644
index 0000000000..077753a287
--- /dev/null
+++ b/keyboards/fleuron/readme.md
@@ -0,0 +1,16 @@
+# Fleuron
+
+
+
+The Fleuron keyboard is a 6x16 ortho keyboard supporting right, left, or center numpad placement and rgb backlighting.
+
+Keyboard Maintainer: [James Underwood](https://github.com/ju0)
+Hardware Supported: The Fleuron pcb, ATmega32u4 based controller
+Hardware Availability: limited production run, contact maintainer for details
+
+Make example for this keyboard (after setting up your build environment):
+
+ make fleuron:default to build firmware
+ make fleuron:default:dfu to make and flash with dfu
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
\ No newline at end of file
diff --git a/keyboards/fleuron/rules.mk b/keyboards/fleuron/rules.mk
new file mode 100644
index 0000000000..c295dc55db
--- /dev/null
+++ b/keyboards/fleuron/rules.mk
@@ -0,0 +1,71 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+RGBLIGHT_ENABLE = yes
+LAYOUTS = ortho_6x16
\ No newline at end of file
diff --git a/keyboards/fourier/keymaps/jennetters/config.h b/keyboards/fourier/keymaps/jennetters/config.h
new file mode 100644
index 0000000000..87cda7b5c9
--- /dev/null
+++ b/keyboards/fourier/keymaps/jennetters/config.h
@@ -0,0 +1,31 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define TAPPING_TERM 100
+
+/* Try to prevent sticky keys */
+#define PREVENT_STUCK_MODIFIERS
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
\ No newline at end of file
diff --git a/keyboards/fourier/keymaps/jennetters/keymap.c b/keyboards/fourier/keymaps/jennetters/keymap.c
new file mode 100644
index 0000000000..5037d3ddf5
--- /dev/null
+++ b/keyboards/fourier/keymaps/jennetters/keymap.c
@@ -0,0 +1,148 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BASE 0
+#define _FN1 1
+#define _FN2 2
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+};
+
+#define KC_ KC_TRNS
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define KC_FN1 MO(_FN1)
+#define KC_FN2 MO(_FN2)
+#define KC_SPFN1 LT(_FN1, KC_SPACE)
+#define KC_SPFN2 LT(_FN2, KC_SPACE)
+#define KC_BSFN1 LT(_FN1, KC_BSPC)
+#define KC_BSFN2 LT(_FN2, KC_BSPC)
+#define KC_RST RESET
+#define KC_DBUG DEBUG
+#define KC_RTOG RGB_TOG
+#define KC_RMOD RGB_MOD
+#define KC_RHUI RGB_HUI
+#define KC_RHUD RGB_HUD
+#define KC_RSAI RGB_SAI
+#define KC_RSAD RGB_SAD
+#define KC_RVAI RGB_VAI
+#define KC_RVAD RGB_VAD
+
+//Tap Dance Declarations
+enum {
+ ESC_GR = 0,
+ Q_1,
+ W_2,
+ E_3,
+ R_4,
+ T_5,
+ Y_6,
+ U_7,
+ I_8,
+ O_9,
+ P_0,
+ MIN_LB,
+ EQL_RB,
+ SCL_QUO
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BASE] = LAYOUT(
+ // ,----+----+----+----+----+----|----+----+----+----+----+----+----.
+ // |ESC | Q1 | W2 | E3 | R4 | T5 | Y6 | U7 | I8 | O9 | P0 | -[ | =] |
+ // |----`----`----`----`----`----|----`----`----`----`----`----`----|
+ // | TAB | A | S | D | F | G | H | H | J | K | L | BKSP |
+ // |-----`----`----`----`----`----|----`----`----`----`----`--------|
+ // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHFT |
+ // |-------`----`----`----`----`----|----`----`----`----`----`------|
+ // | CTL | SYS| ALT | SP SPACE | SPACE | FN1 | CTL | \ | ENT |
+ // `-----+----+-----+----+--------|--------+-----+------+----+------'
+
+ TD(ESC_GR), TD(Q_1), TD(W_2), TD(E_3), TD(R_4), TD(T_5), TD(Y_6), TD(U_7), TD(I_8), TD(O_9), TD(P_0),TD(MIN_LB),TD(EQL_RB), \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD(SCL_QUO), KC_BSPC, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_SPACE, KC_SPACE, KC_FN1, KC_LCTL, KC_NUBS, KC_ENTER
+ ),
+
+ [_FN1] = LAYOUT_kc(
+ // ,----+----+----+----+----+----|----+----+----+----+----+----+----.
+ // | | | UP | | | | | | | | | | |
+ // |----`----`----`----`----`----|----`----`----`----`----`----`----|
+ // | | LT | DN | RT | | | | | | | ' | DEL |
+ // |-----`----`----`----`----`----|----`----`----`----`----`--------|
+ // | | | | | | | | | | |PIPE| |
+ // |-------`----`----`----`----`----|----`----`----`----`----`------|
+ // | | | | | | | | | | |
+ // `-----+----+-----+----+--------|--------+-----+------+----+------'
+
+ , , UP, , , , , , , , , , , \
+ , LEFT, DOWN, RIGHT, , , , , , , QUOT, DEL, \
+ , , , , , , , , , , NUBS, , \
+ , , , , , , , , ,
+ ),
+
+ [_FN2] = LAYOUT_kc(
+ // ,----+----+----+----+----+----|----+----+----+----+----+----+----.
+ // | | | | | | | | | | | | | |
+ // |----`----`----`----`----`----|----`----`----`----`----`----`----|
+ // | | | | | | | | | | | | |
+ // |-----`----`----`----`----`----|----`----`----`----`----`--------|
+ // | | | | | | | | | | | | |
+ // |-------`----`----`----`----`----|----`----`----`----`----`------|
+ // | | | | | | | | | | |
+ // `-----+----+-----+----+--------|--------+-----+------+----+------'
+
+ , , , , , , , , , , , , , \
+ , , , , , , , , , , , , \
+ , , , , , , , , , , , , \
+ , , , , , , , , ,
+ )
+
+};
+
+void esc_gr_finished (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ register_code (KC_ESC);
+ } else if (state->count == 2) {
+ register_code (KC_GRV);
+ } else {
+ register_code (KC_LSFT);
+ register_code (KC_GRV);
+ }
+}
+
+void esc_gr_reset (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ unregister_code (KC_ESC);
+ } else if (state->count == 2) {
+ unregister_code (KC_GRV);
+ } else {
+ unregister_code (KC_LSFT);
+ unregister_code (KC_GRV);
+ }
+}
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+[ESC_GR] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, esc_gr_finished, esc_gr_reset), //Tap once for ESC, twice for `, thrice for ~
+[Q_1] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_1), //Tap once for Q, twice for 1/!
+[W_2] = ACTION_TAP_DANCE_DOUBLE(KC_W, KC_2), //Tap once for W, twice for 2/@
+[E_3] = ACTION_TAP_DANCE_DOUBLE(KC_E, KC_3), //Tap once for E, twice for 3/#
+[R_4] = ACTION_TAP_DANCE_DOUBLE(KC_R, KC_4), //Tap once for R, twice for 4/$
+[T_5] = ACTION_TAP_DANCE_DOUBLE(KC_T, KC_5), //Tap once for T, twice for 5/%
+[Y_6] = ACTION_TAP_DANCE_DOUBLE(KC_Y, KC_6), //Tap once for Y, twice for 6/^
+[U_7] = ACTION_TAP_DANCE_DOUBLE(KC_U, KC_7), //Tap once for U, twice for 7/&
+[I_8] = ACTION_TAP_DANCE_DOUBLE(KC_I, KC_8), //Tap once for I, twice for 8/*
+[O_9] = ACTION_TAP_DANCE_DOUBLE(KC_O, KC_9), //Tap once for O, twice for 9/(
+[P_0] = ACTION_TAP_DANCE_DOUBLE(KC_P, KC_0), //Tap once for P, twice for 0/)
+[MIN_LB] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_LBRC), //Tap once for -, twice for [/{
+[EQL_RB] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_RBRC), //Tap once for =, twice for ]/}
+[SCL_QUO] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_QUOT) //Tap once for ;, '/"
+// Other declarations would go here, separated by commas, if you have them
+};
\ No newline at end of file
diff --git a/keyboards/fourier/keymaps/jennetters/rules.mk b/keyboards/fourier/keymaps/jennetters/rules.mk
new file mode 100644
index 0000000000..1ba2fa8fbe
--- /dev/null
+++ b/keyboards/fourier/keymaps/jennetters/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/wanleg/keymap.c b/keyboards/gherkin/keymaps/wanleg/keymap.c
index 1e534fe6d3..108ed40e53 100644
--- a/keyboards/gherkin/keymaps/wanleg/keymap.c
+++ b/keyboards/gherkin/keymaps/wanleg/keymap.c
@@ -206,13 +206,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | mLeft | mDown | mRight | | SHIFT | mBtn3 | mBtn1 | mBtn2 | ; | ' |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | Sft//Cp| | | | | C-A-D | | | ALT | DEL |
+ * | Sft//Cp| | | | | C-A-D | mLeft | mRight | ALT | DEL |
* '-----------------------------------------------------------------------------------------'
*/
[ETC] = LAYOUT_ortho_3x10( /* ETC */
KC_GRV, KC_MS_U, _______, _______, RESET, KC_RSFT, KC_WH_U, KC_WH_D, _______, KC_BSLS,
KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LSFT, KC_BTN3, KC_BTN1, KC_BTN2, KC_SCLN, KC_QUOT,
- TD(TD_SFT_CAPS), _______, _______, _______, _______, LALT(LCTL(KC_DEL)), _______, _______, KC_LALT, KC_DEL
+ TD(TD_SFT_CAPS), _______, _______, _______, _______, LALT(LCTL(KC_DEL)), KC_WH_L, KC_WH_R, KC_LALT, KC_DEL
),
};
diff --git a/keyboards/h87a/info.json b/keyboards/h87a/info.json
index 9428c4b396..cf3e81dd3a 100644
--- a/keyboards/h87a/info.json
+++ b/keyboards/h87a/info.json
@@ -5,7 +5,7 @@
"width": 18.25,
"height": 6.5,
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"x":13, "y":1.5}, {"x":14, "y":1.5}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"label":"Enter", "x":13.75, "y":3.5, "w":1.25}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
}
}
diff --git a/keyboards/helix/config.h b/keyboards/helix/config.h
index 7bd4d26456..fbfbd32804 100644
--- a/keyboards/helix/config.h
+++ b/keyboards/helix/config.h
@@ -39,4 +39,13 @@ along with this program. If not, see .
// ./tmk_core
// ......
+#ifdef USE_Link_Time_Optimization
+ // LTO has issues with macros (action_get_macro) and "functions" (fn_actions),
+ // so just disable them
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+
+ #define DISABLE_LEADER
+#endif // USE_Link_Time_Optimization
+
#endif /* CONFIG_H */
diff --git a/keyboards/helix/helix.h b/keyboards/helix/helix.h
index 36d12ef86b..d73feb6bbf 100644
--- a/keyboards/helix/helix.h
+++ b/keyboards/helix/helix.h
@@ -7,6 +7,9 @@
#ifdef KEYBOARD_helix_rev2
#include "rev2.h"
#endif
+#ifdef KEYBOARD_helix_pico
+ #include "pico.h"
+#endif
#include "quantum.h"
diff --git a/keyboards/helix/pico/config.h b/keyboards/helix/pico/config.h
new file mode 100644
index 0000000000..b49f0173b4
--- /dev/null
+++ b/keyboards/helix/pico/config.h
@@ -0,0 +1,152 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#ifndef PICO_CONFIG_H
+#define PICO_CONFIG_H
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0002
+#define MANUFACTURER Yushakobo
+#define PRODUCT HelixPico
+#define DESCRIPTION A split keyboard for the cheap makers
+
+
+#define PREVENT_STUCK_MODIFIERS
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+/* Use I2C or Serial */
+#define USE_I2C
+#define USE_SERIAL
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+// Helix keyboard OLED support
+// see ./rules.mk: OLED_ENABLE=yes or no
+#ifdef OLED_ENABLE
+ #define SSD1306OLED
+#endif
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
+
+// wiring of each half
+#define MATRIX_COLS 7
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }
+// #define MATRIX_COL_PINS { B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Audio */
+#ifdef AUDIO_ENABLE
+ #define B5_AUDIO
+#endif
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_TIMER
+//#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h
+#define ws2812_PORTREG PORTD
+#define ws2812_DDRREG DDRD
+
+// Helix keyboard RGB LED support
+//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no
+// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes
+#ifdef RGBLED_BACK
+ #define RGBLED_NUM 25
+#else
+ #define RGBLED_NUM 6
+#endif
+
+#ifndef IOS_DEVICE_ENABLE
+ #if RGBLED_NUM <= 6
+ #define RGBLIGHT_LIMIT_VAL 255
+ #else
+ #define RGBLIGHT_LIMIT_VAL 130
+ #endif
+ #define RGBLIGHT_VAL_STEP 17
+#else
+ #if RGBLED_NUM <= 6
+ #define RGBLIGHT_LIMIT_VAL 90
+ #else
+ #define RGBLIGHT_LIMIT_VAL 45
+ #endif
+ #define RGBLIGHT_VAL_STEP 4
+#endif
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
+// USB_MAX_POWER_CONSUMPTION value for Helix keyboard
+// 120 RGBoff, OLEDoff
+// 120 OLED
+// 330 RGB 6
+// 300 RGB 32
+// 310 OLED & RGB 32
+ #define USB_MAX_POWER_CONSUMPTION 400
+#else
+ // fix iPhone and iPad power adapter issue
+ // iOS device need lessthan 100
+ #define USB_MAX_POWER_CONSUMPTION 100
+#endif
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+
+#endif
diff --git a/keyboards/helix/pico/info.json b/keyboards/helix/pico/info.json
new file mode 100644
index 0000000000..f4e50b95c0
--- /dev/null
+++ b/keyboards/helix/pico/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "HelixPico",
+ "url": "https://github.com/MakotoKurauchi/helix",
+ "maintainer": "MakotoKurauchi",
+ "width": 15,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 50,
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/helix/pico/keymaps/default/config.h b/keyboards/helix/pico/keymaps/default/config.h
new file mode 100644
index 0000000000..6084b0970b
--- /dev/null
+++ b/keyboards/helix/pico/keymaps/default/config.h
@@ -0,0 +1,31 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+// place overrides here
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(STARTUP_SOUND)
+ #define AUDIO_CLICKY
+#endif
+
+#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/pico/keymaps/default/keymap.c b/keyboards/helix/pico/keymaps/default/keymap.c
new file mode 100644
index 0000000000..75221d485a
--- /dev/null
+++ b/keyboards/helix/pico/keymaps/default/keymap.c
@@ -0,0 +1,474 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+ BACKLIT,
+ EISU,
+ KANA,
+ RGBRST
+};
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+//Macros
+#define M_SAMPLE M(KC_SAMPLEMACRO)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+
+[_QWERTY] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+ /* Colemak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | ' | , | . | P | Y | | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_DVORAK] = LAYOUT( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 | | PrSc | Home | End | |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSCR, KC_HOME, KC_END, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 | | PrSc |PageDn|PageUp| |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSCR, KC_PGDN, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | Reset| | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |Aud on|Audoff|MU TOG|MU MOD| Mac | | Win |Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |CK TOG|CK RST| CK UP|CK DWN| | | | |RGB ON| HUE+ | SAT+ | VAL+ |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | | | | | | | | | | | MODE | HUE- | SAT- | VAL- |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, AU_ON, AU_OFF, MU_TOG, MU_MOD, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, CK_TOGG, CK_RST, CK_UP, CK_DOWN, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD \
+ )
+};
+
+
+
+#ifdef AUDIO_ENABLE
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+#endif
+
+// define variables for reactive RGB
+bool TOG_STATUS = false;
+int RGB_current_mode;
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode);
+ #endif
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ persistent_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ persistent_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(16);
+ #endif
+ }
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ TOG_STATUS = false;
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(15);
+ #endif
+ }
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ layer_off(_RAISE);
+ TOG_STATUS = false;
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ return false;
+ break;
+ case EISU:
+ if (record->event.pressed) {
+ if(keymap_config.swap_lalt_lgui==false){
+ register_code(KC_LANG2);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG2);
+ }
+ return false;
+ break;
+ case KANA:
+ if (record->event.pressed) {
+ if(keymap_config.swap_lalt_lgui==false){
+ register_code(KC_LANG1);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG1);
+ }
+ return false;
+ break;
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(50); // gets rid of tick
+}
+
+void shutdown_user()
+{
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_SONG(music_scale);
+}
+
+#endif
+
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+void matrix_scan_user(void) {
+ iota_gfx_task(); // this is what updates the display continuously
+}
+
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+//assign the right code to your layers for OLED display
+#define L_BASE 0
+#define L_LOWER (1<<_LOWER)
+#define L_RAISE (1<<_RAISE)
+#define L_ADJUST (1<<_ADJUST)
+#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
+
+static void render_logo(struct CharacterMatrix *matrix) {
+
+ static char logo[]={
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
+ 0};
+ matrix_write(matrix, logo);
+ //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
+}
+
+
+
+void render_status(struct CharacterMatrix *matrix) {
+
+ // Render to mode icon
+ static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
+ if(keymap_config.swap_lalt_lgui==false){
+ matrix_write(matrix, logo[0][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[0][1]);
+ }else{
+ matrix_write(matrix, logo[1][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[1][1]);
+ }
+
+ // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
+ char buf[40];
+ snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
+ matrix_write_P(matrix, PSTR("\nLayer: "));
+ switch (layer_state) {
+ case L_BASE:
+ matrix_write_P(matrix, PSTR("Default"));
+ break;
+ case L_RAISE:
+ matrix_write_P(matrix, PSTR("Raise"));
+ break;
+ case L_LOWER:
+ matrix_write_P(matrix, PSTR("Lower"));
+ break;
+ case L_ADJUST:
+ case L_ADJUST_TRI:
+ matrix_write_P(matrix, PSTR("Adjust"));
+ break;
+ default:
+ matrix_write(matrix, buf);
+ }
+
+ // Host Keyboard LED Status
+ char led[40];
+ snprintf(led, sizeof(led), "\n%s %s %s",
+ (host_keyboard_leds() & (1<:<キーマップ名>`という指定で行います。
+
+```
+$ make helix/pico:default
+```
+
+キーボードへの書き込みまで同時に行うには下記のように`:avrdude`を付けます。
+
+```
+$ make helix/pico:default:avrdude
+```
+
+コンパイル結果と中間生成物を消去したい場合は以下のようにします。
+
+```
+$ make helix/pico:default:clean
+```
+
+## カスタマイズ
+
+オプションの OLED をつけたり、
+RGB バックライトまたは、RGB Underglow をつけた場合は、
+`qmk_firmware/keyboards/helix/pico/keymaps/default/rules.mk` の以下の部分を編集して機能を有効化してください。
+
+```
+# Helix keyboard customize
+# you can edit follows 6 Variables
+# jp: 以下の6つの変数を必要に応じて編集します。
+OLED_ENABLE = no # OLED_ENABLE
+LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
+LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
+LED_ANIMATIONS = yes # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+
+```
+
+## RGB バックライトを有効にする
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+
+```
+LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.)
+```
+
+## RGB Underglow を有効にする
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+```
+LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
+```
+
+## OLEDを有効にする
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+```
+OLED_ENABLE = yes # OLED_ENABLE
+```
+
+## iPad/iPhoneサポートを有効にする。
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+RBG Underglow や RGBバックライトの輝度を抑えて、iPad, iPhone にも接続できるようになります。
+
+```
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+```
+
+## リンク
+
+* さらに詳細は、[こちら helix/Doc/firmware_jp.md](https://github.com/MakotoKurauchi/helix/blob/master/Doc/firmware_jp.md)をご覧ください。
+* [Helix top](https://github.com/MakotoKurauchi/helix)
diff --git a/keyboards/helix/pico/keymaps/default/rules.mk b/keyboards/helix/pico/keymaps/default/rules.mk
new file mode 100644
index 0000000000..afb1240685
--- /dev/null
+++ b/keyboards/helix/pico/keymaps/default/rules.mk
@@ -0,0 +1,129 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port B5
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+define HELIX_CUSTOMISE_MSG
+ $(info Helix customize)
+ $(info - OLED_ENABLE=$(OLED_ENABLE))
+ $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
+ $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
+ $(info - LED_ANIMATION=$(LED_ANIMATIONS))
+ $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
+endef
+
+# Helix keyboard customize
+# you can edit follows 6 Variables
+# jp: 以下の6つの変数を必要に応じて編集します。
+OLED_ENABLE = no # OLED_ENABLE
+LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
+LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
+LED_ANIMATIONS = yes # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
+
+#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
+#### Do not enable these with audio at the same time.
+
+### Helix keyboard 'default' keymap: convenient command line option
+## make HELIX= helix:defualt
+## option= oled | back | under | na | ios
+## ex.
+## make HELIX=oled helix:defualt
+## make HELIX=oled,back helix:defualt
+## make HELIX=oled,under helix:defualt
+## make HELIX=oled,back,na helix:defualt
+## make HELIX=oled,back,ios helix:defualt
+##
+ifneq ($(strip $(HELIX)),)
+ ifeq ($(findstring oled,$(HELIX)), oled)
+ OLED_ENABLE = yes
+ endif
+ ifeq ($(findstring back,$(HELIX)), back)
+ LED_BACK_ENABLE = yes
+ else ifeq ($(findstring under,$(HELIX)), under)
+ LED_UNDERGLOW_ENABLE = yes
+ endif
+ ifeq ($(findstring na,$(HELIX)), na)
+ LED_ANIMATIONS = no
+ endif
+ ifeq ($(findstring ios,$(HELIX)), ios)
+ IOS_DEVICE_ENABLE = yes
+ endif
+ $(eval $(call HELIX_CUSTOMISE_MSG))
+ $(info )
+endif
+
+# Uncomment these for checking
+# jp: コンパイル時にカスタマイズの状態を表示したい時はコメントをはずします。
+# $(eval $(call HELIX_CUSTOMISE_MSG))
+# $(info )
+
+ifeq ($(strip $(LED_BACK_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+ OPT_DEFS += -DRGBLED_BACK
+ ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ $(eval $(call HELIX_CUSTOMISE_MSG))
+ $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
+ endif
+else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+else
+ RGBLIGHT_ENABLE = no
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+endif
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+endif
+
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ OPT_DEFS += -DOLED_ENABLE
+endif
+
+ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
+ OPT_DEFS += -DLOCAL_GLCDFONT
+endif
+
+ifeq ($(strip $(AUDIO_ENABLE)),yes)
+ ifeq ($(strip $(RGBLIGHT_ENABLE)),yes)
+ Link_Time_Optimization = yes
+ endif
+ ifeq ($(strip $(OLED_ENABLE)),yes)
+ Link_Time_Optimization = yes
+ endif
+endif
+
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
+
+# Uncomment these for debugging
+# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
+# $(info -- OPT_DEFS=$(OPT_DEFS))
+# $(info )
diff --git a/keyboards/helix/pico/matrix.c b/keyboards/helix/pico/matrix.c
new file mode 100644
index 0000000000..aba55da7c8
--- /dev/null
+++ b/keyboards/helix/pico/matrix.c
@@ -0,0 +1,351 @@
+/*
+Copyright 2012 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+/*
+ * scan matrix
+ */
+#include
+#include
+#include
+#include
+#include
+#include
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "split_util.h"
+#include "pro_micro.h"
+
+#ifdef USE_MATRIX_I2C
+# include "i2c.h"
+#else // USE_SERIAL
+# include "serial.h"
+#endif
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+#define ERROR_DISCONNECT_COUNT 5
+
+static uint8_t debouncing = DEBOUNCE;
+static const int ROWS_PER_HAND = MATRIX_ROWS/2;
+static uint8_t error_count = 0;
+uint8_t is_master = 0 ;
+
+static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+static uint8_t matrix_master_scan(void);
+
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ debug_enable = true;
+ debug_matrix = true;
+ debug_mouse = true;
+ // initialize row and col
+ unselect_rows();
+ init_cols();
+
+ TX_RX_LED_INIT;
+ TXLED0;
+ RXLED0;
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ is_master = has_usb();
+
+ matrix_init_quantum();
+}
+
+uint8_t _matrix_scan(void)
+{
+ // Right hand is stored after the left in the matirx so, we need to offset it
+ int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
+
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
+ select_row(i);
+ _delay_us(30); // without this wait read unstable value.
+ matrix_row_t cols = read_cols();
+ if (matrix_debouncing[i+offset] != cols) {
+ matrix_debouncing[i+offset] = cols;
+ debouncing = DEBOUNCE;
+ }
+ unselect_rows();
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
+ matrix[i+offset] = matrix_debouncing[i+offset];
+ }
+ }
+ }
+
+ return 1;
+}
+
+#ifdef USE_MATRIX_I2C
+
+// Get rows from other half over i2c
+int i2c_transaction(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+
+ int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+ if (err) goto i2c_error;
+
+ // start of matrix stored at 0x00
+ err = i2c_master_write(0x00);
+ if (err) goto i2c_error;
+
+ // Start read
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
+ if (err) goto i2c_error;
+
+ if (!err) {
+ int i;
+ for (i = 0; i < ROWS_PER_HAND-1; ++i) {
+ matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
+ }
+ matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
+ i2c_master_stop();
+ } else {
+i2c_error: // the cable is disconnceted, or something else went wrong
+ i2c_reset_state();
+ return err;
+ }
+
+ return 0;
+}
+
+#else // USE_SERIAL
+
+int serial_transaction(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ int ret=serial_update_buffers();
+ if (ret ) {
+ if(ret==2)RXLED1;
+ return 1;
+ }
+ RXLED0;
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = serial_slave_buffer[i];
+ }
+ return 0;
+}
+#endif
+
+uint8_t matrix_scan(void)
+{
+ if (is_master) {
+ matrix_master_scan();
+ }else{
+ matrix_slave_scan();
+
+// if(serial_slave_DATA_CORRUPT()){
+// TXLED0;
+ int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[offset+i] = serial_master_buffer[i];
+ }
+
+// }else{
+// TXLED1;
+// }
+
+ matrix_scan_quantum();
+ }
+ return 1;
+}
+
+
+uint8_t matrix_master_scan(void) {
+
+ int ret = _matrix_scan();
+
+#ifndef KEYBOARD_helix_rev1
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+#ifdef USE_MATRIX_I2C
+// for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ /* i2c_slave_buffer[i] = matrix[offset+i]; */
+// i2c_slave_buffer[i] = matrix[offset+i];
+// }
+#else // USE_SERIAL
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_master_buffer[i] = matrix[offset+i];
+ }
+#endif
+#endif
+
+#ifdef USE_MATRIX_I2C
+ if( i2c_transaction() ) {
+#else // USE_SERIAL
+ if( serial_transaction() ) {
+#endif
+ // turn on the indicator led when halves are disconnected
+ TXLED1;
+
+ error_count++;
+
+ if (error_count > ERROR_DISCONNECT_COUNT) {
+ // reset other half if disconnected
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = 0;
+ }
+ }
+ } else {
+ // turn off the indicator led on no error
+ TXLED0;
+ error_count = 0;
+ }
+ matrix_scan_quantum();
+ return ret;
+}
+
+void matrix_slave_scan(void) {
+ _matrix_scan();
+
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+#ifdef USE_MATRIX_I2C
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ /* i2c_slave_buffer[i] = matrix[offset+i]; */
+ i2c_slave_buffer[i] = matrix[offset+i];
+ }
+#else // USE_SERIAL
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_slave_buffer[i] = matrix[offset+i];
+ }
+#endif
+}
+
+bool matrix_is_modified(void)
+{
+ if (debouncing) return false;
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1< > 4) + 1) &= ~_BV(col_pins[x] & 0xF);
+ _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF);
+ }
+}
+
+static matrix_row_t read_cols(void)
+{
+ matrix_row_t result = 0;
+ for(int x = 0; x < MATRIX_COLS; x++) {
+ result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
+ }
+ return result;
+}
+
+static void unselect_rows(void)
+{
+ for(int x = 0; x < ROWS_PER_HAND; x++) {
+ _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
+ _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
+ }
+}
+
+static void select_row(uint8_t row)
+{
+ _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF);
+ _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF);
+}
diff --git a/keyboards/helix/pico/pico.c b/keyboards/helix/pico/pico.c
new file mode 100644
index 0000000000..5e248ccffe
--- /dev/null
+++ b/keyboards/helix/pico/pico.c
@@ -0,0 +1,14 @@
+#include "helix.h"
+
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ //led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ matrix_init_user();
+};
diff --git a/keyboards/helix/pico/pico.h b/keyboards/helix/pico/pico.h
new file mode 100644
index 0000000000..a3d658daa0
--- /dev/null
+++ b/keyboards/helix/pico/pico.h
@@ -0,0 +1,65 @@
+#ifndef PICO_H
+#define PICO_CONFIG_H
+
+#include "../helix.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+//rgb led driver
+#include "ws2812.h"
+#endif
+
+#ifdef USE_I2C
+#include
+#ifdef __AVR__
+ #include
+ #include
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+
+#ifndef FLIP_HALF
+// Standard Keymap
+// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, KC_NO }, \
+ { L10, L11, L12, L13, L14, L15, KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { R05, R04, R03, R02, R01, R00, KC_NO }, \
+ { R15, R14, R13, R12, R11, R10, KC_NO }, \
+ { R25, R24, R23, R22, R21, R20, KC_NO }, \
+ { R35, R34, R33, R32, R31, R30, R36 }, \
+ }
+#else
+// Keymap with right side flipped
+// (TRRS jack on both halves are to the right)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, KC_NO }, \
+ { L10, L11, L12, L13, L14, L15, KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { KC_NO, R00, R01, R02, R03, R04, R05 }, \
+ { KC_NO, R10, R11, R12, R13, R14, R15 }, \
+ { KC_NO, R20, R21, R22, R23, R24, R25 }, \
+ { R36, R30, R31, R32, R33, R34, R35 }, \
+ }
+#endif
+
+#endif
diff --git a/keyboards/helix/pico/rules.mk b/keyboards/helix/pico/rules.mk
new file mode 100644
index 0000000000..c994ac8dea
--- /dev/null
+++ b/keyboards/helix/pico/rules.mk
@@ -0,0 +1,3 @@
+SRC += pico/matrix.c \
+ pico/split_util.c \
+ ws2812.c
diff --git a/keyboards/helix/pico/serial_config.h b/keyboards/helix/pico/serial_config.h
new file mode 100644
index 0000000000..82c6e4e836
--- /dev/null
+++ b/keyboards/helix/pico/serial_config.h
@@ -0,0 +1,16 @@
+#ifndef SOFT_SERIAL_CONFIG_H
+#define SOFT_SERIAL_CONFIG_H
+
+/* Soft Serial defines */
+#define SERIAL_PIN_DDR DDRD
+#define SERIAL_PIN_PORT PORTD
+#define SERIAL_PIN_INPUT PIND
+#define SERIAL_PIN_MASK _BV(PD2)
+#define SERIAL_PIN_INTERRUPT INT2_vect
+
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+//// #error rev2 serial config
+
+#endif /* SOFT_SERIAL_CONFIG_H */
diff --git a/keyboards/helix/pico/split_util.c b/keyboards/helix/pico/split_util.c
new file mode 100644
index 0000000000..beb39fa005
--- /dev/null
+++ b/keyboards/helix/pico/split_util.c
@@ -0,0 +1,70 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include "split_util.h"
+#include "matrix.h"
+#include "keyboard.h"
+
+#ifdef USE_MATRIX_I2C
+# include "i2c.h"
+#else
+# include "serial.h"
+#endif
+
+volatile bool isLeftHand = true;
+
+static void setup_handedness(void) {
+ #ifdef EE_HANDS
+ isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
+ #else
+ // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c
+ #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
+ isLeftHand = !has_usb();
+ #else
+ isLeftHand = has_usb();
+ #endif
+ #endif
+}
+
+static void keyboard_master_setup(void) {
+
+#ifdef USE_MATRIX_I2C
+ i2c_master_init();
+#else
+ serial_master_init();
+#endif
+}
+
+static void keyboard_slave_setup(void) {
+
+#ifdef USE_MATRIX_I2C
+ i2c_slave_init(SLAVE_I2C_ADDRESS);
+#else
+ serial_slave_init();
+#endif
+}
+
+bool has_usb(void) {
+ USBCON |= (1 << OTGPADE); //enables VBUS pad
+ _delay_us(5);
+ return (USBSTA & (1<
+#include "eeconfig.h"
+
+#define SLAVE_I2C_ADDRESS 0x32
+
+extern volatile bool isLeftHand;
+
+// slave version of matix scan, defined in matrix.c
+void matrix_slave_scan(void);
+
+void split_keyboard_setup(void);
+bool has_usb(void);
+
+void matrix_master_OLED_init (void);
+
+#endif
diff --git a/keyboards/helix/rev2/keymaps/default/rules.mk b/keyboards/helix/rev2/keymaps/default/rules.mk
index 4174a30457..5340a74ba2 100644
--- a/keyboards/helix/rev2/keymaps/default/rules.mk
+++ b/keyboards/helix/rev2/keymaps/default/rules.mk
@@ -36,6 +36,7 @@ LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
#### Do not enable these with audio at the same time.
@@ -110,6 +111,10 @@ ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
OPT_DEFS += -DLOCAL_GLCDFONT
endif
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
index d8fc35c486..67da9c370b 100644
--- a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
+++ b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
@@ -35,6 +35,7 @@ LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
#### Do not enable these with audio at the same time.
@@ -113,6 +114,10 @@ ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
OPT_DEFS += -DLOCAL_GLCDFONT
endif
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/helix/rev2/keymaps/five_rows/rules.mk b/keyboards/helix/rev2/keymaps/five_rows/rules.mk
index 53a00d8d4d..402f855ae1 100644
--- a/keyboards/helix/rev2/keymaps/five_rows/rules.mk
+++ b/keyboards/helix/rev2/keymaps/five_rows/rules.mk
@@ -36,6 +36,7 @@ LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
#### Do not enable these with audio at the same time.
@@ -110,6 +111,10 @@ ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
OPT_DEFS += -DLOCAL_GLCDFONT
endif
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c b/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c
index 0f689f0f16..141b222753 100644
--- a/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c
+++ b/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c
@@ -1,16 +1,20 @@
#include QMK_KEYBOARD_H
+#include "keymap_jp.h"
#include "bootloader.h"
#ifdef PROTOCOL_LUFA
#include "lufa.h"
#include "split_util.h"
#endif
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
+// * If you want to recognize that you pressed the Adjust key with the Lower / Raise key you can enable this comment out. However, the binary size may be over. *
+// #define ADJUST_MACRO_ENABLE
+
+// * If you want to use the Kana key you can enable this comment out. However, the binary size may be over. *
+// #define KANA_ENABLE
+
extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
@@ -35,33 +39,26 @@ enum layer_number {
};
enum custom_keycodes {
- BASE = SAFE_RANGE,
- BAS_E,
- LOWER,
- LOW_E,
- RAISE,
- RAI_E,
- ADJUST,
- EISU,
+ RGBRST = SAFE_RANGE,
#ifdef KANA_ENABLE
+ EISU,
KANA,
#endif
- RGBRST
};
-// JIS key aliases
-#define JP_CFTD KC_EQL // ^ and ~ Circumflex (Hat) and Tilde
-#define JP_ATBQ KC_LBRC // @ and ` Atmark and Back-quote
-#define JP_CLAS KC_QUOT // : and * Colon and Asterisk
-#define JP_BSVL KC_JYEN // \ and | Back slash and and Vertical-line)
-#define JP_LBRC KC_RBRC // [ and { Left-bracket
-#define JP_RBRC KC_BSLS // ] and } Right-bracket
-#define JP_BSUS KC_RO // \ and _ Back slash and Under-score
-
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
+// Layer Mode aliases
+#define DL_BAS DF(_BASE)
+#define DL_BASE DF(_BAS_E)
+#define ML_LOW MO(_LOWER)
+#define ML_LOWE MO(_LOW_E)
+#define ML_RAI MO(_RAISE)
+#define ML_RAIE MO(_RAI_E)
+#define ML_ADJ MO(_ADJUST)
+
#if HELIX_ROWS == 5
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty JIS Normal
@@ -79,10 +76,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_BASE] = LAYOUT( \
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, \
- EISU, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_ATBQ, \
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_CLAS, \
+ JP_ZHTG, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT, \
- KC_LCTL, KC_LALT, KC_LGUI, ADJUST, LOWER, KC_SPC, KC_BSPC, KC_SPC, KC_SPC, RAISE, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT \
+ KC_LCTL, KC_LALT, KC_LGUI, ML_ADJ, ML_LOW, KC_SPC, KC_BSPC, KC_SPC, KC_SPC, ML_RAI, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT \
),
/* Qwerty JIS Exchange L and R
@@ -100,10 +97,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_BAS_E] = LAYOUT( \
KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, \
- KC_Y, KC_U, KC_I, KC_O, KC_P, JP_ATBQ, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \
- KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_CLAS, XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, \
- KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_ENT, EISU, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, \
- KC_SPC, RAI_E, JP_RBRC, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT, ADJUST, KC_LCTL, KC_LALT, KC_LGUI, JP_LBRC, LOW_E, KC_BSPC \
+ KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, \
+ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_ENT, JP_ZHTG, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, \
+ KC_SPC, ML_RAIE, JP_RBRC, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT, ML_ADJ, KC_LCTL, KC_LALT, KC_LGUI, JP_LBRC, ML_LOWE, KC_BSPC \
),
/* Lower JIS Normal
@@ -120,10 +117,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_LOWER] = LAYOUT( \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, JP_CFTD, JP_BSVL, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_ATBQ, JP_LBRC, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN, JP_CLAS, JP_RBRC, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT, KC_SLSH, JP_BSUS, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, JP_CIRC, JP_YEN, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_AT, JP_LBRC, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN, JP_COLN, JP_RBRC, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT, KC_SLSH, JP_BSLS, \
_______, _______, _______, _______, XXXXXXX, XXXXXXX, KC_DEL, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
),
@@ -141,10 +138,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_LOW_E] = LAYOUT( \
- _______, XXXXXXX, XXXXXXX, KC_MINS, JP_CFTD, JP_BSVL, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, JP_ATBQ, JP_LBRC, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- _______, XXXXXXX, XXXXXXX, KC_SCLN, JP_CLAS, JP_RBRC, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- _______, KC_COMM, KC_DOT, KC_SLSH, JP_BSUS, KC_PGUP, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, XXXXXXX, XXXXXXX, KC_MINS, JP_CIRC, JP_YEN, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, JP_AT, JP_LBRC, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, XXXXXXX, XXXXXXX, KC_SCLN, JP_COLN, JP_RBRC, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, KC_COMM, KC_DOT, KC_SLSH, JP_BSLS, KC_PGUP, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
_______, _______, XXXXXXX, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, _______, _______, XXXXXXX, _______, KC_DEL \
),
@@ -152,20 +149,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------. ,-----------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | F12 | | | | Home |PageUp|
+ * | | | | | | | | |MsWhL |MsWhU | Home |PageUp| F12 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | | | | | End |PageDn|
+ * | | | | | | | | |MsWhR |MsWhD | End |PageDn| |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | |MsBtn1|MsBtn2| | | | | | | | | | MsUp | |
+ * | | | | | | | | | | |MsBtn1|MsBtn2| MsUp | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |MsLeft|MsDown|MsRght|
* `-------------------------------------------------------------------------------------------------'
*/
[_RAISE] = LAYOUT( \
_______, KC_F1 , KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F12 , XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGUP, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_END, KC_PGDN, \
- _______, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_U, KC_HOME, KC_PGUP, KC_F12, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_R, KC_WH_D, KC_END, KC_PGDN, XXXXXXX, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, KC_MS_U, XXXXXXX, \
_______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R \
),
@@ -173,26 +170,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------. ,-----------------------------------------.
* | F6 | F7 | F8 | F9 | F10 | F11 | | | F1 | F2 | F3 | F4 | F5 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | F12 | | | | | | | | | | | | |
+ * | | | |MsWhL |MsWhU | F12 | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | | | | | | |
+ * | | | |MsWhR |MsWhD | | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | MsUp | | | |MsBtn1|MsBtn2| | | |
+ * | | | |MsBtn1|MsBtn2| MsUp | | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | |MsLeft|MsDown|MsRght| | | | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
[_RAI_E] = LAYOUT( \
KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_F1 , KC_F2, KC_F3, KC_F4, KC_F5, \
- KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, XXXXXXX, _______, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_U, KC_F12, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_R, KC_WH_D, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, KC_MS_U, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
_______, _______, XXXXXXX, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX \
),
/* Adjust (Lower + Raise) Common map for Normal and Exchange
* ,-----------------------------------------. ,-----------------------------------------.
- * | | Reset|RGBRST|Aud on|Audoff| | | | Reset|RGBRST|Aud on|Audoff| |
+ * | | Reset|RGBRST| | | | | | Reset|RGBRST| | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | |ModNrm|ModExc| Mac | Win | | | |ModNrm|ModExc| Mac | Win | |
* |------+------+------+------+------+------| |------+------+------+------+------|------+
@@ -204,8 +201,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT( \
- XXXXXXX, RESET, RGBRST, AU_ON, AU_OFF, XXXXXXX, XXXXXXX, RESET, RGBRST, AU_ON, AU_OFF, XXXXXXX, \
- XXXXXXX, BASE, BAS_E, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, BASE, BAS_E, AG_NORM, AG_SWAP, XXXXXXX, \
+ XXXXXXX, RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, DL_BAS, DL_BASE, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, DL_BAS, DL_BASE, AG_NORM, AG_SWAP, XXXXXXX, \
XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, \
XXXXXXX, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
@@ -249,37 +246,6 @@ inline void set_keylog(uint16_t keycode, keyrecord_t *record)
}
#endif
-#ifdef AUDIO_ENABLE
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
-
-void startup_user()
-{
- _delay_ms(20); // gets rid of tick
-}
-
-void shutdown_user()
-{
- _delay_ms(150);
- stop_all_notes();
-}
-
-void music_on_user(void)
-{
- music_scale_user();
-}
-
-void music_scale_user(void)
-{
- PLAY_SONG(music_scale);
-}
-
-#else
-float tone_qwerty;
-float music_scale;
-#define PLAY_SONG(tone)
-#endif
-
// define variables for reactive RGB
int RGB_current_mode;
#ifdef ADJUST_MACRO_ENABLE
@@ -303,35 +269,6 @@ void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
#define RGBLIGHT(mode)
#endif
-
-inline void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-bool TOG_STATUS = false;
-
-void toggle_lower_raise_layer(bool pressed, uint16_t dist_layer, uint16_t lower_layer, uint16_t raise_layer) {
- if (pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (!TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
- TOG_STATUS = !TOG_STATUS;
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode((dist_layer == _LOWER || dist_layer == _LOW_E) ? 16 : 15);
- #endif
- }
-
- layer_on(dist_layer);
- ADJUST_MACRO(lower_layer, raise_layer, _ADJUST);
- } else {
- RGBLIGHT(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
- TOG_STATUS = false;
- layer_off(dist_layer);
- ADJUST_MACRO(lower_layer, raise_layer, _ADJUST);
- }
-}
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef SSD1306OLED
if (record->event.pressed) {
@@ -340,82 +277,49 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#endif
switch (keycode) {
- case BASE:
- if (record->event.pressed) {
- PLAY_SONG(tone_qwerty);
- persistent_default_layer_set(1UL<<_BASE);
- }
- break;
- case BAS_E:
- if (record->event.pressed) {
- PLAY_SONG(tone_qwerty);
- persistent_default_layer_set(1UL<<_BAS_E);
- }
- break;
- case LOWER:
- toggle_lower_raise_layer(record->event.pressed, _LOWER, _LOWER, _RAISE);
- break;
- case LOW_E:
- toggle_lower_raise_layer(record->event.pressed, _LOW_E, _LOW_E, _RAI_E);
- break;
- case RAISE:
- toggle_lower_raise_layer(record->event.pressed, _RAISE, _LOWER, _RAISE);
- break;
- case RAI_E:
- toggle_lower_raise_layer(record->event.pressed, _RAI_E, _LOW_E, _RAI_E);
- break;
- case ADJUST:
+ #ifdef RGBLIGHT_ENABLE
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ #ifdef KANA_ENABLE
+ case EISU:
if (record->event.pressed) {
- RGBLIGHT(14);
- layer_on(_ADJUST);
+ if (keymap_config.swap_lalt_lgui==false) {
+ register_code(KC_LANG2);
+ } else {
+ SEND_STRING(SS_LALT("`"));
+ }
} else {
- RGBLIGHT(RGB_current_mode);
- layer_off(_ADJUST);
+ unregister_code(KC_LANG2);
}
break;
- //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
- case RGB_MOD:
- #ifdef RGBLIGHT_ENABLE
+ case KANA:
if (record->event.pressed) {
- rgblight_mode(RGB_current_mode);
- rgblight_step();
- RGB_current_mode = rgblight_config.mode;
- }
- #endif
- break;
- case EISU:
- if (record->event.pressed) {
- if (keymap_config.swap_lalt_lgui==false) {
- register_code(KC_LANG2);
+ if(keymap_config.swap_lalt_lgui==false){
+ register_code(KC_LANG1);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
} else {
- SEND_STRING(SS_LALT("`"));
- }
- } else {
- unregister_code(KC_LANG2);
- }
- break;
- #ifdef KANA_ENABLE
- case KANA:
- if (record->event.pressed) {
- if(keymap_config.swap_lalt_lgui==false){
- register_code(KC_LANG1);
- }else{
- SEND_STRING(SS_LALT("`"));
+ unregister_code(KC_LANG1);
}
- } else {
- unregister_code(KC_LANG1);
- }
- break;
+ break;
+ #endif
+ #ifdef RGBLIGHT_ENABLE
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
#endif
- case RGBRST:
- #ifdef RGBLIGHT_ENABLE
- if (record->event.pressed) {
- eeconfig_update_rgblight_default();
- rgblight_enable();
- RGB_current_mode = rgblight_config.mode;
- }
- #endif
- break;
default:
return true;
}
@@ -424,15 +328,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
void matrix_init_user(void) {
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
#ifdef RGBLIGHT_ENABLE
RGB_current_mode = rgblight_config.mode;
#endif
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
- iota_gfx_init(!has_usb()); // turns on the display
+ iota_gfx_init(!has_usb()); // turns on the display
#endif
}
@@ -474,6 +375,7 @@ inline void render_logo(struct CharacterMatrix *matrix) {
const char mac_win_logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
inline void render_status(struct CharacterMatrix *matrix) {
+ char buf[20];
// Render to mode icon
if(keymap_config.swap_lalt_lgui==false){
matrix_write(matrix, mac_win_logo[0][0]);
@@ -485,8 +387,12 @@ inline void render_status(struct CharacterMatrix *matrix) {
matrix_write(matrix, mac_win_logo[1][1]);
}
+ #ifdef RGBLIGHT_ENABLE
+ snprintf(buf, sizeof(buf), " LED mode:%d", (short)RGB_current_mode);
+ matrix_write(matrix, buf);
+ #endif
+
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
- char buf[20];
matrix_write_P(matrix, PSTR("\nLayer: "));
switch (layer_state) {
case L_BASE:
@@ -520,11 +426,11 @@ inline void render_status(struct CharacterMatrix *matrix) {
void iota_gfx_task_user(void) {
struct CharacterMatrix matrix;
-#if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
-#endif
+ #if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+ #endif
matrix_clear(&matrix);
if (is_master) {
diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
index 4174a30457..5340a74ba2 100644
--- a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
+++ b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
@@ -36,6 +36,7 @@ LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
#### Do not enable these with audio at the same time.
@@ -110,6 +111,10 @@ ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
OPT_DEFS += -DLOCAL_GLCDFONT
endif
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/helix/rev2/keymaps/froggy/rules.mk b/keyboards/helix/rev2/keymaps/froggy/rules.mk
index 2052b8f4e3..aa97964134 100644
--- a/keyboards/helix/rev2/keymaps/froggy/rules.mk
+++ b/keyboards/helix/rev2/keymaps/froggy/rules.mk
@@ -36,6 +36,7 @@ LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
#### Do not enable these with audio at the same time.
@@ -110,6 +111,10 @@ ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
OPT_DEFS += -DLOCAL_GLCDFONT
endif
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/helix/rev2/keymaps/led_test/rules.mk b/keyboards/helix/rev2/keymaps/led_test/rules.mk
index b3cd5ee42a..c7ee75c36b 100644
--- a/keyboards/helix/rev2/keymaps/led_test/rules.mk
+++ b/keyboards/helix/rev2/keymaps/led_test/rules.mk
@@ -36,6 +36,7 @@ LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
#### Do not enable these with audio at the same time.
@@ -110,6 +111,10 @@ ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
OPT_DEFS += -DLOCAL_GLCDFONT
endif
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
SRC += led_test_init.c
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/hid_liber/config.h b/keyboards/hid_liber/config.h
new file mode 100755
index 0000000000..0817db0012
--- /dev/null
+++ b/keyboards/hid_liber/config.h
@@ -0,0 +1,170 @@
+/* Copyright 2012 Jun Wako : Original Configuration
+ * Copyright 2018 bakageta
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xB919
+#define DEVICE_VER 0x0001
+#define MANUFACTURER "bpiphany"
+#define USBSTR_MANUFACTURER 'b', '\x00', 'p', '\x00', 'i', '\x00', 'p', '\x00', 'h', '\x00', 'a', '\x00', 'n', '\x00', 'y', '\x00'
+#define PRODUCT "HIDLiberation"
+#define USBSTR_PRODUCT 'H', '\x00', 'I', '\x00', 'D', '\x00', ' ', '\x00', 'L', '\x00', 'i', '\x00', 'b', '\x00', 'e', '\x00', 'r', '\x00', 'a', '\x00', 't', '\x00', 'i', '\x00', 'o', '\x00', 'n', '\x00'
+#define DESCRIPTION "HID Liberation powered by QMK"
+
+/* key matrix size */
+#define MATRIX_ROWS 18
+#define MATRIX_COLS 8
+
+// HID Liberation Device uses custom matrix code to accomodate a 74HC238 3 to 8 decoder on pins B1, B2 and B3.
+#define DIODE_DIRECTION CUSTOM_MATRIX
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+#endif
diff --git a/keyboards/hid_liber/hid_liber.c b/keyboards/hid_liber/hid_liber.c
new file mode 100755
index 0000000000..6517c92062
--- /dev/null
+++ b/keyboards/hid_liber/hid_liber.c
@@ -0,0 +1,57 @@
+/* Copyright 2012 Jun Wako : LED init
+ * Copyright 2017 Mathias Andersson : Phantom config
+ * Copyright 2018 bakageta
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "hid_liber.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ led_init_ports();
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_init_ports(void) {
+ DDRB |= (1<<5) | (1<<6); // OUT
+}
+
+void led_set_kb(uint8_t usb_led) {
+ if (usb_led & (1<: Original TMK layout
+ * Copyright 2018 bakageta
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#ifndef HID_LIBER_H
+#define HID_LIBER_H
+
+#include "quantum.h"
+
+#define ___ KC_NO
+
+/* Tenkeyless keyboard default layout, ISO & ANSI (ISO is between Left Shift
+ * and Z, and the ANSI \ key above Return/Enter is used for the additional ISO
+ * switch in the ASD row next to enter. Use NUBS as keycode for the first and
+ * NUHS as the keycode for the second.
+ *
+ * ,---. ,---------------. ,---------------. ,---------------. ,-----------.
+ * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
+ * `---' `---------------' `---------------' `---------------' `-----------'
+ * ,-----------------------------------------------------------. ,-----------.
+ * |~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|Hom|PgU|
+ * |-----------------------------------------------------------| |-----------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD|
+ * |-----------------------------------------------------------| `-----------'
+ * |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------| ,---.
+ * |Shft|ISO| Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
+ * |-----------------------------------------------------------| ,-----------.
+ * |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig|
+ * `-----------------------------------------------------------' `-----------'
+ */
+#define LAYOUT( \
+ KG1, KH7, KJ7, KJ6, KJ1, KO5, KL1, KA6, KA7, KD7, KD5, KD1, KD2, KB5, KB3, KO3, \
+ KG7, KG5, KH5, KJ5, KI5, KI7, KK7, KK5, KL5, KA5, KC5, KC7, KL7, KD6, KQ7, KN7, KM7, \
+ KG6, KG3, KH3, KJ3, KI3, KI6, KK6, KK3, KL3, KA3, KC3, KC6, KL6, KD4, KP7, KN5, KM5, \
+ KH6, KG4, KH4, KJ4, KI4, KI1, KK1, KK4, KL4, KA4, KC4, KC1, KD0, \
+ KF6, KH1, KG0, KH0, KJ0, KI0, KI2, KK2, KK0, KL0, KA0, KC2, KF4, KN1, \
+ KO7, KE6, KB1, KP1, KB2, KR4, KA2, KO0, KN2, KP2, KQ2 \
+) { \
+/* 0 1 2 3 4 5 6 7 */ \
+/* A */ { KA0 , ___ , KA2 , KA3 , KA4 , KA5 , KA6 , KA7 }, \
+/* B */ { ___ , KB1 , KB2 , KB3 , ___ , KB5 , ___ , ___ }, \
+/* C */ { ___ , KC1 , KC2 , KC3 , KC4 , KC5 , KC6 , KC7 }, \
+/* D */ { KD0 , KD1 , KD2 , ___ , KD4 , KD5 , KD6 , KD7 }, \
+/* E */ { ___ , ___ , ___ , ___ , ___ , ___ , KE6 , ___ }, \
+/* F */ { ___ , ___ , ___ , ___ , KF4 , ___ , KF6 , ___ }, \
+/* G */ { KG0 , KG1 , ___ , KG3 , KG4 , KG5 , KG6 , KG7 }, \
+/* H */ { KH0 , KH1 , ___ , KH3 , KH4 , KH5 , KH6 , KH7 }, \
+/* I */ { KI0 , KI1 , KI2 , KI3 , KI4 , KI5 , KI6 , KI7 }, \
+/* J */ { KJ0 , KJ1 , ___ , KJ3 , KJ4 , KJ5 , KJ6 , KJ7 }, \
+/* K */ { KK0 , KK1 , KK2 , KK3 , KK4 , KK5 , KK6 , KK7 }, \
+/* L */ { KL0 , KL1 , ___ , KL3 , KL4 , KL5 , KL6 , KL7 }, \
+/* M */ { ___ , ___ , ___ , ___ , ___ , KM5 , ___ , KM7 }, \
+/* N */ { ___ , KN1 , KN2 , ___ , ___ , KN5 , ___ , KN7 }, \
+/* O */ { KO0 , ___ , ___ , KO3 , ___ , KO5 , ___ , KO7 }, \
+/* P */ { ___ , KP1 , KP2 , ___ , ___ , ___ , ___ , KP7 }, \
+/* Q */ { ___ , ___ , KQ2 , ___ , ___ , ___ , ___ , KQ7 }, \
+/* R */ { ___ , ___ , ___ , ___ , KR4 , ___ , ___ , ___ } \
+}
+
+
+
+#endif
diff --git a/keyboards/hid_liber/keymaps/bakageta/config.h b/keyboards/hid_liber/keymaps/bakageta/config.h
new file mode 100755
index 0000000000..b158e2d5a2
--- /dev/null
+++ b/keyboards/hid_liber/keymaps/bakageta/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define PERMISSIVE_HOLD
diff --git a/keyboards/hid_liber/keymaps/bakageta/keymap.c b/keyboards/hid_liber/keymaps/bakageta/keymap.c
new file mode 100755
index 0000000000..9754a70dfc
--- /dev/null
+++ b/keyboards/hid_liber/keymaps/bakageta/keymap.c
@@ -0,0 +1,89 @@
+/* Copyright 2017 Mathias Andersson : Phantom Layout
+ * Copyright 2018 bakageta : HID Liberation layouts
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "hid_liber.h"
+
+// Helpful defines
+#define _______ KC_TRNS
+#define FN_CAPS LT(_FL, KC_CAPSLOCK)
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+#define _BL 0 // Base Layer
+#define _GL 1 // Gaming Layer
+#define _FL 2 // Function Layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT( \
+ KC_ESC, 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_PSCR, KC_SLCK, KC_BRK, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
+ FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, TT(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [_GL] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [_FL] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, TO(_BL), TO(_GL), _______, _______, _______, _______, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______, KC_VOLD, KC_MSTP, KC_VOLU, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______, _______, _______, KC_MNXT, KC_MPLY, KC_MNXT, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, \
+ _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______ \
+ ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/hid_liber/keymaps/bakageta/readme.md b/keyboards/hid_liber/keymaps/bakageta/readme.md
new file mode 100755
index 0000000000..2b13586c0f
--- /dev/null
+++ b/keyboards/hid_liber/keymaps/bakageta/readme.md
@@ -0,0 +1,58 @@
+# bakageta's Keymap for the HID Liberation Device
+
+A personal keymap intended for the HID Liberation Device.
+
+See [keymap.c](keymap.c) for details.
+
+## Layers
+
+This keymap has a base layer with combined Fn/Caps, Fn replacing APP, and an otherwise standard ANSI layout. The gaming layer blocks LGUI, and reverts caps back to a regular key for games that bind something to it. The function layer adds media keys to the nav cluster and a virtual numpad, with 1 and 2 selecting between Base and Gaming respectively.
+
+### Layer 1: Base Layer
+ ,---. ,---------------. ,---------------. ,---------------. ,-----------.
+ |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
+ `---' `---------------' `---------------' `---------------' `-----------'
+ ,-----------------------------------------------------------. ,-----------.
+ |~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|Hom|PgU|
+ |-----------------------------------------------------------| |-----------|
+ |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD|
+ |-----------------------------------------------------------| '-----------'
+ |Fn/Cps| A| S| D| F| G| H| J| K| L| ;| '|Return |
+ |-----------------------------------------------------------| ,---.
+ |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
+ |-----------------------------------------------------------| ,-----------.
+ |Ctl|Gui|Alt| Space |Alt|Gui|Fn |Ctl| |Lef|Dow|Rig|
+ `-----------------------------------------------------------' `-----------'
+
+### Layer 2: Gaming Layer
+ ,---. ,---------------. ,---------------. ,---------------. ,-----------.
+ | | | | | | | | | | | | | | | | | | | | |
+ `---' `---------------' `---------------' `---------------' `-----------'
+ ,-----------------------------------------------------------. ,-----------.
+ | | | | | | | | | | | | | | | | | | |
+ |-----------------------------------------------------------| |-----------|
+ | | | | | | | | | | | | | | | | | | |
+ |-----------------------------------------------------------| '-----------'
+ | Caps | | | | | | | | | | | | |
+ |-----------------------------------------------------------| ,---.
+ | | | | | | | | | | | | | | |
+ |-----------------------------------------------------------| ,-----------.
+ | |XXX| | | | | | | | | | |
+ `-----------------------------------------------------------' `-----------'
+
+
+### Layer 3: Function Layer
+ ,---. ,---------------. ,---------------. ,---------------. ,-----------.
+ | | | | | | | | | | | | | | | | | | | | |
+ `---' `---------------' `---------------' `---------------' `-----------'
+ ,-----------------------------------------------------------. ,-----------.
+ | | BL| GL| | | | | | | | | | | | |Vo-|Stp|Vo+|
+ |-----------------------------------------------------------| |-----------|
+ | | | | | | | | | | | | | | | |Prv|Ply|Nxt|
+ |-----------------------------------------------------------| '-----------'
+ | | | | | | | | | | | | | |
+ |-----------------------------------------------------------| ,---.
+ | | | | | | | | | | | | | | |
+ |-----------------------------------------------------------| ,-----------.
+ | | | | | | | | | | | | |
+ `-----------------------------------------------------------' `-----------'
diff --git a/keyboards/hid_liber/keymaps/bakageta/rules.mk b/keyboards/hid_liber/keymaps/bakageta/rules.mk
new file mode 100755
index 0000000000..0f131bce9b
--- /dev/null
+++ b/keyboards/hid_liber/keymaps/bakageta/rules.mk
@@ -0,0 +1,33 @@
+# Copyright 2013 Jun Wako
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+
+# QMK Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
\ No newline at end of file
diff --git a/keyboards/hid_liber/keymaps/default/config.h b/keyboards/hid_liber/keymaps/default/config.h
new file mode 100755
index 0000000000..7b9637ef9c
--- /dev/null
+++ b/keyboards/hid_liber/keymaps/default/config.h
@@ -0,0 +1 @@
+#pragma once
\ No newline at end of file
diff --git a/keyboards/hid_liber/keymaps/default/keymap.c b/keyboards/hid_liber/keymaps/default/keymap.c
new file mode 100755
index 0000000000..337b4829d2
--- /dev/null
+++ b/keyboards/hid_liber/keymaps/default/keymap.c
@@ -0,0 +1,79 @@
+/* Copyright 2017 Mathias Andersson : Phantom Layout
+ * Copyright 2018 bakageta : HID Liberation layouts
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "hid_liber.h"
+
+// Helpful defines
+#define _______ KC_TRNS
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+#define _BL 0 // Base Layer
+#define _FL 1 // Media Layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT( \
+ KC_ESC, 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_PSCR, KC_SLCK, KC_BRK, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [_FL] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_MSTP, KC_VOLU, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_MPLY, KC_MNXT, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/hid_liber/keymaps/default/readme.md b/keyboards/hid_liber/keymaps/default/readme.md
new file mode 100755
index 0000000000..963524389e
--- /dev/null
+++ b/keyboards/hid_liber/keymaps/default/readme.md
@@ -0,0 +1,41 @@
+# ANSI Keymap for the HID Liberation Device
+
+A basic keymap intended for the HID Liberation Device using the standard ANSI layout.
+
+See [keymap.c](keymap.c) for details.
+
+## Layers
+
+This keymap has two layers. To access the functions on the second layer, hold down `Fn` and press the corresponding key.
+
+### Layer 1: Base Layer
+ ,---. ,---------------. ,---------------. ,---------------. ,-----------.
+ |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
+ `---' `---------------' `---------------' `---------------' `-----------'
+ ,-----------------------------------------------------------. ,-----------.
+ |~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|Hom|PgU|
+ |-----------------------------------------------------------| |-----------|
+ |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD|
+ |-----------------------------------------------------------| '-----------'
+ |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ |-----------------------------------------------------------| ,---.
+ |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
+ |-----------------------------------------------------------| ,-----------.
+ |Ctl|Gui|Alt| Space |Alt|Gui|Fn |Ctl| |Lef|Dow|Rig|
+ `-----------------------------------------------------------' `-----------'
+
+### Layer 2: Media Layer
+ ,---. ,---------------. ,---------------. ,---------------. ,-----------.
+ | | | | | | | | | | | | | | | | | | | | |
+ `---' `---------------' `---------------' `---------------' `-----------'
+ ,-----------------------------------------------------------. ,-----------.
+ | | | | | | | | | | | | | | | |Vo-|Stp|Vo+|
+ |-----------------------------------------------------------| |-----------|
+ | | | | | | | | | | | | | | | |Prv|Ply|Nxt|
+ |-----------------------------------------------------------| '-----------'
+ | | | | | | | | | | | | | |
+ |-----------------------------------------------------------| ,---.
+ | | | | | | | | | | | | | | |
+ |-----------------------------------------------------------| ,-----------.
+ | | | | | | | | | | | | |
+ `-----------------------------------------------------------' `-----------'
diff --git a/keyboards/hid_liber/keymaps/default/rules.mk b/keyboards/hid_liber/keymaps/default/rules.mk
new file mode 100755
index 0000000000..0f131bce9b
--- /dev/null
+++ b/keyboards/hid_liber/keymaps/default/rules.mk
@@ -0,0 +1,33 @@
+# Copyright 2013 Jun Wako
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+
+# QMK Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
\ No newline at end of file
diff --git a/keyboards/hid_liber/matrix.c b/keyboards/hid_liber/matrix.c
new file mode 100755
index 0000000000..de154890d5
--- /dev/null
+++ b/keyboards/hid_liber/matrix.c
@@ -0,0 +1,269 @@
+/* Copyright 2012 Jun Wako : TMK Matrix
+ * Copyright 2018 bakageta
+ *
+ * This is heavily based on hid_liber/board.{c|h}.
+ * https://github.com/BathroomEpiphanies/AVR-Keyboard
+ *
+ * Copyright (c) 2012 Fredrik Atmer, Bathroom Epiphanies Inc
+ * http://bathroomepiphanies.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+#if defined(__AVR__)
+#include
+#endif
+#include
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+static uint8_t debouncing = DEBOUNCE;
+
+// bit array of key state(1:on, 0:off)
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+
+#define _DDRA (uint8_t *const)&DDRA
+#define _DDRB (uint8_t *const)&DDRB
+#define _DDRC (uint8_t *const)&DDRC
+#define _DDRD (uint8_t *const)&DDRD
+#define _DDRE (uint8_t *const)&DDRE
+#define _DDRF (uint8_t *const)&DDRF
+
+#define _PINA (uint8_t *const)&PINA
+#define _PINB (uint8_t *const)&PINB
+#define _PINC (uint8_t *const)&PINC
+#define _PIND (uint8_t *const)&PIND
+#define _PINE (uint8_t *const)&PINE
+#define _PINF (uint8_t *const)&PINF
+
+#define _PORTA (uint8_t *const)&PORTA
+#define _PORTB (uint8_t *const)&PORTB
+#define _PORTC (uint8_t *const)&PORTC
+#define _PORTD (uint8_t *const)&PORTD
+#define _PORTE (uint8_t *const)&PORTE
+#define _PORTF (uint8_t *const)&PORTF
+
+#define _BIT0 0x01
+#define _BIT1 0x02
+#define _BIT2 0x04
+#define _BIT3 0x08
+#define _BIT4 0x10
+#define _BIT5 0x20
+#define _BIT6 0x40
+#define _BIT7 0x80
+
+/* Specifies the ports and pin numbers for the rows */
+static
+uint8_t *const row_ddr[MATRIX_ROWS] = {
+ _DDRB, _DDRB,
+ _DDRC, _DDRC,
+ _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD,
+ _DDRF, _DDRF, _DDRF, _DDRF, _DDRF, _DDRF};
+
+static
+uint8_t *const row_port[MATRIX_ROWS] = {
+ _PORTB, _PORTB,
+ _PORTC, _PORTC,
+ _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD,
+ _PORTF, _PORTF, _PORTF, _PORTF, _PORTF, _PORTF};
+
+static
+uint8_t *const row_pin[MATRIX_ROWS] = {
+ _PINB, _PINB,
+ _PINC, _PINC,
+ _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND,
+ _PINF, _PINF, _PINF, _PINF, _PINF, _PINF};
+
+static
+const uint8_t row_bit[MATRIX_ROWS] = {
+ _BIT4, _BIT7,
+ _BIT6, _BIT7,
+ _BIT0, _BIT1, _BIT2, _BIT3, _BIT4, _BIT5, _BIT6, _BIT7,
+ _BIT0, _BIT1, _BIT4, _BIT5, _BIT6, _BIT7};
+
+static
+const uint8_t mask = 0x0E;
+
+/* Specifies the ports and pin numbers for the columns */
+static
+const uint8_t col_bit[MATRIX_COLS] = { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E};
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+static
+inline void pull_column(int col) {
+ PORTB = col_bit[col] | (PORTB & ~mask);
+}
+
+static
+inline void release_column(int col) {
+}
+
+/* PORTB is set as input with pull-up resistors
+ PORTC,D,E,F are set to high output */
+static
+void setup_io_pins(void) {
+ uint8_t row;
+ DDRB |= 0x0E;
+ PORTB &= ~0x0E;
+ for(row = 0; row < MATRIX_ROWS; row++) {
+ *row_ddr[row] &= ~row_bit[row];
+ *row_port[row] &= ~row_bit[row];
+ }
+}
+
+static
+void setup_leds(void) {
+ DDRB |= 0x60;
+ PORTB |= 0x60;
+}
+
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ // To use PORTF disable JTAG with writing JTD bit twice within four cycles.
+ MCUCR |= (1< .
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -37,5 +34,3 @@ along with this program. If not, see .
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-
-#endif
diff --git a/keyboards/iris/keymaps/default/keymap.c b/keyboards/iris/keymaps/default/keymap.c
index 9367c163e4..4644c3d9b5 100644
--- a/keyboards/iris/keymaps/default/keymap.c
+++ b/keyboards/iris/keymaps/default/keymap.c
@@ -1,6 +1,4 @@
-#include "iris.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
@@ -16,93 +14,70 @@ enum custom_keycodes {
ADJUST,
};
-#define KC_ KC_TRNS
-#define _______ KC_TRNS
-
-#define KC_LOWR LOWER
-#define KC_RASE RAISE
-#define KC_RST RESET
-#define KC_BL_S BL_STEP
-#define KC_DBUG DEBUG
-#define KC_RTOG RGB_TOG
-#define KC_RMOD RGB_MOD
-#define KC_RHUI RGB_HUI
-#define KC_RHUD RGB_HUD
-#define KC_RSAI RGB_SAI
-#define KC_RSAD RGB_SAD
-#define KC_RVAI RGB_VAI
-#define KC_RVAD RGB_VAD
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_kc(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- TAB , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- LSFT, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
- //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
- LCTL, Z , X , C , V , B ,HOME, END , N , M ,COMM,DOT ,SLSH,RSFT,
- //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
- LGUI,LOWR,ENT , SPC ,RASE,LALT
- // `----+----+----' `----+----+----'
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_HOME, KC_END, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LGUI, LOWER, KC_ENT, KC_SPC, RAISE, KC_LALT
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
- [_LOWER] = LAYOUT_kc(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- RST , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- DEL , ,LEFT,RGHT, UP ,LBRC, RBRC, P4 , P5 , P6 ,PLUS,PIPE,
- //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
- BL_S, , , ,DOWN,LCBR,LPRN, RPRN,RCBR, P1 , P2 , P3 ,MINS, ,
- //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
- , ,DEL , DEL , , P0
- // `----+----+----' `----+----+----'
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RESET, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_DEL, _______, KC_LEFT, KC_RGHT, KC_UP, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ BL_STEP, _______, _______, _______, KC_DOWN, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_MINS, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, KC_DEL, KC_DEL, _______, KC_P0
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
- [_RAISE] = LAYOUT_kc(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- ,MPRV,MNXT,VOLU,PGUP,UNDS, EQL ,HOME, , , ,BSLS,
- //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
- MUTE,MSTP,MPLY,VOLD,PGDN,MINS, , ,PLUS,END , , , , ,
- //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
- , , , , ,
- // `----+----+----' `----+----+----'
+ [_RAISE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_TOG, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_BSLS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN, _______, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
- [_ADJUST] = LAYOUT_kc(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- , , , , , , , , , , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- RTOG,RMOD,RHUI,RSAI,RVAI, , , , , , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- ,DBUG,RHUD,RSAD,RVAD, , , , , , , ,
- //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
- BL_S,RST , , , , , , , , , , , , ,
- //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
- , , , , ,
- // `----+----+----' `----+----+----'
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
)
-
};
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_QWERTY);
+ set_single_persistent_default_layer(_QWERTY);
}
return false;
break;
diff --git a/keyboards/iris/keymaps/default/rules.mk b/keyboards/iris/keymaps/default/rules.mk
index 22b6ec4766..d7463419b4 100644
--- a/keyboards/iris/keymaps/default/rules.mk
+++ b/keyboards/iris/keymaps/default/rules.mk
@@ -1,6 +1,2 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/fate/config.h b/keyboards/iris/keymaps/fate/config.h
new file mode 100644
index 0000000000..5f16bffb7b
--- /dev/null
+++ b/keyboards/iris/keymaps/fate/config.h
@@ -0,0 +1,40 @@
+/*
+Copyright 2017 Danny Nguyen
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* QMK DFU configuration */
+#define QMK_ESC_OUTPUT F6
+#define QMK_ESC_INPUT D7
+#define QMK_LED D5
+#define QMK_SPEAKER C6
+
+/* Use I2C or Serial, not both */
+// #define USE_SERIAL
+#define USE_I2C
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/iris/keymaps/fate/keymap.c b/keyboards/iris/keymaps/fate/keymap.c
new file mode 100644
index 0000000000..ca92b59787
--- /dev/null
+++ b/keyboards/iris/keymaps/fate/keymap.c
@@ -0,0 +1,126 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum iris_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _NUMPAD
+};
+
+// Tap Dance Declarations
+enum {
+ TD_LALT_LGUI = 0,
+ TD_RALT_RGUI
+};
+
+#define KC_ KC_TRNS
+#define _______ KC_TRNS
+
+#define KC_LOWR MO(_LOWER)
+#define KC_RASE MO(_RAISE)
+#define KC_NUM TG(_NUMPAD)
+#define KC_RST RESET
+#define KC_DBUG DEBUG
+#define KC_BL_S BL_STEP
+#define KC_RTOG RGB_TOG
+#define KC_RMD RGB_MOD
+#define KC_RRMD RGB_RMOD
+#define KC_RHUI RGB_HUI
+#define KC_RHUD RGB_HUD
+#define KC_RSAI RGB_SAI
+#define KC_RSAD RGB_SAD
+#define KC_RVAI RGB_VAI
+#define KC_RVAD RGB_VAD
+
+#define KC_LAG TD(TD_LALT_LGUI)
+#define KC_RAG TD(TD_RALT_RGUI)
+#define KC_RSEN MT(MOD_RSFT, KC_ENT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSLS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,BSPC,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LCTL, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B ,ENT , ENT , N , M ,COMM,DOT ,SLSH,RSEN,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ LAG ,LOWR,SPC , SPC ,RASE,RAG
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ CAPS, ,HOME, UP ,END ,PGUP, LEFT,DOWN, UP ,RGHT,INS ,DEL ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,TILD,LEFT,DOWN,RGHT,PGDN, ,UNDS,PLUS,LCBR,RCBR,PIPE,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ ,MPLY,MPRV,MNXT,VOLD,VOLU, , ,HOME,PGDN,PGUP,END ,APP , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ CAPS, ,BTN1,MS_U,BTN2,WH_U, LEFT,DOWN, UP ,RGHT,INS ,DEL ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,GRV ,MS_L,MS_D,MS_R,WH_D, ,MINS,EQL ,LBRC,RBRC,BSLS,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ ,MPLY,MPRV,MNXT,VOLD,VOLU, , ,HOME,PGDN,PGUP,END ,APP , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_ADJUST] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ , , , , , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,RMD ,RHUI,RSAI,RVAI,RTOG, ,PSCR,SLCK,PAUS, , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,RRMD,RHUD,RSAD,RVAD,BL_S, LEFT,DOWN, UP ,RGHT, , ,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ ,DBUG, , , ,RST ,NUM , NUM ,HOME,PGDN,PGUP,END ,APP , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_NUMPAD] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ , , , , , , NLCK, P7 , P8 , P9 ,PSLS, ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , P4 , P5 , P6 ,PAST, ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , P1 , P2 , P3 ,PPLS,ENT ,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ , , , , , , , , , P0 , P0 ,PDOT,PMNS, ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ )
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+// Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ // Tap once for L-Alt, twice for L-GUI
+ [TD_LALT_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_LALT, KC_LGUI),
+ // Tap once for R-Alt, twice for R-GUI
+ [TD_RALT_RGUI] = ACTION_TAP_DANCE_DOUBLE(KC_RALT, KC_RGUI)
+};
diff --git a/keyboards/iris/keymaps/fate/readme.md b/keyboards/iris/keymaps/fate/readme.md
new file mode 100644
index 0000000000..70f464b0da
--- /dev/null
+++ b/keyboards/iris/keymaps/fate/readme.md
@@ -0,0 +1,23 @@
+# Fate Iris Layout
+
+This keymap is configured for Pro Micro(s) with QMK-DFU bootloader flashed. Please refer to [this guide](https://www.reddit.com/r/olkb/comments/8sxgzb/replace_pro_micro_bootloader_with_qmk_dfu/) for further details on ISP flashing your Pro Micro.
+
+To generate a production-ready .hex file (containing the application and the bootloader), use the production target
+
+ make iris/rev2:fate:production
+
+To replace your Pro Micro with QMK-DFU bootloader along with the keymap, setup your ISP Flasher and avrdude, run (This command assumes you're using SparkFun's Pocket AVR Programmer to program):
+
+ $ avrdude -p m32u4 -P usb -c usbtiny -U flash:w:"iris_rev2_fate_production.hex" -U lfuse:w:0x5E:m -U hfuse:w:0xD9:m -U efuse:w:0xC3:m -U lock:w:0x3F:m -v
+
+Command to replace your Pro Micro with QMK-DFU bootloader only:
+
+ $ avrdude -p m32u4 -P usb -c usbtiny -U flash:w:"iris_rev2_fate_bootloader.hex" -U lfuse:w:0x5E:m -U hfuse:w:0xD9:m -U efuse:w:0xC3:m -U lock:w:0x3F:m -v
+
+The QMK_ESC is mapped to the ESC key in keymap.c; QMK_LED is mapped to TX_LED on the Pro Micro.
+
+ /* QMK DFU configuration */
+ #define QMK_ESC_OUTPUT F6
+ #define QMK_ESC_INPUT D7
+ #define QMK_LED D5
+ #define QMK_SPEAKER C6
diff --git a/keyboards/iris/keymaps/fate/rules.mk b/keyboards/iris/keymaps/fate/rules.mk
new file mode 100644
index 0000000000..378a653d90
--- /dev/null
+++ b/keyboards/iris/keymaps/fate/rules.mk
@@ -0,0 +1,7 @@
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = qmk-dfu
+
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/iris/keymaps/jennetters/config.h b/keyboards/iris/keymaps/jennetters/config.h
new file mode 100644
index 0000000000..a3c0634f52
--- /dev/null
+++ b/keyboards/iris/keymaps/jennetters/config.h
@@ -0,0 +1,41 @@
+/*
+Copyright 2017 Danny Nguyen
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define TAPPING_TERM 150
+
+/* Try to prevent sticky keys */
+#define PREVENT_STUCK_MODIFIERS
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
\ No newline at end of file
diff --git a/keyboards/iris/keymaps/jennetters/keymap.c b/keyboards/iris/keymaps/jennetters/keymap.c
new file mode 100644
index 0000000000..287dc9712d
--- /dev/null
+++ b/keyboards/iris/keymaps/jennetters/keymap.c
@@ -0,0 +1,207 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ YUNO,
+ SHRG,
+ NOVY,
+};
+
+#define KC_ KC_TRNS
+#define _______ KC_TRNS
+
+#define KC_LOWR LOWER
+#define KC_RASE RAISE
+#define KC_YUNO YUNO
+#define KC_SHRG SHRG
+#define KC_NOVY NOVY
+#define KC_RST RESET
+#define KC_BL_S BL_STEP
+
+//Tap Dance Declartaions
+enum {
+ ESC_GR = 0
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+
+ // ,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ // | ESC| 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ // |----+----+----+----+----+----| |----+----+----+----+----+----|
+ // | TAB| Q | W | E | R | T | | Y | U | I | O | P | BSP|
+ // |----+----+----+----+----+----| |----+----+----+----+----+----|
+ // | CAP| A | S | D | F | G | | H | J | K | L | ; | ' |
+ // |----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ // | SFT| Z | X | C | V | B | SPC| | SPC| N | M | , | . | / | ENT|
+ // `----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ // \ GUI| ALT| CTL / \RASE\ CTL | SFT /
+ // `----+----+----' `----+----+----'
+
+ TD(ESC_GR), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_SPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ KC_LGUI, KC_LALT, KC_LCTL, KC_RASE, KC_RCTL, KC_RSFT
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+
+ // ,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ // | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | DEL|
+ // |----+----+----+----+----+----| |----+----+----+----+----+----|
+ // | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ // |----+----+----+----+----+----| |----+----+----+----+----+----|
+ // | | | | | | | | | | | | |PIPE|
+ // |----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ // | \ | | | | | [ | ( | | ) | ] | | | | - | |
+ // `----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ // \ | | DEL / \ DEL\ | /
+ // `----+----+----' `----+----+----'
+
+ TILD, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, DEL, \
+ , 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, , \
+ , , , , , , , , , , ,PIPE, \
+ BL_S, , , , , LCBR, LPRN, RPRN, RCBR, , , , MINS, , \
+ , , DEL, DEL, ,
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ // ,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ // | | F1 | F2 | | | | | | | | [ | ] | = |
+ // |----+----+----+----+----+----| |----+----+----+----+----+----|
+ // | | | UP | | | | | | | | { | } | DEL|
+ // |----+----+----+----+----+----| |----+----+----+----+----+----|
+ // | | LT | DN | RT | | | |SHRG| | | |PIPE| |
+ // |----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ // | | | | | | | | | | | | | | \ | |
+ // `----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ // \ | | / \ \ | /
+ // `----+----+----' `----+----+----'
+
+ , F1, F2, , , , , , , LBRC, RBRC, EQL, \
+ , , UP, , , , YUNO, NOVY, , LCBR, RCBR, DEL, \
+ , LEFT, DOWN, RIGHT, , , SHRG, , , , PIPE, , \
+ , , , , , , , , , , , , BSLS, , \
+ , , , , ,
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ _______, _______, _______, _______, _______, _______
+ // `--------+--------+--------' `--------+--------+--------'
+ )
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+#endif
+
+void esc_gr_finished (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ register_code (KC_ESC);
+ } else if (state->count == 2) {
+ register_code (KC_GRV);
+ } else {
+ register_code (KC_LSFT);
+ register_code (KC_GRV);
+ }
+}
+
+void esc_gr_reset (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ unregister_code (KC_ESC);
+ } else if (state->count == 2) {
+ unregister_code (KC_GRV);
+ } else {
+ unregister_code (KC_LSFT);
+ unregister_code (KC_GRV);
+ }
+}
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for ESC, twice for `, thrice for ~
+ [ESC_GR] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, esc_gr_finished, esc_gr_reset)
+ // Other declarations would go here, separated by commas, if you have them
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ case SHRG:
+ if (record->event.pressed) {
+ SEND_STRING("¯\\_(ツ)_/¯"); // I dunno.
+ return false;
+ }
+ /* Ignore for now - special characters not working with macros
+ }
+ case NOVY:
+ if (record->event.pressed) {
+ SEND_STRING("ლ(ಠ_ಠლ)"); // YUNO?!
+ return false;
+ }
+ */
+ }
+ return true;
+}
\ No newline at end of file
diff --git a/keyboards/iris/keymaps/jennetters/readme.md b/keyboards/iris/keymaps/jennetters/readme.md
new file mode 100644
index 0000000000..272a4ed745
--- /dev/null
+++ b/keyboards/iris/keymaps/jennetters/readme.md
@@ -0,0 +1,10 @@
+## jennetters iris keymap
+
+This keymap is based on the Iris default by [Bakingpy/nooges](https://github.com/nooges) without much deviation.
+
+* The QERTY layer remains largely the same with repositioning of the control key for ease of use.
+* L/RBRC, L/RCBR, and PIPE added to raise layer.
+* Arrow keys moved to wasd on raise layer.
+* Grave Escape added to maintain usage of ESC/~/` with top left key.
+
+See keymap.c for full details.
\ No newline at end of file
diff --git a/keyboards/iris/keymaps/jennetters/rules.mk b/keyboards/iris/keymaps/jennetters/rules.mk
new file mode 100644
index 0000000000..1ba2fa8fbe
--- /dev/null
+++ b/keyboards/iris/keymaps/jennetters/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/jc65/jc65.c b/keyboards/jc65/jc65.c
deleted file mode 100644
index a4bd868747..0000000000
--- a/keyboards/jc65/jc65.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "jc65.h"
diff --git a/keyboards/jc65/jc65.h b/keyboards/jc65/jc65.h
deleted file mode 100644
index 0c047c90ec..0000000000
--- a/keyboards/jc65/jc65.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef JC65_H
-#define JC65_H
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_jc65_v32u4
- #include "v32u4.h"
-#endif
-
-#ifdef KEYBOARD_jc65_v32a
- #include "v32a.h"
-#endif
-
-#endif
diff --git a/keyboards/jc65/rules.mk b/keyboards/jc65/rules.mk
deleted file mode 100644
index 050e22e3ca..0000000000
--- a/keyboards/jc65/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = jc65/v32u4
\ No newline at end of file
diff --git a/keyboards/kbd6x/config.h b/keyboards/kbd6x/config.h
new file mode 100644
index 0000000000..6a5ebf0624
--- /dev/null
+++ b/keyboards/kbd6x/config.h
@@ -0,0 +1,225 @@
+/*
+Copyright 2018 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER You
+#define PRODUCT kbd6x
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B3, B2, B1, B0, D4 }
+#define MATRIX_COL_PINS { F6, F5, F4, F1, E6, D0, D1, D2, D3, D5, D6, D7, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN F0
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 12
+#define RGBLIGHT_SAT_STEP 12
+#define RGBLIGHT_VAL_STEP 12
+#endif
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/kbd6x/info.json b/keyboards/kbd6x/info.json
new file mode 100644
index 0000000000..201c6bd3cf
--- /dev/null
+++ b/keyboards/kbd6x/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "kbd6x",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kbd6x/kbd6x.c b/keyboards/kbd6x/kbd6x.c
new file mode 100644
index 0000000000..f558af0304
--- /dev/null
+++ b/keyboards/kbd6x/kbd6x.c
@@ -0,0 +1,49 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "kbd6x.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 6);
+ PORTB &= ~(1 << 6);
+ } else {
+ DDRB &= ~(1 << 6);
+ PORTB &= ~(1 << 6);
+ }
+
+ led_set_user(usb_led);
+}
\ No newline at end of file
diff --git a/keyboards/kbd6x/kbd6x.h b/keyboards/kbd6x/kbd6x.h
new file mode 100644
index 0000000000..3d0c70f77a
--- /dev/null
+++ b/keyboards/kbd6x/kbd6x.h
@@ -0,0 +1,36 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#ifndef KBD6X_H
+#define KBD6X_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4D,\
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
+ K40, K41, K42, K46, K4A, K4B, K4C \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, KC_NO }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D }, \
+}
+
+#endif
diff --git a/keyboards/kbd6x/keymaps/default/keymap.c b/keyboards/kbd6x/keymaps/default/keymap.c
new file mode 100644
index 0000000000..fd73b1445f
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/default/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_ESC, 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_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
diff --git a/keyboards/kbd6x/keymaps/default/readme.md b/keyboards/kbd6x/keymaps/default/readme.md
new file mode 100644
index 0000000000..c416cd8fa7
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for kbd6x
diff --git a/keyboards/kbd6x/readme.md b/keyboards/kbd6x/readme.md
new file mode 100644
index 0000000000..625ec8968b
--- /dev/null
+++ b/keyboards/kbd6x/readme.md
@@ -0,0 +1,12 @@
+# KBD6x
+
+A WKL Hot Swap Double USB C 60%
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: KBD6x PCB
+Hardware Availability: [KBDFans](https://kbdfans.cn/products/kbd6x-wkl-hot-swap-60-double-type-c-pcb)
+Make example for this keyboard (after setting up your build environment):
+
+ make kbd6x:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/kbd6x/rules.mk b/keyboards/kbd6x/rules.mk
new file mode 100644
index 0000000000..b8acb7ad99
--- /dev/null
+++ b/keyboards/kbd6x/rules.mk
@@ -0,0 +1,70 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/kbd75/keymaps/spacemanspiff/keymap.c b/keyboards/kbd75/keymaps/spacemanspiff/keymap.c
new file mode 100644
index 0000000000..82a2ad9bec
--- /dev/null
+++ b/keyboards/kbd75/keymaps/spacemanspiff/keymap.c
@@ -0,0 +1,50 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+#define _BL 0 // Base Layer
+#define _FN 1 // Function Layer
+#define _CL 2 // Control+ Layer
+
+// Add names for complex momentary keys, to keep the keymap matrix aligned better.
+#define CTL_ESC MT(MOD_LCTL,KC_ESC)
+#define GUI_ENT MT(MOD_RGUI, KC_ENT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BL] = LAYOUT(
+ KC_ESC, 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, MO(_FN), KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, MO(_FN), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ MO(_CL), KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, GUI_ENT, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN] = LAYOUT(
+ RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_CL] = LAYOUT(
+ LCTL(KC_ESC), LCTL(KC_F1), LCTL(KC_F2), LCTL(KC_F3), LCTL(KC_F4), LCTL(KC_F5), LCTL(KC_F6), LCTL(KC_F7), LCTL(KC_F8), LCTL(KC_F9), LCTL(KC_F10), LCTL(KC_F11), LCTL(KC_F12), LCTL(KC_PSCR), _______, LCTL(KC_DEL),
+ KC_ESC, LCTL(KC_1), LCTL(KC_2), LCTL(KC_3), LCTL(KC_4), LCTL(KC_5), LCTL(KC_6), LCTL(KC_7), LCTL(KC_8), LCTL(KC_9), LCTL(KC_0), LCTL(KC_MINS), LCTL(KC_EQL), LCTL(KC_DEL), KC_DEL, LCTL(KC_HOME),
+ LCTL(KC_TAB), LCTL(KC_Q), LCTL(KC_W), LCTL(KC_E), LCTL(KC_R), LCTL(KC_T), LCTL(KC_Y), LCTL(KC_U), LCTL(KC_I), LCTL(KC_O), KC_PGUP, LCTL(KC_LBRC), LCTL(KC_RBRC), LCTL(KC_BSLS), LCTL(KC_PGUP),
+ CTL_ESC, LCTL(KC_A), LCTL(KC_S), LCTL(KC_D), LCTL(KC_F), LCTL(KC_G), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, LCTL(KC_SCLN), LCTL(KC_QUOT), LCTL(KC_ENT), LCTL(KC_PGDN),
+ LCTL(KC_LSFT), _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_B), KC_PGDN, LCTL(KC_M), LCTL(KC_COMM), LCTL(KC_DOT), LCTL(KC_SLSH), LCTL(KC_RSFT), LCTL(KC_UP), LCTL(KC_END),
+ _______, LCTL(KC_LALT), LCTL(KC_LGUI), LCTL(KC_SPC), LCTL(KC_SPC), LCTL(KC_SPC), LCTL(KC_RGUI), LCTL(KC_RALT), LCTL(KC_RCTL), LCTL(KC_LEFT), LCTL(KC_DOWN), LCTL(KC_RGHT)
+ ),
+
+};
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 2); PORTB &= ~(1 << 2);
+ } else {
+ DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
+ }
+}
+
diff --git a/keyboards/kbd75/keymaps/spacemanspiff/readme.md b/keyboards/kbd75/keymaps/spacemanspiff/readme.md
new file mode 100644
index 0000000000..6a78140a3d
--- /dev/null
+++ b/keyboards/kbd75/keymaps/spacemanspiff/readme.md
@@ -0,0 +1,35 @@
+# Spaceman Spiff Layout for KBD75
+
+
+
+
+
+Designed specifically to make switching back-n-forth with the Apple's MacBook Pro keyboard intuitive. Has a slight tendency toward readline/vim keybindings.
+
+Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed with another key.
+
+# Base Layer
+
+As simalar to the Apple keyboard as possible. Notiable exception is `Caps Lock`:
+- `Esc` when pressed alone
+- `Ctrl` when pressed with another key
+
+# Control+ Layer
+
+Left Ctrl key switches to the "Control+ Layer". This layer mostly acts like a control key in most cases, with a few exceptions:
+
+- `Ctl+` + `hjkl` are vim-style motion keys
+- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
+- `Ctl+` + `Backspace` is forward delete
+
+# Fn Layer
+
+Audio Controls:
+- `Fn` + `a` Volume Down
+- `Fn` + `s` Volume Up
+- `Fn` + `d` Mute
+
+To flash this layout you need to press `Fn+Backspace`
+
+
+
diff --git a/keyboards/kbd75/rev1/rev1.h b/keyboards/kbd75/rev1/rev1.h
index de600be86d..fd3e6e4882 100644
--- a/keyboards/kbd75/rev1/rev1.h
+++ b/keyboards/kbd75/rev1/rev1.h
@@ -53,7 +53,7 @@
K500, K501, K503, K506, K510, K511, K512, K513, K514, K515 \
) { \
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
{ K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, KC_NO, K315 }, \
{ K400, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, KC_NO, K413, K414, K415 }, \
diff --git a/keyboards/kinesis/keymaps/xyverz/keymap.c b/keyboards/kinesis/keymaps/xyverz/keymap.c
index 533047b156..1025df0769 100644
--- a/keyboards/kinesis/keymaps/xyverz/keymap.c
+++ b/keyboards/kinesis/keymaps/xyverz/keymap.c
@@ -299,58 +299,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
};
-// getting the LEDs working...
-void led_set_user(uint8_t usb_led) {
-
- DDRF |= (1<<0); // Keypad LED
- if (usb_led & (1< .
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ BACKLIT,
+ EXT_PLV
+};
+
+// Tap Dance Declarations
+enum {
+ SFT_CAP = 0
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ TD(SFT_CAP), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT),
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_planck_grid(
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = LAYOUT_planck_grid(
+ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS)
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ #ifdef KEYBOARD_planck_rev5
+ PORTE &= ~(1<<6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef KEYBOARD_planck_rev5
+ PORTE |= (1<<6);
+ #endif
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(plover_song);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+ } else {
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+ }
+ }
+}
+
+void dip_update(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_song);
+ #endif
+ layer_on(_ADJUST);
+ } else {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ #endif
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+ #ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ }
+ #endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/unagi/readme.md b/keyboards/planck/keymaps/unagi/readme.md
new file mode 100644
index 0000000000..08477d7ee8
--- /dev/null
+++ b/keyboards/planck/keymaps/unagi/readme.md
@@ -0,0 +1,8 @@
+# The Unagi Planck Layout
+
+This layout is a modified version of the default Planck keymap with the following additions:
+- Double tap left shift for caps lock
+- Hold enter for right shift (enter on-tap)
+- "Sonic Ring" startup tone
+- "Zelda Puzzle" music tone
+
diff --git a/keyboards/planck/keymaps/unagi/rules.mk b/keyboards/planck/keymaps/unagi/rules.mk
new file mode 100644
index 0000000000..5433b3b682
--- /dev/null
+++ b/keyboards/planck/keymaps/unagi/rules.mk
@@ -0,0 +1,2 @@
+SRC += muse.c
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/planck/light/light.c b/keyboards/planck/light/light.c
index cef57c5e69..f463090dd0 100644
--- a/keyboards/planck/light/light.c
+++ b/keyboards/planck/light/light.c
@@ -159,10 +159,12 @@ void matrix_scan_kb(void)
void suspend_power_down_kb(void)
{
rgb_matrix_set_suspend_state(true);
+ suspend_power_down_user();
}
void suspend_wakeup_init_kb(void)
{
rgb_matrix_set_suspend_state(false);
+ suspend_wakeup_init_user();
}
diff --git a/keyboards/rorschach/config.h b/keyboards/rorschach/config.h
new file mode 100644
index 0000000000..03fde5399d
--- /dev/null
+++ b/keyboards/rorschach/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2018 Danny Nguyen
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+#endif // CONFIG_H
diff --git a/keyboards/rorschach/info.json b/keyboards/rorschach/info.json
new file mode 100644
index 0000000000..a5856fa592
--- /dev/null
+++ b/keyboards/rorschach/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "Rorschach",
+ "keyboard_folder": "rorschach",
+ "url": "https://keeb.io",
+ "maintainer": "nooges",
+ "width": 15,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 52,
+ "layout": [
+ { "w": 1, "x": 0, "y": 0 },
+ { "w": 1, "x": 1, "y": 0 },
+ { "w": 1, "x": 2, "y": 0 },
+ { "w": 1, "x": 3, "y": 0 },
+ { "w": 1, "x": 4, "y": 0 },
+ { "w": 1, "x": 5, "y": 0 },
+
+ { "w": 1, "x": 9, "y": 0 },
+ { "w": 1, "x": 10, "y": 0 },
+ { "w": 1, "x": 11, "y": 0 },
+ { "w": 1, "x": 12, "y": 0 },
+ { "w": 1, "x": 13, "y": 0 },
+ { "w": 1, "x": 14, "y": 0 },
+
+ { "w": 1, "x": 0, "y": 1 },
+ { "w": 1, "x": 1, "y": 1 },
+ { "w": 1, "x": 2, "y": 1 },
+ { "w": 1, "x": 3, "y": 1 },
+ { "w": 1, "x": 4, "y": 1 },
+ { "w": 1, "x": 5, "y": 1 },
+
+ { "w": 1, "x": 9, "y": 1 },
+ { "w": 1, "x": 10, "y": 1 },
+ { "w": 1, "x": 11, "y": 1 },
+ { "w": 1, "x": 12, "y": 1 },
+ { "w": 1, "x": 13, "y": 1 },
+ { "w": 1, "x": 14, "y": 1 },
+
+ { "w": 1, "x": 0, "y": 2 },
+ { "w": 1, "x": 1, "y": 2 },
+ { "w": 1, "x": 2, "y": 2 },
+ { "w": 1, "x": 3, "y": 2 },
+ { "w": 1, "x": 4, "y": 2 },
+ { "w": 1, "x": 5, "y": 2 },
+
+ { "w": 1, "x": 9, "y": 2 },
+ { "w": 1, "x": 10, "y": 2 },
+ { "w": 1, "x": 11, "y": 2 },
+ { "w": 1, "x": 12, "y": 2 },
+ { "w": 1, "x": 13, "y": 2 },
+ { "w": 1, "x": 14, "y": 2 },
+
+ { "w": 1, "x": 0, "y": 3 },
+ { "w": 1, "x": 1, "y": 3 },
+ { "w": 1, "x": 2, "y": 3 },
+ { "w": 1, "x": 3, "y": 3 },
+ { "w": 1, "x": 4, "y": 3 },
+ { "w": 1, "x": 5, "y": 3 },
+
+ { "w": 1, "x": 9, "y": 3 },
+ { "w": 1, "x": 10, "y": 3 },
+ { "w": 1, "x": 11, "y": 3 },
+ { "w": 1, "x": 12, "y": 3 },
+ { "w": 1, "x": 13, "y": 3 },
+ { "w": 1, "x": 14, "y": 3 },
+
+ { "w": 1, "x": 5.5, "y": 4 },
+ { "w": 1, "x": 6, "y": 5 },
+
+ { "w": 1, "x": 8, "y": 5 },
+ { "w": 1, "x": 8.5, "y": 4 }
+
+ ]
+ }
+ }
+}
diff --git a/keyboards/rorschach/keymaps/default/config.h b/keyboards/rorschach/keymaps/default/config.h
new file mode 100644
index 0000000000..b6a9436323
--- /dev/null
+++ b/keyboards/rorschach/keymaps/default/config.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2018 Danny Nguyen
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
diff --git a/keyboards/rorschach/keymaps/default/keymap.c b/keyboards/rorschach/keymaps/default/keymap.c
new file mode 100644
index 0000000000..736d4d353c
--- /dev/null
+++ b/keyboards/rorschach/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJUST 16
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ KC_PGUP, KC_HOME, KC_END , KC_PGDN
+ ),
+
+ [_LOWER] = LAYOUT(
+ BL_STEP, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE,
+ RESET, _______, RGB_HUD, RGB_SAD, RGB_VAD, KC_LCBR, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_SLSH, _______,
+ KC_GRV, _______, _______, _______, _______, KC_DEL, _______, _______, KC_P0, KC_PDOT, _______, _______,
+ _______, _______, _______, _______
+ ),
+
+ [_RAISE] = LAYOUT(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_MPRV, KC_MNXT, KC_VOLU, _______, KC_UNDS, KC_EQL, KC_F1, KC_F2, KC_F3, KC_F4, KC_BSLS,
+ KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, _______, KC_MINS, KC_PLUS, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_F10, KC_F11, KC_F12, _______,
+ _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/rorschach/readme.md b/keyboards/rorschach/readme.md
new file mode 100644
index 0000000000..537553720b
--- /dev/null
+++ b/keyboards/rorschach/readme.md
@@ -0,0 +1,20 @@
+Rorschach
+=========
+
+A split ortholinear 4x6 keyboard with 2 additional thumb keys and sold by Keebio. [More info at Keebio](https://keeb.io).
+
+Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
+Hardware Supported: Pro Micro
+Hardware Availability: [Keebio](https://keeb.io)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rorschach/rev1:default
+
+Example of flashing this keyboard:
+
+ make rorschach/rev1:default:avrdude
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+A build guide for this keyboard can be found here: [Iris Build Guide](https://docs.keeb.io/iris-build-guide.html)
diff --git a/keyboards/rorschach/rev1/config.h b/keyboards/rorschach/rev1/config.h
new file mode 100644
index 0000000000..1c9ef8276c
--- /dev/null
+++ b/keyboards/rorschach/rev1/config.h
@@ -0,0 +1,64 @@
+/*
+Copyright 2018 Danny Nguyen
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include QMK_KEYBOARD_CONFIG_H
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCEEB
+#define PRODUCT_ID 0x1246
+#define DEVICE_VER 0x0100
+#define MANUFACTURER Keebio
+#define PRODUCT Rorschach Keyboard
+#define DESCRIPTION Split 45 percent ortholinear keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D7, E6, B4, D2, D4 }
+#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_LEVELS 5
+
+/* WS2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/rorschach/rev1/rev1.c b/keyboards/rorschach/rev1/rev1.c
new file mode 100644
index 0000000000..cd7f935ca5
--- /dev/null
+++ b/keyboards/rorschach/rev1/rev1.c
@@ -0,0 +1,14 @@
+#include "rev1.h"
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
diff --git a/keyboards/rorschach/rev1/rev1.h b/keyboards/rorschach/rev1/rev1.h
new file mode 100644
index 0000000000..583f0efc44
--- /dev/null
+++ b/keyboards/rorschach/rev1/rev1.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include "rorschach.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include
+#ifdef __AVR__
+ #include
+ #include
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
+ LT1, LT2, RT2, RT1 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, LT1, LT2 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, R30 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, RT1, RT2 } \
+ }
diff --git a/keyboards/rorschach/rev1/rules.mk b/keyboards/rorschach/rev1/rules.mk
new file mode 100644
index 0000000000..bd518d8f27
--- /dev/null
+++ b/keyboards/rorschach/rev1/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/rorschach/rorschach.c b/keyboards/rorschach/rorschach.c
new file mode 100644
index 0000000000..49e2917890
--- /dev/null
+++ b/keyboards/rorschach/rorschach.c
@@ -0,0 +1 @@
+#include "rorschach.h"
diff --git a/keyboards/rorschach/rorschach.h b/keyboards/rorschach/rorschach.h
new file mode 100644
index 0000000000..5c320b6a12
--- /dev/null
+++ b/keyboards/rorschach/rorschach.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#ifdef KEYBOARD_rorschach_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
+ LT1, LT2, RT2, RT1 \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, \
+ KC_##LT1, KC_##LT2, KC_##RT2, KC_##RT1 \
+ )
diff --git a/keyboards/rorschach/rules.mk b/keyboards/rorschach/rules.mk
new file mode 100644
index 0000000000..9de068d2f2
--- /dev/null
+++ b/keyboards/rorschach/rules.mk
@@ -0,0 +1,26 @@
+# MCU name
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+BOOTLOADER = caterina
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = rorschach/rev1
diff --git a/keyboards/satan/keymaps/spacemanspiff/keymap.c b/keyboards/satan/keymaps/spacemanspiff/keymap.c
new file mode 100644
index 0000000000..7dc1d3d788
--- /dev/null
+++ b/keyboards/satan/keymaps/spacemanspiff/keymap.c
@@ -0,0 +1,77 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+#define _BL 0
+#define _FL 1
+#define _CL 3
+
+// Add names for complex momentary keys, to keep the keymap matrix aligned better.
+#define CTL_ESC MT(MOD_LCTL,KC_ESC)
+#define GUI_ENT MT(MOD_RGUI, KC_ENT)
+
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------.
+ * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F0| -| =|Del |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
+ * |-----------------------------------------------------------|
+ * |Ctl/Esc| A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Alt |Gui | Space |Gui |Alt |FN |Ctrl |
+ * `-----------------------------------------------------------'
+ */
+[_BL] = LAYOUT_60_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ MO(_CL), KC_RALT, KC_LGUI, KC_SPC, GUI_ENT, KC_RALT, KC_RCTL, MO(_FL)),
+
+
+ /* Keymap _FL: Function Layer
+ * ,-----------------------------------------------------------.
+ * | `| | | | | | | | | | | | | RESET|
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | |VDN|VUP|MUTE| | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | |
+ * `-----------------------------------------------------------'
+ */
+[_FL] = LAYOUT_60_ansi(
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ /* Keymap _CL: Control+ Layer
+ * ,-----------------------------------------------------------.
+ * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Del |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | |PGU| | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | |LFT| DN| UP|RGT| | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | |PGD| | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | |
+ * `-----------------------------------------------------------'
+ */
+
+[_CL] = LAYOUT_60_ansi(
+ KC_ESC, 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_DEL, \
+ KC_TAB, LCTL(KC_Q), LCTL(KC_W), LCTL(KC_E), LCTL(KC_R), LCTL(KC_T), LCTL(KC_Y), LCTL(KC_U), LCTL(KC_I), LCTL(KC_O), KC_PGUP, KC_ESC, LCTL(KC_RBRC), LCTL(KC_BSLS), \
+ _______, LCTL(KC_A), LCTL(KC_S), LCTL(KC_D), LCTL(KC_F), LCTL(KC_G), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, LCTL(KC_SCLN), LCTL(KC_QUOT), LCTL(KC_ENT), \
+ KC_LSFT, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_PGDN, LCTL(KC_N), LCTL(KC_M), LCTL(KC_COMM), LCTL(KC_DOT), LCTL(KC_SLSH), LCTL(KC_RSFT), \
+ _______, LCTL(KC_LALT), LCTL(KC_LGUI), LCTL(KC_SPC), LCTL(KC_RGUI), LCTL(KC_RALT), KC_RCTL, MO(_FL)),
+};
+
diff --git a/keyboards/satan/keymaps/spacemanspiff/readme.md b/keyboards/satan/keymaps/spacemanspiff/readme.md
new file mode 100644
index 0000000000..1d592509de
--- /dev/null
+++ b/keyboards/satan/keymaps/spacemanspiff/readme.md
@@ -0,0 +1,34 @@
+# Spaceman Spiff Layout for GH60 Satan
+
+
+
+
+
+Designed specifically to make switching back-n-forth with the Apple's MacBook Pro keyboard intuitive. Has a slight tendency toward readline/vim keybindings.
+
+Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed with another key.
+
+# Base Layer
+
+As simalar to the Apple keyboard as possible. Notiable exception is `Caps Lock`:
+- `Esc` when pressed alone
+- `Ctrl` when pressed with another key
+
+# Control+ Layer
+
+Left Ctrl key switches to the "Control+ Layer". This layer mostly acts like a control key in most cases, with a few exceptions:
+
+- `Ctl+` + `hjkl` are vim-style motion keys
+- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
+- `Ctl+` + `Backspace` is forward delete
+
+# Fn Layer
+
+Audio Controls:
+- `Fn` + `a` Volume Down
+- `Fn` + `s` Volume Up
+- `Fn` + `d` Mute
+
+To flash this layout you need to press `Fn+Backspace`
+
+
diff --git a/keyboards/singa/readme.md b/keyboards/singa/readme.md
index c0325d1a02..09b540722e 100644
--- a/keyboards/singa/readme.md
+++ b/keyboards/singa/readme.md
@@ -16,4 +16,34 @@ Make example for this keyboard (after setting up your build environment):
make singa:default
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/tada68/keymaps/iso-uk/keymap.c b/keyboards/tada68/keymaps/iso-uk/keymap.c
index c843595dc3..d59f610f7c 100644
--- a/keyboards/tada68/keymaps/iso-uk/keymap.c
+++ b/keyboards/tada68/keymaps/iso-uk/keymap.c
@@ -21,8 +21,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_BL] = LAYOUT_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUHS, KC_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
@@ -42,8 +42,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_FL] = LAYOUT_iso(
_______, 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_DEL, KC_INS, \
- _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, \
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, \
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, \
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, KC_BTN1, KC_MS_U, KC_BTN2, \
_______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
),
diff --git a/keyboards/tada68/keymaps/rbong/config.h b/keyboards/tada68/keymaps/rbong/config.h
new file mode 100644
index 0000000000..af01528b43
--- /dev/null
+++ b/keyboards/tada68/keymaps/rbong/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define BACKLIGHT_BREATHING
diff --git a/keyboards/tada68/keymaps/rbong/keymap.c b/keyboards/tada68/keymaps/rbong/keymap.c
new file mode 100644
index 0000000000..ffed2caa29
--- /dev/null
+++ b/keyboards/tada68/keymaps/rbong/keymap.c
@@ -0,0 +1,69 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+
+#define _______ KC_TRNS
+// Dual bind caps to left ctrl and escape when held
+#define CAPSDUAL CTL_T(KC_ESC)
+
+enum custom_keycodes {
+ TRMEXIT = 0
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case TRMEXIT:
+ SEND_STRING(SS_LCTRL("\\")SS_LCTRL("n"));
+ return false;
+ }
+ }
+ return true;
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |~ ` | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+ * |----------------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+[_BL] = LAYOUT_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS,KC_DEL, \
+ CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,KC_UP,KC_PGDN, \
+ TRMEXIT, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | | | | | |Hme |
+ * |----------------------------------------------------------------|
+ * | | | | | | |<- |DN |UP | ->| | | |End |
+ * |----------------------------------------------------------------|
+ * | | |BR |Bl-|BL |BL+| |VU-|VU+|MUT| | McL|MsU|McR |
+ * |----------------------------------------------------------------|
+ * | | | | | | | |MsL|MsD|MsR |
+ * `----------------------------------------------------------------'
+ */
+[_FL] = LAYOUT_ansi(
+ _______, 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_DEL, KC_INS , \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,_______,_______,_______, _______,KC_HOME, \
+ _______,_______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,_______,_______, _______,KC_END, \
+ _______,_______,BL_BRTG,BL_DEC, BL_TOGG,BL_INC, _______,KC_VOLD,KC_VOLU,KC_MUTE ,_______,KC_BTN1, KC_MS_U, KC_BTN2, \
+ _______,_______,_______, _______, _______,_______ ,_______,KC_MS_L,KC_MS_D, KC_MS_R),
+};
diff --git a/keyboards/tada68/keymaps/rbong/readme.md b/keyboards/tada68/keymaps/rbong/readme.md
new file mode 100644
index 0000000000..a19f77ca80
--- /dev/null
+++ b/keyboards/tada68/keymaps/rbong/readme.md
@@ -0,0 +1,9 @@
+# rbong's Keyboard Layout
+
+This layout is very vim oriented.
+
+* Dual binds CAPS to Ctrl/ESC
+* Binds escape to grave accent/tilde
+* FN+hjkl are bound to the arrow keys
+* Ctrl is bound to Ctrl+\\ Ctrl+n (`:terminal` escape sequence)
+* FN+x puts the backlight into breathing mode
diff --git a/keyboards/tada68/keymaps/rbong/rules.mk b/keyboards/tada68/keymaps/rbong/rules.mk
new file mode 100644
index 0000000000..1915481bf9
--- /dev/null
+++ b/keyboards/tada68/keymaps/rbong/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/tada68/readme.md b/keyboards/tada68/readme.md
index 9691134bf0..25b054ba16 100755
--- a/keyboards/tada68/readme.md
+++ b/keyboards/tada68/readme.md
@@ -56,3 +56,30 @@ $ make tada68:default:flashbin
`rm -fr .Trashes/ .fseventsd/ ._.Trashes ._FLASH.bin`
7) Eject the USB device or hit ESC on the keyboard. The lights will stop flashing and your firmware is loaded!
+
+## Flashing Instructions (Linux)
+
+*Use these instructions at your own risk. Mount settings originally found at https://www.reddit.com/r/MechanicalKeyboards/comments/8e2nnp/help_problems_flashing_firmware_on_tada68_from/*
+
+1) from the `qmk_firmware\` directory run:
+```
+$ make tada68:default:flashbin
+```
+
+2) Connect your keyboard to Windows computer, hit the reset button on the TADA, the lights will start flashing.
+
+3) A new entry should appear at `/dev/sd*`. Mount the board using this command:
+
+```
+mount -t vfat -o rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2 /mnt/tada68
+```
+
+4) Back up the original firmware
+
+`mv /mnt/tada68/FLASH.BIN ~`
+
+5) Copy over your new firmware to the keybaord
+
+`cp /FLASH.bin /mnt/tada68`
+
+5) *Do not eject the USB device.* Hit ESC on the keyboard. The lights will stop flashing and your firmware is loaded!
diff --git a/keyboards/tada68/tada68.h b/keyboards/tada68/tada68.h
index fc1bea98bf..608f52e44f 100755
--- a/keyboards/tada68/tada68.h
+++ b/keyboards/tada68/tada68.h
@@ -55,15 +55,15 @@
#define LAYOUT_iso( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k2c, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
k40, k41, k42, k45, k49, k4a, k4b, k4c, k4d, k4e \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
- {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e}, \
- {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k2c, k1e}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e}, \
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e} \
}
diff --git a/keyboards/vitamins_included/config.h b/keyboards/vitamins_included/config.h
index c910d8f24f..27924ae46c 100644
--- a/keyboards/vitamins_included/config.h
+++ b/keyboards/vitamins_included/config.h
@@ -21,4 +21,15 @@ along with this program. If not, see .
#include "config_common.h"
+#if !defined(NO_DEBUG) && !defined(CONSOLE_ENABLE)
+#define NO_DEBUG
+#endif // !NO_DEBUG
+#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE)
+#define NO_PRINT
+#endif // !NO_PRINT
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+#define DISABLE_LEADER
+
#endif
diff --git a/keyboards/vitamins_included/readme.md b/keyboards/vitamins_included/readme.md
index 0163f154e0..84bab9007c 100644
--- a/keyboards/vitamins_included/readme.md
+++ b/keyboards/vitamins_included/readme.md
@@ -104,7 +104,7 @@ If this is the first time you're flashing the boards, you have to flash EEPROM
2. Run `ls /dev | grep tty` Note down which ports you see
2. Plug the keyboard in, if it's new, it should enter bootloader, if it's not new, see **Entering bootloader** on how to enter bootloader mode
4. Right after entering bootloader, run `ls /dev | grep tty` again. There should be a new tty, this is the bootloader TTY, note it down. If nothing shows see **Entering bootloader** on how to enter bootloader mode
-6. For the left hand side, run `avrdude -c avr109 -p m32u4 -P /dev/ttyS1 -U eeprom:w:"./keyboards/lets_split_vitamins/eeprom-lefthand.eep":a`
+6. For the left hand side, run `avrdude -c avr109 -p m32u4 -P /dev/ttyS1 -U eeprom:w:"./quantum/split_common/eeprom-lefthand.eep":a`
Replace ***/dev/ttyS1*** with the port you noted down earlier. If you're on windows using msys2, replace ***/dev/ttyS1*** with COM2, note that the number is one higher than the tty number.
Do the same For the right hand, but change the file to ***eeprom-righthand.eep***
diff --git a/keyboards/vitamins_included/rev1/config.h b/keyboards/vitamins_included/rev1/config.h
index 50168237bc..26023bfea9 100644
--- a/keyboards/vitamins_included/rev1/config.h
+++ b/keyboards/vitamins_included/rev1/config.h
@@ -83,7 +83,7 @@ along with this program. If not, see .
/* disable action features */
//#define NO_ACTION_LAYER
-#define NO_ACTION_TAPPING
+//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
diff --git a/keyboards/vitamins_included/rules.mk b/keyboards/vitamins_included/rules.mk
index 786f247bde..2291b21161 100644
--- a/keyboards/vitamins_included/rules.mk
+++ b/keyboards/vitamins_included/rules.mk
@@ -73,3 +73,5 @@ CUSTOM_MATRIX = yes
LAYOUTS = ortho_4x12
DEFAULT_FOLDER = vitamins_included/rev1
+
+EXTRAFLAGS += -flto
\ No newline at end of file
diff --git a/keyboards/whitefox/keymaps/constexpr/config.h b/keyboards/whitefox/keymaps/constexpr/config.h
new file mode 100644
index 0000000000..b4bc05acf5
--- /dev/null
+++ b/keyboards/whitefox/keymaps/constexpr/config.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#define TAPPING_TOGGLE 2
+#define TAPPING_TERM 200
+#define PERMISSIVE_HOLD
+
+#define MOUSEKEY_DELAY 50
+#define MOUSEKEY_INTERVAL 15
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 50
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 50
diff --git a/keyboards/whitefox/keymaps/constexpr/keymap.c b/keyboards/whitefox/keymaps/constexpr/keymap.c
new file mode 100644
index 0000000000..b19f1c81fa
--- /dev/null
+++ b/keyboards/whitefox/keymaps/constexpr/keymap.c
@@ -0,0 +1,142 @@
+#include QMK_KEYBOARD_H
+
+#define FN_CAPS LT(L_FN, KC_CAPS)
+#define FN_CTRL TD(TD_FN_CTRL)
+#define RL_ALT TD(TD_RL_ALT) // Unused
+
+#define TOP LCTL(KC_HOME)
+#define BOTTOM LCTL(KC_END)
+
+#define UC_LPRN UC(0x0028)
+#define UC_RPRN UC(0x0029)
+#define UC_EQLS UC(0x003D)
+#define UC_MULS UC(0x00D7)
+#define UC_DIVS UC(0x00F7)
+#define UC_MINS UC(0x2212)
+
+void matrix_init_user(void)
+{
+ set_unicode_input_mode(UC_WIN);
+}
+
+enum layers {
+ L_BASE,
+ L_FN,
+ L_NUMPAD,
+};
+
+enum custom_keycodes {
+ CLEAR = SAFE_RANGE,
+ NUMPAD,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+ if (!record->event.pressed) { return true; }
+
+ switch (keycode) {
+ case CLEAR:
+ SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
+ return false;
+
+ case NUMPAD:
+ layer_invert(L_NUMPAD);
+ bool num_lock = host_keyboard_leds() & 1<count & 1) { layer_on(L_FN); }
+ if (state->count & 2) { register_code(KC_RCTL); }
+}
+
+void td_fn_ctrl_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+ if (state->count & 1) { layer_off(L_FN); }
+ if (state->count & 2) { unregister_code(KC_RCTL); }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_FN_CTRL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_fn_ctrl_finished, td_fn_ctrl_reset),
+ [TD_RL_ALT] = ACTION_TAP_DANCE_DOUBLE(KC_RALT, KC_LALT), // Unused
+};
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * ,---------------------------------------------------------------.
+ * |Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |PSc|
+ * |---------------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] |Bspc |Del|
+ * |---------------------------------------------------------------|
+ * |FnCaps| A | S | D | F | G | H | J | K | L | ; | ' | Enter |PgU|
+ * |---------------------------------------------------------------|
+ * | LShift | Z | X | C | V | B | N | M | , | . | / |RShift| ↑ |PgD|
+ * |---------------------------------------------------------------|
+ * |LCtl|LGui|LAlt| Space |RAlt|FnCt| | ← | ↓ | → |
+ * `---------------------------------------------------------------'
+ */
+ [L_BASE] = LAYOUT_truefox( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, KC_PSCR, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, KC_DEL, \
+ FN_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,FN_CTRL, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+
+ /* Function layer
+ * ,---------------------------------------------------------------.
+ * | |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Num|Scr|Pau|
+ * |---------------------------------------------------------------|
+ * | M4 |M2 |M↑ |M1 |M3 |M5 | | | |Stp|Ply|Prv|Nxt|Clear|Ins|
+ * |---------------------------------------------------------------|
+ * | |M← |M↓ |M→ |MW↑| | | | | | | | |Top|
+ * |---------------------------------------------------------------|
+ * | |MA0|MA2|MW←|MW→| | | |Vo-|Vo+|Mut| |PgU|Btm|
+ * |---------------------------------------------------------------|
+ * | | | | MW↓ |App | | |Hom|PgD|End|
+ * `---------------------------------------------------------------'
+ */
+ [L_FN] = LAYOUT_truefox( \
+ _______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK,KC_PAUS, \
+ KC_BTN4,KC_BTN2,KC_MS_U,KC_BTN1,KC_BTN3,KC_BTN5,_______,_______,_______,KC_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,CLEAR, KC_INS, \
+ _______,KC_MS_L,KC_MS_D,KC_MS_R,KC_WH_U,_______,_______,_______,_______,_______,_______,_______, _______, TOP, \
+ _______, KC_ACL0,KC_ACL2,KC_WH_L,KC_WH_R,_______,_______,_______,KC_VOLD,KC_VOLU,KC_MUTE,_______, KC_PGUP,BOTTOM, \
+ _______,_______,_______, KC_WH_D, KC_APP, _______, KC_HOME,KC_PGDN,KC_END \
+ ),
+
+ /* Numpad layer
+ * ,---------------------------------------------------------------.
+ * |Num| | | | | | |P7 |P8 |P9 |P- | − | = |Num| | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | |P4 |P5 |P6 |P+ | ( | ) | | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | |P1 |P2 |P3 |P* | × | PEnter | |
+ * |---------------------------------------------------------------|
+ * | | | | | | |P0 |P0 |P, |P. |P/ | ÷ | | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `---------------------------------------------------------------'
+ */
+ [L_NUMPAD] = LAYOUT_truefox( \
+ NUMPAD, _______,_______,_______,_______,_______,_______,KC_P7, KC_P8, KC_P9, KC_PMNS,UC_MINS,UC_EQLS,NUMPAD, _______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,KC_P4, KC_P5, KC_P6, KC_PPLS,UC_LPRN,UC_RPRN,_______, _______, \
+ _______,_______,_______,_______,_______,_______,_______,KC_P1, KC_P2, KC_P3, KC_PAST,UC_MULS, KC_PENT, _______, \
+ _______, _______,_______,_______,_______,_______,KC_P0, KC_P0, KC_PCMM,KC_PDOT,KC_PSLS,UC_DIVS, _______,_______, \
+ _______,_______,_______, _______, _______,_______, _______,_______,_______ \
+ ),
+};
diff --git a/keyboards/whitefox/keymaps/constexpr/rules.mk b/keyboards/whitefox/keymaps/constexpr/rules.mk
new file mode 100644
index 0000000000..f1f3d2378e
--- /dev/null
+++ b/keyboards/whitefox/keymaps/constexpr/rules.mk
@@ -0,0 +1,4 @@
+BOOTMAGIC_ENABLE = no
+CONSOLE_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+UNICODE_ENABLE = yes
diff --git a/keyboards/xd75/keymaps/arpinfidel/config.h b/keyboards/xd75/keymaps/arpinfidel/config.h
new file mode 100644
index 0000000000..24caea2152
--- /dev/null
+++ b/keyboards/xd75/keymaps/arpinfidel/config.h
@@ -0,0 +1,27 @@
+/* Copyright 2017 Benjamin Kesselring
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// place overrides here
+#define TAPPING_TOGGLE 2
+
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 5
+
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 50
diff --git a/keyboards/xd75/keymaps/arpinfidel/keymap.c b/keyboards/xd75/keymaps/arpinfidel/keymap.c
new file mode 100644
index 0000000000..d8890db51a
--- /dev/null
+++ b/keyboards/xd75/keymaps/arpinfidel/keymap.c
@@ -0,0 +1,114 @@
+/* Copyright 2017 Wunder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+#define _QW 0
+#define _FN 1
+
+enum my_kc {
+ A_BL_TG = SAFE_RANGE
+ // , A_BL_Y
+ // , A_BL_N
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | - | ` | = | 6 | 7 | 8 | 9 | 0 | BSPC |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | [ | ] | \ | Y | U | I | O | P | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | UP | DEL | DOWN | H | J | K | L | ; | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | HOME | PG UP | END | N | M | , | . | / | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL | FN | LGUI | LALT | SPACE | SPACE | FN | PG DN | FN | BSPC | BSPC | RALT | RGUI | FN | RCTRL |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW] = { /* QWERTY */
+ { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_MINS, KC_GRV , KC_EQL , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC },
+ { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_LBRC, KC_RBRC, KC_BSLS, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_QUOT },
+ { KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_UP , KC_DEL , KC_DOWN, KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_ENT },
+ { KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_HOME, KC_PGUP, KC_END , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT },
+ { KC_LCTL, TT(_FN), KC_LGUI, KC_LALT, KC_SPC , KC_SPC , TT(_FN), KC_PGDN, TT(_FN), KC_BSPC, KC_BSPC, KC_RALT, KC_RGUI, TT(_FN), KC_RCTL },
+ },
+
+/* FUNCTION
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | MS W U | | MS 2 | MS UP | MS 1 | MS 3 | RGB HD | | RGB HI | [ | ] | UP | | = | \ |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | MS W D | | MS L | MS DN | MS R | | RGB SD | | RGB SI | - | LEFT | DOWN | RIGHT | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | RGB VD | BL TG | RGB VI | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | FN | RGB TG | | MS W L | MS W R | | RESET | | MS 1 | MS 2 | RGB RMD| RGB MD | FN | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_FN] = { /* FUNCTION */
+ { KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, RGB_HUD, _______, RGB_HUI, KC_F7, KC_F8, KC_F9, KC_F10 , KC_F11 , KC_F12 },
+ { KC_WH_U, _______, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, RGB_SAD, _______, RGB_SAI, KC_LBRC, KC_RBRC, KC_UP , _______ , KC_EQL , KC_BSLS },
+ { KC_WH_D, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, RGB_VAD, _______, RGB_VAI, KC_MINS, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, RGB_RMOD,A_BL_TG, RGB_MOD, _______, _______, _______, _______ , _______, _______ },
+ { _______, TT(_FN), RGB_TOG, _______, KC_WH_L, KC_WH_R, TT(_FN), RESET , TT(_FN), KC_BTN1, KC_BTN2, _______, _______ , TT(_FN), _______ },
+ }
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case A_BL_TG:
+ if (record->event.pressed) {
+ // toggle keycaps leds (f5 pin)
+ PORTF ^= (1 << 5);
+ }
+ return false;
+
+ // case A_BL_Y:
+ // if (record->event.pressed) {
+ // keycaps_led_on();
+ // }
+ // return false;
+
+ // case A_BL_N:
+ // if (record->event.pressed) {
+ // keycaps_led_off();
+ // }
+ // return false;
+
+ default:
+ return true;
+ }
+}
+
+// Runs whenever there is a layer state change.
+uint32_t layer_state_set_user(uint32_t state) {
+ uint8_t layer = biton32(state);
+
+ gp100_led_off();
+ gp103_led_off();
+
+ // turns on gp100 (top left led) for odd layers
+ if (layer & (1<<0)) gp100_led_on();
+ // turns on gp103 (top mid led) for layers 2, 6, ...
+ if (layer & (1<<1)) gp103_led_on();
+
+ return state;
+}
\ No newline at end of file
diff --git a/keyboards/xd75/keymaps/arpinfidel/readme.md b/keyboards/xd75/keymaps/arpinfidel/readme.md
new file mode 100644
index 0000000000..033049dd91
--- /dev/null
+++ b/keyboards/xd75/keymaps/arpinfidel/readme.md
@@ -0,0 +1,35 @@
+# ArpinFidel's layout for xd75
+
+```
+QWERTY
+.--------------------------------------------------------------------------------------------------------------------------------------.
+| ESC | 1 | 2 | 3 | 4 | 5 | - | ` | = | 6 | 7 | 8 | 9 | 0 | BSPC |
+|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+| TAB | Q | W | E | R | T | [ | ] | \ | Y | U | I | O | P | ' |
+|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+| CAP LK | A | S | D | F | G | UP | DEL | DOWN | H | J | K | L | ; | ENTER |
+|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+| LSHIFT | Z | X | C | V | B | HOME | PG UP | END | N | M | , | . | / | RSHIFT |
+|--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+| LCTRL | FN | LGUI | LALT | SPACE | SPACE | FN | PG DN | FN | BSPC | BSPC | RALT | RGUI | FN | RCTRL |
+'--------------------------------------------------------------------------------------------------------------------------------------'
+
+FUNCTION
+.--------------------------------------------------------------------------------------------------------------------------------------.
+| F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+| MS W U | | MS 2 | MS UP | MS 1 | MS 3 | RGB HD | | RGB HI | [ | ] | UP | | = | \ |
+|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+| MS W D | | MS L | MS DN | MS R | | RGB SD | | RGB SI | - | LEFT | DOWN | RIGHT | | |
+|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+| | | | | | | RGB VD | BL TG | RGB VI | | | | | | |
+|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+| | FN | RGB TG | | MS W L | MS W R | | RESET | | MS 1 | MS 2 | RGB RMD| RGB MD | FN | |
+'--------------------------------------------------------------------------------------------------------------------------------------'
+```
+
+special keys in the middle. hold fn for momentary switch, double tap for toggle. mouse control, arrow keys, led control, and special keys on fn layer.
+
+TODO :
+- backlight brightness
+- dynamic macros
\ No newline at end of file
diff --git a/keyboards/xd75/keymaps/arpinfidel/rules.mk b/keyboards/xd75/keymaps/arpinfidel/rules.mk
new file mode 100644
index 0000000000..a83220d581
--- /dev/null
+++ b/keyboards/xd75/keymaps/arpinfidel/rules.mk
@@ -0,0 +1,16 @@
+# Copyright 2013 Jun Wako
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+BOOTMAGIC_ENABLE = no
diff --git a/keyboards/xd75/keymaps/c4software_bepo/README.md b/keyboards/xd75/keymaps/c4software_bepo/README.md
index 7a852962a2..b95130a31b 100644
--- a/keyboards/xd75/keymaps/c4software_bepo/README.md
+++ b/keyboards/xd75/keymaps/c4software_bepo/README.md
@@ -9,11 +9,11 @@ Layout for Bépo Dev
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | TAB | B | E_ACUT | P | O | $ | E_GRAV | DEL | E_CIRC | V | D | L | J | Z | C_CEDIL|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
- * | RALT | A | U | I | E | , | | | C | T | S | R | N | M | W |
- * |--------+--------+--------+--------+--------+--------+ BACKSP + ENTER +--------+--------+--------+--------------------------+--------|
- * | LSHIFT | A_GRAV | Y | X | . | K | | | ’ | Q | G | H | F | UP | RSHIFT |
+ * | RALT | A | U | I | E | , | BACKSP | ENTER | C | T | S | R | N | M | W |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | A_GRAV | Y | X | . | K | BACKSP | ENTER | ’ | Q | G | H | F | UP | RSHIFT |
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LALT | LCTRL | FN | LGUI | SPACE | RALT | SPACE | RGUI | FN | LEFT | DOWN | RIGHT |
+ * | LALT | LCTRL | FN | LGUI | SPACE | SPACE | RALT | RALT | SPACE | SPACE | RGUI | FN | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
```
@@ -28,10 +28,10 @@ Layout for Bépo Dev
* | | | | | | | | | P7 | P8 | P9 | - | RGB_TOG| RGB_MOD| RGB_HUI|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | PREV | PLAY | NEXT | STOP | | | | P4 | P5 | P6 | + | RGB_SAI| RGB_SAD| RGB_VAI|
- * |--------+--------+--------+--------+--------+--------+ + +--------+--------+--------+--------+--------+--------+--------|
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | VOL- | MUTE | VOL+ | | | | | P1 | P2 | P3 | ENT | RGB_VAD| Home | RGB_HUD|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | RESET | | FN | | | | P0 | . | FN | | End | |
+ * | RESET | | FN | | | | | | P0 | P0 | . | FN | | End | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
```
\ No newline at end of file
diff --git a/keyboards/xd75/keymaps/c4software_bepo/keymap.c b/keyboards/xd75/keymaps/c4software_bepo/keymap.c
index be7ca93d2d..e0a71d7c4f 100644
--- a/keyboards/xd75/keymaps/c4software_bepo/keymap.c
+++ b/keyboards/xd75/keymaps/c4software_bepo/keymap.c
@@ -28,11 +28,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | TAB | B | E_ACUT | P | O | $ | E_GRAV | DEL | E_CIRC | V | D | L | J | Z | C_CEDIL|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
- * | RALT | A | U | I | E | , | | | C | T | S | R | N | M | W |
- * |--------+--------+--------+--------+--------+--------+ BACKSP + ENTER +--------+--------+--------+--------------------------+--------|
- * | LSHIFT | A_GRAV | Y | X | . | K | | | ’ | Q | G | H | F | UP | RSHIFT |
+ * | RALT | A | U | I | E | , | BACKSP | ENTER | C | T | S | R | N | M | W |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | A_GRAV | Y | X | . | K | BACKSP | ENTER | ’ | Q | G | H | F | UP | RSHIFT |
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LALT | LCTRL | FN | LGUI | SPACE | RALT | SPACE | RGUI | FN | LEFT | DOWN | RIGHT |
+ * | LALT | LCTRL | FN | LGUI | SPACE | SPACE | RALT | RALT | SPACE | SPACE | RGUI | FN | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -40,8 +40,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{ KC_ESC, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, BP_PERCENT, KC_VOLD, KC_VOLU, BP_AT, BP_PLUS, BP_MINUS, BP_SLASH, BP_ASTR, BP_EQUAL },
{ KC_TAB, BP_B, BP_E_ACUTE, BP_P, BP_O, BP_DOLLAR, BP_E_GRAVE, KC_DEL, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z, BP_CCED },
{ KC_RALT, BP_A, BP_U, BP_I, BP_E, BP_COMMA, KC_BSPC, KC_ENT, BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, BP_W },
- { KC_LSFT, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_TRNS, KC_TRNS, BP_APOS, BP_Q, BP_G, BP_H, BP_F, KC_UP, KC_RSFT },
- { KC_LALT, KC_LCTL, MO(_FN), KC_LGUI, KC_TRNS, KC_SPC, KC_TRNS, KC_RALT, KC_SPC, KC_TRNS, KC_RGUI, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT },
+ { KC_LSFT, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_BSPC, KC_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, KC_UP, KC_RSFT },
+ { KC_LALT, KC_LCTL, MO(_FN), KC_LGUI, KC_SPC, KC_SPC, KC_RALT, KC_RALT, KC_SPC, KC_SPC, KC_RGUI, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT },
},
/* FUNCTION
@@ -51,10 +51,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | P7 | P8 | P9 | - | RGB_TOG| RGB_MOD| RGB_HUI|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | PREV | PLAY | NEXT | STOP | | | | P4 | P5 | P6 | + | RGB_SAI| RGB_SAD| RGB_VAI|
- * |--------+--------+--------+--------+--------+--------+ + +--------+--------+--------+--------+--------+--------+--------|
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | VOL- | MUTE | VOL+ | | | | | P1 | P2 | P3 | ENT | RGB_VAD| Home | RGB_HUD|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | RESET | | FN | | | | P0 | . | FN | | End | |
+ * | RESET | | FN | | | | | | P0 | P0 | . | FN | | End | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_MINS, RGB_TOG, RGB_MOD, RGB_HUI },
{ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, KC_TRNS, KC_TRNS, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PLUS, RGB_SAI, RGB_SAD, RGB_VAI },
{ KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_ENT, RGB_VAD, KC_HOME, RGB_HUD },
- { RESET, KC_TRNS, MO(_FN), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_0, KC_TRNS, KC_PDOT, MO(_FN), KC_TRNS, KC_END, KC_TRNS },
+ { RESET, KC_TRNS, MO(_FN), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_0, KC_KP_0, KC_PDOT, MO(_FN), KC_TRNS, KC_END, KC_TRNS },
}
};
diff --git a/keyboards/xd75/keymaps/skewwhiffy/keymap.c b/keyboards/xd75/keymaps/skewwhiffy/keymap.c
index 9c3e755f66..11fa2f0e64 100644
--- a/keyboards/xd75/keymaps/skewwhiffy/keymap.c
+++ b/keyboards/xd75/keymaps/skewwhiffy/keymap.c
@@ -20,20 +20,29 @@
// Layer shorthand
#define _CM 0 // Colemak
-#define _NB 1 // Numbers
-#define _SYL 2 // Symbols left
-#define _SYR 3 // Symbols right
-#define _NAV 4 // Navigation
+#define _DV 1 // Dvorak
+#define _QW 2 // QWERTY
+#define _NB 3 // Numbers
+#define _SY 4 // Symbols
+#define _NAV 5 // Navigation
// Layer buttons
#define _Z_SFT SFT_T(UK_Z)
+#define _SCLSH SFT_T(UK_SCLN)
#define _SLSH SFT_T(UK_SLSH)
#define _X_NB LT(_NB, UK_X)
+#define _Q_NB LT(_NB, UK_Q)
#define _DOT_NB LT(_NB, UK_DOT)
-#define _C_SY LT(_SYL, UK_C)
-#define _COM_SY LT(_SYR, UK_COMM)
+#define _V_NB LT(_NB, UK_V)
+#define _C_SY LT(_SY, UK_C)
+#define _J_SY LT(_SY, UK_J)
+#define _W_SY LT(_SY, UK_W)
+#define _COM_SY LT(_SY, UK_COMM)
+#define _AST_SY LT(_SY, UK_PAST)
#define _B_NAV LT(_NAV, UK_B)
+#define _X_NAV LT(_NAV, UK_X)
#define _K_NAV LT(_NAV, UK_K)
+#define _N_NAV LT(_NAV, UK_N)
#define _F1_NB LT(_NB, UK_F1)
#define _3_NB LT(_NB, UK_3)
@@ -45,98 +54,142 @@
#define _A_LEFT LALT(UK_LEFT)
#define _A_RGHT LALT(UK_RGHT)
+enum custom_keycodes {
+ L_NEXT = SAFE_RANGE,
+ L_SB
+};
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Colemak _CM
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | L_NEXT | L_SB |
+ * |--------------------------------------------------------------------------------------------------------------------------------------|
+ * | Q | W | F | P | G | | | | | | J | L | U | Y | ; |
+ * |--------------------------------------------------------------------------------------------------------------------------------------|
+ * | A | R | S | T | D | | | | | | H | N | E | I | O |
+ * |--------------------------------------------------------------------------------------------------------------------------------------|
+ * | Z | X | C | V | B | | | | | | K | M | , | . | / |
+ * | SHIFT | NUMBER | SYMBOL | | NAV | | | | | | NAV | | SYMBOL | FUNC | SHIFT |
+ * |--------------------------------------------------------------------------------------------------------------------------------------|
+ * | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | | | | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT |
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ */
+ [_CM] = {
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, L_NEXT, L_SB },
+ { UK_Q, UK_W, UK_F, UK_P, UK_G, _______, _______, _______, _______, _______, UK_J, UK_L, UK_U, UK_Y, UK_SCLN },
+ { UK_A, UK_R, UK_S, UK_T, UK_D, _______, _______, _______, _______, _______, UK_H, UK_N, UK_E, UK_I, UK_O },
+ { _Z_SFT, _X_NB, _C_SY, UK_V, _B_NAV, _______, _______, _______, _______, _______, _K_NAV, UK_M, _COM_SY, _DOT_NB, _SLSH },
+ { UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC, UK_ENT, _______, _______, _______, UK_DEL, UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT }
+ },
+
+/* DVORAK _DV
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------------------------------------------------------------------|
- * | | Q | W | F | P | G | | | | J | L | U | Y | ; | |
+ * | ' | , | . | P | Y | | | | | | F | G | C | R | L |
* |--------------------------------------------------------------------------------------------------------------------------------------|
- * | | A | R | S | T | D | | | | H | N | E | I | O | ENT |
+ * | A | O | E | U | I | | | | | | D | H | T | N | S |
* |--------------------------------------------------------------------------------------------------------------------------------------|
- * | | Z | X | C | V | B | | | | K | M | , | . | / | |
- * | | SHIFT | NUMBER | SYMBOL | | NAV | | | | NAV | | SYMBOL | FUNC | SHIFT | |
+ * | ; | Q | J | K | X | | | | | | B | M | W | V | Z |
+ * | SHIFT | NUMBER | SYMBOL | | NAV | | | | | | NAV | | SYMBOL | FUNC | SHIFT |
* |--------------------------------------------------------------------------------------------------------------------------------------|
- * | LSHIFT | LCTRL | LALT | LGUI | TERM | SPACE | LCTRL | DEL | LALT | BACKSP | RGUI | RGUI | RALT | RCTRL | RSHIFT |
+ * | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------------------------------------------------------------------|
*/
- [_CM] = {
+ [_DV] = {
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { UK_QUOT, UK_COMM, UK_DOT, UK_P, UK_Y, _______, _______, _______, _______, _______, UK_F, UK_G, UK_C, UK_R, UK_L },
+ { UK_A, UK_O, UK_E, UK_U, UK_I, _______, _______, _______, _______, _______, UK_D, UK_H, UK_T, UK_N, UK_S },
+ { _SCLSH, _Q_NB, _J_SY, UK_K, _X_NAV, _______, _______, _______, _______, _______, _B_NAV, UK_M, _W_SY, _V_NB, _Z_SFT },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
+ },
+
+/* QWERTY _QW
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------------------------------------------------------------------------------------------------------------------------------------|
+ * | Q | W | E | R | T | | | | | | Y | U | I | O | P |
+ * |--------------------------------------------------------------------------------------------------------------------------------------|
+ * | A | S | D | F | G | | | | | | H | J | K | L | ; |
+ * |--------------------------------------------------------------------------------------------------------------------------------------|
+ * | Z | X | C | V | B | | | | | | N | M | , | . | / |
+ * | SHIFT | NUMBER | SYMBOL | | NAV | | | | | | NAV | | SYMBOL | FUNC | SHIFT |
+ * |--------------------------------------------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | |
+ * |--------------------------------------------------------------------------------------------------------------------------------------|
+ * | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | | | | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT |
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ */
+ [_QW] = {
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, UK_Q, UK_W, UK_F, UK_P, UK_G, _______, _______, _______, UK_J, UK_L, UK_U, UK_Y, UK_SCLN, _______ },
- { _______, UK_A, UK_R, UK_S, UK_T, UK_D, _______, _______, _______, UK_H, UK_N, UK_E, UK_I, UK_O, UK_ENT },
- { _______, _Z_SFT, _X_NB, _C_SY, UK_V, _B_NAV, _______, _______, _______, _K_NAV, UK_M, _COM_SY, _DOT_NB, _SLSH, _______ },
- { UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, _TERM, UK_SPC, UK_LCTL, UK_DEL , UK_LALT, UK_BSPC, UK_RGUI, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT },
+ { UK_Q, UK_W, UK_E, UK_R, UK_T, _______, _______, _______, _______, _______, UK_Y, UK_U, UK_I, UK_O, UK_P },
+ { UK_A, UK_S, UK_D, UK_F, UK_G, _______, _______, _______, _______, _______, UK_H, UK_J, UK_K, UK_L, UK_SCLN },
+ { _Z_SFT, _X_NB, _C_SY, UK_V, _B_NAV, _______, _______, _______, _______, _______, _N_NAV, UK_M, _COM_SY, _DOT_NB, _SLSH },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
},
/* Numbers _NB
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | | | F7 | F8 | F9 | F10 | | | | | 7 | 8 | 9 | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | | F4 | F5 | F6 | F11 | | | | | 4 | 5 | 6 | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
- * | | | F1 | F2 | F3 | F12 | | | | | 1 | 2 | 3 | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------+--------|
- * | | | | | | | | | | | 0 | 0 | . | | |
+ * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | | F7 | F8 | F9 | F10 | | | | | | | 7 | 8 | 9 | |
+ * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F4 | F5 | F6 | F11 | | | | | | | 4 | 5 | 6 | |
+ * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | | F1 | F2 | F3 | F12 | | | | | | 0 | 1 | 2 | 3 | . |
+ * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | | | | | | | | | | | | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[_NB] = {
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, _______, UK_7, UK_8, UK_9, _______, _______ },
- { _______, _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, _______, UK_4, UK_5, UK_6, _______, _______ },
- { _______, _______, _F1_NB, UK_F2, UK_F3, UK_F12, _______, _______, _______, _______, UK_1, UK_2, _3_NB, _______, _______ },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, UK_0, UK_0, UK_DOT, _______, _______ },
+ { _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, _______, _______, _______, UK_7, UK_8, UK_9, _______ },
+ { _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, _______, _______, _______, UK_4, UK_5, UK_6, _______ },
+ { _______, _F1_NB, UK_F2, UK_F3, UK_F12, _______, _______, _______, _______, _______, UK_0, UK_1, UK_2, _3_NB, UK_DOT },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
},
-/* Symbols _SYL and _SYR - For some reason, combining this into the same layer causes problems.
+/* Symbols _SY
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | ! | £ | _ | - | ~ | | | | \ | { | } | / | # | |
+ * | ! | £ | _ | - | ~ | | | | | | \ | { | } | / | # |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | $ | % | + | = | | | | | " | ( | ) | ' | @ | |
+ * | $ | % | + | = | | | | | | | " | ( | ) | ' | @ |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | ^ | & | * | | | | | | | < | [ | ] | > | ` | |
+ * | ^ | & | * | | | | | | | | | < | [ | ] | > | ` |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | | | | | | | | | | | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
- [_SYL] = {
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, _______ },
- { _______, UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT, _______ },
- { _______, UK_CIRC, UK_AMPR, _C_SY, UK_PIPE, _______, _______, _______, _______, UK_LABK, UK_LBRC, UK_RBRC, UK_RABK, UK_GRV, _______ },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- },
- [_SYR] = {
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, _______ },
- { _______, UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT, _______ },
- { _______, UK_CIRC, UK_AMPR, UK_ASTR, UK_PIPE, _______, _______, _______, _______, UK_LABK, UK_LBRC, _COM_SY, UK_RABK, UK_GRV, _______ },
+ [_SY] = {
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH },
+ { UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT },
+ { UK_CIRC, UK_AMPR, _AST_SY, UK_PIPE, _______, _______, _______, _______, _______, _______, UK_LABK, UK_LBRC, _COM_SY, UK_RABK, UK_GRV },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
},
/*
* Navigation
* .--------------------------------------------------------------------------------------------------------------------------------------.
- * | | | | | | | | | | | | | | | |
+ * | RESET | COLEMA | DVORAK | QWERTY | | | | | | | | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | Esc | Ctrl L | Up | Ctrl R | | | | | | PtSn | ScLk | Pause | | |
+ * | Esc | Ctrl L | Up | Ctrl R | | RGB HD | RGB HI | | | | | PtSn | ScLk | Pause | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | Tab | Left | Down | Right | | RGB SD | RGB SI | | | | | Insert | Home | PgUp | Term |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ShTab | Alt L | Shift | Alt R | | RGB VD | RGB VI | | | | | ScLk | End | PgDn | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | Tab | Left | Down | Right | | | | | | Insert | Home | PgUp | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | ShTab | Alt L | Shift | Alt R | | | | | | ScLk | End | PgDn | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | | | | | | | | | | | | | | RESET |
+ * | | | | | | RGB RMD| RGB MD | | | | | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[_NAV] = {
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, UK_ESC, _C_LEFT, UK_UP , _C_RGHT, _______, _______, _______, _______, _______, UK_PSCR, UK_SLCK, UK_PAUS, _______, _______ },
- { _______, UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, _______, _______, _______, _______, _______, UK_INS, UK_HOME, UK_PGUP, _______, _______ },
- { _______, _S_TAB, _A_LEFT, UK_LSFT, _A_RGHT, _B_NAV, _______, _______, _______, _K_NAV, UK_SLCK, UK_END, UK_PGDN, _______, _______ },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET },
+ { RESET, DF(_CM), DF(_DV), DF(_QW), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { UK_ESC, _C_LEFT, UK_UP , _C_RGHT, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, UK_PSCR, UK_SLCK, UK_PAUS, _______ },
+ { UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, UK_INS, UK_HOME, UK_PGUP, _TERM },
+ { _S_TAB, _A_LEFT, UK_LSFT, _A_RGHT, _B_NAV, RGB_VAD, RGB_VAI, _______, _______, _______, _K_NAV, UK_SLCK, UK_END, UK_PGDN, _______ },
+ { _______, _______, _______, _______, _______, RGB_RMOD,RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______ }
},
};
@@ -162,50 +215,74 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
return MACRO_NONE;
};
-bool CTRLDOWN = false;
-bool ALTDOWN = false;
-bool WINDOWN = false;
-bool SHIFTDOWN = false;
-bool TERMINALOPEN = false;
+bool lightsOn = true;
+int keyPresses = 0;
+int effect = 0;
+uint32_t key_timer;
+
+void resetCounts(void) {
+ effect++;
+ keyPresses = 0;
+ key_timer = timer_read32();
+}
void matrix_scan_user(void) {
- if (TERMINALOPEN) {
- rgblight_effect_rainbow_swirl(128);
- } else if (SHIFTDOWN) {
- rgblight_effect_breathing(3);
- } else if (CTRLDOWN) {
- rgblight_effect_knight(3);
- } else if (WINDOWN) {
- rgblight_effect_snake(3);
- } else {
+ if (!lightsOn) {
rgblight_setrgb(0, 0, 0);
+ return;
}
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case UK_LGUI:
- case UK_RGUI:
- WINDOWN = record->event.pressed;
- TERMINALOPEN = false;
+ if (timer_elapsed32(key_timer) > 60000) {
+ resetCounts();
+ }
+ switch (effect) {
+ case 0:
+ rgblight_effect_breathing(3);
break;
- case UK_LCTL:
- case UK_RCTL:
- CTRLDOWN = record->event.pressed;
+ case 1:
+ rgblight_effect_knight(3);
break;
- case UK_LSFT:
- case UK_RSFT:
- SHIFTDOWN = record->event.pressed;
+ case 2:
+ rgblight_effect_rainbow_swirl(128);
break;
- case UK_LALT:
- case UK_RALT:
- ALTDOWN = record-> event.pressed;
+ case 3:
+ rgblight_effect_snake(30);
break;
- case _TERM:
- if (record->event.pressed) {
- TERMINALOPEN = !TERMINALOPEN;
- }
+ case 4:
+ rgblight_effect_rainbow_swirl(128);
+ break;
+ case 5:
+ rgblight_effect_rainbow_mood(128);
+ break;
+ case 6:
+ rgblight_effect_christmas();
+ break;
+ case 7:
+ rgblight_effect_rgbtest();
+ break;
+ default:
+ effect = 0;
break;
}
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!record->event.pressed) return true;
+ if (keycode == L_SB) {
+ lightsOn = !lightsOn;
+ if (!lightsOn) {
+ keyPresses = 0;
+ } else {
+ resetCounts();
+ }
+ return true;
+ }
+ if (keycode == L_NEXT) {
+ resetCounts();
+ return true;
+ }
+ keyPresses++;
+ if (keyPresses > 100) {
+ resetCounts();
+ }
return true;
}
diff --git a/keyboards/zen/config.h b/keyboards/zen/config.h
index f8f8bbf332..4478062eb0 100644
--- a/keyboards/zen/config.h
+++ b/keyboards/zen/config.h
@@ -26,4 +26,6 @@ along with this program. If not, see .
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 16
-#define TAPPING_TERM 100
\ No newline at end of file
+#ifndef TAPPING_TERM
+#define TAPPING_TERM 100
+#endif
diff --git a/keyboards/zen/keymaps/333fred/config.h b/keyboards/zen/keymaps/333fred/config.h
new file mode 100644
index 0000000000..1634f368cc
--- /dev/null
+++ b/keyboards/zen/keymaps/333fred/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2018 Fredric Silberberg
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+
+/* Select hand configuration */
+//#define MASTER_LEFT
+#define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 16
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 150
diff --git a/keyboards/zen/keymaps/333fred/keymap.c b/keyboards/zen/keymaps/333fred/keymap.c
new file mode 100644
index 0000000000..5332062e04
--- /dev/null
+++ b/keyboards/zen/keymaps/333fred/keymap.c
@@ -0,0 +1,129 @@
+#include QMK_KEYBOARD_H
+#include "333fred.h"
+
+extern keymap_config_t keymap_config;
+
+enum custom_macros {
+ DLEFT,
+ DRIGHT,
+ PSCREEN_APP
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |SHIFT |
+ * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------|
+ * | Ctrl | F4 | F5 | GUI | Alt | Bksp |Lwr/VM||Enter|Space | NAV | - | = | Alt | Del |
+ * `------------------------------------------------''-----------------------------------------------'
+ */
+[BASE] = KEYMAP( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, \
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ OSM(MOD_LSFT), LCTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM(MOD_RSFT) , \
+ KC_LCTL, KC_F4, KC_F5, KC_LGUI, KC_LALT, KC_BSPC, TD(TD_SYM_VIM), KC_ENT, KC_SPACE, OSL(VIM), KC_MINS, KC_EQL, KC_RALT, KC_DEL \
+),
+
+/* Symbols
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | Caps | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | ! | @ | ( | ) | | | | 7 | 8 | 9 | * | ) | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | # | $ | { | } | ` | | 4 | 5 | 6 | + | } | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | APscr| % | ^ | [ | ] | ~ | | 1 | 2 | 3 | \ | Vol- | Vol+ |
+ * |------+------+------+------+------+------+------..------+------+------+------+------+------+------|
+ * | Pscr | | RESET| | | GAME | || | 0 | . | = | Prev | Next | Play |
+ * `------------------------------------------------- -------------------------------------------------'
+ */
+[SYMB] = KEYMAP( \
+ KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, \
+ _______, KC_EXLM, KC_AT, KC_LPRN, KC_RPRN, KC_PIPE, KC_7, KC_8, KC_9, KC_ASTR, KC_RPRN, KC_F12, \
+ _______, KC_HASH, KC_DLR, KC_LCBR, KC_RCBR, KC_GRV, KC_4, KC_5, KC_6, KC_PLUS, KC_RCBR, KC_PIPE, \
+ M(PSCREEN_APP), KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_1, KC_2, KC_3, KC_BSLS, KC_VOLD, KC_VOLU, \
+ KC_PSCR, _______, RESET, _______, _______, TO(GAME), _______, _______, KC_0, KC_DOT, KC_EQL, KC_MPRV, KC_MNXT, KC_MPLY \
+),
+
+/* Vim Movement
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | | | | | | | | | | | | RESET| |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |RGBSAI|RGBVAI|RGBSAD| LSFT | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | DLeft|DRight| LCTRL| LGUI | | | Left | Down | Up | Right| | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |RGBHUD|RGBVAD|RGBHUI| | | | | | | | | |
+ * |------+------+------+------+------+------+------..------+------+------+------+------+------+------|
+ * | | | | | | | || | | | | | | |
+ * `------------------------------------------------..------------------------------------------------'
+ */
+[VIM] = KEYMAP( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, \
+ _______, RGB_SAI, RGB_VAI, RGB_SAD, KC_LSFT, _______, _______, _______, _______, _______, _______, _______, \
+ _______, M(DLEFT), M(DRIGHT), KC_LCTL, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \
+ _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* Gaming mode (Raise)
+ * All one-shot mods are disabled on this layer
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | ESC | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | CTRL | | | | F | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | | | | | | | | | | | GUI |
+ * |------+------+------+------+------+------+------..------+------+------+------+------+------+------|
+ * | Enter| | Lock | Bksp | Alt | Spc | RESET|| | Lower| Left | Up | Down | Right|QWERTY|
+ * `------------------------------------------------..-----------------------------------------------'
+ */
+[GAME] = KEYMAP( \
+ KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_LSFT, KC_Z, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LGUI, \
+ KC_ENT, _______, KC_LOCK, KC_BSPC, KC_F5, KC_LALT, KC_SPC, OSL(SYMB), KC_F6, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TO(BASE) \
+)
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch(id) {
+ case DLEFT:
+ if (record->event.pressed) { // Windows move desktop left
+ return MACRO(D(LCTL), D(LGUI), T(LEFT), U(LGUI), U(LCTL), END);
+ }
+ break;
+ case DRIGHT:
+ if (record->event.pressed) { // Windows move desktop right
+ return MACRO(D(LCTL), D(LGUI), T(RIGHT), U(LGUI), U(LCTL), END);
+ }
+ break;
+ case PSCREEN_APP:
+ if (record->event.pressed) {
+ return MACRO(D(LALT), T(PSCR), U(LALT), END);
+ }
+ break;
+ }
+ return MACRO_NONE;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ tap_dance_process_record(keycode);
+ return true;
+}
diff --git a/keyboards/zen/keymaps/333fred/rules.mk b/keyboards/zen/keymaps/333fred/rules.mk
new file mode 100644
index 0000000000..38b7155504
--- /dev/null
+++ b/keyboards/zen/keymaps/333fred/rules.mk
@@ -0,0 +1,7 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = no
+NKRO_ENABLE = yes
+KEY_LOCK_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+CONSOLE_ENABLE = no
+EXTRAFLAGS += -flto
diff --git a/layouts/community/ergodox/333fred/config.h b/layouts/community/ergodox/333fred/config.h
index d886bf8217..82255e05ec 100644
--- a/layouts/community/ergodox/333fred/config.h
+++ b/layouts/community/ergodox/333fred/config.h
@@ -1,11 +1,7 @@
-#ifndef CONFIG_H_
-#define CONFIG_H_
+#pragma once
#include QMK_KEYBOARD_CONFIG_H
#include "333fred_config.h"
#undef TAPPING_TERM
#define TAPPING_TERM 200
-
-
-#endif
diff --git a/layouts/community/ergodox/333fred/keymap.c b/layouts/community/ergodox/333fred/keymap.c
index 479e4702c2..d7728a5bd4 100644
--- a/layouts/community/ergodox/333fred/keymap.c
+++ b/layouts/community/ergodox/333fred/keymap.c
@@ -363,15 +363,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-
// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
+void matrix_scan_user_keyboard(void) {
ergodox_board_led_on();
ergodox_led_all_on();
-};
+}
diff --git a/layouts/community/ergodox/333fred/rules.mk b/layouts/community/ergodox/333fred/rules.mk
index 2a522112e5..1549bcfc84 100644
--- a/layouts/community/ergodox/333fred/rules.mk
+++ b/layouts/community/ergodox/333fred/rules.mk
@@ -5,5 +5,3 @@ NKRO_ENABLE = yes
KEY_LOCK_ENABLE = yes
TAP_DANCE_ENABLE = yes
CONSOLE_ENABLE = no
-
-
diff --git a/layouts/community/ortho_4x12/xyverz/config.h b/layouts/community/ortho_4x12/xyverz/config.h
index d2c3297677..0fa89d6c7b 100644
--- a/layouts/community/ortho_4x12/xyverz/config.h
+++ b/layouts/community/ortho_4x12/xyverz/config.h
@@ -15,12 +15,11 @@
#define RGBLED_NUM 12
#elif defined(KEYBOARD_lets_split_rev2)
#define RGBLED_NUM 8
+#elif defined(KEYBOARD_jj40)
+ #define RGBLED_NUM 5
#else
#define RGBLED_NUM 1
#endif
-#ifdef KEYBOARD_jj40
- #define RGBLED_NUM 5
-#endif
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 8
diff --git a/layouts/community/ortho_5x12/xyverz/keymap.c b/layouts/community/ortho_5x12/xyverz/keymap.c
index a0f1274d01..23a456e6d6 100644
--- a/layouts/community/ortho_5x12/xyverz/keymap.c
+++ b/layouts/community/ortho_5x12/xyverz/keymap.c
@@ -175,6 +175,16 @@ void persistent_default_layer_set(uint16_t default_layer) {
default_layer_set(default_layer);
}
+void matrix_init_user(void) {
+#ifdef BOOTLOADER_CATERINA
+ // This will disable the red LEDs on the ProMicros
+ DDRD &= ~(1<<5);
+ PORTD &= ~(1<<5);
+ DDRB &= ~(1<<0);
+ PORTB &= ~(1<<0);
+#endif
+};
+
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
diff --git a/layouts/community/ortho_5x12/xyverz/rules.mk b/layouts/community/ortho_5x12/xyverz/rules.mk
index 44bbc61e5e..63c544ad57 100644
--- a/layouts/community/ortho_5x12/xyverz/rules.mk
+++ b/layouts/community/ortho_5x12/xyverz/rules.mk
@@ -1,5 +1,5 @@
# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
+# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
@@ -7,12 +7,18 @@ MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+ifneq ("$(KEYBOARD)","nyquist")
+ RGBLIGHT_ENABLE = yes
+ BACKLIGHT_ENABLE = yes
+else
+ RGBLIGHT_ENABLE = no
+ BACKLIGHT_ENABLE = no
+endif
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/message.mk b/message.mk
index 1401698ddc..30fd0b9db7 100644
--- a/message.mk
+++ b/message.mk
@@ -55,7 +55,7 @@ MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
MSG_CREATING_LIBRARY = Creating library:
MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
- Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\
+ Some git sub-modules are out of date or modified, please consider running:$(BOLD)\n\
make git-submodule\n\
You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\
or if you have modified the ChibiOS libraries yourself. \n\n$(NO_COLOR)
diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h
index 1d1969a6a8..de47103cb9 100644
--- a/quantum/keymap_extras/keymap_uk.h
+++ b/quantum/keymap_extras/keymap_uk.h
@@ -132,6 +132,25 @@
#define UK_ASTR KC_ASTR
#define UK_QUOT KC_QUOT
+#define UK_P1 KC_P1
+#define UK_P2 KC_P2
+#define UK_P3 KC_P3
+#define UK_P4 KC_P4
+#define UK_P5 KC_P5
+#define UK_P6 KC_P6
+#define UK_P7 KC_P7
+#define UK_P8 KC_P8
+#define UK_P9 KC_P9
+#define UK_P0 KC_P0
+#define UK_PDOT KC_PDOT
+#define UK_PCMM KC_PCMM
+#define UK_PSLS KC_PSLS
+#define UK_PAST KC_PAST
+#define UK_PMNS KC_PMNS
+#define UK_PPLS KC_PPLS
+#define UK_PEQL KC_PEQL
+#define UK_PENT KC_PENT
+
#define UK_TAB KC_TAB
#define UK_ENT KC_ENT
#define UK_LSFT KC_LSFT
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 9c6ed3330e..ab47fa48ff 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -147,8 +147,10 @@ void reset_keyboard(void) {
#if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
process_midi_all_notes_off();
#endif
-#if defined(AUDIO_ENABLE) && !defined(NO_MUSIC_MODE)
- music_all_notes_off();
+#ifdef AUDIO_ENABLE
+ #ifndef NO_MUSIC_MODE
+ music_all_notes_off();
+ #endif
uint16_t timer_start = timer_read();
PLAY_SONG(goodbye_song);
shutdown_user();
@@ -156,6 +158,7 @@ void reset_keyboard(void) {
wait_ms(1);
stop_all_notes();
#else
+ shutdown_user();
wait_ms(250);
#endif
// this is also done later in bootloader.c - not sure if it's neccesary here
@@ -931,7 +934,7 @@ uint8_t rgb_matrix_task_counter = 0;
#endif
void matrix_scan_quantum() {
- #if defined(AUDIO_ENABLE)
+ #if defined(AUDIO_ENABLE) && !defined(NO_MUSIC_MODE)
matrix_scan_music();
#endif
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 855a51c1b8..1db9846f04 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -53,6 +53,7 @@
#include
#include "print.h"
#include "send_string_keycodes.h"
+#include "suspend.h"
extern uint32_t default_layer_state;
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index aa70cbd9ec..4919ae4abf 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -247,7 +247,7 @@ void rgblight_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) {
rgblight_timer_disable();
#endif
} else if ((rgblight_config.mode >= 2 && rgblight_config.mode <= 24) ||
- rgblight_config.mode == 35 ) {
+ rgblight_config.mode == 35 || rgblight_config.mode == 36) {
// MODE 2-5, breathing
// MODE 6-8, rainbow mood
// MODE 9-14, rainbow swirl
@@ -255,6 +255,7 @@ void rgblight_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) {
// MODE 21-23, knight
// MODE 24, xmas
// MODE 35 RGB test
+ // MODE 36, alterating
#ifdef RGBLIGHT_ANIMATIONS
rgblight_timer_enable();
@@ -591,6 +592,8 @@ void rgblight_task(void) {
} else if (rgblight_config.mode == 35) {
// mode = 35, RGB test
rgblight_effect_rgbtest();
+ } else if (rgblight_config.mode == 36){
+ rgblight_effect_alternating();
}
}
}
@@ -772,4 +775,25 @@ void rgblight_effect_rgbtest(void) {
pos = (pos + 1) % 3;
}
+void rgblight_effect_alternating(void){
+ static uint16_t last_timer = 0;
+ static uint16_t pos = 0;
+ if (timer_elapsed(last_timer) < 500) {
+ return;
+ }
+ last_timer = timer_read();
+
+ for(int i = 0; i=RGBLED_NUM/2 && !pos){
+ rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, i);
+ }else{
+ rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, 0, i);
+ }
+ }
+ rgblight_set();
+ pos = (pos + 1) % 2;
+}
+
#endif /* RGBLIGHT_ANIMATIONS */
diff --git a/quantum/rgblight.h b/quantum/rgblight.h
index 0f7b5ffb56..ba010dfae3 100644
--- a/quantum/rgblight.h
+++ b/quantum/rgblight.h
@@ -17,7 +17,7 @@
#define RGBLIGHT_H
#ifdef RGBLIGHT_ANIMATIONS
- #define RGBLIGHT_MODES 35
+ #define RGBLIGHT_MODES 36
#else
#define RGBLIGHT_MODES 1
#endif
@@ -166,5 +166,6 @@ void rgblight_effect_snake(uint8_t interval);
void rgblight_effect_knight(uint8_t interval);
void rgblight_effect_christmas(void);
void rgblight_effect_rgbtest(void);
+void rgblight_effect_alternating(void);
#endif
diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h
index 6715b22cbc..caa72af0c2 100644
--- a/quantum/template/avr/config.h
+++ b/quantum/template/avr/config.h
@@ -52,6 +52,14 @@ along with this program. If not, see .
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCING_DELAY 5
diff --git a/quantum/template/base/readme.md b/quantum/template/avr/readme.md
similarity index 100%
rename from quantum/template/base/readme.md
rename to quantum/template/avr/readme.md
diff --git a/quantum/template/avr/rules.mk b/quantum/template/avr/rules.mk
index d567544c72..92f3a03a92 100644
--- a/quantum/template/avr/rules.mk
+++ b/quantum/template/avr/rules.mk
@@ -61,6 +61,7 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/quantum/template/avr/template.h b/quantum/template/avr/template.h
index c3924ee71f..031efc9529 100644
--- a/quantum/template/avr/template.h
+++ b/quantum/template/avr/template.h
@@ -20,15 +20,17 @@
// This a shortcut to help you visually see your layout.
// The following is an example using the Planck MIT layout
-// The first section contains all of the arguments
-// The second converts the arguments into a two-dimensional array
+// The first section contains all of the arguments representing the physical
+// layout of the board and position of the keys
+// The second converts the arguments into a two-dimensional array which
+// represents the switch matrix.
#define LAYOUT( \
- k00, k01, k02, \
- k10, k11 \
+ K00, K01, K02, \
+ K10, K11 \
) \
{ \
- { k00, k01, k02 }, \
- { k10, KC_NO, k11 }, \
+ { K00, K01, K02 }, \
+ { K10, KC_NO, K11 }, \
}
#endif
diff --git a/quantum/template/ps2avrgb/readme.md b/quantum/template/ps2avrgb/readme.md
new file mode 100644
index 0000000000..1dcbe6e755
--- /dev/null
+++ b/quantum/template/ps2avrgb/readme.md
@@ -0,0 +1,44 @@
+# %KEYBOARD%
+
+
+
+A short description of the keyboard/project
+
+Keyboard Maintainer: [You](https://github.com/yourusername)
+Hardware Supported: The PCBs, controllers supported
+Hardware Availability: links to where you can find this hardware
+
+Make example for this keyboard (after setting up your build environment):
+
+ make %KEYBOARD%:default
+
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/users/333fred/333fred.c b/users/333fred/333fred.c
index ef2d741e5b..12ee9e7d7d 100644
--- a/users/333fred/333fred.c
+++ b/users/333fred/333fred.c
@@ -34,6 +34,7 @@ void tap_dance_layer_finished(qk_tap_dance_state_t *state, void *user_data) {
break;
case DOUBLE:
layer_on(VIM);
+ break;
}
}
@@ -61,3 +62,26 @@ void tap_dance_process_record(uint16_t keycode) {
tap_dance_active = false;
}
}
+
+__attribute__ ((weak))
+void matrix_init_rgb(void) {}
+
+__attribute__ ((weak))
+void layer_state_set_rgb(uint32_t state) {}
+
+__attribute__ ((weak))
+void matrix_scan_user_keyboard(void) {}
+
+void matrix_scan_user() {
+ static bool first_run = true;
+ if (first_run) {
+ first_run = false;
+ matrix_init_rgb();
+ }
+ matrix_scan_user_keyboard();
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+ layer_state_set_rgb(state);
+ return state;
+}
diff --git a/users/333fred/333fred.h b/users/333fred/333fred.h
index 4a0462b7a2..8599198a57 100644
--- a/users/333fred/333fred.h
+++ b/users/333fred/333fred.h
@@ -1,5 +1,4 @@
-#ifndef FRED_333
-#define FRED_333
+#pragma once
#include "quantum.h"
@@ -18,5 +17,3 @@ enum tap_dance_declarations {
void tap_dance_layer_finished(qk_tap_dance_state_t*, void*);
void tap_dance_layer_reset(qk_tap_dance_state_t*, void*);
void tap_dance_process_record(uint16_t);
-
-#endif
diff --git a/users/333fred/333fred_config.h b/users/333fred/333fred_config.h
index f796abc095..7c637d8d36 100644
--- a/users/333fred/333fred_config.h
+++ b/users/333fred/333fred_config.h
@@ -1,7 +1,4 @@
-#ifndef FRED333_CONFIG
-#define FRED333_CONFIG
+#pragma once
#define PREVENT_STUCK_MODIFIERS
#define PERMISSIVE_HOLD
-
-#endif
diff --git a/users/333fred/rgb.c b/users/333fred/rgb.c
new file mode 100644
index 0000000000..a3dfd905cc
--- /dev/null
+++ b/users/333fred/rgb.c
@@ -0,0 +1,28 @@
+#include "quantum.h"
+#include "333fred.h"
+
+void matrix_init_rgb(void) {
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom(270, 255, 20);
+}
+
+void layer_state_set_rgb(uint32_t state) {
+ switch (biton32(state)) {
+ case BASE:
+ // purple
+ rgblight_sethsv_noeeprom(270, 255, 20);
+ break;
+ case SYMB:
+ // blue
+ rgblight_sethsv_noeeprom(240, 255, 20);
+ break;
+ case VIM:
+ // green
+ rgblight_sethsv_noeeprom(120, 255, 20);
+ break;
+ case GAME:
+ // red
+ rgblight_sethsv_noeeprom(0, 255, 20);
+ break;
+ }
+}
diff --git a/users/333fred/rules.mk b/users/333fred/rules.mk
index 3160ac2e69..0e2cc2588c 100644
--- a/users/333fred/rules.mk
+++ b/users/333fred/rules.mk
@@ -1,2 +1,5 @@
-
SRC += 333fred.c
+
+ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
+ SRC += rgb.c
+endif
diff --git a/users/mtdjr/mtdjr.c b/users/mtdjr/mtdjr.c
index ac5c5911ff..d8d6871a17 100644
--- a/users/mtdjr/mtdjr.c
+++ b/users/mtdjr/mtdjr.c
@@ -137,21 +137,27 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
};
uint32_t layer_state_set_user(uint32_t state) {
-#ifdef RGBLIGHT_ENABLE
switch (biton32(state)) {
case _RAISE:
+ #ifdef RGBLIGHT_ENABLE
rgblight_sethsv_noeeprom (240, 255, 255);
+ #endif
break;
case _LOWER:
+ #ifdef RGBLIGHT_ENABLE
rgblight_sethsv_noeeprom (0, 255, 255);
+ #endif
break;
case _ADJUST:
+ #ifdef RGBLIGHT_ENABLE
rgblight_sethsv_noeeprom (0, 0, 255);
+ #endif
break;
default:
+ #ifdef RGBLIGHT_ENABLE
rgblight_sethsv_noeeprom (RGB_HUE, 255, 255);
+ #endif
break;
}
return state;
-#endif
}
diff --git a/util/pro_micro_ISP_B6_10.hex b/util/pro_micro_ISP_B6_10.hex
new file mode 100644
index 0000000000..cf61bebb94
--- /dev/null
+++ b/util/pro_micro_ISP_B6_10.hex
@@ -0,0 +1,362 @@
+:10000000BDC00000E3C00000E1C00000DFC0000090
+:10001000DDC00000DBC00000D9C00000D7C0000078
+:10002000D5C00000D3C000003AC70000B1C700002F
+:10003000CDC00000CBC00000C9C00000C7C0000098
+:10004000C5C00000C3C00000C1C00000BFC00000A8
+:10005000BDC00000BBC00000B9C000007FC60000EA
+:10006000B5C00000B3C00000B1C00000AFC00000C8
+:10007000ADC00000ABC00000A9C00000A7C00000D8
+:10008000A5C00000A3C00000A1C000009FC00000E8
+:100090009DC000009BC0000099C0000097C00000F8
+:1000A00095C0000093C0000091C000000001000056
+:1000B0005D0112000200001A014300030000160156
+:1000C0000401030904FC001802030904E4001603F8
+:1000D000030904D6000C0C03310032003300340055
+:1000E0003500000016035500530042002000530065
+:1000F00065007200690061006C0000001803540084
+:10010000650065006E007300790064007500690089
+:100110006E006F000000040309040902430002019D
+:1001200000C0320904000001020201000524001091
+:10013000010524010001042402060524060001072C
+:1001400005820308004009040100020A00000007BC
+:100150000503024000000705840240000012010070
+:100160000202000020C01683040001010203010006
+:1001700001C10201803601813600110B11241FBE1E
+:10018000CFEFDAE0DEBFCDBF11E0A0E0B1E0EAE5FD
+:10019000F6E102C005900D92A232B107D9F722E034
+:1001A000A2E2B1E001C01D92A935B207E1F710E06B
+:1001B000CEEBD0E004C02197FE010E94250BCD3B81
+:1001C000D107C9F70E942D090C942B0B19CFDC0124
+:1001D000ED91FC910190F081E02D09948EBD00001D
+:1001E0000DB407FEFDCF8EB508950F931F930FB684
+:1001F000F8948091440290914502A0914602B091FA
+:1002000047020FBE409122015091230160912401C9
+:10021000709125018C019D01041B150B260B370BDA
+:100220000832110521053105F0F0809322019093E9
+:100230002301A0932401B09325012091010180EEB8
+:10024000820F813A28F090910001919590930001DE
+:1002500080910001820F80930101529A803810F43E
+:100260005A9801C05A9A1F910F91089590912601B2
+:10027000882319F0911103C004C0911102C02E9A75
+:1002800001C02E98809180008F7D8093800008951A
+:100290000F931F93CF93DF938B01EC01DD27FE01BA
+:1002A0009ED46EE170E080E090E098D5FE019DD490
+:1002B0006EE170E080E090E091D50150110978F78F
+:1002C000DF91CF911F910F91089540E05BE460E0D2
+:1002D00070E08FE492E00E94AA0A509A62E070E017
+:1002E00085E090E0D5DF519A62E070E086E090E032
+:1002F000CFDF529A62E070E087E090E0C9CF8823B8
+:1003000011F0589A01C0589884B58F7D84BD089526
+:10031000CF93DF9300D01F92CDB7DEB72B834A83F4
+:1003200069835CDF6981862F59DF4A81842F56DF1C
+:100330002B81822F0F900F900F90DF91CF914ECF96
+:1003400020913A012093270180913B01809328015D
+:1003500080913C018093290180913D0180932A0185
+:1003600080913E0180932B0180913F0180932C016D
+:100370008091400180932D018091410180932E0155
+:100380008091420180932F018091440190E0982F49
+:10039000882730914501830F911D909331018093FF
+:1003A00030018091460190E0982F882730914701D5
+:1003B000830F911D90933301809332018091480106
+:1003C00090E0982F882730914901830F911D9093D9
+:1003D00035018093340180914A0190E0A0E0B0E0C3
+:1003E000BA2FA92F982F882730914B01830F911D89
+:1003F000A11DB11DDC019927882740914C0150E0D7
+:10040000542F4427052E000C660B770B840F951F85
+:10041000A61FB71F30914D01830F911DA11DB11D66
+:100420008093360190933701A0933801B09339013E
+:1004300081E0203E08F480E080932601089581E069
+:1004400015DF269A6DD380914202882381F0813096
+:1004500051F48DB3809340029DB380914102809509
+:1004600089238DBB04C08FB7F8948093400283E545
+:100470008CBD1DBC299864E170E080E090E0AED4B2
+:1004800080E0F4DE80E991E00197F1F781E0EEDEB3
+:1004900062E370E080E090E0A1D420E040E063E51A
+:1004A0008CEA36DF81E090E090933D0280933C023D
+:1004B000089541D322982A982198299880E0D6DE81
+:1004C00026982E98EDE7F0E080818F7D8083109252
+:1004D0003D0210923C020895242F880F880F880F48
+:1004E000462F672F805C14CFCF93DF9300D0CDB71A
+:1004F000DEB7482F692F80E090E049836A83FFDEF2
+:1005000020E049816A818CE403DF6EE170E080E0E5
+:1005100090E064D481E090E00F900F90DF91CF9154
+:10052000EECE209132013091330180913A029091C8
+:100530003B022032310511F4807F089520343105CB
+:1005400011F4807E08952038310511F4807C0895DF
+:100550002115314009F480780895CF92DF92EF920F
+:10056000FF920F931F93CF93DF936C01DADF8C011F
+:10057000C0E0D0E0CC15DD0554F5D3DF7C010817D1
+:10058000190721F0C801B0DFCCDF7C01FE01E65C79
+:10059000FE4F60913A0270913B02408180E09CDF07
+:1005A0002296FE01E75CFE4F60913A0270913B0299
+:1005B000408181E091DF20913A0230913B022F5F30
+:1005C0003F4F30933B0220933A028701D3CFC801BB
+:1005D0008BDF80E1DF91CF911F910F91FF90EF9022
+:1005E000DF90CF900895462F880F880F880F20E066
+:1005F000672F805E8DCE0F931F93CF93DF938C0177
+:10060000C0E0D0E0C017D10704F560913A027091C4
+:100610003B0280E0E8DF682F8FE492E0D8DD609154
+:100620003A0270913B0281E0DEDF682F8FE492E0B6
+:10063000CEDD20913A0230913B022F5F3F4F309345
+:100640003B0220933A022296DDCF80E1DF91CF91E9
+:100650001F910F910895EF92FF920F931F93CF93E5
+:10066000DF937C0100913A0210913B02000F111FB1
+:10067000E801CE01801B910B8E159F055CF42FEFD6
+:100680004C2F6D2F80EA44DE682F8FE492E09FDDCF
+:100690002196EFCF80E1DF91CF911F910F91FF90D5
+:1006A000EF9008958FE492E0F2D5892BD9F38FE48F
+:1006B00092E026C608950F931F93CF93DF938C018A
+:1006C000CAE3D1E0CE018A539140801791071CF410
+:1006D000E9DF8993F7CFDF91CF911F910F910895B3
+:1006E000EF92FF920F931F93CF93DF93EC018B0157
+:1006F000CB01E1DF80E090E002DE8AE3E82E81E0DA
+:10070000F82E0C0F1D1FC017D10771F0F7012191B2
+:100710007F014C2F6D2F80ECFBDD6DE270E080E0FF
+:1007200090E05CD32196EFCF81E090E0E8DD80E1BE
+:10073000DF91CF911F910F91FF90EF9008950F934C
+:100740001F93CF93DF938C01C0913A02D0913B026B
+:1007500080913401909135018017910718F0CC0FEA
+:10076000DD1F0BC080913E0290913F020196909355
+:100770003F0280933E0281E10FC00132110540F03B
+:1007800060E270E0CE01ACDFA09600521109F5CF17
+:10079000B801CE01A5DF80E1DF91CF911F910F91CC
+:1007A000089580DF803231F464E18FE492E00FDD60
+:1007B00060E10AC080913E0290913F0201969093C1
+:1007C0003F0280933E0265E18FE492E000CDCF933B
+:1007D000C82F68DF803251F464E18FE492E0F7DCE7
+:1007E0006C2F8FE492E0F3DC60E10AC080913E025E
+:1007F00090913F02019690933F0280933E0265E103
+:100800008FE492E0CF91E3CC813859F020F4803826
+:1008100061F482E00BC0823831F0833931F483E532
+:1008200005C081E003C082E101C080E0D0CF84E058
+:1008300090E041DFEAE3F1E0238142816181808140
+:1008400067DDC5CFCF93DF93EC0135DF2BDF80323F
+:1008500041F464E18FE492E0BADCCE017EDE682FE1
+:100860000AC080913E0290913F02019690933F0210
+:1008700080933E0265E18FE492E0DF91CF91A7CCB7
+:10088000CF93DF930FDFC82FD0E0DC2FCC270ADF18
+:10089000C80FD11D07DF863421F4CE01DF91CF913F
+:1008A000D1CF8534B9F4CE014ADFC82FFBDE8032C8
+:1008B00031F464E18FE492E08ADC6C2F0CC080910B
+:1008C0003E0290913F02019690933F0280933E0238
+:1008D00065E101C061E18FE492E0DF91CF9177CCD7
+:1008E0000F931F93CF93DF93DDDEC82FDBDE082F3E
+:1008F000D9DE182FD7DE803259F080913E029091D8
+:100900003F02019690933F0280933E0265E115C03D
+:10091000D0E0DC2FCC27C00FD11D64E18FE492E042
+:1009200056DC163419F4CE0166DE06C0153419F40F
+:10093000CE0191DE01C081E1682F8FE492E0DF916A
+:10094000CF911F910F9143CCADDE803259F0809151
+:100950003E0290913F02019690933F0280933E02A7
+:1009600065E120C064E18FE492E031DC20E040E00A
+:1009700060E080E3CDDC682F8FE492E028DC20E0AB
+:1009800041E060E080E3C4DC682F8FE492E01FDC8C
+:1009900020E042E060E080E3BBDC682F8FE492E07F
+:1009A00016DC60E18FE492E012CC7CDE813509F444
+:1009B00077C0E0F4813409F460C050F4803309F466
+:1009C00040C0813309F442C0803209F07AC06FC060
+:1009D000853409F454C0803509F455C0823409F0D7
+:1009E00070C084E190E067DEABDC4CC0813609F476
+:1009F00053C0F0F4863509F452C0803609F44BC078
+:100A0000853509F05EC04EDE90E090933B02809306
+:100A10003A0248DE90E0982F882720913A023091E0
+:100A20003B02820F931F90933B0280933A022AC0AD
+:100A30008437A1F1853709F439C0843609F041C003
+:100A40001FCF10923F0210923E021CC02BDE80325C
+:100A500071F564E18FE492E0BADBE0914F02F0912E
+:100A600050020280F381E02D47E050E069E071E040
+:100A70008FE492E0099560E133C014DEC5CE85E0D5
+:100A800090E019DE8ECE80913C0290913D02892B40
+:100A9000C9F7D5DCF7CF06DE05DEF4CF21CFC7CE10
+:100AA00010923F0210923E0204DDECCF4DCF8091B8
+:100AB0003E0290913F02019690933F0280933E0246
+:100AC0000EC080913E0290913F02019690933F02AA
+:100AD00080933E02E7DD803211F462E101C065E1FE
+:100AE0008FE492E074CB80913C0290913D02892B7F
+:100AF00011F0589A01C0589884B58F7D84BD8091BB
+:100B00003E0290913F02892B11F0599A01C05998E9
+:100B10006CDB8FE492E0BBD3892B09F046CF0895BC
+:100B2000289A209A8CB580618CBD8CB580648CBD70
+:100B3000219A229A08958CB58F7B8CBD08951DBA99
+:100B4000109268001CBC10BE1FBA10927A0010925E
+:100B50006E0010926F00109271001092720010924D
+:100B6000C900ECEBF0E0108214B817B81AB81DB841
+:100B700010BA108215B818B81BB81EB811BA08956B
+:100B8000F894E1E6F0E020E82083108283E084BD61
+:100B900085BDEEE6F0E080818160808381E0809316
+:100BA000800092E090938100809390009093910058
+:100BB0009093C00094E09093C1008093C200809312
+:100BC000C3001092C40086E880937A0020937B00D3
+:100BD00010927E0010927D0040D178940895E93102
+:100BE00050F4EE0FE450FA4F0994E93120F4EE0F7F
+:100BF000E25DF94F09940895289A0895299A089575
+:100C00002A9A08952B9A08952F9A6AC0589A58C024
+:100C1000599A08955A9A08955B9A0895469A66C01B
+:100C2000479A6AC05E9A08955F9A6CC02C9A08959C
+:100C30002D9A4AC02E9A4EC08F9A08958E9A089582
+:100C40008D9A08958C9A0895899A0895889A08959E
+:100C50005C9A08955D9A0895769A08952898089563
+:100C6000299808952A9808952B9808952F9838C0A8
+:100C7000589826C0599808955A9808955B980895F1
+:100C8000469834C0479838C05E9808955F983AC037
+:100C90002C9808952D9818C02E981CC08F980895F0
+:100CA0008E9808958D9808958C9808958998089540
+:100CB000889808955C9808955D98089576980895A9
+:100CC000E4B5EF7DE4BD0895E0918000EF77E09317
+:100CD00080000895E0918000EF7DE093800008950A
+:100CE000E0918000E77FE09380000895E09190001C
+:100CF000EF77E09390000895E091C000EF77E093E4
+:100D0000C0000895E091C200E77FE093C20008951B
+:100D1000F89484B7877F84BF80916000806180935E
+:100D200060001092600080E29EE40197F1F781E09C
+:100D30008093E00080E28093D80080E69AEE0197ED
+:100D4000F1F7FDDE0C94003FFFCFF894F8DE80E66B
+:100D50009AEE0197F1F70C940000FFCF8F938FB7B5
+:100D60008F93809143028D5F8D37D0F4809343023F
+:100D7000809144028F5F80934402D8F080914502B5
+:100D80008F4F80934502A8F0809146028F4F809349
+:100D9000460278F0809147028F4F8093470209C046
+:100DA0008D5780934302809144028E5F809344026A
+:100DB00028F7809148028C5F8093480258F0809118
+:100DC00049028F4F8093490228F080914A028F4F49
+:100DD00080934A028F918FBF8F911895CF92DF92A7
+:100DE000EF92FF926B017C0119D09B01C114D104D9
+:100DF000E104F10471F012D0621B730B683E734082
+:100E0000A8F381E0C81AD108E108F10828513C4F45
+:100E1000EDCFFF90EF90DF90CF9008950FB6F8944C
+:100E200066B515B2709148028091490290914A02CC
+:100E30000FBE10FE05C06F3F19F07C5F8F4F9F4FB4
+:100E400011240024660F001C660F001C70290895F1
+:100E50008091E80080FFFCCF08958091D80087FF43
+:100E600002C085FF1BC081E08093D70080EA809399
+:100E7000D80082E189BD09B400FEFDCF80E98093EE
+:100E8000D8001092E00010925B0210925A02109269
+:100E900059021092E1008DE08093E20008951F92C4
+:100EA0000F920FB60F9211242F933F934F935F939E
+:100EB0006F937F938F939F93AF93BF93EF93FF9322
+:100EC0009091E1001092E10093FF11C01092E900AF
+:100ED00081E08093EB001092EC0082E28093ED00C1
+:100EE00088E08093F00010925B021092590292FF0A
+:100EF0001DC080915B028823C9F080914E02882337
+:100F000059F0815080934E02811106C084E0809395
+:100F1000E9008AE38093E80080914D02882331F054
+:100F2000815080934D02811101C0F2DE90FF0CC010
+:100F300080E18093E20010925B0281E080935A028C
+:100F400080EA8093D80019BC80915A02882379F0F6
+:100F500094FF0DC082E189BD09B400FEFDCF80E998
+:100F60008093D8008DE08093E20010925A02FF91A6
+:100F7000EF91BF91AF919F918F917F916F915F9111
+:100F80004F913F912F910F900FBE0F901F9018958A
+:100F90001F920F920FB60F921124EF92FF920F93B0
+:100FA0001F932F933F934F935F936F937F938F93F1
+:100FB0009F93AF93BF93CF93EF93FF931092E9006A
+:100FC0008091E80083FF30C1C091F1008091F10071
+:100FD000E090F100F090F1000091F1001091F1002B
+:100FE0002091F1003091F10092EF9093E80086306B
+:100FF00009F03FC086E0ECEAF0E0459155914E15CE
+:101000005F0511F0359615C0459155914017510770
+:1010100011F033960EC04591559184912F3F3105C3
+:1010200019F010F02FEF30E0281708F4822F3EEF70
+:1010300008C0815011F7F8C0891B3093E80088235D
+:10104000A9F09091E800292F2570D9F392FDEFC007
+:10105000982F813208F090E2292F222369F3FA01B8
+:1010600045914093F100AF012150F7CF903249F301
+:10107000DEC0853049F48EEF8093E800E9DE8E2DE6
+:1010800080688093E300D3C0893001F5C111CCC0E2
+:10109000E0925B021092590210924E028EEF809302
+:1010A000E80081E0EFE6F1E08093E900959190930C
+:1010B000EB00992331F095919093EC0095919093EA
+:1010C000ED008F5F853081F78EE1A9C0883049F44B
+:1010D000C03809F0A9C0BCDE80915B028093F100AA
+:1010E0007DC0813279F4C13A09F09EC0B1DEE2E000
+:1010F000F1E087E08E0F90819093F10031968E138E
+:10110000FACF6CC0803209F047C0C13209F08CC000
+:101110008091E80082FFFCCFE2E0F1E087E08E0FF3
+:101120009091F100908331968E13FACF8BEF8093DC
+:10113000E8008EEF8093E8003091020140910301B6
+:10114000809104012091050190E0A0E0B0E0DC0175
+:1011500099278827942B832BB22B86389105A105DC
+:10116000B10521F48FE080934D0261C0863991056D
+:10117000A105B10509F05BC084E08093E9009FEF11
+:101180008091EE00837039F09093E8008091E80040
+:1011900082FDFCCFF5CFD9DD823231F4C13209F0C6
+:1011A00043C0E092590204C0833221F4C132E1F518
+:1011B0004FDE14C0811116C04BDEC23851F40093CB
+:1011C000E9008091EB0085FB882780F91092E90007
+:1011D00001C080E08093F1001092F1008EEF8093C7
+:1011E000E80025C0982F9D7F9130F1F4C230E1F4E2
+:1011F000EF28D1F40F779FEF900F9630A8F49EEF71
+:101200009093E8000093E900833071F089E18093C6
+:10121000EB0081E090E001C0880F0A95EAF7809327
+:10122000EA001092EA0003C081E28093EB00FF9194
+:10123000EF91CF91BF91AF919F918F917F916F91DE
+:101240005F914F913F912F911F910F91FF90EF90E0
+:101250000F900FBE0F901F90189592DC36D843DC8C
+:10126000FECFCF93DF931F92CDB7DEB76983DC014A
+:10127000ED91FC910280F381E02D41E050E0BE0150
+:101280006F5F7F4F09950F90DF91CF910895FC011B
+:101290008FB7F89490915B02911102C090E010C05A
+:1012A00093E09093E9009091F200911109C0209190
+:1012B000E80022FFF3CF25FDF1CF2BE62093E800D5
+:1012C0008FBF2085318537FD03C09F3F09F09F5FA9
+:1012D000892F90E00895CF93DF93EC01888599855D
+:1012E00097FF09C0E881F9810680F781E02DCE01E2
+:1012F00009959987888788859985DF91CF91089589
+:10130000FC012085318537FD07C04FEF5FEF518726
+:101310004087C901992708959FB7F89480915B028F
+:10132000882369F083E08093E9002BE68091E80050
+:1013300085FD09C082FF03C02093E800F7CF9FBF5F
+:101340008FEF9FEF08958091F1002091E80025FD37
+:1013500003C02BE62093E8009FBF90E00895DF9242
+:10136000EF92FF920F931F93CF93DF938C01EB01CA
+:1013700080915B02882371F07FB7F89484E08093BA
+:10138000E90080914C02882369F08091E80085FD96
+:1013900007C07FBF81E0F801828320E030E0D1C048
+:1013A00010924C0220E030E064E080E4F82EA1EFDF
+:1013B000B0E09AE3E92EE3E0DE2E4115510509F491
+:1013C000BFC08091E400815F9091E80095FD16C058
+:1013D0007FBF9091E400981304C081E080934C0299
+:1013E00005C090915B02911104C081E0F8018283F5
+:1013F000A8C07FB7F8946093E900E6CF8091F2002F
+:101400009F2D981BE92FF0E04E175F0708F4942FEB
+:10141000E92FF0E04E1B5F0B2E0F3F1FE0E4E91BAE
+:10142000E03428F4EE0FFF27E85EF54F099480C002
+:1014300099919C9399919C9399919C9399919C9348
+:1014400099919C9399919C9399919C9399919C9338
+:1014500099919C9399919C9399919C9399919C9328
+:1014600099919C9399919C9399919C9399919C9318
+:1014700099919C9399919C9399919C9399919C9308
+:1014800099919C9399919C9399919C9399919C93F8
+:1014900099919C9399919C9399919C9399919C93E8
+:1014A00099919C9399919C9399919C9399919C93D8
+:1014B00099919C9399919C9399919C9399919C93C8
+:1014C00099919C9399919C9399919C9399919C93B8
+:1014D00099919C9399919C9399919C9399919C93A8
+:1014E00099919C9399919C9399919C9399919C9398
+:1014F00099919C9399919C9399919C9399919C9388
+:1015000099919C9399919C9399919C9399919C9377
+:1015100099919C9399919C9399919C9399919C9367
+:1015200099919C9399919C9399919C9399919C9357
+:101530008091E80085FFE092E800D0924E023DCF16
+:101540007FBFC901DF91CF911F910F91FF90EF9065
+:10155000DF9008952FEF3FEFFC01318720877DDC7E
+:101560000FB6F8948091440290914502A0914602F2
+:10157000B09147020FBE9C0180915B02882329F045
+:1015800068EC70E080E090E029CC80915A028823DA
+:1015900001F10FB6F8948091440290914502A09118
+:1015A0004602B09147020FBE40915A02442389F08F
+:1015B0000FB6F89440914402509145026091460262
+:1015C000709147020FBE481B590B4B3F510560F30A
+:1015D00011C00FB6F8948091440290914502A091F9
+:1015E0004602B09147020FBE821B930B853C994087
+:1015F00008F4C2CF08959FB7F89480915B028823C6
+:1016000021F080914E02811102C09FBF089584E0B5
+:101610008093E9008AE38093E80010924E02F5CFB0
+:10162000EACFEFE4F2E08AE0DF011D928A95E9F764
+:1016300088EE93E0A0E0B0E083839483A583B68333
+:1016400085E191E0918380830895EE0FFF1F05905F
+:0A165000F491E02D0994F894FFCF07
+:10165A00088000E10000000008415652204953501A
+:10166A0000000000003109AF09470980096B091021
+:02167A000B0063
+:00000001FF
diff --git a/util/qmk_install.sh b/util/qmk_install.sh
index 0272f8af8c..5a1a38fce5 100755
--- a/util/qmk_install.sh
+++ b/util/qmk_install.sh
@@ -10,7 +10,7 @@ case $(uname) in
Linux)
exec "${util_dir}/linux_install.sh"
;;
- MSYS_NT*)
+ MSYS_NT*|MINGW_64*)
exec "${util_dir}/msys2_install.sh"
;;
esac