浏览代码

Merge remote-tracking branch 'origin/master' into develop

Drashna Jael're 3 年之前
父节点
当前提交
4be9919e9f
共有 55 个文件被更改,包括 1830 次插入171 次删除
  1. 1 1
      .github/workflows/format.yaml
  2. 1 1
      .github/workflows/format_push.yaml
  3. 31 31
      keyboards/chalice/chalice.h
  4. 110 29
      keyboards/chalice/info.json
  5. 50 0
      keyboards/cutie_club/keebcats/dougal/config.h
  6. 17 0
      keyboards/cutie_club/keebcats/dougal/dougal.c
  7. 34 0
      keyboards/cutie_club/keebcats/dougal/dougal.h
  8. 84 0
      keyboards/cutie_club/keebcats/dougal/info.json
  9. 28 0
      keyboards/cutie_club/keebcats/dougal/keymaps/default/keymap.c
  10. 49 0
      keyboards/cutie_club/keebcats/dougal/keymaps/via/keymap.c
  11. 1 0
      keyboards/cutie_club/keebcats/dougal/keymaps/via/rules.mk
  12. 18 0
      keyboards/cutie_club/keebcats/dougal/readme.md
  13. 21 0
      keyboards/cutie_club/keebcats/dougal/rules.mk
  14. 33 0
      keyboards/ergodash/mini/keymaps/yoshimaru46/config.h
  15. 111 0
      keyboards/ergodash/mini/keymaps/yoshimaru46/keymap.c
  16. 4 0
      keyboards/ergodash/mini/keymaps/yoshimaru46/readme.md
  17. 4 0
      keyboards/ergodash/mini/keymaps/yoshimaru46/rules.mk
  18. 79 9
      keyboards/ffkeebs/puca/info.json
  19. 20 32
      keyboards/ffkeebs/puca/keymaps/default/keymap.c
  20. 38 0
      keyboards/ffkeebs/puca/keymaps/default_numpad/keymap.c
  21. 38 0
      keyboards/ffkeebs/puca/keymaps/default_ortho/keymap.c
  22. 14 0
      keyboards/ffkeebs/puca/puca.c
  23. 78 18
      keyboards/ffkeebs/puca/puca.h
  24. 1 1
      keyboards/ffkeebs/puca/readme.md
  25. 3 3
      keyboards/ffkeebs/puca/rules.mk
  26. 0 0
      keyboards/handwired/split89/info.json
  27. 14 14
      keyboards/handwired/split89/keymaps/default/keymap.c
  28. 20 18
      keyboards/handwired/split89/split89.h
  29. 53 0
      keyboards/mechanickeys/miniashen40/config.h
  30. 15 0
      keyboards/mechanickeys/miniashen40/info.json
  31. 47 0
      keyboards/mechanickeys/miniashen40/keymaps/default/keymap.c
  32. 47 0
      keyboards/mechanickeys/miniashen40/keymaps/via/keymap.c
  33. 2 0
      keyboards/mechanickeys/miniashen40/keymaps/via/rules.mk
  34. 17 0
      keyboards/mechanickeys/miniashen40/miniashen40.c
  35. 42 0
      keyboards/mechanickeys/miniashen40/miniashen40.h
  36. 40 0
      keyboards/mechanickeys/miniashen40/readme.md
  37. 21 0
      keyboards/mechanickeys/miniashen40/rules.mk
  38. 79 0
      keyboards/mtbkeys/mtb60/hotswap/config.h
  39. 17 0
      keyboards/mtbkeys/mtb60/hotswap/hotswap.c
  40. 33 0
      keyboards/mtbkeys/mtb60/hotswap/hotswap.h
  41. 72 0
      keyboards/mtbkeys/mtb60/hotswap/info.json
  42. 39 0
      keyboards/mtbkeys/mtb60/hotswap/keymaps/default/keymap.c
  43. 26 0
      keyboards/mtbkeys/mtb60/hotswap/readme.md
  44. 21 0
      keyboards/mtbkeys/mtb60/hotswap/rules.mk
  45. 79 0
      keyboards/mtbkeys/mtb60/solder/config.h
  46. 75 0
      keyboards/mtbkeys/mtb60/solder/info.json
  47. 40 0
      keyboards/mtbkeys/mtb60/solder/keymaps/default/keymap.c
  48. 26 0
      keyboards/mtbkeys/mtb60/solder/readme.md
  49. 21 0
      keyboards/mtbkeys/mtb60/solder/rules.mk
  50. 17 0
      keyboards/mtbkeys/mtb60/solder/solder.c
  51. 33 0
      keyboards/mtbkeys/mtb60/solder/solder.h
  52. 54 12
      lib/python/qmk/cli/format/python.py
  53. 5 0
      lib/python/qmk/cli/list/keymaps.py
  54. 5 0
      lib/python/qmk/cli/list/layouts.py
  55. 2 2
      lib/python/qmk/tests/test_cli_commands.py

+ 1 - 1
.github/workflows/format.yaml

@@ -37,7 +37,7 @@ jobs:
       shell: 'bash {0}'
       run: |
         qmk format-c --core-only $(< ~/files.txt)
-        qmk format-python
+        qmk format-python $(< ~/files.txt)
         qmk format-text $(< ~/files.txt)
         git diff
 

+ 1 - 1
.github/workflows/format_push.yaml

@@ -25,7 +25,7 @@ jobs:
       shell: 'bash {0}'
       run: |
         qmk format-c -a
-        qmk format-python
+        qmk format-python -a
         qmk format-text -a
         git diff
 

+ 31 - 31
keyboards/chalice/chalice.h

@@ -17,44 +17,44 @@
 
 #pragma once
 
-#define ____ KC_NO
+#define ___ KC_NO
 
 #include "quantum.h"
 
 #define LAYOUT_default( \
-	  K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  K014,        \
-	  K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  K114, 		 \
-	  K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,               \
-	         K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  K313,  K214,        \
-	         K401,  K402,         K404,         K406,         K408,         K410,  K411,         K412,  K413,  K314  \
+      K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K46,      \
+      K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K56,      \
+      K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K66, K76,           \
+           K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K86, K96,      \
+           K80, K91,      K82,      K92,      K83,      K93, K84,      K94, K85, K95  \
 ) { \
-	{ K000,  K002,  K004,  K006,  K008,  K010,  K012 }, \
-	{ K001,  K003,  K005,  K007,  K009,  K011,  K013 }, \
-	{ K100,  K102,  K104,  K106,  K108,  K110,  K112 }, \
-	{ K101,  K103,  K105,  K107,  K109,  K111,  K113 }, \
-	{ K200,  K202,  K204,  K206,  K208,  K210,  K014 }, \
-	{ K201,  K203,  K205,  K207,  K209,  K211,  K114 }, \
-	{ K301,  K303,  K305,  K307,  K309,  K311,  K212 }, \
-	{ K302,  K304,  K306,  K308,  K310,  K312,  K213 }, \
-	{ K401,  ____,  K404,  K408,  K411,  K413,  K313 }, \
-	{ ____,  K402,  K406,  K410,  K412,  K314,  K214 }  \
+    { K00, K01, K02, K03, K04, K05, K06 }, \
+    { K10, K11, K12, K13, K14, K15, K16 }, \
+    { K20, K21, K22, K23, K24, K25, K26 }, \
+    { K30, K31, K32, K33, K34, K35, K36 }, \
+    { K40, K41, K42, K43, K44, K45, K46 }, \
+    { K50, K51, K52, K53, K54, K55, K56 }, \
+    { K60, K61, K62, K63, K64, K65, K66 }, \
+    { K70, K71, K72, K73, K74, K75, K76 }, \
+    { K80, ___, K82, K83, K84, K85, K86 }, \
+    { ___, K91, K92, K93, K94, K95, K96 }  \
 }
 
 #define LAYOUT_split_bs( \
-	  K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  K014,  K403, \
-	  K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  K114, 		 \
-	  K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,               \
-	         K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  K313,  K214,        \
-	         K401,  K402,         K404,         K406,         K408,         K410,  K411,         K412,  K413,  K314  \
+      K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K46, K81, \
+      K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K56,      \
+      K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K66, K76,           \
+           K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K86, K96,      \
+           K80, K91,      K82,      K92,      K83,      K93, K84,      K94, K85, K95  \
 ) { \
-	{ K000,  K002,  K004,  K006,  K008,  K010,  K012 }, \
-	{ K001,  K003,  K005,  K007,  K009,  K011,  K013 }, \
-	{ K100,  K102,  K104,  K106,  K108,  K110,  K112 }, \
-	{ K101,  K103,  K105,  K107,  K109,  K111,  K113 }, \
-	{ K200,  K202,  K204,  K206,  K208,  K210,  K014 }, \
-	{ K201,  K203,  K205,  K207,  K209,  K211,  K114 }, \
-	{ K301,  K303,  K305,  K307,  K309,  K311,  K212 }, \
-	{ K302,  K304,  K306,  K308,  K310,  K312,  K213 }, \
-	{ K401,  K403,  K404,  K408,  K411,  K413,  K313 }, \
-	{ ____,  K402,  K406,  K410,  K412,  K314,  K214 }  \
+    { K00, K01, K02, K03, K04, K05, K06 }, \
+    { K10, K11, K12, K13, K14, K15, K16 }, \
+    { K20, K21, K22, K23, K24, K25, K26 }, \
+    { K30, K31, K32, K33, K34, K35, K36 }, \
+    { K40, K41, K42, K43, K44, K45, K46 }, \
+    { K50, K51, K52, K53, K54, K55, K56 }, \
+    { K60, K61, K62, K63, K64, K65, K66 }, \
+    { K70, K71, K72, K73, K74, K75, K76 }, \
+    { K80, K81, K82, K83, K84, K85, K86 }, \
+    { ___, K91, K92, K93, K94, K95, K96 }  \
 }

+ 110 - 29
keyboards/chalice/info.json

@@ -1,25 +1,27 @@
 {
     "keyboard_name": "Chalice",
     "url": "https://customkbd.com/products/chalice-pre-order",
-    "maintainer": "CustomKBD",
+    "maintainer": "joshajohnson, CustomKBD",
     "layouts": {
         "LAYOUT_default": {
             "layout": [
                 {"label":"Esc", "x":0, "y":0},
-                {"label":"~", "x":1.5, "y":0},
-                {"label":"!", "x":2.5, "y":0},
-                {"label":"@", "x":3.5, "y":0},
-                {"label":"#", "x":4.5, "y":0},
-                {"label":"$", "x":5.5, "y":0},
-                {"label":"%", "x":6.5, "y":0},
-                {"label":"^", "x":7.5, "y":0},
-                {"label":"&", "x":10.5, "y":0},
-                {"label":"*", "x":11.5, "y":0},
-                {"label":"(", "x":12.5, "y":0},
-                {"label":")", "x":13.5, "y":0},
-                {"label":"_", "x":14.5, "y":0},
-                {"label":"+", "x":15.5, "y":0},
+                {"label":"`~", "x":1.5, "y":0},
+                {"label":"1!", "x":2.5, "y":0},
+                {"label":"2@", "x":3.5, "y":0},
+                {"label":"3#", "x":4.5, "y":0},
+                {"label":"4$", "x":5.5, "y":0},
+                {"label":"5%", "x":6.5, "y":0},
+                {"label":"6^", "x":7.5, "y":0},
+                {"label":"7&", "x":10.5, "y":0},
+                {"label":"8*", "x":11.5, "y":0},
+                {"label":"9(", "x":12.5, "y":0},
+                {"label":"0)", "x":13.5, "y":0},
+                {"label":"-_", "x":14.5, "y":0},
+                {"label":"=+", "x":15.5, "y":0},
                 {"label":"Backspace", "x":16.5, "y":0, "w":2},
+
+                {"label":"Insert", "x":0, "y":1},
                 {"label":"Tab", "x":1.5, "y":1, "w":1.5},
                 {"label":"Q", "x":3, "y":1},
                 {"label":"W", "x":4, "y":1},
@@ -31,10 +33,10 @@
                 {"label":"I", "x":12, "y":1},
                 {"label":"O", "x":13, "y":1},
                 {"label":"P", "x":14, "y":1},
-                {"label":"{", "x":15, "y":1},
-                {"label":"}", "x":16, "y":1},
-                {"label":"|", "x":17, "y":1, "w":1.5},
-                {"label":"Mute", "x":19, "y":0.5},
+                {"label":"[{", "x":15, "y":1},
+                {"label":"]}", "x":16, "y":1},
+                {"label":"\\|", "x":17, "y":1, "w":1.5},
+
                 {"label":"Delete", "x":0, "y":2},
                 {"label":"Caps Lock", "x":1.5, "y":2, "w":1.75},
                 {"label":"A", "x":3.25, "y":2},
@@ -46,9 +48,10 @@
                 {"label":"J", "x":11.25, "y":2},
                 {"label":"K", "x":12.25, "y":2},
                 {"label":"L", "x":13.25, "y":2},
-                {"label":":", "x":14.25, "y":2},
-                {"label":"\"", "x":15.25, "y":2},
+                {"label":";:", "x":14.25, "y":2},
+                {"label":"'\"", "x":15.25, "y":2},
                 {"label":"Enter", "x":16.25, "y":2, "w":2.25},
+
                 {"label":"Shift", "x":1.5, "y":3, "w":2.25},
                 {"label":"Z", "x":3.75, "y":3},
                 {"label":"X", "x":4.75, "y":3},
@@ -58,21 +61,99 @@
                 {"label":"B", "x":9.75, "y":3},
                 {"label":"N", "x":10.75, "y":3},
                 {"label":"M", "x":11.75, "y":3},
-                {"label":"<", "x":12.75, "y":3},
-                {"label":">", "x":13.75, "y":3},
-                {"label":"?", "x":14.75, "y":3},
+                {"label":",<", "x":12.75, "y":3},
+                {"label":".>", "x":13.75, "y":3},
+                {"label":"/?", "x":14.75, "y":3},
                 {"label":"Shift", "x":15.75, "y":3, "w":1.75},
-                {"label":"Up", "x":17.75, "y":3.25},
+                {"label":"Up", "x":17.5, "y":3},
+
                 {"label":"Ctrl", "x":1.5, "y":4, "w":1.5},
                 {"label":"Alt", "x":4.5, "y":4, "w":1.5},
-                {"label":"Space", "x":6, "y":4, "w":2},
-                {"label":"Fn", "x":8, "y":4},
+                {"label":"Space", "x":6, "y":4, "w":2.25},
+                {"label":"Fn", "x":8.25, "y":4},
                 {"label":"Space", "x":9.75, "y":4, "w":2.75},
                 {"label":"Alt", "x":12.5, "y":4, "w":1.5},
                 {"label":"Ctrl", "x":15, "y":4, "w":1.5},
-                {"label":"Left", "x":16.75, "y":4.25},
-                {"label":"Down", "x":17.75, "y":4.25},
-                {"label":"Right", "x":18.75, "y":4.25}
+                {"label":"Left", "x":16.5, "y":4},
+                {"label":"Down", "x":17.5, "y":4},
+                {"label":"Right", "x":18.5, "y":4}
+            ]
+        },
+        "LAYOUT_split_bs": {
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"`~", "x":1.5, "y":0},
+                {"label":"1!", "x":2.5, "y":0},
+                {"label":"2@", "x":3.5, "y":0},
+                {"label":"3#", "x":4.5, "y":0},
+                {"label":"4$", "x":5.5, "y":0},
+                {"label":"5%", "x":6.5, "y":0},
+                {"label":"6^", "x":7.5, "y":0},
+                {"label":"7&", "x":10.5, "y":0},
+                {"label":"8*", "x":11.5, "y":0},
+                {"label":"9(", "x":12.5, "y":0},
+                {"label":"0)", "x":13.5, "y":0},
+                {"label":"-_", "x":14.5, "y":0},
+                {"label":"=+", "x":15.5, "y":0},
+                {"label":"Backspace", "x":16.5, "y":0},
+                {"label":"Backspace", "x":17.5, "y":0},
+
+                {"label":"Insert", "x":0, "y":1},
+                {"label":"Tab", "x":1.5, "y":1, "w":1.5},
+                {"label":"Q", "x":3, "y":1},
+                {"label":"W", "x":4, "y":1},
+                {"label":"E", "x":5, "y":1},
+                {"label":"R", "x":6, "y":1},
+                {"label":"T", "x":7, "y":1},
+                {"label":"Y", "x":10, "y":1},
+                {"label":"U", "x":11, "y":1},
+                {"label":"I", "x":12, "y":1},
+                {"label":"O", "x":13, "y":1},
+                {"label":"P", "x":14, "y":1},
+                {"label":"[{", "x":15, "y":1},
+                {"label":"]}", "x":16, "y":1},
+                {"label":"\\|", "x":17, "y":1, "w":1.5},
+
+                {"label":"Delete", "x":0, "y":2},
+                {"label":"Caps Lock", "x":1.5, "y":2, "w":1.75},
+                {"label":"A", "x":3.25, "y":2},
+                {"label":"S", "x":4.25, "y":2},
+                {"label":"D", "x":5.25, "y":2},
+                {"label":"F", "x":6.25, "y":2},
+                {"label":"G", "x":7.25, "y":2},
+                {"label":"H", "x":10.25, "y":2},
+                {"label":"J", "x":11.25, "y":2},
+                {"label":"K", "x":12.25, "y":2},
+                {"label":"L", "x":13.25, "y":2},
+                {"label":";:", "x":14.25, "y":2},
+                {"label":"'\"", "x":15.25, "y":2},
+                {"label":"Enter", "x":16.25, "y":2, "w":2.25},
+
+                {"label":"Shift", "x":1.5, "y":3, "w":2.25},
+                {"label":"Z", "x":3.75, "y":3},
+                {"label":"X", "x":4.75, "y":3},
+                {"label":"C", "x":5.75, "y":3},
+                {"label":"V", "x":6.75, "y":3},
+                {"label":"B", "x":7.75, "y":3},
+                {"label":"B", "x":9.75, "y":3},
+                {"label":"N", "x":10.75, "y":3},
+                {"label":"M", "x":11.75, "y":3},
+                {"label":",<", "x":12.75, "y":3},
+                {"label":".>", "x":13.75, "y":3},
+                {"label":"/?", "x":14.75, "y":3},
+                {"label":"Shift", "x":15.75, "y":3, "w":1.75},
+                {"label":"Up", "x":17.5, "y":3},
+
+                {"label":"Ctrl", "x":1.5, "y":4, "w":1.5},
+                {"label":"Alt", "x":4.5, "y":4, "w":1.5},
+                {"label":"Space", "x":6, "y":4, "w":2.25},
+                {"label":"Fn", "x":8.25, "y":4},
+                {"label":"Space", "x":9.75, "y":4, "w":2.75},
+                {"label":"Alt", "x":12.5, "y":4, "w":1.5},
+                {"label":"Ctrl", "x":15, "y":4, "w":1.5},
+                {"label":"Left", "x":16.5, "y":4},
+                {"label":"Down", "x":17.5, "y":4},
+                {"label":"Right", "x":18.5, "y":4}
             ]
         }
     }

+ 50 - 0
keyboards/cutie_club/keebcats/dougal/config.h

@@ -0,0 +1,50 @@
+/* Copyright 2021 Cutie Club
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFB9C
+#define PRODUCT_ID 0xB265
+#define DEVICE_VER 0x0000
+#define MANUFACTURER Cutie Club
+#define PRODUCT Keebcats Dougal 65%
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ */
+#define MATRIX_ROW_PINS { B2, D0, F5, F4, F1 }
+#define MATRIX_COL_PINS { E6, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, D1, B7 }
+#define UNUSED_PINS { B0, B1, B3 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+#define LED_CAPS_LOCK_PIN F0
+
+/* 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

+ 17 - 0
keyboards/cutie_club/keebcats/dougal/dougal.c

@@ -0,0 +1,17 @@
+/* Copyright 2021 Cutie Club
+ *
+ * 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 "dougal.h"

+ 34 - 0
keyboards/cutie_club/keebcats/dougal/dougal.h

@@ -0,0 +1,34 @@
+/* Copyright 2021 Cutie Club
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_all( \
+    k00_00, k00_01, k00_02, k00_03, k00_04, k00_05, k00_06, k00_07, k00_08, k00_09, k00_10, k00_11, k00_12, k00_13, k00_14, k00_15, \
+    k01_00, k01_01, k01_02, k01_03, k01_04, k01_05, k01_06, k01_07, k01_08, k01_09, k01_10, k01_11, k01_12, k01_13,         k01_15, \
+    k02_00, k02_01, k02_02, k02_03, k02_04, k02_05, k02_06, k02_07, k02_08, k02_09, k02_10, k02_11, k02_12, k02_13,         k02_15, \
+    k03_00, k03_01, k03_02, k03_03, k03_04, k03_05, k03_06, k03_07, k03_08, k03_09, k03_10, k03_11, k03_12,         k03_13, k03_15, \
+    k04_00, k04_01, k04_02,         k04_04,         k04_06,         k04_08, k04_09, k04_10, k04_11,         k04_12, k04_13, k04_15  \
+) \
+{ \
+    { k00_00, k00_01, k00_02, k00_03, k00_04, k00_05, k00_06, k00_07, k00_08, k00_09, k00_10, k00_11, k00_12, k00_13, k00_14, k00_15 }, \
+    { k01_00, k01_01, k01_02, k01_03, k01_04, k01_05, k01_06, k01_07, k01_08, k01_09, k01_10, k01_11, k01_12, k01_13, KC_NO,  k01_15 }, \
+    { k02_00, k02_01, k02_02, k02_03, k02_04, k02_05, k02_06, k02_07, k02_08, k02_09, k02_10, k02_11, k02_12, k02_13, KC_NO,  k02_15 }, \
+    { k03_00, k03_01, k03_02, k03_03, k03_04, k03_05, k03_06, k03_07, k03_08, k03_09, k03_10, k03_11, k03_12, k03_13, KC_NO,  k03_15 }, \
+    { k04_00, k04_01, k04_02, KC_NO,  k04_04, KC_NO,  k04_06, KC_NO,  k04_08, k04_09, k04_10, k04_11, k04_12, k04_13, KC_NO,  k04_15 }  \
+}

+ 84 - 0
keyboards/cutie_club/keebcats/dougal/info.json

@@ -0,0 +1,84 @@
+{
+    "keyboard_name": "Keebcats Dougal",
+    "url": "",
+    "maintainer": "Cutie Club",
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                { "x": 0, "y": 0 },
+                { "x": 1, "y": 0 },
+                { "x": 2, "y": 0 },
+                { "x": 3, "y": 0 },
+                { "x": 4, "y": 0 },
+                { "x": 5, "y": 0 },
+                { "x": 6, "y": 0 },
+                { "x": 7, "y": 0 },
+                { "x": 8, "y": 0 },
+                { "x": 9, "y": 0 },
+                { "x": 10, "y": 0 },
+                { "x": 11, "y": 0 },
+                { "x": 12, "y": 0 },
+                { "x": 13, "y": 0 },
+                { "x": 14, "y": 0 },
+                { "x": 15, "y": 0 },
+                { "x": 0, "y": 1, "w": 1.5 },
+                { "x": 1.5, "y": 1 },
+                { "x": 2.5, "y": 1 },
+                { "x": 3.5, "y": 1 },
+                { "x": 4.5, "y": 1 },
+                { "x": 5.5, "y": 1 },
+                { "x": 6.5, "y": 1 },
+                { "x": 7.5, "y": 1 },
+                { "x": 8.5, "y": 1 },
+                { "x": 9.5, "y": 1 },
+                { "x": 10.5, "y": 1 },
+                { "x": 11.5, "y": 1 },
+                { "x": 12.5, "y": 1 },
+                { "x": 13.5, "y": 1, "w": 1.5 },
+                { "x": 15, "y": 1 },
+                { "x": 0, "y": 2, "w": 1.75 },
+                { "x": 1.75, "y": 2 },
+                { "x": 2.75, "y": 2 },
+                { "x": 3.75, "y": 2 },
+                { "x": 4.75, "y": 2 },
+                { "x": 5.75, "y": 2 },
+                { "x": 6.75, "y": 2 },
+                { "x": 7.75, "y": 2 },
+                { "x": 8.75, "y": 2 },
+                { "x": 9.75, "y": 2 },
+                { "x": 10.75, "y": 2 },
+                { "x": 11.75, "y": 2 },
+                { "x": 12.75, "y": 2 },
+                { "x": 14, "y": 2 },
+                { "x": 15, "y": 2 },
+                { "x": 0, "y": 3, "w": 1.25 },
+                { "x": 1.25, "y": 3 },
+                { "x": 2.25, "y": 3 },
+                { "x": 3.25, "y": 3 },
+                { "x": 4.25, "y": 3 },
+                { "x": 5.25, "y": 3 },
+                { "x": 6.25, "y": 3 },
+                { "x": 7.25, "y": 3 },
+                { "x": 8.25, "y": 3 },
+                { "x": 9.25, "y": 3 },
+                { "x": 10.25, "y": 3 },
+                { "x": 11.25, "y": 3 },
+                { "x": 12.25, "y": 3, "w": 1.75 },
+                { "x": 14, "y": 3 },
+                { "x": 15, "y": 3 },
+                { "x": 0, "y": 4, "w": 1.25 },
+                { "x": 1.25, "y": 4, "w": 1.25 },
+                { "x": 2.5, "y": 4, "w": 1.25 },
+                { "x": 3.75, "y": 4, "w": 2.25 },
+                { "x": 6, "y": 4, "w": 1.25 },
+                { "x": 7.25, "y": 4, "w": 2.75 },
+                { "x": 10, "y": 4 },
+                { "x": 11, "y": 4 },
+                { "x": 12, "y": 4 },
+                { "x": 13, "y": 4 },
+                { "x": 14, "y": 4 },
+                { "x": 15, "y": 4 }
+            ]
+        }
+    }
+}

+ 28 - 0
keyboards/cutie_club/keebcats/dougal/keymaps/default/keymap.c

@@ -0,0 +1,28 @@
+/* Copyright 2021 Cutie Club
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [0] = LAYOUT_all(
+        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_BSPC, KC_DEL,
+        KC_TAB,     KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,      KC_RBRC,    KC_BSLS,          KC_HOME,
+        KC_CAPS,    KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,      KC_NUHS,    KC_ENT,           KC_PGUP,
+        KC_LSFT,    KC_NUBS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,      KC_RSFT,             KC_UP,   KC_PGDN,
+        KC_LCTL,    KC_LGUI,  KC_LALT,            KC_SPC,             KC_SPC,             KC_SPC,             KC_RALT,  KC_RGUI,      KC_RCTRL,   KC_LEFT, KC_DOWN, KC_RIGHT
+    )
+};

+ 49 - 0
keyboards/cutie_club/keebcats/dougal/keymaps/via/keymap.c

@@ -0,0 +1,49 @@
+/* Copyright 2021 Cutie Club
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [0] = LAYOUT_all(
+        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_BSPC, KC_DEL,
+        KC_TAB,     KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,      KC_RBRC,    KC_BSLS,          KC_HOME,
+        KC_CAPS,    KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,      KC_NUHS,    KC_ENT,           KC_PGUP,
+        KC_LSFT,    KC_NUBS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,      KC_RSFT,             KC_UP,   KC_PGDN,
+        KC_LCTL,    KC_LGUI,  KC_LALT,            KC_SPC,             KC_SPC,             KC_SPC,             KC_RALT,  KC_RGUI,      KC_RCTRL,   KC_LEFT, KC_DOWN, KC_RIGHT
+    ),
+    [1] = LAYOUT_all(
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS,          KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS,          KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,             KC_TRNS, KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,                  KC_TRNS,                  KC_TRNS,                  KC_TRNS,                  KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS
+    ),
+    [2] = LAYOUT_all(
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS,          KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS,          KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,             KC_TRNS, KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,                  KC_TRNS,                  KC_TRNS,                  KC_TRNS,                  KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS
+    ),
+    [3] = LAYOUT_all(
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS,          KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS,          KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,             KC_TRNS, KC_TRNS,
+        KC_TRNS,     KC_TRNS,     KC_TRNS,                  KC_TRNS,                  KC_TRNS,                  KC_TRNS,                  KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS
+    )
+};

+ 1 - 0
keyboards/cutie_club/keebcats/dougal/keymaps/via/rules.mk

@@ -0,0 +1 @@
+VIA_ENABLE = yes

+ 18 - 0
keyboards/cutie_club/keebcats/dougal/readme.md

@@ -0,0 +1,18 @@
+# Dougal
+
+* Keyboard Maintainer: [Cutie Club](https://github.com/cutie-club/)
+* Hardware Supported: Atmega32u4 based 65% PCB, with wide compatibility
+* Hardware Availability: [Keebcats](https://keebcats.co.uk)
+
+## Bootloader
+
+Enter the bootloader in 2 ways with the default configuration:
+
+* **Bootmagic reset**: Hold down the key at top left key (matrix position 0,0) and plug the device in
+* **Physical reset button**: Press the button marked reset on the back of the PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+    make cutie_club/keebcats/dougal:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 21 - 0
keyboards/cutie_club/keebcats/dougal/rules.mk

@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enable Bootmagic
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+AUDIO_ENABLE = no           # Audio output

+ 33 - 0
keyboards/ergodash/mini/keymaps/yoshimaru46/config.h

@@ -0,0 +1,33 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS

+ 111 - 0
keyboards/ergodash/mini/keymaps/yoshimaru46/keymap.c

@@ -0,0 +1,111 @@
+/* Copyright 2021 Yoshihiro Saito
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum layers {
+    _QWERTY,
+    _LOWER,
+    _RAISE,
+    _ADJUST,
+};
+
+enum custom_keycodes {
+    QWERTY = SAFE_RANGE,
+    LOWER,
+    RAISE,
+    ADJUST,
+};
+
+// Shift + ( = <
+const key_override_t left_paren_angle_bracket_override = ko_make_basic(MOD_MASK_SHIFT, KC_LEFT_PAREN, KC_LEFT_ANGLE_BRACKET);
+
+// Shift + ) = >
+const key_override_t right_paren_angle_bracket_override = ko_make_basic(MOD_MASK_SHIFT, KC_RIGHT_PAREN, KC_RIGHT_ANGLE_BRACKET);
+
+const key_override_t **key_overrides = (const key_override_t *[]){
+	&left_paren_angle_bracket_override,
+	&right_paren_angle_bracket_override,
+	NULL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Qwerty */
+    [_QWERTY] = LAYOUT(
+    KC_GESC, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_LPRN,                           KC_RPRN, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_LBRC,                           KC_RBRC, KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_DEL,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    XXXXXXX,                           XXXXXXX, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_QUOT,
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          KC_LGUI, LOWER,   CTL_T(KC_SPC), KC_SFTENT, RAISE,   KC_RGUI,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+  ),
+
+  /* Lower */
+  [_LOWER] = LAYOUT(
+    XXXXXXX, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_F11,                            KC_GRV,  KC_CIRC, KC_AMPR, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX,
+    XXXXXXX, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F12,                            KC_TILD, KC_BSLS, KC_MINS, KC_EQL,  XXXXXXX, XXXXXXX, XXXXXXX,
+    XXXXXXX, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  XXXXXXX,                           XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX,
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          _______, XXXXXXX, _______,       _______,   XXXXXXX, _______,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+  ),
+
+  /* Raise */
+  [_RAISE] = LAYOUT(
+    XXXXXXX, KC_P1,   KC_P2,   KC_P3,   KC_P4,   KC_P5,   XXXXXXX,                           XXXXXXX, KC_P6,   KC_P7,   KC_P8,   KC_P9,   KC_P0,   XXXXXXX,
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                           XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, XXXXXXX, XXXXXXX,
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                           XXXXXXX, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, XXXXXXX, XXXXXXX,
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          _______, XXXXXXX, _______,       _______,   XXXXXXX, _______,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+  ),
+
+  /* Adjust */
+  [_ADJUST] = LAYOUT(
+    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, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          _______ ,_______, _______,       _______,   XXXXXXX, _______,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+  ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    switch (keycode) {
+        case LOWER:
+            if (record->event.pressed) {
+                layer_on(_LOWER);
+                update_tri_layer(_LOWER, _RAISE, _ADJUST);
+            } else {
+                layer_off(_LOWER);
+                update_tri_layer(_LOWER, _RAISE, _ADJUST);
+            }
+            return false;
+            break;
+        case RAISE:
+            if (record->event.pressed) {
+                layer_on(_RAISE);
+                update_tri_layer(_LOWER, _RAISE, _ADJUST);
+            } else {
+                layer_off(_RAISE);
+                update_tri_layer(_LOWER, _RAISE, _ADJUST);
+            }
+            return false;
+            break;
+        case ADJUST:
+            if (record->event.pressed) {
+                layer_on(_ADJUST);
+            } else {
+                layer_off(_ADJUST);
+            }
+            return false;
+            break;
+    }
+    return true;
+}

+ 4 - 0
keyboards/ergodash/mini/keymaps/yoshimaru46/readme.md

@@ -0,0 +1,4 @@
+# yoshimaru46's keymap for Ergodash mini
+
+This is the yoshimaru46's keymap configuration for Ergodash mini.
+There are three layers, QWERTY(default), LOWER, and RAISE.

+ 4 - 0
keyboards/ergodash/mini/keymaps/yoshimaru46/rules.mk

@@ -0,0 +1,4 @@
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = no
+AUDIO_ENABLE = no
+KEY_OVERRIDE_ENABLE = yes

+ 79 - 9
keyboards/ffkeebs/puca/info.json

@@ -2,35 +2,105 @@
     "keyboard_name": "Puca",
     "url": "https://ffkeebs.com/collections/puca/",
     "maintainer": "Sleepdealr",
+    "layout_aliases": {
+        "LAYOUT": "LAYOUT_all"
+    },
     "layouts": {
-        "LAYOUT": {
+        "LAYOUT_all": {
             "layout": [
                 { "label": "Rotary", "x": 0.5, "y": 0 },
                 { "label": "Pg Up", "x": 2, "y": 0 },
                 { "label": "Pg Dn", "x": 3, "y": 0 },
+
                 { "label": "Layer Toggle", "x": 0, "y": 1.25 },
                 { "label": "/", "x": 1, "y": 1.25 },
                 { "label": "*", "x": 2, "y": 1.25 },
                 { "label": "-", "x": 3, "y": 1.25 },
+
                 { "label": "7", "x": 0, "y": 2.25 },
                 { "label": "8", "x": 1, "y": 2.25 },
                 { "label": "9", "x": 2, "y": 2.25 },
-                { "label": "+", "x": 3, "y": 2.25, "h": 2 },
-                { "label": "+", "x": 4, "y": 2.25 },
+                { "label": "+", "x": 3, "y": 2.25 },
+                { "label": "+", "x": 4, "y": 2.25, "h": 2 },
+
+                { "label": "4", "x": 0, "y": 3.25 },
+                { "label": "5", "x": 1, "y": 3.25 },
+                { "label": "6", "x": 2, "y": 3.25 },
+                { "label": "|", "x": 3, "y": 3.25 },
+
+                { "label": "1", "x": 0, "y": 4.25 },
+                { "label": "2", "x": 1, "y": 4.25 },
+                { "label": "3", "x": 2, "y": 4.25 },
+                { "label": "Enter", "x": 3, "y": 4.25 },
+                { "label": "Enter", "x": 4, "y": 4.25, "h": 2 },
+
+                { "label": "0", "x": 0, "y": 5.25 },
+                { "label": "00", "x": 1, "y": 5.25 },
+                { "label": ".", "x": 2, "y": 5.25 },
+                { "label": ".", "x": 3, "y": 5.25 },
+
+                { "label": "0", "x": 0, "y": 6.25, "w": 2 }
+            ]
+        },
+        "LAYOUT_numpad": {
+            "layout": [
+                { "label": "Rotary", "x": 0.5, "y": 0 },
+                { "label": "Pg Up", "x": 2, "y": 0 },
+                { "label": "Pg Dn", "x": 3, "y": 0 },
+
+                { "label": "Layer Toggle", "x": 0, "y": 1.25 },
+                { "label": "/", "x": 1, "y": 1.25 },
+                { "label": "*", "x": 2, "y": 1.25 },
+                { "label": "-", "x": 3, "y": 1.25 },
+
+                { "label": "7", "x": 0, "y": 2.25 },
+                { "label": "8", "x": 1, "y": 2.25 },
+                { "label": "9", "x": 2, "y": 2.25 },
+
                 { "label": "4", "x": 0, "y": 3.25 },
                 { "label": "5", "x": 1, "y": 3.25 },
                 { "label": "6", "x": 2, "y": 3.25 },
-                { "label": "|", "x": 4, "y": 3.25 },
+                { "label": "+", "x": 3, "y": 2.25, "h": 2 },
+
                 { "label": "1", "x": 0, "y": 4.25 },
                 { "label": "2", "x": 1, "y": 4.25 },
                 { "label": "3", "x": 2, "y": 4.25 },
-                { "label": "Enter", "x": 3, "y": 4.25, "h": 2 },
-                { "label": "Enter", "x": 4, "y": 4.25 },
+
                 { "label": "0", "x": 0, "y": 5.25, "w": 2 },
                 { "label": ".", "x": 2, "y": 5.25 },
-                { "label": ".", "x": 4, "y": 5.25 },
-                { "label": "0", "x": 0, "y": 6.25 },
-                { "label": "00", "x": 1, "y": 6.25 }
+                { "label": "Enter", "x": 3, "y": 4.25, "h": 2 }
+            ]
+        },
+        "LAYOUT_ortho": {
+            "layout": [
+                { "label": "Rotary", "x": 0.5, "y": 0 },
+                { "label": "Pg Up", "x": 2, "y": 0 },
+                { "label": "Pg Dn", "x": 3, "y": 0 },
+
+                { "label": "Layer Toggle", "x": 0, "y": 1.25 },
+                { "label": "/", "x": 1, "y": 1.25 },
+                { "label": "*", "x": 2, "y": 1.25 },
+                { "label": "-", "x": 3, "y": 1.25 },
+
+                { "label": "7", "x": 0, "y": 2.25 },
+                { "label": "8", "x": 1, "y": 2.25 },
+                { "label": "9", "x": 2, "y": 2.25 },
+                { "label": "+", "x": 3, "y": 2.25 },
+
+                { "label": "4", "x": 0, "y": 3.25 },
+                { "label": "5", "x": 1, "y": 3.25 },
+                { "label": "6", "x": 2, "y": 3.25 },
+                { "label": "|", "x": 3, "y": 3.25 },
+
+                { "label": "1", "x": 0, "y": 4.25 },
+                { "label": "2", "x": 1, "y": 4.25 },
+                { "label": "3", "x": 2, "y": 4.25 },
+                { "label": "Enter", "x": 3, "y": 4.25 },
+
+                { "label": "0", "x": 0, "y": 5.25 },
+                { "label": "00", "x": 1, "y": 5.25 },
+                { "label": ".", "x": 2, "y": 5.25 },
+                { "label": "Enter", "x": 3, "y": 5.25 }
             ]
         }
     }

+ 20 - 32
keyboards/ffkeebs/puca/keymaps/default/keymap.c

@@ -1,4 +1,4 @@
-/* Copyright 2021 Sleepdealer
+/* Copyright 2021 Sleepdealer, James Young for QMK (@noroadsleft)
  *
  * 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
@@ -15,38 +15,26 @@
  */
 #include QMK_KEYBOARD_H
 
-// 00 Functionality
-enum custom_keycodes {
-    MC_00 = SAFE_RANGE,
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-    switch (keycode) {
-        case MC_00:
-            if (record->event.pressed) {
-                SEND_STRING("00");
-            }
-            break;
-    }
-    return true;
-};
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
+    [0] = LAYOUT_all(
+        KC_MUTE,          KC_PGUP, KC_PGDN,
+        TG(1),   KC_PSLS, KC_PAST, KC_PMNS,
+        KC_P7,   KC_P8,   KC_P9,   KC_PPLS,  KC_PPLS,
+        KC_P4,   KC_P5,   KC_P6,   KC_PIPE,
+        KC_P1,   KC_P2,   KC_P3,   KC_ENTER, KC_ENTER,
+        KC_P0,   MC_00,   KC_PDOT, KC_PDOT,
+        KC_P0
+    ),
 
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-    LAYOUT(
-        KC_MUTE,         KC_PGUP, KC_PGDN,
-		TG(1),  KC_PSLS, KC_PAST, KC_PMNS,
-		KC_P7,  KC_P8,   KC_P9,   KC_PPLS,  KC_PPLS,
-		KC_P4,  KC_P5,   KC_P6,   KC_PIPE,
-		KC_P1,  KC_P2,   KC_P3,   KC_ENTER, KC_ENTER,
-		KC_P0,  MC_00,   KC_PDOT, KC_PDOT,   
-                KC_P0),
-    LAYOUT(
+    [1] = LAYOUT_all(
         KC_TRNS,          RGB_HUI, RGB_VAI,
-		TG(1),   RGB_TOG, RGB_HUD, RGB_VAD,
-		KC_PGUP, KC_UP,   KC_PGDN, RGB_MOD,  RGB_MOD,
-		KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
-		KC_INS,  KC_HOME, KC_END,  RGB_RMOD, RGB_RMOD,
-		KC_ESC,  KC_TRNS, KC_DEL,  KC_TRNS, 
-        KC_ESC)
+        TG(1),   RGB_TOG, RGB_HUD, RGB_VAD,
+        KC_PGUP, KC_UP,   KC_PGDN, RGB_MOD,  RGB_MOD,
+        KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
+        KC_INS,  KC_HOME, KC_END,  RGB_RMOD, RGB_RMOD,
+        KC_ESC,  KC_TRNS, KC_DEL,  KC_TRNS,
+        KC_ESC
+    ),
+
 };

+ 38 - 0
keyboards/ffkeebs/puca/keymaps/default_numpad/keymap.c

@@ -0,0 +1,38 @@
+/* Copyright 2021 Sleepdealer, James Young for QMK (@noroadsleft)
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [0] = LAYOUT_numpad(
+        KC_MUTE,          KC_PGUP, KC_PGDN,
+        TG(1),   KC_PSLS, KC_PAST, KC_PMNS,
+        KC_P7,   KC_P8,   KC_P9,
+        KC_P4,   KC_P5,   KC_P6,   KC_PPLS,
+        KC_P1,   KC_P2,   KC_P3,
+        KC_P0,            KC_PDOT, KC_ENTER
+    ),
+
+    [1] = LAYOUT_numpad(
+        _______,          RGB_HUI, RGB_VAI,
+        TG(1),   RGB_TOG, RGB_HUD, RGB_VAD,
+        KC_PGUP, KC_UP,   KC_PGDN,
+        KC_LEFT, KC_DOWN, KC_RGHT, RGB_MOD,
+        KC_INS,  KC_HOME, KC_END,
+        KC_ESC,           KC_DEL,  RGB_RMOD
+    ),
+
+};

+ 38 - 0
keyboards/ffkeebs/puca/keymaps/default_ortho/keymap.c

@@ -0,0 +1,38 @@
+/* Copyright 2021 Sleepdealer, James Young for QMK (@noroadsleft)
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [0] = LAYOUT_ortho(
+        KC_MUTE,          KC_PGUP, KC_PGDN,
+        TG(1),   KC_PSLS, KC_PAST, KC_PMNS,
+        KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
+        KC_P4,   KC_P5,   KC_P6,   KC_PIPE,
+        KC_P1,   KC_P2,   KC_P3,   KC_ENTER,
+        KC_P0,   MC_00,   KC_PDOT, KC_ENTER
+    ),
+
+    [1] = LAYOUT_ortho(
+        _______,          RGB_HUI, RGB_VAI,
+        TG(1),   RGB_TOG, RGB_HUD, RGB_VAD,
+        KC_PGUP, KC_UP,   KC_PGDN, RGB_MOD,
+        KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX,
+        KC_INS,  KC_HOME, KC_END,  RGB_RMOD,
+        KC_ESC,  XXXXXXX, KC_DEL,  XXXXXXX
+    )
+
+};

+ 14 - 0
keyboards/ffkeebs/puca/puca.c

@@ -15,6 +15,20 @@
  */
 #include "puca.h"
 
+bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
+    if (!process_record_user(keycode, record)) {
+        return false;
+    }
+    switch (keycode) {
+        case MC_00:
+            if (record->event.pressed) {
+                SEND_STRING("00");
+            }
+            break;
+    }
+    return true;
+}
+
 bool encoder_update_kb(uint8_t index, bool clockwise) {
     if (!encoder_update_user(index, clockwise)) { return false; }
     if (clockwise) {

+ 78 - 18
keyboards/ffkeebs/puca/puca.h

@@ -16,26 +16,86 @@
 
 #pragma once
 
-// K24 is 2U Plus
-// K44 is 2u Enter
-// K54 is 2u 0
+#include "quantum.h"
+
+/* Keycodes defined here can be used by any keymap. If you wish to
+ * define additional keycodes for your personal keymap only, assign
+ * your first custom keycode to `= NEW_SAFE_RANGE`.
+ *
+ * See `process_record_kb()` in `puca.c`.
+ */
+enum keyboard_keycodes {
+    MC_00 = SAFE_RANGE,
+    NEW_SAFE_RANGE,
+};
 
+#define XXX KC_NO
 
-#include "quantum.h"
+/*
+ *   ┌───┐ ┌───┬───┐
+ *   │00 │ │02 │03 │
+ *   └───┘ └───┴───┘
+ * ┌───┬───┬───┬───┐
+ * │10 │11 │12 │13 │
+ * ├───┼───┼───┼───┤   ┌───┐
+ * │20 │21 │22 │23 │   │   │
+ * ├───┼───┼───┼───┤   │24 │ 2u Plus
+ * │30 │31 │32 │33 │   │   │
+ * ├───┼───┼───┼───┤   ├───┤
+ * │40 │41 │42 │43 │   │   │
+ * ├───┼───┼───┼───┤   │44 │ 2u Enter
+ * │50 │51 │52 │53 │   │   │
+ * └───┴───┴───┴───┘   └───┘
+ * ┌───────┐
+ * │54     │ 2u 0
+ * └───────┘
+ */
+
+#define LAYOUT_all( \
+      K00,    K02, K03,      \
+    K10, K11, K12, K13,      \
+    K20, K21, K22, K23,  K24,\
+    K30, K31, K32, K33,      \
+    K40, K41, K42, K43,  K44,\
+    K50, K51, K52, K53,      \
+      K54                    \
+) { \
+    { K00, XXX, K02, K03, XXX }, \
+    { K10, K11, K12, K13, XXX }, \
+    { K20, K21, K22, K23, K24 }, \
+    { K30, K31, K32, K33, XXX }, \
+    { K40, K41, K42, K43, K44 }, \
+    { K50, K51, K52, K53, K54 }, \
+}
+
+#define LAYOUT_numpad( \
+      K00,    K02, K03, \
+    K10, K11, K12, K13, \
+    K20, K21, K22,      \
+    K30, K31, K32, K24, \
+    K40, K41, K42,      \
+      K54,    K52, K44  \
+) { \
+    { K00, XXX, K02, K03, XXX }, \
+    { K10, K11, K12, K13, XXX }, \
+    { K20, K21, K22, XXX, K24 }, \
+    { K30, K31, K32, XXX, XXX }, \
+    { K40, K41, K42, XXX, K44 }, \
+    { XXX, XXX, K52, XXX, K54 }, \
+}
 
-#define LAYOUT( \
-        K00,          K02,   K03,       \
-        K10,   K11,   K12,   K13,       \
-        K20,   K21,   K22,   K23,   K24,\
-        K30,   K31,   K32,   K33,       \
-        K40,   K41,   K42,   K43,   K44,\
-        K50,   K51,   K52,   K53,       \
-        K54                             \
+#define LAYOUT_ortho( \
+      K00,    K02, K03, \
+    K10, K11, K12, K13, \
+    K20, K21, K22, K23, \
+    K30, K31, K32, K33, \
+    K40, K41, K42, K43, \
+    K50, K51, K52, K53  \
 ) { \
-      { K00,   KC_NO, K02,   K03,   KC_NO },    \
-      { K10,   K11,   K12,   K13,   KC_NO },    \
-      { K20,   K21,   K22,   K23,   K24   },    \
-      { K30,   K31,   K32,   K33,   KC_NO },    \
-      { K40,   K41,   K42,   K43,   K44   },    \
-      { K50,   K51,   K52,   K53,   K54   },    \
+    { K00, XXX, K02, K03, XXX }, \
+    { K10, K11, K12, K13, XXX }, \
+    { K20, K21, K22, K23, XXX }, \
+    { K30, K31, K32, K33, XXX }, \
+    { K40, K41, K42, K43, XXX }, \
+    { K50, K51, K52, K53, XXX }, \
 }

+ 1 - 1
keyboards/ffkeebs/puca/readme.md

@@ -2,7 +2,7 @@
 
 * Keyboard Maintainer: [Sleepdealer](https://github.com/Sleepdealr)
 * Hardware Supported: Puca Pad
-* Hardware Availability: Puca GB
+* Hardware Availability: [Puca GB](https://ffkeebs.com/collections/puca)
 
 ## Bootloader
 

+ 3 - 3
keyboards/ffkeebs/puca/rules.mk

@@ -19,7 +19,7 @@ NKRO_ENABLE = no            # USB Nkey Rollover
 BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
 
-ENCODER_ENABLE = yes 		#Rotary encoder
+ENCODER_ENABLE = yes        # Enable rotary encoder support
+OLED_ENABLE = yes           # Enable OLED support
 
-OLED_ENABLE = yes	#OLED
-LTO_ENABLE = yes			# Enable Link Time Optimization to reduce firmware size
+LTO_ENABLE = yes            # Enable Link Time Optimization to reduce firmware size

文件差异内容过多而无法显示
+ 0 - 0
keyboards/handwired/split89/info.json


+ 14 - 14
keyboards/handwired/split89/keymaps/default/keymap.c

@@ -23,20 +23,20 @@ enum layer_names {
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* Base */
     [0] = LAYOUT(
-        KC_ESC,  KC_F1,  KC_F2,        KC_F3,  KC_F4,  KC_F5,     KC_F6,  KC_F7,  KC_F8,  KC_F9,   KC_F10, KC_F11,     KC_F12,    KC_PSCR, KC_SLCK, KC_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_U,   KC_I,   KC_O,   KC_P,    KC_LBRC, KC_RBRC,   KC_BSLS,   KC_DEL,  KC_END,  KC_PGDN,
-        KC_CAPS,  KC_A,   KC_S,         KC_D,   KC_F,   KC_G,      KC_Y,   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_H,   KC_M,   KC_COMM,KC_DOT,  KC_SLSH, KC_RSHIFT, KC_UP,
-         KC_LCTL,MO(1),KC_LGUI,KC_LALT,KC_SPACE,    KC_N,   KC_SPACE, KC_RALT,KC_RGUI, KC_APP,  KC_RCTL,   KC_LEFT,   KC_DOWN, KC_RGHT
-        ),
+        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_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_UP,
+        KC_LCTL, MO(1),   KC_LGUI, KC_LALT,                   KC_SPC,              KC_SPC,                    KC_RALT, KC_RGUI, KC_APP,  KC_RCTL,    KC_LEFT, KC_DOWN, KC_RGHT
+    ),
     /* Volume */
     [1] = LAYOUT(
-      KC_TRNS,KC_TRNS,KC_TRNS,      KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-      KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,      KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-      KC_TRNS,KC_TRNS,KC_TRNS,      KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-      KC_TRNS,KC_TRNS,KC_TRNS,      KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,
-      KC_TRNS,KC_TRNS,KC_TRNS,      KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,             KC_VOLU,
-      KC_TRNS,KC_TRNS,      KC_TRNS,KC_TRNS,KC_MEDIA_PLAY_PAUSE,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,  KC_MPRV,   KC_VOLD, KC_MNXT
-        ),
+        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,             KC_VOLU,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_MPLY,             KC_TRNS,                   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_MPRV, KC_VOLD, KC_MNXT
+    ),
 };

+ 20 - 18
keyboards/handwired/split89/split89.h

@@ -18,6 +18,8 @@
 
 #include "quantum.h"
 
+#define XXX KC_NO
+
 /* This is a shortcut to help you visually see your layout.
  *
  * The first section contains all of the arguments representing the physical
@@ -27,24 +29,24 @@
  * represents the switch matrix which includes blanks in the wired out matrix.
  */
 #define LAYOUT( \
-    k00,      k01, k02, k03, k04, k05,       k06, k07, k08, k09, k10, k11, k12, k13, k14, k15, \
-    k32, k16, k17, k18, k19, k20, k21,     k22, k23, k24, k25, k26, k27,  k28,  k29, k30, k31, \
-    k48, k33, k34, k35, k36, k37,       k54, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, \
-    k61, k49, k50, k51, k52, k53,         k67, k55, k56, k57, k58, k59,    k60, \
-    k74,   k62, k63, k64, k65, k66,         k80, k68, k69, k70, k71,       k72,      k73, \
-    k75, k76, k77, k78,    k79,             k81,          k82, k83, k84, k85,   k86, k87, k88 \
+    K04,      K05, K06, K07, K08, K09,        K60, K61, K62, K63, K64, K65, K66,   K67, K68, K69, \
+    K24, K14, K15, K16, K17, K18, K19,        K70, K71, K72, K73, K74, K75, K76,   K77, K78, K79, \
+    K34, K25, K26, K27, K28, K29,        K39, K90, K80, K81, K82, K83, K84, K85,   K86, K87, K88, \
+    K89, K44, K35, K36, K37, K38,        K49, KA0, K91, K92, K93, K94,      K95,                  \
+    K96,      K54, K45, K46, K47, K48,        K59, KB0, KA1, KA2, KA3,      KA4,        KA6,      \
+    KA8, K55, K56, K57,           K58,        KB1,           KB3, KB4, KB5, KB6,   KB7, KB8, KB9  \
     ) \
     { \
-      { KC_NO, KC_NO, KC_NO, KC_NO, k00, k01, k02, k03, k04, k05 }, \
-      { KC_NO, KC_NO, KC_NO, KC_NO, k16, k17, k18, k19, k20, k21 },  \
-      { KC_NO, KC_NO, KC_NO, KC_NO, k32, k33, k34, k35, k36, k37 },  \
-      { KC_NO, KC_NO, KC_NO, KC_NO, k48, k49, k50, k51, k52, k53 },  \
-      { KC_NO, KC_NO, KC_NO, KC_NO, k61, k62, k63, k64, k65, k66, },  \
-      { KC_NO, KC_NO, KC_NO, KC_NO, k74, k75, k76, k77, k78, k79, },  \
-      { k06, k07, k08, k09, k10, k11, k12, k13, k14, k15 }, \
-      { k22, k23, k24, k25, k26, k27, k28, k29, k30, k31 },  \
-      { k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 },  \
-      { k54, k55, k56, k57, k58, k59, k60, KC_NO, KC_NO, KC_NO },  \
-      { k67, k68, k69, k70, k71, KC_NO, k72, KC_NO, k73, KC_NO },  \
-      { k80, k81, KC_NO, k82, k83, k84, k85, k86, k87, k88 }  \
+      { XXX, XXX, XXX, XXX, K04, K05, K06, K07, K08, K09 }, \
+      { XXX, XXX, XXX, XXX, K14, K15, K16, K17, K18, K19 }, \
+      { XXX, XXX, XXX, XXX, K24, K25, K26, K27, K28, K29 }, \
+      { XXX, XXX, XXX, XXX, K34, K35, K36, K37, K38, K39 }, \
+      { XXX, XXX, XXX, XXX, K44, K45, K46, K47, K48, K49 }, \
+      { XXX, XXX, XXX, XXX, K54, K55, K56, K57, K58, K59 }, \
+      { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69 }, \
+      { K70, K71, K72, K73, K74, K75, K76, K77, K78, K79 }, \
+      { K80, K81, K82, K83, K84, K85, K86, K87, K88, K89 }, \
+      { K90, K91, K92, K93, K94, K95, K96, XXX, XXX, XXX }, \
+      { KA0, KA1, KA2, KA3, KA4, XXX, KA6, XXX, KA8, XXX }, \
+      { KB0, KB1, XXX, KB3, KB4, KB5, KB6, KB7, KB8, KB9 }  \
 }

+ 53 - 0
keyboards/mechanickeys/miniashen40/config.h

@@ -0,0 +1,53 @@
+/* Copyright 2021 jfescobar18
+  * 
+  * 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/>. 
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0x4D4B // MechanicKeys
+#define PRODUCT_ID      0x6D6E
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    MechanicKeys
+#define PRODUCT         MINI ASHEN 40
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/*
+ * 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 { B1, B2, B3, B4 }
+#define MATRIX_COL_PINS { C5, C4, C3, D0, C2, D1, C1, C0, D4, B0, D7, D6, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST

+ 15 - 0
keyboards/mechanickeys/miniashen40/info.json

@@ -0,0 +1,15 @@
+{
+  "keyboard_name": "Mini Ashen 40",
+  "url": "",
+  "maintainer": "qmk",
+  "layouts": {
+    "LAYOUT": {
+      "layout": [
+        {"label": "Tab", "x": 0, "y": 0}, {"label": "Q", "x": 1, "y": 0}, {"label": "W", "x": 2, "y": 0}, {"label": "E", "x": 3, "y": 0}, {"label": "R", "x": 4, "y": 0}, {"label": "T", "x": 5, "y": 0}, {"label": "Y", "x": 6, "y": 0}, {"label": "U", "x": 7, "y": 0}, {"label": "I", "x": 8, "y": 0}, {"label": "O", "x": 9, "y": 0}, {"label": "P", "x": 10, "y": 0}, {"label": "Del", "x": 11, "y": 0}, {"label": "M1", "x": 12.25, "y": 0}, {"label": "M2", "x": 13.25, "y": 0},
+        {"label": "Ctrl", "x": 0, "y": 1, "w":1.25}, {"label": "A", "x": 1.25, "y": 1}, {"label": "S", "x": 2.25, "y": 1}, {"label": "D", "x": 3.25, "y": 1}, {"label": "F", "x": 4.25, "y": 1}, {"label": "G", "x": 5.25, "y": 1}, {"label": "H", "x": 6.25, "y": 1}, {"label": "J", "x": 7.25, "y": 1}, {"label": "K", "x": 8.25, "y": 1}, {"label": "L", "x": 9.25, "y": 1}, {"label": "Enter", "x": 10.25, "y": 1, "w":1.75}, {"label": "M3", "x": 12.25, "y": 1}, {"label": "M4", "x": 13.25, "y": 1},
+        {"label": "Shift", "x": 0, "y": 2, "w":1.75}, {"label": "Z", "x": 1.75, "y": 2}, {"label": "X", "x": 2.75, "y": 2}, {"label": "C", "x": 3.75, "y": 2}, {"label": "V", "x": 4.75, "y": 2}, {"label": "B", "x": 5.75, "y": 2}, {"label": "N", "x": 6.75, "y": 2}, {"label": "M", "x": 7.75, "y": 2}, {"label": ",", "x": 8.75, "y": 2}, {"label": ".", "x": 9.75, "y": 2}, {"label": "Fn", "x": 10.75, "y": 2, "w":1.25}, {"label": "Up", "x": 12.25, "y": 2.25},
+        {"label": "Alt", "x": 1, "y": 3}, {"label": "OS", "x": 2, "y": 3, "w": 1.5}, {"label": "", "x": 3.5, "y": 3, "w": 2.75}, {"label": "", "x": 6.25, "y": 3, "w": 2.25}, {"label": "Os", "x": 8.5, "y": 3, "w": 1.5}, {"label": "Alt", "x": 10, "y": 3}, {"label": "Left", "x": 11.25, "y": 3.25}, {"label": "Down", "x": 12.25, "y": 3.25}, {"label": "Right", "x": 13.25, "y": 3.25}
+      ]
+    }
+  }
+}

+ 47 - 0
keyboards/mechanickeys/miniashen40/keymaps/default/keymap.c

@@ -0,0 +1,47 @@
+/* Copyright 2021 jfescobar18
+  * 
+  * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT( /* 0: qwerty */ 
+    KC_GESC,       KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,             KC_MPRV,  KC_MNXT,
+    CTL_T(KC_TAB), KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_ENT,           KC_MUTE,  KC_MPLY,
+    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  MO(1),            KC_UP,   KC_BSPC,
+                   KC_LALT, KC_LGUI,          KC_SPC,                             KC_SPC,  KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+  ),
+
+  [1] = LAYOUT( /* 1: Symbols */ 
+    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,          KC_TRNS, KC_TRNS,
+    MO(2),   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_SCLN, KC_QUOT, KC_BSLS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH, KC_TRNS,          KC_TRNS, KC_EQL,
+             KC_TRNS, KC_TRNS,          KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+
+  [2] = LAYOUT( /* 2: Fn */ 
+    KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,           KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_F12,
+             KC_TRNS, KC_TRNS,          KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+
+  [3] = LAYOUT( /*3: Empty */ 
+    RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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
+  ),
+};

+ 47 - 0
keyboards/mechanickeys/miniashen40/keymaps/via/keymap.c

@@ -0,0 +1,47 @@
+/* Copyright 2021 Francisco Escobar
+  * 
+  * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT( /* 0: qwerty */ 
+    KC_GESC,       KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,             KC_MPRV,  KC_MNXT,
+    CTL_T(KC_TAB), KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_ENT,           KC_MUTE,  KC_MPLY,
+    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  MO(1),            KC_UP,   KC_BSPC,
+                   KC_LALT, KC_LGUI,          KC_SPC,                             KC_SPC,  KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+  ),
+
+  [1] = LAYOUT( /* 1: Symbols */ 
+    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,          KC_TRNS, KC_TRNS,
+    MO(2),   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_SCLN, KC_QUOT, KC_BSLS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH, KC_TRNS,          KC_TRNS, KC_EQL,
+             KC_TRNS, KC_TRNS,          KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+
+  [2] = LAYOUT( /* 2: Fn */ 
+    KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,           KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_F12,
+             KC_TRNS, KC_TRNS,          KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+
+  [3] = LAYOUT( /*3: Empty */ 
+    RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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
+  ),
+};

+ 2 - 0
keyboards/mechanickeys/miniashen40/keymaps/via/rules.mk

@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes

+ 17 - 0
keyboards/mechanickeys/miniashen40/miniashen40.c

@@ -0,0 +1,17 @@
+/* Copyright 2021 jfescobar18
+  * 
+  * 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 "miniashen40.h"

+ 42 - 0
keyboards/mechanickeys/miniashen40/miniashen40.h

@@ -0,0 +1,42 @@
+/* Copyright 2021 jfescobar18
+  * 
+  * 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/>. 
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define XXX KC_NO
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+  K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
+  K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+  K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+  K30, K31,      K33,           K36,      K38, K39, K3A, K3B, K3C  \
+) \
+{ \
+  { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
+  { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \
+  { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }, \
+  { K30, K31, XXX, K33, XXX, XXX, K36, XXX, K38, K39, K3A, K3B, K3C } \
+}

+ 40 - 0
keyboards/mechanickeys/miniashen40/readme.md

@@ -0,0 +1,40 @@
+# Mini Ashen 40
+
+![Mini Ashen 40](https://i.imgur.com/0k3gFZCh.jpeg)
+
+![Mini Ashen 40](https://i.imgur.com/B1w8qwPh.jpeg)
+
+![Mini Ashen 40](https://i.imgur.com/LqxXW0Rh.jpeg)
+
+A 40% keyboard with some extras
+  - Arrows
+  - Mini macro cluster
+  - Full assembly with only through hole components
+
+* Keyboard Maintainer: [jfescobar18](https://github.com/jfescobar18)
+* Hardware Supported: Mini Ashen 40 PCB and Case
+* Hardware Availability: [MechanicKeys](https://www.facebook.com/MechanicKeys-104963764775280)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make mechanickeys/miniashen40:default
+
+Flashing example for this keyboard:
+
+    make mechanickeys/miniashen40:default:flash
+    
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical**: 
+  1. Press and hold `BOOT` switch
+  2. Tap `RESET` switch
+  3. Release `BOOT` switch
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
+
+## Flash bootloader
+* [Follow this instructions](https://github.com/jfescobar18/USBaspLoader)

+ 21 - 0
keyboards/mechanickeys/miniashen40/rules.mk

@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega328p
+
+# Bootloader selection
+BOOTLOADER = usbasploader
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+AUDIO_ENABLE = no           # Audio output

+ 79 - 0
keyboards/mtbkeys/mtb60/hotswap/config.h

@@ -0,0 +1,79 @@
+/*
+Copyright 2021 MTBKeys
+
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID    0xFEED
+#define PRODUCT_ID   0x0001
+#define DEVICE_VER   0x0001
+#define MANUFACTURER MTBKeys
+#define PRODUCT      honeyboard60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* key matrix pinout */
+#define MATRIX_ROW_PINS { D6, D7, B4, B5, D5 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, B7, B6, F7, C6, C7, F6, F4, F1, F0, F5, E6 }
+#define UNUSED_PINS
+
+/* diode direction: COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Pin WS2812 RGB LEDs are connected to */
+#define RGB_DI_PIN D4
+
+#ifdef RGB_DI_PIN
+#   define RGBLED_NUM 16
+#   define RGBLIGHT_HUE_STEP 8
+#   define RGBLIGHT_SAT_STEP 8
+#   define RGBLIGHT_VAL_STEP 8
+#   define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+#   define RGBLIGHT_SLEEP         /* Turn RGB light off when the host goes to sleep */
+#   define RGBLIGHT_EFFECT_ALTERNATING
+#   define RGBLIGHT_EFFECT_BREATHING
+#   define RGBLIGHT_EFFECT_CHRISTMAS
+#   define RGBLIGHT_EFFECT_KNIGHT
+#   define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#   define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#   define RGBLIGHT_EFFECT_RGB_TEST
+#   define RGBLIGHT_EFFECT_SNAKE
+#   define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#   define RGBLIGHT_EFFECT_TWINKLE
+#   define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL /* Set default RGB */
+#endif /* RGB_DI_PIN */
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0

+ 17 - 0
keyboards/mtbkeys/mtb60/hotswap/hotswap.c

@@ -0,0 +1,17 @@
+/* Copyright 2021 MTBKeys
+ *
+ * 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 "hotswap.h"

+ 33 - 0
keyboards/mtbkeys/mtb60/hotswap/hotswap.h

@@ -0,0 +1,33 @@
+/* Copyright 2021 MTBKeys
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+    k00, k10, k20, k30, k40, k50, k60, k70, k80, k90, ka0, kb0, kc0,      ke0, \
+         k11, k21, k31, k41, k51, k61, k71, k81, k91, ka1, kb1, kc1, kd1, ke1, \
+    k02,      k22, k32, k42, k52, k62, k72, k82, k92, ka2, kb2, kc2, kd2,      \
+    k03,      k23, k33, k43, k53, k63, k73, k83, k93, ka3, kb3,      kd3,      \
+    k04, k14, k24,                k64,                ka4, kb4,      kd4, ke4  \
+) { \
+    { k00,   k10,   k20, k30,   k40,   k50,   k60, k70,   k80,   k90,   ka0, kb0, kc0,   KC_NO, ke0   }, \
+    { KC_NO, k11,   k21, k31,   k41,   k51,   k61, k71,   k81,   k91,   ka1, kb1, kc1,   kd1,   ke1   }, \
+    { k02,   KC_NO, k22, k32,   k42,   k52,   k62, k72,   k82,   k92,   ka2, kb2, kc2,   kd2,   KC_NO }, \
+    { k03,   KC_NO, k23, k33,   k43,   k53,   k63, k73,   k83,   k93,   ka3, kb3, KC_NO, kd3,   KC_NO }, \
+    { k04,   k14,   k24, KC_NO, KC_NO, KC_NO, k64, KC_NO, KC_NO, KC_NO, ka4, kb4, kd4,   KC_NO, ke4   }  \
+}

+ 72 - 0
keyboards/mtbkeys/mtb60/hotswap/info.json

@@ -0,0 +1,72 @@
+{
+    "keyboard_name": "MTB60",
+    "url": "mtbkeys.com",
+    "maintainer": "MTBKeys",
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                {"label": "Esc"       , "x":  0, "y": 0        },
+                {"label": "!"         , "x":  1, "y": 0        },
+                {"label": "@"         , "x":  2, "y": 0        },
+                {"label": "#"         , "x":  3, "y": 0        },
+                {"label": "$"         , "x":  4, "y": 0        },
+                {"label": "%"         , "x":  5, "y": 0        },
+                {"label": "^"         , "x":  6, "y": 0        },
+                {"label": "&"         , "x":  7, "y": 0        },
+                {"label": "*"         , "x":  8, "y": 0        },
+                {"label": "("         , "x":  9, "y": 0        },
+                {"label": ")"         , "x": 10, "y": 0        },
+                {"label": "_"         , "x": 11, "y": 0        },
+                {"label": "+"         , "x": 12, "y": 0        },
+                {"label": "Back Space", "x": 13, "y": 0, "w": 2},
+                {"label": "Tab", "x":  0  , "y": 1, "w": 1.5},
+                {"label": "Q"  , "x":  1.5, "y": 1          },
+                {"label": "W"  , "x":  2.5, "y": 1          },
+                {"label": "E"  , "x":  3.5, "y": 1          },
+                {"label": "R"  , "x":  4.5, "y": 1          },
+                {"label": "T"  , "x":  5.5, "y": 1          },
+                {"label": "Y"  , "x":  6.5, "y": 1          },
+                {"label": "U"  , "x":  7.5, "y": 1          },
+                {"label": "I"  , "x":  8.5, "y": 1          },
+                {"label": "O"  , "x":  9.5, "y": 1          },
+                {"label": "P"  , "x": 10.5, "y": 1          },
+                {"label": "{"  , "x": 11.5, "y": 1          },
+                {"label": "}"  , "x": 12.5, "y": 1          },
+                {"label": "|"  , "x": 13.5, "y": 1, "w": 1.5},
+                {"label": "Caps Lock", "x":  0   , "y": 2, "w": 1.75},
+                {"label": "A"        , "x":  1.75, "y": 2           },
+                {"label": "S"        , "x":  2.75, "y": 2           },
+                {"label": "D"        , "x":  3.75, "y": 2           },
+                {"label": "F"        , "x":  4.75, "y": 2           },
+                {"label": "G"        , "x":  5.75, "y": 2           },
+                {"label": "H"        , "x":  6.75, "y": 2           },
+                {"label": "J"        , "x":  7.75, "y": 2           },
+                {"label": "K"        , "x":  8.75, "y": 2           },
+                {"label": "L"        , "x":  9.75, "y": 2           },
+                {"label": ":"        , "x": 10.75, "y": 2           },
+                {"label": "\""       , "x": 11.75, "y": 2           },
+                {"label": "Enter"    , "x": 12.75, "y": 2, "w": 2.25},
+                {"label": "Left Shift" , "x":  0   , "y": 3, "w": 2.25},
+                {"label": "Z"          , "x":  2.25, "y": 3           },
+                {"label": "X"          , "x":  3.25, "y": 3           },
+                {"label": "C"          , "x":  4.25, "y": 3           },
+                {"label": "V"          , "x":  5.25, "y": 3           },
+                {"label": "B"          , "x":  6.25, "y": 3           },
+                {"label": "N"          , "x":  7.25, "y": 3           },
+                {"label": "M"          , "x":  8.25, "y": 3           },
+                {"label": "<"          , "x":  9.25, "y": 3           },
+                {"label": ">"          , "x": 10.25, "y": 3           },
+                {"label": "?"          , "x": 11.25, "y": 3           },
+                {"label": "Right Shift", "x": 12.25, "y": 3, "w": 2.75},
+                {"label": "Left Ctrl" , "x":  0   , "y": 4, "w": 1.25},
+                {"label": "GUI"       , "x":  1.25, "y": 4, "w": 1.25},
+                {"label": "Left Alt"  , "x":  2.5 , "y": 4, "w": 1.25},
+                {"label": "Space"     , "x":  3.75, "y": 4, "w": 6.25},
+                {"label": "Right Ctrl", "x": 10   , "y": 4, "w": 1.25},
+                {"label": "GUI"       , "x": 11.25, "y": 4, "w": 1.25},
+                {"label": "MO(1)"     , "x": 12.5 , "y": 4, "w": 1.25},
+                {"label": "Right Ctrl", "x": 13.75, "y": 4, "w": 1.25}
+            ]
+        }
+    }
+}

+ 39 - 0
keyboards/mtbkeys/mtb60/hotswap/keymaps/default/keymap.c

@@ -0,0 +1,39 @@
+/* Copyright 2021 MTBKeys
+ *
+ * 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 QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE,  ///< Default Layer
+    _FN     ///< Function Layer
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_BASE] = LAYOUT(
+        KC_ESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, 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,
+        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_SPC,                                      KC_RALT, KC_RGUI, MO(_FN), KC_RCTL
+    ),
+    [_FN] = LAYOUT(
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,   KC_DEL,
+        _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,  KC_RIGHT, _______, _______,          _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______,                   _______,                                     _______, _______, _______, RGB_TOG
+    )
+};

+ 26 - 0
keyboards/mtbkeys/mtb60/hotswap/readme.md

@@ -0,0 +1,26 @@
+# MTB60 (Hotswap Edition)
+
+## Details
+
+* Keyboard Maintainer: [MTBKeys](https://mtbkeys.com/)
+* Hardware Supported: MTB60 PCB (Hotswap edition)
+* Hardware Availability: [HB60 on MTBKeys Website](https://mtbkeys.com/)
+
+## Building Firmware
+
+Make example for this keyboard (after setting up your build environment):
+
+    make mtbkeys/mtb60/hotswap:default
+
+Flashing example for this keyboard:
+
+    make mtbkeys/mtb60/hotswap:default:flash
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+1. **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+2. **Physical reset button**: Briefly press the button on the back of the PCB
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 21 - 0
keyboards/mtbkeys/mtb60/hotswap/rules.mk

@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
+AUDIO_ENABLE = no           # Audio output

+ 79 - 0
keyboards/mtbkeys/mtb60/solder/config.h

@@ -0,0 +1,79 @@
+/*
+Copyright 2021 MTBKeys
+
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID    0xFEED
+#define PRODUCT_ID   0x0000
+#define DEVICE_VER   0x0001
+#define MANUFACTURER MTBKeys
+#define PRODUCT      MTB60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* key matrix pinout */
+#define MATRIX_ROW_PINS { D0, D1, F4, F1, D2 }
+#define MATRIX_COL_PINS { E6, F0, F5, F6, F7, D5, D3, C7, C6, B6, B5, B4, D7, D6, D4 }
+#define UNUSED_PINS
+
+/* diode direction: COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Pin WS2812 RGB LEDs are connected to */
+#define RGB_DI_PIN B0
+
+#ifdef RGB_DI_PIN
+#   define RGBLED_NUM 16
+#   define RGBLIGHT_HUE_STEP 8
+#   define RGBLIGHT_SAT_STEP 8
+#   define RGBLIGHT_VAL_STEP 8
+#   define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+#   define RGBLIGHT_SLEEP         /* Turn RGB light off when the host goes to sleep */
+#   define RGBLIGHT_EFFECT_ALTERNATING
+#   define RGBLIGHT_EFFECT_BREATHING
+#   define RGBLIGHT_EFFECT_CHRISTMAS
+#   define RGBLIGHT_EFFECT_KNIGHT
+#   define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#   define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#   define RGBLIGHT_EFFECT_RGB_TEST
+#   define RGBLIGHT_EFFECT_SNAKE
+#   define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#   define RGBLIGHT_EFFECT_TWINKLE
+#   define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL /* Set default RGB */
+#endif /* RGB_DI_PIN */
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0

+ 75 - 0
keyboards/mtbkeys/mtb60/solder/info.json

@@ -0,0 +1,75 @@
+{
+    "keyboard_name": "MTB60",
+    "url": "mtbkeys.com",
+    "maintainer": "MTBKeys",
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                {"label": "Esc"       , "x":  0, "y": 0},
+                {"label": "!"         , "x":  1, "y": 0},
+                {"label": "@"         , "x":  2, "y": 0},
+                {"label": "#"         , "x":  3, "y": 0},
+                {"label": "$"         , "x":  4, "y": 0},
+                {"label": "%"         , "x":  5, "y": 0},
+                {"label": "^"         , "x":  6, "y": 0},
+                {"label": "&"         , "x":  7, "y": 0},
+                {"label": "*"         , "x":  8, "y": 0},
+                {"label": "("         , "x":  9, "y": 0},
+                {"label": ")"         , "x": 10, "y": 0},
+                {"label": "_"         , "x": 11, "y": 0},
+                {"label": "+"         , "x": 12, "y": 0},
+                {"label": "Back Space", "x": 13, "y": 0},
+                {"label": "Delete"    , "x": 14, "y": 0},
+                {"label": "Tab", "x":  0  , "y": 1, "w": 1.5},
+                {"label": "Q"  , "x":  1.5, "y": 1          },
+                {"label": "W"  , "x":  2.5, "y": 1          },
+                {"label": "E"  , "x":  3.5, "y": 1          },
+                {"label": "R"  , "x":  4.5, "y": 1          },
+                {"label": "T"  , "x":  5.5, "y": 1          },
+                {"label": "Y"  , "x":  6.5, "y": 1          },
+                {"label": "U"  , "x":  7.5, "y": 1          },
+                {"label": "I"  , "x":  8.5, "y": 1          },
+                {"label": "O"  , "x":  9.5, "y": 1          },
+                {"label": "P"  , "x": 10.5, "y": 1          },
+                {"label": "{"  , "x": 11.5, "y": 1          },
+                {"label": "}"  , "x": 12.5, "y": 1          },
+                {"label": "|"  , "x": 13.5, "y": 1, "w": 1.5},
+                {"label": "Caps Lock", "x":  0   , "y": 2, "w": 1.75},
+                {"label": "A"        , "x":  1.75, "y": 2           },
+                {"label": "S"        , "x":  2.75, "y": 2           },
+                {"label": "D"        , "x":  3.75, "y": 2           },
+                {"label": "F"        , "x":  4.75, "y": 2           },
+                {"label": "G"        , "x":  5.75, "y": 2           },
+                {"label": "H"        , "x":  6.75, "y": 2           },
+                {"label": "J"        , "x":  7.75, "y": 2           },
+                {"label": "K"        , "x":  8.75, "y": 2           },
+                {"label": "L"        , "x":  9.75, "y": 2           },
+                {"label": ":"        , "x": 10.75, "y": 2           },
+                {"label": "\""       , "x": 11.75, "y": 2           },
+                {"label": "Enter"    , "x": 12.75, "y": 2, "w": 2.25},
+                {"label": "Left Shift" , "x":  0   , "y": 3, "w": 2.25},
+                {"label": "Z"          , "x":  2.25, "y": 3           },
+                {"label": "X"          , "x":  3.25, "y": 3           },
+                {"label": "C"          , "x":  4.25, "y": 3           },
+                {"label": "V"          , "x":  5.25, "y": 3           },
+                {"label": "B"          , "x":  6.25, "y": 3           },
+                {"label": "N"          , "x":  7.25, "y": 3           },
+                {"label": "M"          , "x":  8.25, "y": 3           },
+                {"label": "<"          , "x":  9.25, "y": 3           },
+                {"label": ">"          , "x": 10.25, "y": 3           },
+                {"label": "?"          , "x": 11.25, "y": 3           },
+                {"label": "Right Shift", "x": 12.25, "y": 3, "w": 2.75},
+                {"label": "Left Ctrl" , "x":  0   , "y": 4, "w": 1.25},
+                {"label": "GUI"       , "x":  1.25, "y": 4, "w": 1.25},
+                {"label": "Left Alt"  , "x":  2.5 , "y": 4, "w": 1.25},
+                {"label": "Space"     , "x":  3.75, "y": 4, "w": 2.25},
+                {"label": "Space"     , "x":  6   , "y": 4, "w": 1.25},
+                {"label": "Space"     , "x":  7.25, "y": 4, "w": 2.75},
+                {"label": "Right Ctrl", "x": 10   , "y": 4, "w": 1.25},
+                {"label": "GUI"       , "x": 11.25, "y": 4, "w": 1.25},
+                {"label": "MO(1)"     , "x": 12.5 , "y": 4, "w": 1.25},
+                {"label": "Right Ctrl", "x": 13.75, "y": 4, "w": 1.25}
+            ]
+        }
+    }
+}

+ 40 - 0
keyboards/mtbkeys/mtb60/solder/keymaps/default/keymap.c

@@ -0,0 +1,40 @@
+/* Copyright 2021 MTBKeys
+ *
+ * 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 QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE,
+    _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [_BASE] = LAYOUT(
+        KC_ESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, 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,
+        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_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
+        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,  KC_SPC,  KC_SPC,                    KC_RALT, KC_RGUI, MO(_FN), KC_RGUI, KC_RCTL
+    ),
+    [_FN] = LAYOUT(
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12, _______, _______,
+        _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,  KC_RIGHT, _______, _______,          _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______,                   _______, _______, _______,          _______, _______, _______, _______, _______
+    )
+};

+ 26 - 0
keyboards/mtbkeys/mtb60/solder/readme.md

@@ -0,0 +1,26 @@
+# MTB60 (Solder Edition)
+
+## Details
+
+* Keyboard Maintainer: [MTBKeys](https://mtbkeys.com/)
+* Hardware Supported: MTB60 PCB (Solder edition)
+* Hardware Availability: [HB60 on MTBKeys Website](https://mtbkeys.com/)
+
+## Building Firmware
+
+Make example for this keyboard (after setting up your build environment):
+
+    make mtbkeys/mtb60/solder:default
+
+Flashing example for this keyboard:
+
+    make mtbkeys/mtb60/solder:default:flash
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+1. **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+2. **Physical reset button**: Briefly press the button on the back of the PCB
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 21 - 0
keyboards/mtbkeys/mtb60/solder/rules.mk

@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
+AUDIO_ENABLE = no           # Audio output

+ 17 - 0
keyboards/mtbkeys/mtb60/solder/solder.c

@@ -0,0 +1,17 @@
+/* Copyright 2021 MTBKeys
+ *
+ * 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 "solder.h"

+ 33 - 0
keyboards/mtbkeys/mtb60/solder/solder.h

@@ -0,0 +1,33 @@
+/* Copyright 2021 MTBKeys
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+    k00, k10, k20, k30, k40, k50, k60, k70, k80, k90, ka0, kb0, kc0, kd0, ke0, \
+         k11, k21, k31, k41, k51, k61, k71, k81, k91, ka1, kb1, kc1, kd1, ke1, \
+    k02,      k22, k32, k42, k52, k62, k72, k82, k92, ka2, kb2, kc2, kd2,      \
+    k03, k13, k23, k33, k43, k53, k63, k73, k83, k93, ka3, kb3, kc3, kd3, ke3, \
+    k04, k14,      k34, k44,      k64,      k84,      ka4, kb4, kc4, kd4, ke4  \
+) { \
+    { k00,   k10,   k20,   k30, k40, k50,   k60, k70,   k80, k90,   ka0, kb0, kc0, kd0, ke0   }, \
+    { KC_NO, k11,   k21,   k31, k41, k51,   k61, k71,   k81, k91,   ka1, kb1, kc1, kd1, ke1   }, \
+    { k02,   KC_NO, k22,   k32, k42, k52,   k62, k72,   k82, k92,   ka2, kb2, kc2, kd2, KC_NO }, \
+    { k03,   k13,   k23,   k33, k43, k53,   k63, k73,   k83, k93,   ka3, kb3, kc3, kd3, ke3   }, \
+    { k04,   k14,   KC_NO, k34, k44, KC_NO, k64, KC_NO, k84, KC_NO, ka4, kb4, kc4, kd4, ke4   }  \
+}

+ 54 - 12
lib/python/qmk/cli/format/python.py

@@ -4,23 +4,65 @@ from subprocess import CalledProcessError, DEVNULL
 
 from milc import cli
 
+from qmk.path import normpath
 
-@cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Don't actually format.")
-@cli.subcommand("Format python code according to QMK's style.", hidden=False if cli.config.user.developer else True)
-def format_python(cli):
-    """Format python code according to QMK's style.
-    """
+py_file_suffixes = ('py',)
+py_dirs = ['lib/python']
+
+
+def yapf_run(files):
     edit = '--diff' if cli.args.dry_run else '--in-place'
-    yapf_cmd = ['yapf', '-vv', '--recursive', edit, 'lib/python']
+    yapf_cmd = ['yapf', '-vv', '--recursive', edit, *files]
     try:
         cli.run(yapf_cmd, check=True, capture_output=False, stdin=DEVNULL)
-        cli.log.info('Python code in `lib/python` is correctly formatted.')
-        return True
+        cli.log.info('Successfully formatted the python code.')
 
     except CalledProcessError:
-        if cli.args.dry_run:
-            cli.log.error('Python code in `lib/python` is incorrectly formatted!')
+        cli.log.error(f'Python code in {",".join(py_dirs)} incorrectly formatted!')
+        return False
+
+
+def filter_files(files):
+    """Yield only files to be formatted and skip the rest
+    """
+
+    for file in files:
+        if file and file.name.split('.')[-1] in py_file_suffixes:
+            yield file
         else:
-            cli.log.error('Error formatting python code!')
+            cli.log.debug('Skipping file %s', file)
+
+
+@cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Don't actually format.")
+@cli.argument('-b', '--base-branch', default='origin/master', help='Branch to compare to diffs to.')
+@cli.argument('-a', '--all-files', arg_only=True, action='store_true', help='Format all files.')
+@cli.argument('files', nargs='*', arg_only=True, type=normpath, help='Filename(s) to format.')
+@cli.subcommand("Format python code according to QMK's style.", hidden=False if cli.config.user.developer else True)
+def format_python(cli):
+    """Format python code according to QMK's style.
+    """
+    # Find the list of files to format
+    if cli.args.files:
+        files = list(filter_files(cli.args.files))
+
+        if not files:
+            cli.log.error('No Python files in filelist: %s', ', '.join(map(str, cli.args.files)))
+            exit(0)
+
+        if cli.args.all_files:
+            cli.log.warning('Filenames passed with -a, only formatting: %s', ','.join(map(str, files)))
+
+    elif cli.args.all_files:
+        files = py_dirs
+
+    else:
+        git_diff_cmd = ['git', 'diff', '--name-only', cli.args.base_branch, *py_dirs]
+        git_diff = cli.run(git_diff_cmd, stdin=DEVNULL)
+        files = list(filter(None, git_diff.stdout.split('\n')))
+
+    # Sanity check
+    if not files:
+        cli.log.error('No changed files detected. Use "qmk format-python -a" to format all files')
+        return False
 
-    return False
+    return yapf_run(files)

+ 5 - 0
lib/python/qmk/cli/list/keymaps.py

@@ -13,5 +13,10 @@ from qmk.keyboard import keyboard_completer, keyboard_folder
 def list_keymaps(cli):
     """List the keymaps for a specific keyboard
     """
+    if not cli.config.list_keymaps.keyboard:
+        cli.log.error('Missing required arguments: --keyboard')
+        cli.subcommands['list-keymaps'].print_help()
+        return False
+
     for name in qmk.keymap.list_keymaps(cli.config.list_keymaps.keyboard):
         print(name)

+ 5 - 0
lib/python/qmk/cli/list/layouts.py

@@ -13,6 +13,11 @@ from qmk.info import info_json
 def list_layouts(cli):
     """List the layouts for a specific keyboard
     """
+    if not cli.config.list_layouts.keyboard:
+        cli.log.error('Missing required arguments: --keyboard')
+        cli.subcommands['list-layouts'].print_help()
+        return False
+
     info_data = info_json(cli.config.list_layouts.keyboard)
     for name in sorted(info_data.get('community_layouts', [])):
         print(name)

+ 2 - 2
lib/python/qmk/tests/test_cli_commands.py

@@ -81,9 +81,9 @@ def test_hello():
 
 
 def test_format_python():
-    result = check_subcommand('format-python', '--dry-run')
+    result = check_subcommand('format-python', '-n', '-a')
     check_returncode(result)
-    assert 'Python code in `lib/python` is correctly formatted.' in result.stdout
+    assert 'Successfully formatted the python code.' in result.stdout
 
 
 def test_list_keyboards():

部分文件因为文件数量过多而无法显示