Преглед на файлове

Merge branch 'master' into minidox

That-Canadian преди 8 години
родител
ревизия
1631f7cd79
променени са 72 файла, в които са добавени 1825 реда и са изтрити 125 реда
  1. 5 0
      Makefile
  2. 6 1
      common_features.mk
  3. 1 0
      docs/_summary.md
  4. 2 2
      docs/build_environment_setup.md
  5. 3 1
      docs/faq_keymap.md
  6. 11 0
      docs/key_lock.md
  7. 4 0
      docs/make_instructions.md
  8. 1 0
      docs/quantum_keycodes.md
  9. 48 13
      keyboards/bananasplit/bananasplit.h
  10. 37 0
      keyboards/bananasplit/keymaps/coloneljesus/Makefile
  11. 25 0
      keyboards/bananasplit/keymaps/coloneljesus/config.h
  12. 96 0
      keyboards/bananasplit/keymaps/coloneljesus/keymap.c
  13. 33 0
      keyboards/bananasplit/keymaps/coloneljesus/readme.md
  14. 37 0
      keyboards/bananasplit/keymaps/default/Makefile
  15. 24 0
      keyboards/bananasplit/keymaps/default/config.h
  16. 1 0
      keyboards/bananasplit/keymaps/default/readme.md
  17. 4 4
      keyboards/bananasplit/keymaps/hhkbanana/keymap.c
  18. 8 8
      keyboards/bananasplit/keymaps/nic/keymap.c
  19. 1 1
      keyboards/ergodox/keymaps/333fred/Makefile
  20. 8 17
      keyboards/ergodox/keymaps/333fred/keymap.c
  21. 21 0
      keyboards/gonnerd/keymaps/tkl/Makefile
  22. 31 0
      keyboards/gonnerd/keymaps/tkl/keymap.c
  23. 1 1
      keyboards/handwired/promethium/config.h
  24. 14 14
      keyboards/handwired/promethium/keymaps/priyadi/keymap.c
  25. 3 0
      keyboards/jc65/Makefile
  26. 63 0
      keyboards/jc65/config.h
  27. 28 0
      keyboards/jc65/jc65.c
  28. 21 0
      keyboards/jc65/jc65.h
  29. 0 0
      keyboards/jc65/keymaps/default/Makefile
  30. 1 0
      keyboards/jc65/keymaps/default/config.h
  31. 11 0
      keyboards/jc65/keymaps/default/keymap.c
  32. 10 0
      keyboards/jc65/keymaps/default/readme.md
  33. 0 0
      keyboards/jc65/keymaps/jetpacktuxedo/Makefile
  34. 1 0
      keyboards/jc65/keymaps/jetpacktuxedo/config.h
  35. 25 0
      keyboards/jc65/keymaps/jetpacktuxedo/keymap.c
  36. 10 0
      keyboards/jc65/keymaps/jetpacktuxedo/readme.md
  37. 22 0
      keyboards/jc65/readme.md
  38. 68 0
      keyboards/jc65/rules.mk
  39. 31 0
      keyboards/lets_split/keymaps/piemod/README.md
  40. 37 0
      keyboards/lets_split/keymaps/piemod/config.h
  41. 121 0
      keyboards/lets_split/keymaps/piemod/keymap.c
  42. 7 0
      keyboards/nyquist/keymaps/333fred/Makefile
  43. 75 0
      keyboards/nyquist/keymaps/333fred/README.md
  44. 14 0
      keyboards/nyquist/keymaps/333fred/config.h
  45. 135 0
      keyboards/nyquist/keymaps/333fred/keymap.c
  46. 3 0
      keyboards/org60/Makefile
  47. 82 0
      keyboards/org60/config.h
  48. 15 0
      keyboards/org60/keymaps/boardy/Makefile
  49. 121 0
      keyboards/org60/keymaps/boardy/keymap.c
  50. 7 0
      keyboards/org60/keymaps/boardy/readme.md
  51. 2 2
      keyboards/xd60/keymaps/BASE/keymap.c
  52. 0 0
      keyboards/org60/keymaps/default/readme.md
  53. 19 0
      keyboards/org60/org60.c
  54. 37 0
      keyboards/org60/org60.h
  55. 21 0
      keyboards/org60/readme.md
  56. 64 0
      keyboards/org60/rules.mk
  57. 10 0
      keyboards/planck/keymaps/piemod/Makefile
  58. 31 0
      keyboards/planck/keymaps/piemod/README.md
  59. 111 0
      keyboards/planck/keymaps/piemod/keymap.c
  60. 1 1
      keyboards/planck/keymaps/priyadi/config.h
  61. 2 0
      keyboards/planck/planck.h
  62. 1 1
      keyboards/uk78/config.h
  63. 0 46
      keyboards/xd60/keymaps/base/keymap.c
  64. 0 5
      keyboards/xd60/keymaps/base/readme.md
  65. 1 1
      lib/chibios
  66. 138 0
      quantum/process_keycode/process_key_lock.c
  67. 24 0
      quantum/process_keycode/process_key_lock.h
  68. 15 5
      quantum/quantum.c
  69. 4 0
      quantum/quantum.h
  70. 4 0
      quantum/quantum_keycodes.h
  71. 5 0
      quantum/template/config.h
  72. 2 2
      tmk_core/rules.mk

+ 5 - 0
Makefile

@@ -19,6 +19,11 @@ endif
 # Otherwise the [OK], [ERROR] and [WARN] messages won't be displayed correctly
 override SILENT := false
 
+QMK_VERSION := $(shell git describe --abbrev=0 --tags 2>/dev/null)
+ifneq ($(QMK_VERSION),)
+$(info QMK Firmware v$(QMK_VERSION))
+endif
+
 ON_ERROR := error_occurred=1
 
 BREAK_ON_ERRORS = no

+ 6 - 1
common_features.mk

@@ -104,6 +104,11 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
     SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
 endif
 
+ifeq ($(strip $(KEY_LOCK_ENABLE)), yes)
+    OPT_DEFS += -DKEY_LOCK_ENABLE
+    SRC += $(QUANTUM_DIR)/process_keycode/process_key_lock.c
+endif
+
 ifeq ($(strip $(PRINTING_ENABLE)), yes)
     OPT_DEFS += -DPRINTING_ENABLE
     SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
@@ -156,4 +161,4 @@ QUANTUM_SRC:= \
 
 ifndef CUSTOM_MATRIX
     QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
-endif
+endif

+ 1 - 0
docs/_summary.md

@@ -17,6 +17,7 @@
   * [Mouse keys](mouse_keys.md)
   * [Unicode](unicode.md)
   * [Stenography](stenography.md)
+  * [Key Lock](key_lock.md)
 
 * Reference
   * [Glossary](glossary.md)

+ 2 - 2
docs/build_environment_setup.md

@@ -50,10 +50,10 @@ If you have trouble and want to ask for help, it is useful to generate a *Win_Ch
 If you're using [homebrew,](http://brew.sh/) you can use the following commands:
 
     brew tap osx-cross/avr
-    brew install avr-libc
+    brew install avr-gcc
     brew install dfu-programmer
 
-This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of avr-libc can take over 20 minutes and exhibit high CPU usage.
+This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of avr-gcc can take over 20 minutes and exhibit high CPU usage.
 
 You can also try these instructions:
 

+ 3 - 1
docs/faq_keymap.md

@@ -116,7 +116,9 @@ https://github.com/tekezo/Karabiner/issues/403
 
 ## Esc and `~ on a key
 
-Use `GRAVE_ESC` or `KC_GESC` in your keymap.
+Use `GRAVE_ESC` or `KC_GESC` in your keymap. `GUI`+`GRAVE_ESC` results in `\`` and `SHIFT`+`GRAVE_ESC` results in `~`.
+
+Note that this will break the CTRL+SHIFT+ESC shortcut to the Windows task manager. Use `#define GRAVE_ESC_CTRL_OVERRIDE` in your `config.h` to get the shortcut back. With this option, `ESC_GRAVE` results in `ESC` if `CTRL` is held, even if `SHIFT` or `GUI` are also held.
 
 ## Arrow on Right Modifier keys with Dual-Role
 This turns right modifer keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.

Файловите разлики са ограничени, защото са твърде много
+ 11 - 0
docs/key_lock.md


+ 4 - 0
docs/make_instructions.md

@@ -158,6 +158,10 @@ This enables using the Quantum SYSEX API to send strings (somewhere?)
 
 This consumes about 5390 bytes.
 
+`KEY_LOCK_ENABLE`
+
+This enables [key lock](key_lock.md). This consumes an additional 260 bytes.
+
 ## Customizing Makefile options on a per-keymap basis
 
 If your keymap directory has a file called `Makefile` (note the filename), any Makefile options you set in that file will take precedence over other Makefile options for your particular keyboard.

+ 1 - 0
docs/quantum_keycodes.md

@@ -17,6 +17,7 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are
 |`FUNC(n)`/`F(n)`|Call `fn_action(n)`|
 |`M(n)`|to call macro n|
 |`MACROTAP(n)`|to macro-tap n idk FIXME|
+|`KC_LOCK`|The [lock key](key_lock.md)|
 
 ## Bootmagic Keycodes
 

+ 48 - 13
keyboards/bananasplit/bananasplit.h

@@ -19,6 +19,19 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "quantum.h"
 
+/*
+-------------------------------------------------------------------------------------------
+| 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     |
+-------------------------------------------------------------------------------------------
+|     K30     | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B |   K3C   | K3D |
+-------------------------------------------------------------------------------------------
+|  K40  |  K41  |  K42  |     K44     |  K45  |     K46     | K48 | K49 | K4A | K4B | K4C |
+-------------------------------------------------------------------------------------------
+*/
 #define KEYMAP(                                                                     \
     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,           \
@@ -30,13 +43,22 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     { 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, KC_NO,    K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D },  \
-    { K40, K41, K42, KC_NO,    K44, K45, K46, KC_NO,    K48, K49, K4A, K4B, K4C }   \
+    { K40, K41, K42, KC_NO,    K44, K45, K46, KC_NO,    K48, K49, K4A, K4B, K4C, KC_NO }   \
 }
+/* Here is the above keymap filled with KC_TRNS. It's a useful starting point when defining layers.
+KEYMAP( \
+    ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
+    ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
+    ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
+    ______,         ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,\
+    ______, ______, ______,         ______, ______, ______,         ______, ______, ______, ______, ______  \
+)
+*/
 
 #define KEYMAP_HHKBANANA(                                                           \
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,           \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D,      \
     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, K2D,           \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,                \
     K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C,                \
     K40, K41, K42,      K44, K45, K46,      K48, K49, K4A, K4B, K4C                 \
 ) { \
@@ -44,7 +66,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     { 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, K2D },       \
     { K30, KC_NO,   K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, KC_NO }, \
-    { K40, K41, K42, KC_NO,    K44, K45, K46, KC_NO,    K48, K49, K4A, K4B, K4C }   \
+    { K40, K41, K42, KC_NO,    K44, K45, K46, KC_NO,    K48, K49, K4A, K4B, K4C, KC_NO }   \
 }
 
 #define KEYMAP_ANSI( \
@@ -58,7 +80,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     { 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, KC_NO,   K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, KC_NO }, \
-    { K40, K41, K42, KC_NO,    KC_NO,    K45, KC_NO,    KC_NO,    K48, K49, KC_NO,  K4B, K4C }  \
+    { K40, K41, K42, KC_NO,    KC_NO,    K45, KC_NO,    KC_NO,    K48, K49, KC_NO,  K4B, K4C, KC_NO }  \
 }
 
 #define KEYMAP_ISO( \
@@ -72,27 +94,40 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     { 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,    K45, KC_NO,    KC_NO,    K48, K49, KC_NO,    K4B, K4C }  \
+    { K40, K41, K42, KC_NO,    KC_NO,    K45, KC_NO,    KC_NO,    K48, K49, KC_NO,    K4B, K4C, KC_NO }  \
 }
 
+/*
+-------------------------------------------------------------------------------------------
+| K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | K2D |
+-------------------------------------------------------------------------------------------
+|  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   | K3D |
+-------------------------------------------------------------------------------------------
+|  K40  |  K41  |  K42  |     K44     |  K45  |     K46     | K48 | K49 | K4A | K4B | K4C |
+-------------------------------------------------------------------------------------------
+*/
 #define KEYMAP_ALL( \
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
     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, K2D,\
-    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,\
+    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, K3D, \
     K40, K41, K42,      K44, K45, K46,      K48, K49, 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, K2D }, \
     { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
-    { K40, K41, K42, KC_NO,    K44, K45, K46, KC_NO,    K48, K49, K4A, K4B, K4C }  \
+    { K40, K41, K42, KC_NO,    K44, K45, K46, KC_NO,    K48, K49, K4A, K4B, K4C, KC_NO }  \
 }
 
 #define KEYMAP_HHKB_ARROW( \
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
     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, K2D,\
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
     K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,\
     K40, K41, K42,      K44, K45, K46,      K48, K49, K4A, K4B, K4C  \
 ) { \
@@ -100,7 +135,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     { 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, K2D }, \
     { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
-    { K40, K41, K42, KC_NO,    K44, K45, K46, KC_NO,    K48, K49, K4A, K4B, K4C }  \
+    { K40, K41, K42, KC_NO,    K44, K45, K46, KC_NO,    K48, K49, K4A, K4B, K4C, KC_NO }  \
 }
 
 

+ 37 - 0
keyboards/bananasplit/keymaps/coloneljesus/Makefile

@@ -0,0 +1,37 @@
+# Copyright 2017 Balz Guenat
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+
+# 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 = 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 = 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
+
+ifndef QUANTUM_DIR
+	include ../../../../Makefile
+endif

+ 25 - 0
keyboards/bananasplit/keymaps/coloneljesus/config.h

@@ -0,0 +1,25 @@
+/* Copyright 2017 Balz Guenat
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+#define GRAVE_ESC_CTRL_OVERRIDE
+
+#endif

+ 96 - 0
keyboards/bananasplit/keymaps/coloneljesus/keymap.c

@@ -0,0 +1,96 @@
+/* Copyright 2017 Balz Guenat
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+#include "bananasplit.h"
+
+#define ______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+-------------------------------------------------------------------------------------------
+|GvEsc|  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  | Backspace |
+-------------------------------------------------------------------------------------------
+|  Tab   |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |   \    |
+-------------------------------------------------------------------------------------------
+|   Fn1   |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |    Enter    |
+-------------------------------------------------------------------------------------------
+|    Shift    |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |  Shift  |M(0) |
+-------------------------------------------------------------------------------------------
+| Ctrl  |  GUI  |  Alt  |   Space    |  Fn1  |   Space    |  Alt  |  GUI  |  App  | Ctrl  |
+-------------------------------------------------------------------------------------------
+*/
+[0] = KEYMAP( \
+    KC_GESC, 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(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, M(0),\
+    KC_LCTL, KC_LGUI, KC_LALT,       KC_SPC, MO(1), KC_SPC,       KC_RALT, KC_RGUI, KC_NO,   KC_APP,  KC_RCTL \
+),
+/*
+-------------------------------------------------------------------------------------------
+|     | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 |           |
+-------------------------------------------------------------------------------------------
+| CpsLck |Prev |Vol+ |Next |PgUp | Ins |Home |WrdL |WrdR | End |     |     |     | PrtSc  |
+-------------------------------------------------------------------------------------------
+|  TRNS   |Mute |Vol- |Play |PgDn | Del |Left |Down | Up  |Right|     |     |             |
+-------------------------------------------------------------------------------------------
+|             |     |     |     |     |     |DelWL|DelWR|     |     |     |         |     |
+-------------------------------------------------------------------------------------------
+|       |       |       |            | TRNS  |            |       |       |       | Reset |
+-------------------------------------------------------------------------------------------
+*/
+[1] = KEYMAP( \
+    ______,  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_CAPS, KC_MPRV, KC_VOLU, KC_MNXT, KC_PGUP, KC_INS, KC_HOME, LCTL(KC_LEFT), LCTL(KC_RGHT),   KC_END,  ______, ______, ______, KC_PSCR, \
+    ______,  KC_MUTE, KC_VOLD, KC_MPLY, KC_PGDN, KC_DEL, KC_LEFT, KC_DOWN,       KC_UP,          KC_RGHT, ______, ______, ______, \
+    ______,           ______,  ______,  ______,  ______, ______,  LCTL(KC_BSPC), LCTL(KC_DEL),   ______,  ______, ______, ______, ______, \
+    ______,  ______,  ______,           ______,  ______, ______,                 ______,         ______,  ______, ______, RESET \
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  switch(id) {
+      case 0:
+        // Sends Alt+Shift on both key down and key up. 
+        // Fesigned to switch between two keyboard layouts on Windows using a locking switch.
+        // Does nothing if right shift is pressed for easier resync.
+        if (!(get_mods() & MOD_BIT(KC_RSFT)))
+          return MACRO(D(LALT), T(LSFT), U(LALT), END);
+        else
+          return MACRO_NONE;
+  }
+  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) {
+
+}

+ 33 - 0
keyboards/bananasplit/keymaps/coloneljesus/readme.md

@@ -0,0 +1,33 @@
+# /u/Coloneljesus's keymap for the Bananasplit
+
+Default layer:
+
+```
+-------------------------------------------------------------------------------------------
+|GvEsc|  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  | Backspace |
+-------------------------------------------------------------------------------------------
+|  Tab   |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |   \    |
+-------------------------------------------------------------------------------------------
+|   Fn1   |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |    Enter    |
+-------------------------------------------------------------------------------------------
+|    Shift    |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |     Shift     |
+-------------------------------------------------------------------------------------------
+| Ctrl  |  GUI  |  Alt  |   Space    |  Fn1  |   Space    |  Alt  |  GUI  |  App  | Ctrl  |
+-------------------------------------------------------------------------------------------
+```
+
+Fn1 layer:
+
+```
+-------------------------------------------------------------------------------------------
+|     | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 |           |
+-------------------------------------------------------------------------------------------
+| CpsLck |Prev |Vol+ |Next |PgUp | Ins |Home |WrdL |WrdR | End |     |     |     | PrtSc  |
+-------------------------------------------------------------------------------------------
+|  TRNS   |Mute |Vol- |Play |PgDn | Del |Left |Down | Up  |Right|     |     |             |
+-------------------------------------------------------------------------------------------
+|             |     |     |     |     |     |DelWL|DelWR|     |     |     |               |
+-------------------------------------------------------------------------------------------
+|       |       |       |            | TRNS  |            |       |       |       | Reset |
+-------------------------------------------------------------------------------------------
+```

+ 37 - 0
keyboards/bananasplit/keymaps/default/Makefile

@@ -0,0 +1,37 @@
+# Copyright 2017 Balz Guenat
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+
+# 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 = 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 = 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
+
+ifndef QUANTUM_DIR
+	include ../../../../Makefile
+endif

+ 24 - 0
keyboards/bananasplit/keymaps/default/config.h

@@ -0,0 +1,24 @@
+/* Copyright 2017 Balz Guenat
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif

+ 1 - 0
keyboards/bananasplit/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for the Bananasplit

+ 4 - 4
keyboards/bananasplit/keymaps/hhkbanana/keymap.c

@@ -5,17 +5,17 @@
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   [DEFAULT_LAYER] = KEYMAP_HHKBANANA( \
-    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_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_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_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_PSCR, \
+    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, \
     KC_LCTL,  KC_LGUI,  KC_LALT, KC_ENT,      MO(LAYER_1),      KC_SPC,  KC_RALT, KC_RCTL,  KC_LEFT, KC_DOWN, KC_RIGHT \
   ),
 
   [LAYER_1] = KEYMAP_HHKBANANA( \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
     _______, _______, _______,          _______, _______, _______,          _______, _______, _______, _______, _______ \
   ),

+ 8 - 8
keyboards/bananasplit/keymaps/nic/keymap.c

@@ -9,33 +9,33 @@
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   [DEFAULT_LAYER] = KEYMAP_HHKB_ARROW( \
-    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_BSLS, \
+    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_BSLS, KC_DEL, \
     HYPER_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, \
-    CTL_T(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_ENT, KC_DEL, \
+    CTL_T(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_ENT, \
     KC_LSFT,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,  KC_DOT,  RSFT_T(KC_SLSH),  KC_UP, TG(NORMAN_LAYER), \
     KC_CAPS,  KC_LALT,  KC_LGUI,  KC_SPC,      MO(THUMB_LAYER),      KC_SPC,  KC_LGUI, KC_LALT,  KC_LEFT, KC_DOWN, KC_RIGHT \
   ),
 
   [THUMB_LAYER] = KEYMAP_HHKB_ARROW( \
-    MO(MOD_LAYER), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, \
+    MO(MOD_LAYER), 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_UNDS,   KC_PLUS,   KC_LCBR,   KC_RCBR,   _______, _______, _______, \
-    _______,   _______,   _______,   _______,   _______,   _______,   _______,   KC_MINS,   KC_EQL,   KC_LBRC, KC_RBRC,  _______, _______, _______, \
+    _______,   _______,   _______,   _______,   _______,   _______,   _______,   KC_MINS,   KC_EQL,   KC_LBRC, KC_RBRC,  _______, _______, \
     _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,  _______,  _______,  _______, _______, \
     _______,  _______,  _______, _______,      _______,      _______,  _______, _______,  _______, _______, _______ \
   ),
 
   [NORMAN_LAYER] = KEYMAP_HHKB_ARROW( \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
     _______,  _______,   _______,   KC_D,   KC_F,   KC_K,   KC_J,   KC_U,   KC_R,   KC_L,   KC_SCLN,   _______, _______, _______, \
-    _______,   _______,   _______,   KC_E,   KC_T,  _______,   KC_Y,   KC_N,   KC_I,   KC_O,   KC_H,  _______, _______, _______, \
+    _______,   _______,   _______,   KC_E,   KC_T,  _______,   KC_Y,   KC_N,   KC_I,   KC_O,   KC_H,  _______, _______, \
     _______,   _______,   _______,   _______,   _______,   _______,   KC_P,   _______,   _______,  _______,  _______,  _______, _______, \
     _______,  _______,  _______, _______,      _______,      _______,  _______, _______,  _______, _______, _______ \
   ),
 
   [MOD_LAYER] = KEYMAP_HHKB_ARROW( \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
     _______,  _______,   _______,   _______,  RESET,  _______,   _______,   _______,   _______,   _______,   _______,   _______, _______, _______, \
-    _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,  _______, _______, _______, \
+    _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,  _______, _______, \
     _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,  _______,  _______,  _______, _______, \
     _______,  _______,  _______, _______,      _______,      _______,  _______, _______,  _______, _______, _______ \
   ),

+ 1 - 1
keyboards/ergodox/keymaps/333fred/Makefile

@@ -3,7 +3,7 @@ LCD_BACKLIGHT_ENABLE = yes
 LCD_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 NKRO_ENABLE = yes
-TAP_DANCE_ENABLE = yes
+KEY_LOCK_ENABLE = yes
 
 ifndef QUANTUM_DIR
 	include ../../../../Makefile

+ 8 - 17
keyboards/ergodox/keymaps/333fred/keymap.c

@@ -40,15 +40,6 @@ enum custom_macros {
   KEEPASS_TYPE,
 };
 
-// Tap Dance Definitions
-enum tap_dance_custom_keys {
-  TD_SEMICOLON_COLON = 0
-};
-
-qk_tap_dance_action_t tap_dance_actions[] = {
-  [TD_SEMICOLON_COLON] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLON)
-};
-
 // NOTE: Cells marked with ACCESS must remain transparent, they're the keys that actually get to that layer
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -59,14 +50,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
  * | TAB    |   Q  |   W  |   E  |   R  |   T  |  L2  |           |  L2  |   Y  |   U  |   I  |   O  |   P  |   \    |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | Esc    |   A  |   S  |   D  |LT 3,F|   G  |------|           |------|   H  |   J  |   K  |   L  |; / : |   '    |
+ * | Esc    |   A  |   S  |   D  |LT 3,F|   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
  * |--------+------+------+------+------+------|  L1  |           |MO(3) |------+------+------+------+------+--------|
  * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  *   |LCTRL |  F4  |  F5  | LGUI | LALT |                                       | Left | Down |  Up  | Right| RGUI |
  *   `----------------------------------'                                       `----------------------------------'
  *                                        ,-------------.       ,-------------.
- *                                        | Copy | Paste|       | Alt  |Ctrl/Esc|
+ *                                        | Copy | Paste|       | Alt  | Lock |
  *                                 ,------|------|------|       |------+--------+------.
  *                                 |      |      | PgUp |       | PgDn |        |      |
  *                                 | Bcksp|OSL(2)|------|       |------|  Ent   |Space |
@@ -86,12 +77,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                                                                                         KC_PGUP,
                                                                      KC_BSPC,OSL(SYMB), KC_DEL,
         // right hand
-             TG(CODE),    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,                  KC_MINS,
-             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,                  KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   TD(TD_SEMICOLON_COLON),KC_QUOT,
-             MO(MDIA),    KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),        OSM(MOD_RSFT),
-                                  KC_LEFT,KC_DOWN,KC_UP,  KC_RIGHT,          KC_RGUI,
-             KC_RALT, CTL_T(KC_ESC),
+             TG(CODE), KC_6,   KC_7,   KC_8,   KC_9,   KC_0,           KC_MINS,
+             TG(SYMB), KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,           KC_BSLS,
+                       KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,        KC_QUOT,
+             MO(MDIA), KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH), OSM(MOD_RSFT),
+                                  KC_LEFT,KC_DOWN,KC_UP,  KC_RIGHT,       KC_RGUI,
+             KC_RALT, KC_LOCK,
              KC_PGDN,
              KC_RCTL, KC_ENT, KC_SPC
     ),

+ 21 - 0
keyboards/gonnerd/keymaps/tkl/Makefile

@@ -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 = 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 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
+
+ifndef QUANTUM_DIR
+	include ../../../../Makefile
+endif

+ 31 - 0
keyboards/gonnerd/keymaps/tkl/keymap.c

@@ -0,0 +1,31 @@
+#include "gonnerd.h"
+
+#define _x_ KC_NO
+#define TRN KC_TRNS
+
+// Keymap layers
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [0] = KEYMAP_TKL( \
+                   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_PAUS, \
+                   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_LCTL, KC_A,    KC_S,    KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,    KC_SCLN, KC_QUOT, _x_,     KC_ENT,                             \
+                   KC_LSFT, _x_,     KC_Z,    KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, _x_,               KC_UP,           \
+                   KC_LCTL, KC_LALT, KC_LGUI,                         KC_SPC,                          KC_RGUI, KC_RALT, MO(1),   KC_RCTL,   KC_LEFT,KC_DOWN,KC_RGHT \
+                    ),
+
+  [1] = KEYMAP_TKL( \
+                   RESET,    _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_,    _x_, _x_, _x_, \
+                   _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_,    _x_, _x_, _x_, \
+                   _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_,    _x_, _x_, _x_, \
+                   _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_,                   \
+                   _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_,         _x_,      \
+                   _x_, _x_, _x_,                _x_,                _x_, _x_, TRN, _x_,    _x_, _x_, _x_ \
+                    )
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};

+ 1 - 1
keyboards/handwired/promethium/config.h

@@ -161,7 +161,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #define ___ KC_NO
 
-#define KEYMAP( \
+#define KEYMAP_CUSTOM( \
     k11, k12, k13, k14, k15, k16,      k17, k18, k19, k1a, k1b, k1c, \
     k21, k22, k23, k24, k25, k26,      k27, k28, k29, k2a, k2b, k2c, \
     k31, k32, k33, k34, k35, k36,      k37, k38, k39, k3a, k3b, k3c, \

+ 14 - 14
keyboards/handwired/promethium/keymaps/priyadi/keymap.c

@@ -686,7 +686,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | Ctrl | Alt  | GUI  | Punc | Num  |    Space    | Fun  |Greek | GUI  |AltGr | Ctrl |
  * `-----------------------------------------------------------------------------------'
  */
-[_QWERTY] = KEYMAP(
+[_QWERTY] = KEYMAP_CUSTOM(
   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_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,
@@ -706,7 +706,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `-----------------------------------------------------------------------------------'
  */
 #ifdef LAYOUT_DVORAK
-[_DVORAK] = KEYMAP(
+[_DVORAK] = KEYMAP_CUSTOM(
   _______, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    _______,
   _______, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    _______,
   _______, KC_SLSH, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    _______,
@@ -728,7 +728,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 
 #ifdef LAYOUT_COLEMAK
-[_COLEMAK] = KEYMAP(
+[_COLEMAK] = KEYMAP_CUSTOM(
   _______, KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_QUOT, _______,
   _______, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    _______,
   _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, _______,
@@ -750,7 +750,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 
 #ifdef LAYOUT_NORMAN
-[_NORMAN] = KEYMAP(
+[_NORMAN] = KEYMAP_CUSTOM(
   _______, KC_Q,    KC_W,    KC_D,    KC_F,    KC_K,    KC_J,    KC_U,    KC_R,    KC_L,    KC_QUOT, _______,
   _______, KC_A,    KC_S,    KC_E,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_I,    KC_O,    KC_H,    _______,
   _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, _______,
@@ -772,7 +772,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 
 #ifdef LAYOUT_WORKMAN
-[_WORKMAN] = KEYMAP(
+[_WORKMAN] = KEYMAP_CUSTOM(
   _______, KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,    KC_J,    KC_F,    KC_U,    KC_P,    KC_QUOT, _______,
   _______, KC_A,    KC_S,    KC_H,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    _______,
   _______, KC_Z,    KC_X,    KC_M,    KC_C,    KC_V,    KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLSH, _______,
@@ -792,7 +792,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |      |      |      |      |      |             |      |      |      |   :  |      |
  * `-----------------------------------------------------------------------------------'
  */
-[_PUNC] = KEYMAP(
+[_PUNC] = KEYMAP_CUSTOM(
   KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______,
   KC_GRV,  KC_ASTR, KC_BSLS, KC_MINS,  KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______,
   KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______,
@@ -811,7 +811,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |      |      |   x  |      |      |      |      |   0  |   ,  |   .  |   :  |      |
  * `-----------------------------------------------------------------------------------'
  */
-[_NUM] = KEYMAP(
+[_NUM] = KEYMAP_CUSTOM(
   KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, S(KC_A),  KC_1,    KC_2,    KC_3,   S(KC_D), _______,
   KC_GRV,  KC_ASTR, KC_BSLS, KC_MINS,  KC_EQL, KC_SLSH, S(KC_B),  KC_4,    KC_5,    KC_6,   S(KC_E), _______,
   KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C),  KC_7,    KC_8,    KC_9,   S(KC_F), _______,
@@ -830,7 +830,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |      |      |      |      |      |             |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
  */
-[_FUN] = KEYMAP(
+[_FUN] = KEYMAP_CUSTOM(
   XXXXXXX,   KC_F1,   KC_F2,   KC_F3,  KC_F4,   KC_INS,  XXXXXXX, KC_PGUP,   KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
   KC_CAPS,   KC_F5,   KC_F6,   KC_F7,  KC_F8,   KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______,
   _______,   KC_F9,  KC_F10,  KC_F11,  KC_F12,  KC_PAUS, XXXXXXX, XXXXXXX, KC_HOME,  KC_END, XXXXXXX, _______,
@@ -849,7 +849,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |      |      |      |      |      |      |      |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
  */
-[_GREEKU] = KEYMAP(
+[_GREEKU] = KEYMAP_CUSTOM(
   _______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC),  X(UPI), _______,
   _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA),  X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______,
   _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA),  X(UNU),  X(UMU), KC_COMM, KC_DOT,  KC_SLSH, _______,
@@ -868,7 +868,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |      |      |      |      |      |      |      |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
  */
-[_GREEKL] = KEYMAP(
+[_GREEKL] = KEYMAP_CUSTOM(
   _______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC),  X(LPI), _______,
   _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA),  X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______,
   _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA),  X(LNU),  X(LMU), KC_COMM, KC_DOT,  KC_SLSH, _______,
@@ -887,7 +887,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |      |      |      |      |      |      |      |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
  */
-[_EMPTY] = KEYMAP(
+[_EMPTY] = KEYMAP_CUSTOM(
   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, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -906,7 +906,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |      |      |      |      |      |      |      |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
  */
-[_EMOJI] = KEYMAP(
+[_EMOJI] = KEYMAP_CUSTOM(
   X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
   X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART),  X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
   X(THMDN),X(SLEEP), X(CLAP),  X(CRY),  X(VIC),X(BHART),  X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
@@ -925,7 +925,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |      |      |      |      |      |      |      |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
  */
-[_GUI] = KEYMAP(
+[_GUI] = KEYMAP_CUSTOM(
   XXXXXXX, G(KC_1), G(KC_2), G(KC_3), G(KC_4), G(KC_5), G(KC_6), G(KC_7), G(KC_8), G(KC_9), G(KC_0), XXXXXXX,
   KC_ESC,  XXXXXXX, S(KC_TAB),KC_ESC, KC_TAB,  XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX,
   XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, KC_SPC,  KC_SPC,  KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
@@ -944,7 +944,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |      |      |      |      |      |      |      |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
  */
-[_SYS] = KEYMAP(
+[_SYS] = KEYMAP_CUSTOM(
   DEBUG,   QWERTY,  WIN,     XXXXXXX, RESET,   XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, RGBDEMO,
   XXXXXXX, FC_TOG,  XXXXXXX, DVORAK,  XXXXXXX, GLOW,    XXXXXXX, XXXXXXX, WORKMAN, LINUX,   XXXXXXX, XXXXXXX,
   XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BT,  NORMAN,  OSX,     XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,

+ 3 - 0
keyboards/jc65/Makefile

@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+	include ../../Makefile
+endif

+ 63 - 0
keyboards/jc65/config.h

@@ -0,0 +1,63 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.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 <http://www.gnu.org/licenses/>.
+*/
+
+#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      0x0002
+#define MANUFACTURER    dou
+#define PRODUCT         KEYCLACK65-V1
+#define DESCRIPTION     JC65 PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/* QMK JC65 PCB default pin-out */
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4, F5 }
+#define UNUSED_PINS
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 20
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+#define DIODE_DIRECTION COL2ROW
+#define DEBOUNCING_DELAY 5
+
+#define IS_COMMAND() ( \
+        keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+    )
+
+
+
+#endif

+ 28 - 0
keyboards/jc65/jc65.c

@@ -0,0 +1,28 @@
+#include "jc65.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);
+}

+ 21 - 0
keyboards/jc65/jc65.h

@@ -0,0 +1,21 @@
+#ifndef JC65_H
+#define JC65_H
+
+#include "quantum.h"
+
+#define KEYMAP( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
+     K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,   K1E,   K1F, \
+      K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,     K2D,     K2F, \
+     K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,   K3D,   K3E, K3F, \
+    K40,  K41,  K43,    K44,      K46,      K48,      K4A, K4B, K4C, K4D, K4E, K4F \
+)\
+{\
+  {K00, K01,   K02,   K03, K04, K05,   K06, K07,   K08, K09,   K0A, K0B, K0C,   K0D, K0E,   K0F}, \
+  {K10, KC_NO, K12,   K13, K14, K15,   K16, K17,   K18, K19,   K1A, K1B, K1C,   K1D, K1E,   K1F}, \
+  {K20, KC_NO, K22,   K23, K24, K25,   K26, K27,   K28, K29,   K2A, K2B, K2C,   K2D, KC_NO, K2F}, \
+  {K30, K31,   K32,   K33, K34, K35,   K36, K37,   K38, K39,   K3A, K3B, KC_NO, K3D, K3E,   K3F}, \
+  {K40, K41,   KC_NO, K43, K44, KC_NO, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C,   K4D, K4E,   K4F}, \
+}
+
+#endif

+ 0 - 0
keyboards/jc65/keymaps/default/Makefile


+ 1 - 0
keyboards/jc65/keymaps/default/config.h

@@ -0,0 +1 @@
+#include "../../config.h"

+ 11 - 0
keyboards/jc65/keymaps/default/keymap.c

@@ -0,0 +1,11 @@
+#include "jc65.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = KEYMAP(
+      KC_GESC, 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_BSPC, KC_INS,
+      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_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_SPACE, KC_SPACE, KC_SPACE, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+      ),
+};

+ 10 - 0
keyboards/jc65/keymaps/default/readme.md

@@ -0,0 +1,10 @@
+Default Keymap
+===
+
+Super simple default keymap with only a base layer.
+
+Keymap Maintainer: [Ethan Madden](https://github.com/jetpacktuxedo)
+
+Difference from base layout: This is (as close as I can tell) the same as the layout that ships on the boards other than default underglow color.
+
+Intended usage: This is mostly provided for testing before you build your own keymap and as a reference to a stock(ish) configuration

+ 0 - 0
keyboards/jc65/keymaps/jetpacktuxedo/Makefile


+ 1 - 0
keyboards/jc65/keymaps/jetpacktuxedo/config.h

@@ -0,0 +1 @@
+#include "../../config.h"

+ 25 - 0
keyboards/jc65/keymaps/jetpacktuxedo/keymap.c

@@ -0,0 +1,25 @@
+#include "jc65.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = KEYMAP(
+      KC_GESC, 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_INS,
+      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,
+      MO(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_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_SPACE, KC_SPACE, KC_SPACE, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+      ),
+  [1] = KEYMAP(
+      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_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_HOME, KC_END, KC_DEL, KC_TRNS,
+      MO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, KC_TRNS, KC_PGUP, KC_VOLD,
+      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_HOME, KC_PGDN, KC_END
+      ),
+  [2] = KEYMAP(
+      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, RESET,
+      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+      MO(1), RGB_SAD, RGB_SAI, KC_TRNS, KC_TRNS, RGB_HUD, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, RGB_MOD, 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, MO(2), KC_TRNS, KC_TRNS, KC_TRNS
+      ),
+};

+ 10 - 0
keyboards/jc65/keymaps/jetpacktuxedo/readme.md

@@ -0,0 +1,10 @@
+Jetpacktuxedo's Keymap
+===
+
+Split backspace, 6.25u space, caps is fn, my standard fn layer, reset + rgb controls on layer(2)
+
+Keymap Maintainer: [Ethan Madden](https://github.com/jetpacktuxedo)
+
+Difference from base layout: The base layer is the same, except caps is fn, and there are additional tools on layers
+
+Intended usage: This is my daily driver keymap

+ 22 - 0
keyboards/jc65/readme.md

@@ -0,0 +1,22 @@
+JC65
+===
+
+![JC65](https://imgur.com/a/C2oa5)
+
+The JC65 PCB actually has two revisions: A QMK native version, and a PS2AVRGB version. Jchan offered both PCBs as options during the M65-A Round 1 group buy, and were also available choices for the 65% acrylic case group buy. In the near future both PCB versions should be available from keyclack.com when the storefront part opens.
+
+These docs are for the QMK version of the PCB. [More info on qmk.fm](http://qmk.fm/planck/)
+
+Keyboard Maintainer: [Ethan Madden](https://github.com/jetpacktuxedo)
+Hardware Supported: JC65 rev.qmk
+Hardware Availability: [keyclack.com](https://keyclack.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make jc65-default
+
+Or to make and flash:
+
+    make jc65-default-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.

+ 68 - 0
keyboards/jc65/rules.mk

@@ -0,0 +1,68 @@
+# MCU name
+#MCU = at90usb1287
+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 = yes       # 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 = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes
+MIDI_ENABLE = no            # MIDI controls
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6

+ 31 - 0
keyboards/lets_split/keymaps/piemod/README.md

@@ -0,0 +1,31 @@
+PieMod
+======
+
+A keymap for users that need:
+
+- *P*: Programming symbols.
+
+- *I*: i3wm.
+
+- *E*: Emacs.
+
+- *M*: Macros.
+
+- *O*: Ortholinear.
+
+- *D*: Dvorak.
+
+Still a work-in-progress. Suggestions welcome @ https://github.com/dwrz/piemod.
+
+### Keymap
+
+![PieMod Keymap](./keymap.png)
+
+### TODO
+
+- [ ] Add Emacs layer.
+- [ ] Add Macro layer.
+- [ ] Add system control keys (rotation, brightness).
+- [ ] Switch " and ' quotes (or function to toggle default).
+- [ ] Add capslock.
+.

+ 37 - 0
keyboards/lets_split/keymaps/piemod/config.h

@@ -0,0 +1,37 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define _MASTER_RIGHT
+// #define EE_HANDS
+
+#endif

+ 121 - 0
keyboards/lets_split/keymaps/piemod/keymap.c

@@ -0,0 +1,121 @@
+#include "lets_split.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#define _DVORAK 0
+#define _ARROW 1 //F(1)
+#define _SYMBOL 2 // F(2)
+#define _NUMBER 3 // F(3)
+#define _FUNCTION 4 // F(4)
+#define _EMACS 5 // F(5)
+#define _MACROS 6 // F(6)
+#define _MOUSE 7 // F(7)
+
+enum custom_keycodes {
+  DVORAK = SAFE_RANGE,
+  ARROW,
+  SYMBOL,
+  NUMBER,
+  FUNCTION,
+  EMACS,
+  MACROS,
+  MOUSE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_DVORAK] = KEYMAP( \
+  KC_ESC,  KC_QUOTE,  F(7),  KC_DOT,  KC_P,  KC_Y,  KC_F,  KC_G,  KC_C,  KC_R,  KC_L,  KC_DELETE, \
+  KC_TAB,  F(1),  F(2),  F(3),  F(4),  KC_I,  KC_D,  KC_H,  KC_T,  KC_N,  KC_S,  KC_ENTER, \
+  KC_LSHIFT,  KC_SCOLON,  F(5),   KC_J,   KC_K,  KC_X,   KC_B,   KC_M,   KC_W,  KC_V,  KC_Z,  KC_MINUS, \
+  F(10), F(6),  KC_MENU, KC_LALT,  KC_LGUI,  KC_BSPACE,  KC_SPACE,  KC_RCTRL,  KC_LEFT,  KC_DOWN,  KC_UP, KC_RIGHT \
+),
+
+[_ARROW] = KEYMAP( \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_HOME,  KC_UP,  KC_END,  KC_PGUP, \
+  KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_LEFT,  KC_DOWN,  KC_RIGHT,  KC_PGDN, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_HOME,  KC_PGDN,  KC_PGUP,  KC_END,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO \
+),
+
+[_SYMBOL] = KEYMAP( \
+  KC_TILD,  KC_GRAVE,  KC_NO,  KC_EQUAL,  KC_PLUS,  KC_NO,  KC_LBRACKET,  KC_RBRACKET,  KC_AMPR,  KC_ASTR,  KC_LPRN,  KC_RPRN, \
+  KC_NO,  KC_NO,  KC_TRNS,  KC_SCOLON,  KC_COLN,  KC_NO,  KC_LCBR,  KC_RCBR,  KC_DLR,  KC_PERC,  KC_CIRC,  F(21), \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_BSLASH,  KC_SLASH,  KC_EXLM,  KC_AT,  KC_HASH,  KC_PIPE, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_ASTR,   KC_SLASH,  KC_MINUS,  KC_PLUS,  KC_EQUAL \
+),
+
+[_NUMBER] = KEYMAP( \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_7,  KC_8,  KC_9,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_4,  KC_5,  KC_6,  KC_NO, \
+ KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_0,  KC_1,  KC_2,  KC_3,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_ASTR,  KC_SLASH,  KC_MINUS,  KC_PLUS,  KC_EQUAL \
+),
+
+[_FUNCTION] = KEYMAP( \
+  KC_PSCREEN,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_TRNS,  KC_NO,  KC_F7,  KC_F8,  KC_F9,  KC_F10,  KC_F11,  KC_F12, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO, KC_NO,  KC_AUDIO_MUTE,  KC_AUDIO_VOL_DOWN,  KC_AUDIO_VOL_UP,  KC_MEDIA_PLAY_PAUSE, \
+  RESET,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_DELETE,  KC_INSERT,  KC_HOME,  KC_PGDN,  KC_PGUP,  KC_END \
+),
+
+[_EMACS] = KEYMAP( \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO, \
+  KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO \
+),
+
+[_MACROS] = KEYMAP( \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO, \
+  KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO \
+),
+
+[_MOUSE] = KEYMAP( \
+  KC_NO,  KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_MS_U,  KC_NO,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_MS_L,  KC_MS_D,  KC_MS_R,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO, \
+  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_MS_BTN1,  KC_MS_BTN2,  KC_MS_BTN3,  KC_NO,  KC_NO,  KC_NO \
+)
+};
+
+enum function_id {
+    TEENSY_KEY,
+    CUSTOM_KEY,
+    L_CTRL_ALT_ENT,
+    R_CTRL_ALT_ENT,
+};
+
+int CAPSLOCKED = 0;
+
+  const uint16_t PROGMEM fn_actions[] = {
+
+    // DVORAK 0
+    // ARROW 1, F(1)
+    // SYMBOL 2, F(2)
+    // NUMBER 3, F(3)
+    // FUNCTION 4, F(4)
+    // EMACS 5, F(5)
+    // MACROS 6, F(6)
+    // MOUSE 7, F(7)
+
+    // Layers
+    [1] =  ACTION_LAYER_TAP_KEY(1, KC_A),     // FN1 = Momentary Arrow layer on A.
+    [2] =  ACTION_LAYER_TAP_KEY(2, KC_O),     // FN2 = Momentary symbOl layer on O.
+    [3] =  ACTION_LAYER_TAP_KEY(3, KC_E),     // FN3 = Momentary numbEr layer on E.
+    [4] =  ACTION_LAYER_TAP_KEY(4, KC_U),     // FN4 = Momentary fUnction layer on U.
+    [5] =  ACTION_LAYER_TAP_KEY(5, KC_Q),     // FN5 = Momentary emaQs layer on Q. 
+    [6] =  ACTION_LAYER_TAP_KEY(6, KC_LCTRL), // FN6 = Momentary MACROS on ??? key.
+    [7] =  ACTION_LAYER_TAP_KEY(7, KC_COMMA), // FN7 = Momentary MOUSE on , key.
+
+    // Special Keys
+    [10] =  ACTION_MODS_KEY(KC_LCTRL, KC_LALT), // FN10 = Ctrl + Alt.
+    
+    // Symbols
+    [21] =  ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // FN21 = Question mark.
+
+  };

+ 7 - 0
keyboards/nyquist/keymaps/333fred/Makefile

@@ -0,0 +1,7 @@
+KEY_LOCK_ENABLE = yes
+NKRO_ENABLE = yes
+CONSOLE_ENABLE = yes
+
+ifndef QUANTUM_DIR
+	include ../../../../Makefile
+endif

+ 75 - 0
keyboards/nyquist/keymaps/333fred/README.md

@@ -0,0 +1,75 @@
+# 333fred's Nyquist Layout
+
+This nyquist layout is based on my Ergodox Infinity Layout, which is [here](../../../ergodox/keymaps/333fred/README.md). It doesn't have all of my VS extensions, as I have my nyquist at home, not at work.
+
+## Layers
+
+### QWERTY
+The shift modifiers on this layer all use OSM to allow for quick single capitalization. Press and hold F to go to the VIM movement layer. Layer is also a one-shot layer toggle, and can be held down to type multiple characters on the Lower layer. Game is a regular toggle layer.
+
+```
+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  |LTVIMF|   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |/ Ctrl| Shift|
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Ctrl |  Alt |  F4  | GUI  |Lower | Bksp | Spc  | Ent  | Lock |   =  | Game | Del  |
+`-----------------------------------------------------------------------------------'
+```
+
+### Lower
+My symbol and numpad layer. APscr is a macro that sends ALT+PRSC, to take a screenshot of the current application.
+
+```
+Lower
+,-----------------------------------------------------------------------------------.
+| 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 |      |      |      |      |      |   0  |   .  |   =  | Prev | Next | Play |
+`-----------------------------------------------------------------------------------'
+```
+
+### VIM Movement
+Pressing and holding F moves to this layer, which turns hjkl into vim movement keys. a and d are macros which send WIN+Left and WIN+Right, respectively. Shift and CTRL have been remapped for ease of selecting text.
+```
+Vim Movement (Hold down F)
+,-----------------------------------------------------------------------------------.
+|      |      |      |      |      |      |      |      |      |      |      |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+|      |      |      |      |      |      |      |      |      |      |      |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+|      | DLeft|DRight| LCTRL|      |      | Left | Down |  Up  | Right|      |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+|      |      |      |      |      |      |      |      |      |      |      |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+|      |      |      |      | LShft|      |      |      |      |      |      |      |
+`-----------------------------------------------------------------------------------'
+ ```
+
+### Gaming
+This layer is designed for playing games. All one-shot modification has been turned off, and the common game controls keys have been moved around for easier access.
+```
+Gaming mode (Raise)
+,-----------------------------------------------------------------------------------.
+| ESC  |      |      |      |      |      |      |      |      |      |      |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+|      |      |      |      |      |      |      |      |      |      |      |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| CTRL |      |      |      |   F  |      |      |      |      |      |      |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Shift|   Z  |      |      |      |      |      |      |      |      |      |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Enter|      | Lock |      | Alt  |  Spc | Lower| Left |  Up  | Down | Right|QWERTY|
+`-----------------------------------------------------------------------------------'
+```

+ 14 - 0
keyboards/nyquist/keymaps/333fred/config.h

@@ -0,0 +1,14 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#define USE_SERIAL
+#define MASTER_LEFT
+
+#undef  TAPPING_TERM
+#define TAPPING_TERM 150
+
+#define PERMISSIVE_HOLD
+
+#endif

+ 135 - 0
keyboards/nyquist/keymaps/333fred/keymap.c

@@ -0,0 +1,135 @@
+#include "nyquist.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _VIM 2
+#define _GAME 3
+
+enum custom_macros {
+    DLEFT,
+    DRIGHT,
+    PSCREEN_APP
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+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  |LTVIMF|   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |/ Ctrl| Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl |  Alt |  F4  | GUI  |Lower | Bksp | Spc  | Ent  |  Alt |   +  | Game | Del  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = 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_BSLASH, \
+  KC_ESC,        KC_A,         KC_S,  KC_D,    LT(_VIM, 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, RCTL_T(KC_SLSH), OSM(MOD_RSFT), \
+  KC_LCTL,       KC_LALT,      KC_F4, KC_LGUI, OSL(_LOWER),    KC_BSPC, KC_SPC,  KC_ENT,  KC_LOCK, KC_EQL, TG(_GAME),       KC_DEL \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | 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 |      |      |      |      |      |   0  |   .  |   =  | Prev | Next | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = 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,        _______, _______, _______, _______, _______, KC_0,  KC_DOT, KC_EQL, KC_MPRV, KC_MNXT, KC_MPLY \
+),
+
+/* Vim Movement (Hold down F)
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | DLeft|DRight| LCTRL|      |      | Left | Down |  Up  | Right|      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      | LShft|      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_VIM] =  KEYMAP( \
+  _______, _______,  _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______,  _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, M(DLEFT), M(DRIGHT), KC_LCTL, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______, \
+  _______, _______,  _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______,  _______,   _______, KC_LSFT, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* Gaming mode (Raise)
+ * All one-shot mods are disabled on this layer
+ * ,-----------------------------------------------------------------------------------.
+ * | ESC  |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CTRL |      |      |      |   F  |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift|   Z  |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Enter|      | Lock |      | Alt  |  Spc | Lower| Left |  Up  | Down | Right|QWERTY|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAME] =  KEYMAP( \
+  KC_ESC,  _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______,    \
+  _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______,    \
+  KC_LCTL, _______, _______, _______, KC_F,    _______, _______,     _______, _______, _______, _______, _______,    \
+  KC_LSFT, KC_Z,    _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______,    \
+  KC_ENT,  _______, KC_LOCK, _______, KC_LALT, KC_SPC,  OSL(_LOWER), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, TO(_QWERTY) \
+)
+
+};
+
+void persistent_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;
+}

+ 3 - 0
keyboards/org60/Makefile

@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+	include ../../Makefile
+endif

+ 82 - 0
keyboards/org60/config.h

@@ -0,0 +1,82 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.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 <http://www.gnu.org/licenses/>.
+*/
+
+#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    大橘子外设 (Large orange peripherals)
+#define PRODUCT         Org60
+#define DESCRIPTION     Org60 Keyboard PCB by 大橘子外设 (Large orange peripherals)
+
+/* 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 { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* Backlight Setup */
+#define BACKLIGHT_PIN F5
+#define BACKLIGHT_LEVELS 6
+//#define BACKLIGHT_BREATHING
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* RGB Underglow
+ * F6 PIN for Org60 that has pre-soldered WS2812 LEDs
+ */
+#define RGB_DI_PIN F6
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 20     			// Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/* 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 magic key command */
+#define IS_COMMAND() ( \
+  keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define TAPPING_TERM 200
+
+#endif

+ 15 - 0
keyboards/org60/keymaps/boardy/Makefile

@@ -0,0 +1,15 @@
+
+# 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
+#
+CONSOLE_ENABLE = no         # Enable debugging console
+COMMAND_ENABLE = no         # Commands for debug and configuration
+TAP_DANCE_ENABLE = no 		# Tap Dance skills
+UNICODE_ENABLE = no         # Unicode
+
+ifndef QUANTUM_DIR
+	include ../../../../Makefile
+endif
+
+

+ 121 - 0
keyboards/org60/keymaps/boardy/keymap.c

@@ -0,0 +1,121 @@
+#include "org60.h"
+#include "action_layer.h"
+
+// Keyboard Layers
+enum keyboard_layers {
+  _BASE,        // Base Layer
+  _FUNCTION,    // Function Layer
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_BASE] = KEYMAP(
+  /*
+    0: Base Layer
+    .--------------------------------------------------------------------------------------------------------------------------------------.
+    | ~      | !      | @      | #      | $      | %      | ^      | &      | *      | (      | )      | _      | +      |                 |
+    |        |        |        |        |        |        |        |        |        |        |        |        |        |                 |
+    | Esc    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | Backspace       |
+    |--------------------------------------------------------------------------------------------------------------------------------------|
+    |            |        |        |        |        |        |        |        |        |        |        | {      | ]      | |           |
+    |            |        |        |        |        |        |        |        |        |        |        |        |        |             |
+    | Tab        | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | [      | ]      | \           |
+    |--------------------------------------------------------------------------------------------------------------------------------------|
+    |               |        |        |        |        |        |        |        |        |        | :      | "      |                   |
+    |               |        |        |        |        |        |        |        |        |        |        |        |                   |
+    | PrntScr       | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      | Enter             |
+    |--------------------------------------------------------------------------------------------------------------------------------------|
+    |                   |        |        |        |        |        |        |        | <      | >      | ?      |░░░░░░|        |░░░░░░░░|
+    |                   |        |        |        |        |        |        |        |        |        |        |░░░░░░|        |░░░░░░░░|
+    | Shift             | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      |░░░░░░| Up     |░░░░░░░░|
+    |--------------------------------------------------------------------------------------------------------------------------------------|
+    |          |          |          |                                                        |          |░░░░░░|        |        |        |
+    |          |          |          |                                                        |          |░░░░░░|        |        |        |
+    | Ctrl     | Win      | Alt      | Space                                                  | FnO      |░░░░░░| Left   | Down   | Right  |
+    '--------------------------------------------------------------------------------------------------------------------------------------'
+  */
+
+   //--------------------------------------------------------------------------------------------------------------------------------------.
+   //        |        |        |        |        |        |        |        |        |        |        |        |        |                 |
+   //        |        |        |        |        |        |        |        |        |        |        |        |        |                 |
+     KC_GESC, 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_NO,   
+   //--------------------------------------------------------------------------------------------------------------------------------------|
+   //            |        |        |        |        |        |        |        |        |        |        |        |        |             |
+   //            |        |        |        |        |        |        |        |        |        |        |        |        |             |
+     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_PSCR,        KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_NO, 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_NO, KC_UP,   KC_NO,   
+   //--------------------------------------------------------------------------------------------------------------------------------------|
+   //          |          |          |                                                        |          |░░░░░░|        |        |        |
+   //          |          |          |                                                        |          |░░░░░░|        |        |        |
+     KC_LCTL,   KC_LGUI,   KC_LALT,   KC_SPC,                                                  F(0),      KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT),
+   //--------------------------------------------------------------------------------------------------------------------------------------'
+
+
+  [_FUNCTION] = KEYMAP(
+  /*
+    1: Function Layer
+    .--------------------------------------------------------------------------------------------------------------------------------------.
+    |        |        |        |        |        |        |        |        |        |        |        |        |        |                 |
+    |        |        |        |        |        |        |        |        |        |        |        |        |        |                 |
+    | Esc    | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    | Delete          |
+    |--------------------------------------------------------------------------------------------------------------------------------------|
+    |            |        |        |        |        |        |        |        |        |        |        |        |        |             |
+    |            |        |        |        | RGB    | RGB    | RGB    | RGB    |        |        |        |        |        |             |
+    | Reset      | 7      | 8      | 9      | Toggle | Mode   | Pwr+   | Pwr-   |        | Insert | Pause  | Home   | End    | Sleep       |
+    |--------------------------------------------------------------------------------------------------------------------------------------|
+    |               |        |        |        |        |        |        |        |        |        |        |        |                   |
+    |               |        |        |        | RGB    | RGB    | RGB    | RGB    |        |        | Page   | Page   |                   |
+    | Caps Lock     | 4      | 5      | 6      | Hue+   | Hue-   | Sat+   | Sat-   |        |        | Up     | Down   | Enter             |
+    |--------------------------------------------------------------------------------------------------------------------------------------|
+    |                   |        |        |        |        |        |        |        |        |        |        |░░░░░░|        |░░░░░░░░|
+    |                   |        |        |        |        | Back   | Back   |        | Prev   | Next   |        |░░░░░░|        |░░░░░░░░|
+    | Shift             | 1      | 2      | 3      |        | Light+ | Light- |        | Track  | Track  |        |░░░░░░| Up     |░░░░░░░░|
+    |--------------------------------------------------------------------------------------------------------------------------------------|
+    |          |          |          |                                                        |          |░░░░░░|        |        |        |
+    |          |          |          |                                                        |          |░░░░░░|        |        |        |
+    | Ctrl     | Win      | Alt      | 0                                                      | Fn0      |░░░░░░| Mute   | Down   | Right  |
+    '--------------------------------------------------------------------------------------------------------------------------------------'
+  */
+
+   //--------------------------------------------------------------------------------------------------------------------------------------.
+   //        |        |        |        |        |        |        |        |        |        |        |        |        |                 |
+   //        |        |        |        |        |        |        |        |        |        |        |        |        |                 |
+     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_NO,   
+   //--------------------------------------------------------------------------------------------------------------------------------------|
+   //            |        |        |        |        |        |        |        |        |        |        |        |        |             |
+   //            |        |        |        |        |        |        |        |        |        |        |        |        |             |
+     RESET,       KC_7,    KC_8,    KC_9,    RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, KC_NO,   KC_INS,  KC_PAUS, KC_HOME, KC_END,  KC_SLEP,      
+   //--------------------------------------------------------------------------------------------------------------------------------------|
+   //               |        |        |        |        |        |        |        |        |        |        |        |                   |
+   //               |        |        |        |        |        |        |        |        |        |        |        |                   |
+     KC_CAPS,        KC_4,    KC_5,    KC_6,    RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_NO,   KC_NO,   KC_PGUP, KC_PGDN, KC_NO, KC_ENT,      
+   //--------------------------------------------------------------------------------------------------------------------------------------|
+   //                   |        |        |        |        |        |        |        |        |        |        |░░░░░░|        |░░░░░░░░|
+   //                   |        |        |        |        |        |        |        |        |        |        |░░░░░░|        |░░░░░░░░|
+     KC_LSFT, KC_NO,     KC_1,    KC_2,    KC_3,    KC_NO,   BL_INC,  BL_DEC,  KC_NO,   KC_MPRV, KC_MNXT, KC_NO,   KC_NO, KC_VOLU, KC_NO,   
+   //--------------------------------------------------------------------------------------------------------------------------------------|
+   //          |          |          |                                                        |          |░░░░░░|        |        |        |
+   //          |          |          |                                                        |          |░░░░░░|        |        |        |
+     KC_LCTL,   KC_LGUI,   KC_LALT,   KC_0,                                                    F(0),      KC_NO, KC_MUTE, KC_VOLD, KC_MPLY),
+   //--------------------------------------------------------------------------------------------------------------------------------------'
+
+};
+
+
+// Custom Actions
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_MOMENTARY(_FUNCTION),  // to Function overlay
+};
+
+
+// Loop
+void matrix_scan_user(void) {
+  // Empty
+};

+ 7 - 0
keyboards/org60/keymaps/boardy/readme.md

@@ -0,0 +1,7 @@
+# Boardy layout
+
+![Uses this layout](http://i.imgur.com/k3g488o.jpg)
+
+This is my custom layout for my board Boardy designed to be used with an [Org60] and custom plate.
+
+[Org60]: https://world.taobao.com/item/544441405112.htm

+ 2 - 2
keyboards/xd60/keymaps/BASE/keymap.c

@@ -1,4 +1,4 @@
-#include "xd60.h"
+#include "org60.h"
 #include "action_layer.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -43,4 +43,4 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
 // Loop
 void matrix_scan_user(void) {
   // Empty
-};
+};

keyboards/xd60/keymaps/BASE/readme.md → keyboards/org60/keymaps/default/readme.md


+ 19 - 0
keyboards/org60/org60.c

@@ -0,0 +1,19 @@
+#include "org60.h"
+
+
+extern inline void org60_caps_led_on(void);
+extern inline void org60_bl_led_on(void);
+
+extern inline void org60_caps_led_off(void);
+extern inline void org60_bl_led_off(void);
+
+
+void led_set_kb(uint8_t usb_led) {
+	if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+		org60_caps_led_on();
+	} else {
+		org60_caps_led_off();
+	}
+
+	led_set_user(usb_led);
+}

+ 37 - 0
keyboards/org60/org60.h

@@ -0,0 +1,37 @@
+#ifndef Org60_H
+#define Org60_H
+
+#include "quantum.h"
+#include "led.h"
+
+/* Org60 LEDs
+ *   GPIO pads
+ *   0 F7 not connected
+ *   1 F6 RGB PWM Underglow
+ *   2 F5 Backlight LED
+ *   3 F4 not connected
+ *   B2 Capslock LED
+ *   B0 not connected
+ */
+inline void org60_caps_led_on(void)    { DDRB |=  (1<<2); PORTB &= ~(1<<2); }
+inline void org60_bl_led_on(void)    	{ DDRF |=  (1<<5); PORTF &= ~(1<<5); }
+
+inline void org60_caps_led_off(void)   { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
+inline void org60_bl_led_off(void)   	{ DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
+
+/* Org60 Keymap Definition Macro */
+#define KEYMAP( \
+      K00,  K01,  K02,  K03,  K04,  K05,  K06,  K07,  K08,  K09,  K0A,  K0B,  K0C,  K0D,  K49, \
+      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,  K2D,       \
+      K30,  K31,  K32,  K33,  K34,  K35,  K36,  K37,  K38,  K39,  K3A,  K3B,  K47,  K3D,  K3C, \
+      K40,  K41,  K42,              K45,                          K4A,  K4B,  K48,  K4C,  K4D  \
+) { \
+    { 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,  K2D }, \
+    { K30,  K31,  K32,  K33,  K34,  K35,  K36,  K37,  K38,  K39,  K3A,  K3B,  K3C,  K3D }, \
+    { K40,  K41,  K42,  KC_NO,KC_NO,K45,  KC_NO,K47,  K48,  K49,  K4A,  K4B,  K4C,  K4D }  \
+}
+
+#endif

+ 21 - 0
keyboards/org60/readme.md

@@ -0,0 +1,21 @@
+# QMK Firmware for 大橘子外设 (Large Orange Peripheral)'s 60% Org60 PCB
+
+![Top View of a pair of XD60 Keyboards (same layout as Org60)](https://i.imgur.com/3Jq2743.jpg)
+
+
+## Quantum MK Firmware
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+
+## Additional Notes
+The Org60 seems to be a variant of the XD60 (which is essentially a GH60 rev. C, with support for a right-hand arrow cluster), which has USB-C and built-in RGB underlighting.
+
+Compatibility with GH60 expansion boards is unknown.
+
+Board also supports in-switch LEDs (two-pin, single colour), as well as WS2182 LED strips for underglow lighting.
+
+Default keymap included, matching configuration on sale page.
+
+
+## Build
+To build the default keymap, simply run `make org60-default`.

+ 64 - 0
keyboards/org60/rules.mk

@@ -0,0 +1,64 @@
+# 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)
+
+
+# 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
+AUDIO_ENABLE = no           # Audio output on port C6
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration(+1000)
+COMMAND_ENABLE = no         # Commands for debug and configuration
+CONSOLE_ENABLE = no         # Console for debug(+400)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+MIDI_ENABLE = no            # MIDI controls
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = yes       # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+UNICODE_ENABLE = no         # Unicode

+ 10 - 0
keyboards/planck/keymaps/piemod/Makefile

@@ -0,0 +1,10 @@
+SUBPROJECT_DEFAULT = rev4
+
+MOUSEKEY_ENABLE = yes
+BLUETOOTH_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+AUDIO_ENABLE = yes 
+
+ifndef QUANTUM_DIR
+	include ../../../../Makefile
+endif

+ 31 - 0
keyboards/planck/keymaps/piemod/README.md

@@ -0,0 +1,31 @@
+PieMod
+======
+
+A keymap for users that need:
+
+- *P*: Programming symbols.
+
+- *I*: i3wm.
+
+- *E*: Emacs.
+
+- *M*: Macros.
+
+- *O*: Ortholinear.
+
+- *D*: Dvorak.
+
+Still a work-in-progress. Suggestions welcome @ https://github.com/dwrz/piemod.
+
+### Keymap
+
+![PieMod Keymap](./keymap.png)
+
+### TODO
+
+- [ ] Add Emacs layer.
+- [ ] Add Macro layer.
+- [ ] Add system control keys (rotation, brightness).
+- [ ] Switch " and ' quotes (or function to toggle default).
+- [ ] Add capslock.
+.

+ 111 - 0
keyboards/planck/keymaps/piemod/keymap.c

@@ -0,0 +1,111 @@
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+#define DVORAK 0
+#define ARROW 1 //F(1)
+#define SYMBOL 2 // F(2)
+#define NUMBER 3 // F(3)
+#define FUNCTION 4 // F(4)
+#define EMACS 5 // F(5)
+#define CUSTOM_MACROS 6 // F(6)
+#define MOUSE 7 // F(7)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [DVORAK] = {
+    {KC_ESC,  KC_QUOTE,  F(7),  KC_DOT,  KC_P,  KC_Y,  KC_F,  KC_G,  KC_C,  KC_R,  KC_L,  KC_DELETE},
+    {KC_TAB,  F(1),  F(2),  F(3),  F(4),  KC_I,  KC_D,  KC_H,  KC_T,  KC_N,  KC_S,  KC_ENTER},
+    {KC_LSHIFT,  KC_SCOLON,  F(5),   KC_J,   KC_K,  KC_X,   KC_B,   KC_M,   KC_W,  KC_V,  KC_Z,  KC_MINUS},
+    {F(10), F(6),  KC_MENU, KC_LALT,  KC_LGUI,  KC_BSPACE,  KC_SPACE,  KC_RCTRL,  KC_LEFT,  KC_DOWN,  KC_UP, KC_RIGHT},
+  },
+
+  [ARROW] = {
+    {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_HOME,  KC_UP,  KC_END,  KC_PGUP},
+    {KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_LEFT,  KC_DOWN,  KC_RIGHT,  KC_PGDN},
+    {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_HOME,  KC_PGDN,  KC_PGUP,  KC_END,  KC_NO},
+    {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO}
+  },
+
+  [SYMBOL] = {
+    {KC_TILD,  KC_GRAVE,  KC_NO,  KC_EQUAL,  KC_PLUS,  KC_NO,  KC_LBRACKET,  KC_RBRACKET,  KC_AMPR,  KC_ASTR,  KC_LPRN,  KC_RPRN},
+    {KC_NO,  KC_NO,  KC_TRNS,  KC_SCOLON,  KC_COLN,  KC_NO,  KC_LCBR,  KC_RCBR,  KC_DLR,  KC_PERC,  KC_CIRC,  F(21)},
+    {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_BSLASH,  KC_SLASH,  KC_EXLM,  KC_AT,  KC_HASH,  KC_PIPE},
+    {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_ASTR,   KC_SLASH,  KC_MINUS,  KC_PLUS,  KC_EQUAL}
+  },
+
+  [NUMBER] = {
+    {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_7,  KC_8,  KC_9,  KC_NO},
+    {KC_NO,  KC_NO,  KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_4,  KC_5,  KC_6,  KC_NO},
+    {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_0,  KC_1,  KC_2,  KC_3,  KC_NO},
+    {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_ASTR,  KC_SLASH,  KC_MINUS,  KC_PLUS,  KC_EQUAL}
+  },
+
+  [FUNCTION] = {
+    {KC_PSCREEN,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6},
+     {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_TRNS,  KC_NO,  KC_F7,  KC_F8,  KC_F9,  KC_F10,  KC_F11,  KC_F12},
+     {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO, KC_NO,  KC_AUDIO_MUTE,  KC_AUDIO_VOL_DOWN,  KC_AUDIO_VOL_UP,  KC_MEDIA_PLAY_PAUSE},
+     {RESET,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_DELETE,  KC_INSERT,  KC_HOME,  KC_PGDN,  KC_PGUP,  KC_END}
+    },
+
+    [EMACS] = {
+      {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO},
+      {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO},
+      {KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO},
+      {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO}
+    },
+
+    [CUSTOM_MACROS] = {
+      {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO},
+      {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO},
+      {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO},
+      {KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO}
+    },
+
+    [MOUSE] = {
+      {KC_NO,  KC_NO,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_MS_U,  KC_NO,  KC_NO},
+      {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_MS_L,  KC_MS_D,  KC_MS_R,  KC_NO},
+      {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO},
+      {KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_MS_BTN1,  KC_MS_BTN2,  KC_MS_BTN3,  KC_NO,  KC_NO,  KC_NO}
+    },
+
+  };
+
+  enum function_id {
+    TEENSY_KEY,
+    CUSTOM_KEY,
+    L_CTRL_ALT_ENT,
+    R_CTRL_ALT_ENT,
+  };
+
+  int CAPSLOCKED = 0;
+
+  const uint16_t PROGMEM fn_actions[] = {
+
+    // DVORAK 0
+    // ARROW 1, F(1)
+    // SYMBOL 2, F(2)
+    // NUMBER 3, F(3)
+    // FUNCTION 4, F(4)
+    // EMACS 5, F(5)
+    // MACROS 6, F(6)
+    // MOUSE 7, F(7)
+
+    // Layers
+    [1] =  ACTION_LAYER_TAP_KEY(1, KC_A),     // FN1 = Momentary Arrow layer on A.
+    [2] =  ACTION_LAYER_TAP_KEY(2, KC_O),     // FN2 = Momentary symbOl layer on O.
+    [3] =  ACTION_LAYER_TAP_KEY(3, KC_E),     // FN3 = Momentary numbEr layer on E.
+    [4] =  ACTION_LAYER_TAP_KEY(4, KC_U),     // FN4 = Momentary fUnction layer on U.
+    [5] =  ACTION_LAYER_TAP_KEY(5, KC_Q),     // FN5 = Momentary emaQs layer on Q. 
+    [6] =  ACTION_LAYER_TAP_KEY(6, KC_LCTRL), // FN6 = Momentary MACROS on ??? key.
+    [7] =  ACTION_LAYER_TAP_KEY(7, KC_COMMA), // FN7 = Momentary MOUSE on , key.
+
+    // Special Keys
+    [10] =  ACTION_MODS_KEY(KC_LCTRL, KC_LALT), // FN10 = Ctrl + Alt.
+    
+    // Symbols
+    [21] =  ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // FN21 = Question mark.
+
+  };

+ 1 - 1
keyboards/planck/keymaps/priyadi/config.h

@@ -23,7 +23,7 @@
 #define DOUBLESPACE_LAYER_ENABLE
     // #define TOLELOT_ENABLE
 
-#define KEYMAP( \
+#define KEYMAP_CUSTOM( \
     k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
     k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
     k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \

+ 2 - 0
keyboards/planck/planck.h

@@ -36,4 +36,6 @@
 	{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \
 }
 
+#define KEYMAP PLANCK_GRID
+
 #endif

+ 1 - 1
keyboards/uk78/config.h

@@ -73,4 +73,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define RGBLIGHT_VAL_STEP 8
 #endif
 
-#endif
+#endif

+ 0 - 46
keyboards/xd60/keymaps/base/keymap.c

@@ -1,46 +0,0 @@
-#include "xd60.h"
-#include "action_layer.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-  // 0: Base Layer
-  KEYMAP(
-      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_NO,    \
-      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_CAPS, KC_A,    KC_S,    KC_D,    KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,    KC_SCLN, KC_QUOT,  KC_NO,             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_NO,  KC_RSFT  ,KC_UP,    KC_DEL,      \
-      KC_LCTL, KC_LGUI, KC_LALT,                          KC_SPC,                          KC_RGUI, F(0),     KC_LEFT, KC_DOWN,  KC_RIGHT),
-
-  // 1: Function Layer
-  KEYMAP(
-      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,  KC_NO,   KC_NO,    \
-      KC_NO,   KC_WH_U, KC_UP,   KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO,  KC_INS, KC_NO,   KC_PSCR, KC_SLCK,  KC_PAUS,           KC_DEL,    \
-      KC_NO,   KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO,  KC_NO,  KC_NO,   KC_HOME, KC_PGUP,  KC_NO,             KC_ENT,    \
-      KC_LSFT, KC_NO,   KC_NO,   KC_APP,  BL_STEP,KC_NO,  KC_NO,  KC_VOLD,KC_VOLU,KC_MUTE, KC_END,  KC_RSFT,  KC_NO  ,KC_PGUP,  KC_INS,      \
-      KC_LCTL, KC_LGUI, KC_LALT,                          KC_SPC,                          KC_RGUI, F(0),     KC_HOME, KC_PGDOWN,KC_END),
-
-};
-
-// Custom Actions
-const uint16_t PROGMEM fn_actions[] = {
-    [0] = ACTION_LAYER_MOMENTARY(1),  // to Fn overlay
-};
-
-// Macros
-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;
-};
-
-// Loop
-void matrix_scan_user(void) {
-  // Empty
-};

+ 0 - 5
keyboards/xd60/keymaps/base/readme.md

@@ -1,5 +0,0 @@
-![Uses this layout](https://i.redd.it/v64eqwsrk8jx.jpg)
-
-All of the keys which CAN have a function should be assigned one.
-
-The keys with KC_NO cannot be assigned a value

+ 1 - 1
lib/chibios

@@ -1 +1 @@
-Subproject commit 8fce03b3a75c743e5d5c40b9d59c1637c59d22a7
+Subproject commit d34e8eb83101a95f98892bf68605fe545821f320

+ 138 - 0
quantum/process_keycode/process_key_lock.c

@@ -0,0 +1,138 @@
+/* Copyright 2017 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "inttypes.h"
+#include "stdint.h"
+#include "process_key_lock.h"
+
+#define BV_64(shift) (((uint64_t)1) << (shift))
+#define GET_KEY_ARRAY(code) (((code) < 0x40) ? key_state[0] : \
+                             ((code) < 0x80) ? key_state[1] : \
+                             ((code) < 0xC0) ? key_state[2] : key_state[3])
+#define GET_CODE_INDEX(code) (((code) < 0x40) ? (code) : \
+                              ((code) < 0x80) ? (code) - 0x40 : \
+                              ((code) < 0xC0) ? (code) - 0x80 : (code) - 0xC0)
+#define KEY_STATE(code)  (GET_KEY_ARRAY(code) & BV_64(GET_CODE_INDEX(code))) == BV_64(GET_CODE_INDEX(code))
+#define SET_KEY_ARRAY_STATE(code, val) do { \
+    switch (code) { \
+        case 0x00 ... 0x3F: \
+            key_state[0] = (val); \
+            break; \
+        case 0x40 ... 0x7F: \
+            key_state[1] = (val); \
+            break; \
+        case 0x80 ... 0xBF: \
+            key_state[2] = (val); \
+            break; \
+        case 0xC0 ... 0xFF: \
+            key_state[3] = (val); \
+            break; \
+    } \
+} while(0)
+#define SET_KEY_STATE(code) SET_KEY_ARRAY_STATE(code, (GET_KEY_ARRAY(code) | BV_64(GET_CODE_INDEX(code))))
+#define UNSET_KEY_STATE(code) SET_KEY_ARRAY_STATE(code, (GET_KEY_ARRAY(code)) & ~(BV_64(GET_CODE_INDEX(code))))
+#define IS_STANDARD_KEYCODE(code) ((code) <= 0xFF)
+
+// Locked key state. This is an array of 256 bits, one for each of the standard keys supported qmk.
+uint64_t key_state[4] = { 0x0, 0x0, 0x0, 0x0 };
+bool watching = false;
+
+// Translate any OSM keycodes back to their unmasked versions.
+uint16_t inline translate_keycode(uint16_t keycode) {
+    if (keycode > QK_ONE_SHOT_MOD && keycode <= QK_ONE_SHOT_MOD_MAX) {
+        return keycode ^ QK_ONE_SHOT_MOD;
+    } else {
+        return keycode;
+    }
+}
+
+bool process_key_lock(uint16_t *keycode, keyrecord_t *record) {
+    // We start by categorizing the keypress event. In the event of a down
+    // event, there are several possibilities:
+    // 1. The key is not being locked, and we are not watching for new keys.
+    //    In this case, we bail immediately. This is the common case for down events.
+    // 2. The key was locked, and we need to unlock it. In this case, we will
+    //    reset the state in our map and return false. When the user releases the
+    //    key, the up event will no longer be masked and the OS will observe the
+    //    released key.
+    // 3. KC_LOCK was just pressed. In this case, we set up the state machine
+    //    to watch for the next key down event, and finish processing
+    // 4. The keycode is below 0xFF, and we are watching for new keys. In this case,
+    //    we will send the key down event to the os, and set the key_state for that
+    //    key to mask the up event.
+    // 5. The keycode is above 0xFF, and we're wathing for new keys. In this case,
+    //    the user pressed a key that we cannot "lock", as it's a series of keys,
+    //    or a macro invocation, or a layer transition, or a custom-defined key, or
+    //    or some other arbitrary code. In this case, we bail immediately, reset
+    //    our watch state, and return true.
+    //
+    // In the event of an up event, there are these possibilities:
+    // 1. The key is not being locked. In this case, we return true and bail
+    //    immediately. This is the common case.
+    // 2. The key is being locked. In this case, we will mask the up event
+    //    by returning false, so the OS never sees that the key was released
+    //    until the user pressed the key again.
+
+    // We translate any OSM keycodes back to their original keycodes, so that if the key being
+    // one-shot modded is a standard keycode, we can handle it. This is the only set of special
+    // keys that we handle
+    uint16_t translated_keycode = translate_keycode(*keycode);
+
+    if (record->event.pressed) {
+        // Non-standard keycode, reset and return
+        if (!(IS_STANDARD_KEYCODE(translated_keycode) || translated_keycode == KC_LOCK)) {
+            watching = false;
+            return true;
+        }
+
+        // If we're already watching, turn off the watch.
+        if (translated_keycode == KC_LOCK) {
+            watching = !watching;
+            return false;
+        }
+
+        if (IS_STANDARD_KEYCODE(translated_keycode)) {
+            // We check watching first. This is so that in the following scenario, we continue to
+            // hold the key: KC_LOCK, KC_F, KC_LOCK, KC_F
+            // If we checked in reverse order, we'd end up holding the key pressed after the second
+            // KC_F press is registered, when the user likely meant to hold F
+            if (watching) {
+                watching = false;
+                SET_KEY_STATE(translated_keycode);
+                // We need to set the keycode passed in to be the translated keycode, in case we
+                // translated a OSM back to the original keycode.
+                *keycode = translated_keycode;
+                // Let the standard keymap send the keycode down event. The up event will be masked.
+                return true;
+            }
+
+            if (KEY_STATE(translated_keycode)) {
+                UNSET_KEY_STATE(translated_keycode);
+                // The key is already held, stop this process. The up event will be sent when the user
+                // releases the key.
+                return false;
+            }
+        }
+
+        // Either the key isn't a standard key, or we need to send the down event. Continue standard
+        // processing
+        return true;
+    } else {
+        // Stop processing if it's a standard key and we're masking up.
+        return !(IS_STANDARD_KEYCODE(translated_keycode) && KEY_STATE(translated_keycode));
+    }
+}
+

+ 24 - 0
quantum/process_keycode/process_key_lock.h

@@ -0,0 +1,24 @@
+/* Copyright 2017 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef PROCESS_KEY_LOCK_H
+#define PROCESS_KEY_LOCK_H
+
+#include "quantum.h"
+
+bool process_key_lock(uint16_t *keycode, keyrecord_t *record);
+
+#endif // PROCESS_KEY_LOCK_H

+ 15 - 5
quantum/quantum.c

@@ -40,13 +40,12 @@ extern backlight_config_t backlight_config;
   #ifndef AG_SWAP_SONG
     #define AG_SWAP_SONG SONG(AG_SWAP_SOUND)
   #endif
-  #ifndef DEFAULT_LAYER_SONGS
-    #define DEFAULT_LAYER_SONGS { }
-  #endif
   float goodbye_song[][2] = GOODBYE_SONG;
   float ag_norm_song[][2] = AG_NORM_SONG;
   float ag_swap_song[][2] = AG_SWAP_SONG;
-  float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS;
+  #ifdef DEFAULT_LAYER_SONGS
+    float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS;
+  #endif
 #endif
 
 static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
@@ -193,6 +192,10 @@ bool process_record_quantum(keyrecord_t *record) {
     // }
 
   if (!(
+  #if defined(KEY_LOCK_ENABLE)
+    // Must run first to be able to mask key_up events.
+    process_key_lock(&keycode, record) &&
+  #endif
     process_record_kb(keycode, record) &&
   #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
     process_midi(keycode, record) &&
@@ -475,6 +478,13 @@ bool process_record_quantum(keyrecord_t *record) {
       void (*method)(uint8_t) = (record->event.pressed) ? &add_key : &del_key;
       uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)
                                       |MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)));
+      
+#ifdef GRAVE_ESC_CTRL_OVERRIDE
+      // if CTRL is pressed, ESC is always read as ESC, even if SHIFT or GUI is pressed.
+      // this is handy for the ctrl+shift+esc shortcut on windows, among other things.
+      if (get_mods() & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)))
+        shifted = 0;
+#endif
 
       method(shifted ? KC_GRAVE : KC_ESCAPE);
       send_keyboard_report(); 
@@ -556,7 +566,7 @@ void send_string_with_delay(const char *str, uint8_t interval) {
 }
 
 void set_single_persistent_default_layer(uint8_t default_layer) {
-  #ifdef AUDIO_ENABLE
+  #if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
     PLAY_SONG(default_layer_songs[default_layer]);
   #endif
   eeconfig_update_default_layer(1U<<default_layer);

+ 4 - 0
quantum/quantum.h

@@ -99,6 +99,10 @@ extern uint32_t default_layer_state;
 	#include "process_combo.h"
 #endif
 
+#ifdef KEY_LOCK_ENABLE
+	#include "process_key_lock.h"
+#endif
+
 #define SEND_STRING(str) send_string(PSTR(str))
 extern const bool ascii_to_shift_lut[0x80];
 extern const uint8_t ascii_to_keycode_lut[0x80];

+ 4 - 0
quantum/quantum_keycodes.h

@@ -419,6 +419,10 @@ enum quantum_keycodes {
     OUT_BT,
 #endif
 
+#ifdef KEY_LOCK_ENABLE
+    KC_LOCK,
+#endif
+
     // always leave at the end
     SAFE_RANGE
 };

+ 5 - 0
quantum/template/config.h

@@ -67,6 +67,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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
  *

+ 2 - 2
tmk_core/rules.mk

@@ -382,7 +382,7 @@ $(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null)))
 
 
 # Listing of phony targets.
-.PHONY : all finish sizebefore sizeafter gccversion \
-build elf hex eep lss sym coff extcoff \
+.PHONY : all finish sizebefore sizeafter qmkversion \
+gccversion build elf hex eep lss sym coff extcoff \
 clean clean_list debug gdb-config show_path \
 program teensy dfu flip dfu-ee flip-ee dfu-start