aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/format.yaml2
-rw-r--r--.github/workflows/format_push.yaml2
-rw-r--r--keyboards/chalice/chalice.h62
-rw-r--r--keyboards/chalice/info.json139
-rw-r--r--keyboards/cutie_club/keebcats/dougal/config.h50
-rw-r--r--keyboards/cutie_club/keebcats/dougal/dougal.c17
-rw-r--r--keyboards/cutie_club/keebcats/dougal/dougal.h34
-rw-r--r--keyboards/cutie_club/keebcats/dougal/info.json84
-rw-r--r--keyboards/cutie_club/keebcats/dougal/keymaps/default/keymap.c28
-rw-r--r--keyboards/cutie_club/keebcats/dougal/keymaps/via/keymap.c49
-rw-r--r--keyboards/cutie_club/keebcats/dougal/keymaps/via/rules.mk1
-rw-r--r--keyboards/cutie_club/keebcats/dougal/readme.md18
-rw-r--r--keyboards/cutie_club/keebcats/dougal/rules.mk21
-rw-r--r--keyboards/ergodash/mini/keymaps/yoshimaru46/config.h33
-rw-r--r--keyboards/ergodash/mini/keymaps/yoshimaru46/keymap.c111
-rw-r--r--keyboards/ergodash/mini/keymaps/yoshimaru46/readme.md4
-rw-r--r--keyboards/ergodash/mini/keymaps/yoshimaru46/rules.mk4
-rw-r--r--keyboards/ffkeebs/puca/info.json88
-rw-r--r--keyboards/ffkeebs/puca/keymaps/default/keymap.c52
-rw-r--r--keyboards/ffkeebs/puca/keymaps/default_numpad/keymap.c38
-rw-r--r--keyboards/ffkeebs/puca/keymaps/default_ortho/keymap.c38
-rw-r--r--keyboards/ffkeebs/puca/puca.c14
-rw-r--r--keyboards/ffkeebs/puca/puca.h96
-rw-r--r--keyboards/ffkeebs/puca/readme.md2
-rw-r--r--keyboards/ffkeebs/puca/rules.mk6
-rw-r--r--keyboards/handwired/split89/info.json97
-rw-r--r--keyboards/handwired/split89/keymaps/default/keymap.c28
-rw-r--r--keyboards/handwired/split89/split89.h38
-rw-r--r--keyboards/mechanickeys/miniashen40/config.h53
-rw-r--r--keyboards/mechanickeys/miniashen40/info.json15
-rw-r--r--keyboards/mechanickeys/miniashen40/keymaps/default/keymap.c47
-rw-r--r--keyboards/mechanickeys/miniashen40/keymaps/via/keymap.c47
-rw-r--r--keyboards/mechanickeys/miniashen40/keymaps/via/rules.mk2
-rw-r--r--keyboards/mechanickeys/miniashen40/miniashen40.c17
-rw-r--r--keyboards/mechanickeys/miniashen40/miniashen40.h42
-rw-r--r--keyboards/mechanickeys/miniashen40/readme.md40
-rw-r--r--keyboards/mechanickeys/miniashen40/rules.mk21
-rw-r--r--keyboards/mtbkeys/mtb60/hotswap/config.h79
-rw-r--r--keyboards/mtbkeys/mtb60/hotswap/hotswap.c17
-rw-r--r--keyboards/mtbkeys/mtb60/hotswap/hotswap.h33
-rw-r--r--keyboards/mtbkeys/mtb60/hotswap/info.json72
-rw-r--r--keyboards/mtbkeys/mtb60/hotswap/keymaps/default/keymap.c39
-rw-r--r--keyboards/mtbkeys/mtb60/hotswap/readme.md26
-rw-r--r--keyboards/mtbkeys/mtb60/hotswap/rules.mk21
-rw-r--r--keyboards/mtbkeys/mtb60/solder/config.h79
-rw-r--r--keyboards/mtbkeys/mtb60/solder/info.json75
-rw-r--r--keyboards/mtbkeys/mtb60/solder/keymaps/default/keymap.c40
-rw-r--r--keyboards/mtbkeys/mtb60/solder/readme.md26
-rw-r--r--keyboards/mtbkeys/mtb60/solder/rules.mk21
-rw-r--r--keyboards/mtbkeys/mtb60/solder/solder.c17
-rw-r--r--keyboards/mtbkeys/mtb60/solder/solder.h33
-rwxr-xr-xlib/python/qmk/cli/format/python.py66
-rw-r--r--lib/python/qmk/cli/list/keymaps.py5
-rw-r--r--lib/python/qmk/cli/list/layouts.py5
-rw-r--r--lib/python/qmk/tests/test_cli_commands.py4
55 files changed, 1926 insertions, 172 deletions
diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml
index 9e165e0e8..645e0ce10 100644
--- a/.github/workflows/format.yaml
+++ b/.github/workflows/format.yaml
@@ -37,7 +37,7 @@ jobs:
37 shell: 'bash {0}' 37 shell: 'bash {0}'
38 run: | 38 run: |
39 qmk format-c --core-only $(< ~/files.txt) 39 qmk format-c --core-only $(< ~/files.txt)
40 qmk format-python 40 qmk format-python $(< ~/files.txt)
41 qmk format-text $(< ~/files.txt) 41 qmk format-text $(< ~/files.txt)
42 git diff 42 git diff
43 43
diff --git a/.github/workflows/format_push.yaml b/.github/workflows/format_push.yaml
index 8b579bf86..b79130f17 100644
--- a/.github/workflows/format_push.yaml
+++ b/.github/workflows/format_push.yaml
@@ -25,7 +25,7 @@ jobs:
25 shell: 'bash {0}' 25 shell: 'bash {0}'
26 run: | 26 run: |
27 qmk format-c -a 27 qmk format-c -a
28 qmk format-python 28 qmk format-python -a
29 qmk format-text -a 29 qmk format-text -a
30 git diff 30 git diff
31 31
diff --git a/keyboards/chalice/chalice.h b/keyboards/chalice/chalice.h
index a0bc0026f..c55cd4ba0 100644
--- a/keyboards/chalice/chalice.h
+++ b/keyboards/chalice/chalice.h
@@ -17,44 +17,44 @@
17 17
18#pragma once 18#pragma once
19 19
20#define ____ KC_NO 20#define ___ KC_NO
21 21
22#include "quantum.h" 22#include "quantum.h"
23 23
24#define LAYOUT_default( \ 24#define LAYOUT_default( \
25 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ 25 K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K46, \
26 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ 26 K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K56, \
27 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ 27 K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K66, K76, \
28 K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K214, \ 28 K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K86, K96, \
29 K401, K402, K404, K406, K408, K410, K411, K412, K413, K314 \ 29 K80, K91, K82, K92, K83, K93, K84, K94, K85, K95 \
30) { \ 30) { \
31 { K000, K002, K004, K006, K008, K010, K012 }, \ 31 { K00, K01, K02, K03, K04, K05, K06 }, \
32 { K001, K003, K005, K007, K009, K011, K013 }, \ 32 { K10, K11, K12, K13, K14, K15, K16 }, \
33 { K100, K102, K104, K106, K108, K110, K112 }, \ 33 { K20, K21, K22, K23, K24, K25, K26 }, \
34 { K101, K103, K105, K107, K109, K111, K113 }, \ 34 { K30, K31, K32, K33, K34, K35, K36 }, \
35 { K200, K202, K204, K206, K208, K210, K014 }, \ 35 { K40, K41, K42, K43, K44, K45, K46 }, \
36 { K201, K203, K205, K207, K209, K211, K114 }, \ 36 { K50, K51, K52, K53, K54, K55, K56 }, \
37 { K301, K303, K305, K307, K309, K311, K212 }, \ 37 { K60, K61, K62, K63, K64, K65, K66 }, \
38 { K302, K304, K306, K308, K310, K312, K213 }, \ 38 { K70, K71, K72, K73, K74, K75, K76 }, \
39 { K401, ____, K404, K408, K411, K413, K313 }, \ 39 { K80, ___, K82, K83, K84, K85, K86 }, \
40 { ____, K402, K406, K410, K412, K314, K214 } \ 40 { ___, K91, K92, K93, K94, K95, K96 } \
41} 41}
42 42
43#define LAYOUT_split_bs( \ 43#define LAYOUT_split_bs( \
44 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K403, \ 44 K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K46, K81, \
45 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ 45 K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K56, \
46 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ 46 K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K66, K76, \
47 K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K214, \ 47 K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K86, K96, \
48 K401, K402, K404, K406, K408, K410, K411, K412, K413, K314 \ 48 K80, K91, K82, K92, K83, K93, K84, K94, K85, K95 \
49) { \ 49) { \
50 { K000, K002, K004, K006, K008, K010, K012 }, \ 50 { K00, K01, K02, K03, K04, K05, K06 }, \
51 { K001, K003, K005, K007, K009, K011, K013 }, \ 51 { K10, K11, K12, K13, K14, K15, K16 }, \
52 { K100, K102, K104, K106, K108, K110, K112 }, \ 52 { K20, K21, K22, K23, K24, K25, K26 }, \
53 { K101, K103, K105, K107, K109, K111, K113 }, \ 53 { K30, K31, K32, K33, K34, K35, K36 }, \
54 { K200, K202, K204, K206, K208, K210, K014 }, \ 54 { K40, K41, K42, K43, K44, K45, K46 }, \
55 { K201, K203, K205, K207, K209, K211, K114 }, \ 55 { K50, K51, K52, K53, K54, K55, K56 }, \
56 { K301, K303, K305, K307, K309, K311, K212 }, \ 56 { K60, K61, K62, K63, K64, K65, K66 }, \
57 { K302, K304, K306, K308, K310, K312, K213 }, \ 57 { K70, K71, K72, K73, K74, K75, K76 }, \
58 { K401, K403, K404, K408, K411, K413, K313 }, \ 58 { K80, K81, K82, K83, K84, K85, K86 }, \
59 { ____, K402, K406, K410, K412, K314, K214 } \ 59 { ___, K91, K92, K93, K94, K95, K96 } \
60} 60}
diff --git a/keyboards/chalice/info.json b/keyboards/chalice/info.json
index 68bd710a3..77a3f7bc1 100644
--- a/keyboards/chalice/info.json
+++ b/keyboards/chalice/info.json
@@ -1,25 +1,27 @@
1{ 1{
2 "keyboard_name": "Chalice", 2 "keyboard_name": "Chalice",
3 "url": "https://customkbd.com/products/chalice-pre-order", 3 "url": "https://customkbd.com/products/chalice-pre-order",
4 "maintainer": "CustomKBD", 4 "maintainer": "joshajohnson, CustomKBD",
5 "layouts": { 5 "layouts": {
6 "LAYOUT_default": { 6 "LAYOUT_default": {
7 "layout": [ 7 "layout": [
8 {"label":"Esc", "x":0, "y":0}, 8 {"label":"Esc", "x":0, "y":0},
9 {"label":"~", "x":1.5, "y":0}, 9 {"label":"`~", "x":1.5, "y":0},
10 {"label":"!", "x":2.5, "y":0}, 10 {"label":"1!", "x":2.5, "y":0},
11 {"label":"@", "x":3.5, "y":0}, 11 {"label":"2@", "x":3.5, "y":0},
12 {"label":"#", "x":4.5, "y":0}, 12 {"label":"3#", "x":4.5, "y":0},
13 {"label":"$", "x":5.5, "y":0}, 13 {"label":"4$", "x":5.5, "y":0},
14 {"label":"%", "x":6.5, "y":0}, 14 {"label":"5%", "x":6.5, "y":0},
15 {"label":"^", "x":7.5, "y":0}, 15 {"label":"6^", "x":7.5, "y":0},
16 {"label":"&", "x":10.5, "y":0}, 16 {"label":"7&", "x":10.5, "y":0},
17 {"label":"*", "x":11.5, "y":0}, 17 {"label":"8*", "x":11.5, "y":0},
18 {"label":"(", "x":12.5, "y":0}, 18 {"label":"9(", "x":12.5, "y":0},
19 {"label":")", "x":13.5, "y":0}, 19 {"label":"0)", "x":13.5, "y":0},
20 {"label":"_", "x":14.5, "y":0}, 20 {"label":"-_", "x":14.5, "y":0},
21 {"label":"+", "x":15.5, "y":0}, 21 {"label":"=+", "x":15.5, "y":0},
22 {"label":"Backspace", "x":16.5, "y":0, "w":2}, 22 {"label":"Backspace", "x":16.5, "y":0, "w":2},
23
24 {"label":"Insert", "x":0, "y":1},
23 {"label":"Tab", "x":1.5, "y":1, "w":1.5}, 25 {"label":"Tab", "x":1.5, "y":1, "w":1.5},
24 {"label":"Q", "x":3, "y":1}, 26 {"label":"Q", "x":3, "y":1},
25 {"label":"W", "x":4, "y":1}, 27 {"label":"W", "x":4, "y":1},
@@ -31,10 +33,10 @@
31 {"label":"I", "x":12, "y":1}, 33 {"label":"I", "x":12, "y":1},
32 {"label":"O", "x":13, "y":1}, 34 {"label":"O", "x":13, "y":1},
33 {"label":"P", "x":14, "y":1}, 35 {"label":"P", "x":14, "y":1},
34 {"label":"{", "x":15, "y":1}, 36 {"label":"[{", "x":15, "y":1},
35 {"label":"}", "x":16, "y":1}, 37 {"label":"]}", "x":16, "y":1},
36 {"label":"|", "x":17, "y":1, "w":1.5}, 38 {"label":"\\|", "x":17, "y":1, "w":1.5},
37 {"label":"Mute", "x":19, "y":0.5}, 39
38 {"label":"Delete", "x":0, "y":2}, 40 {"label":"Delete", "x":0, "y":2},
39 {"label":"Caps Lock", "x":1.5, "y":2, "w":1.75}, 41 {"label":"Caps Lock", "x":1.5, "y":2, "w":1.75},
40 {"label":"A", "x":3.25, "y":2}, 42 {"label":"A", "x":3.25, "y":2},
@@ -46,9 +48,10 @@
46 {"label":"J", "x":11.25, "y":2}, 48 {"label":"J", "x":11.25, "y":2},
47 {"label":"K", "x":12.25, "y":2}, 49 {"label":"K", "x":12.25, "y":2},
48 {"label":"L", "x":13.25, "y":2}, 50 {"label":"L", "x":13.25, "y":2},
49 {"label":":", "x":14.25, "y":2}, 51 {"label":";:", "x":14.25, "y":2},
50 {"label":"\"", "x":15.25, "y":2}, 52 {"label":"'\"", "x":15.25, "y":2},
51 {"label":"Enter", "x":16.25, "y":2, "w":2.25}, 53 {"label":"Enter", "x":16.25, "y":2, "w":2.25},
54
52 {"label":"Shift", "x":1.5, "y":3, "w":2.25}, 55 {"label":"Shift", "x":1.5, "y":3, "w":2.25},
53 {"label":"Z", "x":3.75, "y":3}, 56 {"label":"Z", "x":3.75, "y":3},
54 {"label":"X", "x":4.75, "y":3}, 57 {"label":"X", "x":4.75, "y":3},
@@ -58,21 +61,99 @@
58 {"label":"B", "x":9.75, "y":3}, 61 {"label":"B", "x":9.75, "y":3},
59 {"label":"N", "x":10.75, "y":3}, 62 {"label":"N", "x":10.75, "y":3},
60 {"label":"M", "x":11.75, "y":3}, 63 {"label":"M", "x":11.75, "y":3},
61 {"label":"<", "x":12.75, "y":3}, 64 {"label":",<", "x":12.75, "y":3},
62 {"label":">", "x":13.75, "y":3}, 65 {"label":".>", "x":13.75, "y":3},
63 {"label":"?", "x":14.75, "y":3}, 66 {"label":"/?", "x":14.75, "y":3},
64 {"label":"Shift", "x":15.75, "y":3, "w":1.75}, 67 {"label":"Shift", "x":15.75, "y":3, "w":1.75},
65 {"label":"Up", "x":17.75, "y":3.25}, 68 {"label":"Up", "x":17.5, "y":3},
69
66 {"label":"Ctrl", "x":1.5, "y":4, "w":1.5}, 70 {"label":"Ctrl", "x":1.5, "y":4, "w":1.5},
67 {"label":"Alt", "x":4.5, "y":4, "w":1.5}, 71 {"label":"Alt", "x":4.5, "y":4, "w":1.5},
68 {"label":"Space", "x":6, "y":4, "w":2}, 72 {"label":"Space", "x":6, "y":4, "w":2.25},
69 {"label":"Fn", "x":8, "y":4}, 73 {"label":"Fn", "x":8.25, "y":4},
70 {"label":"Space", "x":9.75, "y":4, "w":2.75}, 74 {"label":"Space", "x":9.75, "y":4, "w":2.75},
71 {"label":"Alt", "x":12.5, "y":4, "w":1.5}, 75 {"label":"Alt", "x":12.5, "y":4, "w":1.5},
72 {"label":"Ctrl", "x":15, "y":4, "w":1.5}, 76 {"label":"Ctrl", "x":15, "y":4, "w":1.5},
73 {"label":"Left", "x":16.75, "y":4.25}, 77 {"label":"Left", "x":16.5, "y":4},
74 {"label":"Down", "x":17.75, "y":4.25}, 78 {"label":"Down", "x":17.5, "y":4},
75 {"label":"Right", "x":18.75, "y":4.25} 79 {"label":"Right", "x":18.5, "y":4}
80 ]
81 },
82 "LAYOUT_split_bs": {
83 "layout": [
84 {"label":"Esc", "x":0, "y":0},
85 {"label":"`~", "x":1.5, "y":0},
86 {"label":"1!", "x":2.5, "y":0},
87 {"label":"2@", "x":3.5, "y":0},
88 {"label":"3#", "x":4.5, "y":0},
89 {"label":"4$", "x":5.5, "y":0},
90 {"label":"5%", "x":6.5, "y":0},
91 {"label":"6^", "x":7.5, "y":0},
92 {"label":"7&", "x":10.5, "y":0},
93 {"label":"8*", "x":11.5, "y":0},
94 {"label":"9(", "x":12.5, "y":0},
95 {"label":"0)", "x":13.5, "y":0},
96 {"label":"-_", "x":14.5, "y":0},
97 {"label":"=+", "x":15.5, "y":0},
98 {"label":"Backspace", "x":16.5, "y":0},
99 {"label":"Backspace", "x":17.5, "y":0},
100
101 {"label":"Insert", "x":0, "y":1},
102 {"label":"Tab", "x":1.5, "y":1, "w":1.5},
103 {"label":"Q", "x":3, "y":1},
104 {"label":"W", "x":4, "y":1},
105 {"label":"E", "x":5, "y":1},
106 {"label":"R", "x":6, "y":1},
107 {"label":"T", "x":7, "y":1},
108 {"label":"Y", "x":10, "y":1},
109 {"label":"U", "x":11, "y":1},
110 {"label":"I", "x":12, "y":1},
111 {"label":"O", "x":13, "y":1},
112 {"label":"P", "x":14, "y":1},
113 {"label":"[{", "x":15, "y":1},
114 {"label":"]}", "x":16, "y":1},
115 {"label":"\\|", "x":17, "y":1, "w":1.5},
116
117 {"label":"Delete", "x":0, "y":2},
118 {"label":"Caps Lock", "x":1.5, "y":2, "w":1.75},
119 {"label":"A", "x":3.25, "y":2},
120 {"label":"S", "x":4.25, "y":2},
121 {"label":"D", "x":5.25, "y":2},
122 {"label":"F", "x":6.25, "y":2},
123 {"label":"G", "x":7.25, "y":2},
124 {"label":"H", "x":10.25, "y":2},
125 {"label":"J", "x":11.25, "y":2},
126 {"label":"K", "x":12.25, "y":2},
127 {"label":"L", "x":13.25, "y":2},
128 {"label":";:", "x":14.25, "y":2},
129 {"label":"'\"", "x":15.25, "y":2},
130 {"label":"Enter", "x":16.25, "y":2, "w":2.25},
131
132 {"label":"Shift", "x":1.5, "y":3, "w":2.25},
133 {"label":"Z", "x":3.75, "y":3},
134 {"label":"X", "x":4.75, "y":3},
135 {"label":"C", "x":5.75, "y":3},
136 {"label":"V", "x":6.75, "y":3},
137 {"label":"B", "x":7.75, "y":3},
138 {"label":"B", "x":9.75, "y":3},
139 {"label":"N", "x":10.75, "y":3},
140 {"label":"M", "x":11.75, "y":3},
141 {"label":",<", "x":12.75, "y":3},
142 {"label":".>", "x":13.75, "y":3},
143 {"label":"/?", "x":14.75, "y":3},
144 {"label":"Shift", "x":15.75, "y":3, "w":1.75},
145 {"label":"Up", "x":17.5, "y":3},
146
147 {"label":"Ctrl", "x":1.5, "y":4, "w":1.5},
148 {"label":"Alt", "x":4.5, "y":4, "w":1.5},
149 {"label":"Space", "x":6, "y":4, "w":2.25},
150 {"label":"Fn", "x":8.25, "y":4},
151 {"label":"Space", "x":9.75, "y":4, "w":2.75},
152 {"label":"Alt", "x":12.5, "y":4, "w":1.5},
153 {"label":"Ctrl", "x":15, "y":4, "w":1.5},
154 {"label":"Left", "x":16.5, "y":4},
155 {"label":"Down", "x":17.5, "y":4},
156 {"label":"Right", "x":18.5, "y":4}
76 ] 157 ]
77 } 158 }
78 } 159 }
diff --git a/keyboards/cutie_club/keebcats/dougal/config.h b/keyboards/cutie_club/keebcats/dougal/config.h
new file mode 100644
index 000000000..05160322c
--- /dev/null
+++ b/keyboards/cutie_club/keebcats/dougal/config.h
@@ -0,0 +1,50 @@
1/* Copyright 2021 Cutie Club
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "config_common.h"
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0xFB9C
23#define PRODUCT_ID 0xB265
24#define DEVICE_VER 0x0000
25#define MANUFACTURER Cutie Club
26#define PRODUCT Keebcats Dougal 65%
27
28/* key matrix size */
29#define MATRIX_ROWS 5
30#define MATRIX_COLS 16
31
32/*
33 * Keyboard Matrix Assignments
34 */
35#define MATRIX_ROW_PINS { B2, D0, F5, F4, F1 }
36#define MATRIX_COL_PINS { E6, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, D1, B7 }
37#define UNUSED_PINS { B0, B1, B3 }
38
39/* COL2ROW, ROW2COL*/
40#define DIODE_DIRECTION COL2ROW
41
42/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
43#define DEBOUNCE 5
44
45#define LED_CAPS_LOCK_PIN F0
46
47/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
48#define LOCKING_SUPPORT_ENABLE
49/* Locking resynchronize hack */
50#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cutie_club/keebcats/dougal/dougal.c b/keyboards/cutie_club/keebcats/dougal/dougal.c
new file mode 100644
index 000000000..8f247bd28
--- /dev/null
+++ b/keyboards/cutie_club/keebcats/dougal/dougal.c
@@ -0,0 +1,17 @@
1/* Copyright 2021 Cutie Club
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "dougal.h"
diff --git a/keyboards/cutie_club/keebcats/dougal/dougal.h b/keyboards/cutie_club/keebcats/dougal/dougal.h
new file mode 100644
index 000000000..cd0fa1d2c
--- /dev/null
+++ b/keyboards/cutie_club/keebcats/dougal/dougal.h
@@ -0,0 +1,34 @@
1/* Copyright 2021 Cutie Club
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#define LAYOUT_all( \
22 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, \
23 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, \
24 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, \
25 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, \
26 k04_00, k04_01, k04_02, k04_04, k04_06, k04_08, k04_09, k04_10, k04_11, k04_12, k04_13, k04_15 \
27) \
28{ \
29 { 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 }, \
30 { 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 }, \
31 { 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 }, \
32 { 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 }, \
33 { 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 } \
34}
diff --git a/keyboards/cutie_club/keebcats/dougal/info.json b/keyboards/cutie_club/keebcats/dougal/info.json
new file mode 100644
index 000000000..70c804e20
--- /dev/null
+++ b/keyboards/cutie_club/keebcats/dougal/info.json
@@ -0,0 +1,84 @@
1{
2 "keyboard_name": "Keebcats Dougal",
3 "url": "",
4 "maintainer": "Cutie Club",
5 "layouts": {
6 "LAYOUT_all": {
7 "layout": [
8 { "x": 0, "y": 0 },
9 { "x": 1, "y": 0 },
10 { "x": 2, "y": 0 },
11 { "x": 3, "y": 0 },
12 { "x": 4, "y": 0 },
13 { "x": 5, "y": 0 },
14 { "x": 6, "y": 0 },
15 { "x": 7, "y": 0 },
16 { "x": 8, "y": 0 },
17 { "x": 9, "y": 0 },
18 { "x": 10, "y": 0 },
19 { "x": 11, "y": 0 },
20 { "x": 12, "y": 0 },
21 { "x": 13, "y": 0 },
22 { "x": 14, "y": 0 },
23 { "x": 15, "y": 0 },
24 { "x": 0, "y": 1, "w": 1.5 },
25 { "x": 1.5, "y": 1 },
26 { "x": 2.5, "y": 1 },
27 { "x": 3.5, "y": 1 },
28 { "x": 4.5, "y": 1 },
29 { "x": 5.5, "y": 1 },
30 { "x": 6.5, "y": 1 },
31 { "x": 7.5, "y": 1 },
32 { "x": 8.5, "y": 1 },
33 { "x": 9.5, "y": 1 },
34 { "x": 10.5, "y": 1 },
35 { "x": 11.5, "y": 1 },
36 { "x": 12.5, "y": 1 },
37 { "x": 13.5, "y": 1, "w": 1.5 },
38 { "x": 15, "y": 1 },
39 { "x": 0, "y": 2, "w": 1.75 },
40 { "x": 1.75, "y": 2 },
41 { "x": 2.75, "y": 2 },
42 { "x": 3.75, "y": 2 },
43 { "x": 4.75, "y": 2 },
44 { "x": 5.75, "y": 2 },
45 { "x": 6.75, "y": 2 },
46 { "x": 7.75, "y": 2 },
47 { "x": 8.75, "y": 2 },
48 { "x": 9.75, "y": 2 },
49 { "x": 10.75, "y": 2 },
50 { "x": 11.75, "y": 2 },
51 { "x": 12.75, "y": 2 },
52 { "x": 14, "y": 2 },
53 { "x": 15, "y": 2 },
54 { "x": 0, "y": 3, "w": 1.25 },
55 { "x": 1.25, "y": 3 },
56 { "x": 2.25, "y": 3 },
57 { "x": 3.25, "y": 3 },
58 { "x": 4.25, "y": 3 },
59 { "x": 5.25, "y": 3 },
60 { "x": 6.25, "y": 3 },
61 { "x": 7.25, "y": 3 },
62 { "x": 8.25, "y": 3 },
63 { "x": 9.25, "y": 3 },
64 { "x": 10.25, "y": 3 },
65 { "x": 11.25, "y": 3 },
66 { "x": 12.25, "y": 3, "w": 1.75 },
67 { "x": 14, "y": 3 },
68 { "x": 15, "y": 3 },
69 { "x": 0, "y": 4, "w": 1.25 },
70 { "x": 1.25, "y": 4, "w": 1.25 },
71 { "x": 2.5, "y": 4, "w": 1.25 },
72 { "x": 3.75, "y": 4, "w": 2.25 },
73 { "x": 6, "y": 4, "w": 1.25 },
74 { "x": 7.25, "y": 4, "w": 2.75 },
75 { "x": 10, "y": 4 },
76 { "x": 11, "y": 4 },
77 { "x": 12, "y": 4 },
78 { "x": 13, "y": 4 },
79 { "x": 14, "y": 4 },
80 { "x": 15, "y": 4 }
81 ]
82 }
83 }
84}
diff --git a/keyboards/cutie_club/keebcats/dougal/keymaps/default/keymap.c b/keyboards/cutie_club/keebcats/dougal/keymaps/default/keymap.c
new file mode 100644
index 000000000..ec3e1c21f
--- /dev/null
+++ b/keyboards/cutie_club/keebcats/dougal/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2021 Cutie Club
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 /* Base */
21 [0] = LAYOUT_all(
22 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,
23 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,
24 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,
25 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,
26 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT
27 )
28};
diff --git a/keyboards/cutie_club/keebcats/dougal/keymaps/via/keymap.c b/keyboards/cutie_club/keebcats/dougal/keymaps/via/keymap.c
new file mode 100644
index 000000000..58d184a06
--- /dev/null
+++ b/keyboards/cutie_club/keebcats/dougal/keymaps/via/keymap.c
@@ -0,0 +1,49 @@
1/* Copyright 2021 Cutie Club
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 /* Base */
21 [0] = LAYOUT_all(
22 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,
23 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,
24 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,
25 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,
26 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT
27 ),
28 [1] = LAYOUT_all(
29 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
30 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
31 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
32 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
33 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
34 ),
35 [2] = LAYOUT_all(
36 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
37 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
38 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
39 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
40 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
41 ),
42 [3] = LAYOUT_all(
43 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
44 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
45 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
46 KC_TRNS, KC_TRNS, KC_TRNS, 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 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
48 )
49};
diff --git a/keyboards/cutie_club/keebcats/dougal/keymaps/via/rules.mk b/keyboards/cutie_club/keebcats/dougal/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/cutie_club/keebcats/dougal/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/cutie_club/keebcats/dougal/readme.md b/keyboards/cutie_club/keebcats/dougal/readme.md
new file mode 100644
index 000000000..3c0dd932a
--- /dev/null
+++ b/keyboards/cutie_club/keebcats/dougal/readme.md
@@ -0,0 +1,18 @@
1# Dougal
2
3* Keyboard Maintainer: [Cutie Club](https://github.com/cutie-club/)
4* Hardware Supported: Atmega32u4 based 65% PCB, with wide compatibility
5* Hardware Availability: [Keebcats](https://keebcats.co.uk)
6
7## Bootloader
8
9Enter the bootloader in 2 ways with the default configuration:
10
11* **Bootmagic reset**: Hold down the key at top left key (matrix position 0,0) and plug the device in
12* **Physical reset button**: Press the button marked reset on the back of the PCB
13
14Make example for this keyboard (after setting up your build environment):
15
16 make cutie_club/keebcats/dougal:default
17
18See 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).
diff --git a/keyboards/cutie_club/keebcats/dougal/rules.mk b/keyboards/cutie_club/keebcats/dougal/rules.mk
new file mode 100644
index 000000000..05c513615
--- /dev/null
+++ b/keyboards/cutie_club/keebcats/dougal/rules.mk
@@ -0,0 +1,21 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Enable Bootmagic
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/ergodash/mini/keymaps/yoshimaru46/config.h b/keyboards/ergodash/mini/keymaps/yoshimaru46/config.h
new file mode 100644
index 000000000..df04873a9
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/yoshimaru46/config.h
@@ -0,0 +1,33 @@
1/*
2This is the c configuration file for the keymap
3
4Copyright 2012 Jun Wako <wakojun@gmail.com>
5Copyright 2015 Jack Humbert
6
7This program is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation, either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21#pragma once
22
23
24/* Use I2C or Serial, not both */
25
26#define USE_SERIAL
27// #define USE_I2C
28
29/* Select hand configuration */
30
31#define MASTER_LEFT
32// #define MASTER_RIGHT
33// #define EE_HANDS
diff --git a/keyboards/ergodash/mini/keymaps/yoshimaru46/keymap.c b/keyboards/ergodash/mini/keymaps/yoshimaru46/keymap.c
new file mode 100644
index 000000000..98c56c8d1
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/yoshimaru46/keymap.c
@@ -0,0 +1,111 @@
1/* Copyright 2021 Yoshihiro Saito
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>
15 */
16
17#include QMK_KEYBOARD_H
18
19enum layers {
20 _QWERTY,
21 _LOWER,
22 _RAISE,
23 _ADJUST,
24};
25
26enum custom_keycodes {
27 QWERTY = SAFE_RANGE,
28 LOWER,
29 RAISE,
30 ADJUST,
31};
32
33// Shift + ( = <
34const key_override_t left_paren_angle_bracket_override = ko_make_basic(MOD_MASK_SHIFT, KC_LEFT_PAREN, KC_LEFT_ANGLE_BRACKET);
35
36// Shift + ) = >
37const key_override_t right_paren_angle_bracket_override = ko_make_basic(MOD_MASK_SHIFT, KC_RIGHT_PAREN, KC_RIGHT_ANGLE_BRACKET);
38
39const key_override_t **key_overrides = (const key_override_t *[]){
40 &left_paren_angle_bracket_override,
41 &right_paren_angle_bracket_override,
42 NULL
43};
44
45const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
46 /* Qwerty */
47 [_QWERTY] = LAYOUT(
48 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,
49 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,
50 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,
51 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, LOWER, CTL_T(KC_SPC), KC_SFTENT, RAISE, KC_RGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
52 ),
53
54 /* Lower */
55 [_LOWER] = LAYOUT(
56 XXXXXXX, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_F11, KC_GRV, KC_CIRC, KC_AMPR, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX,
57 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F12, KC_TILD, KC_BSLS, KC_MINS, KC_EQL, XXXXXXX, XXXXXXX, XXXXXXX,
58 XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX,
59 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
60 ),
61
62 /* Raise */
63 [_RAISE] = LAYOUT(
64 XXXXXXX, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, XXXXXXX, XXXXXXX, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, XXXXXXX,
65 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX,
66 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, XXXXXXX, XXXXXXX,
67 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
68 ),
69
70 /* Adjust */
71 [_ADJUST] = LAYOUT(
72 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
73 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
74 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
75 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______ ,_______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
76 ),
77};
78
79bool process_record_user(uint16_t keycode, keyrecord_t *record) {
80 switch (keycode) {
81 case LOWER:
82 if (record->event.pressed) {
83 layer_on(_LOWER);
84 update_tri_layer(_LOWER, _RAISE, _ADJUST);
85 } else {
86 layer_off(_LOWER);
87 update_tri_layer(_LOWER, _RAISE, _ADJUST);
88 }
89 return false;
90 break;
91 case RAISE:
92 if (record->event.pressed) {
93 layer_on(_RAISE);
94 update_tri_layer(_LOWER, _RAISE, _ADJUST);
95 } else {
96 layer_off(_RAISE);
97 update_tri_layer(_LOWER, _RAISE, _ADJUST);
98 }
99 return false;
100 break;
101 case ADJUST:
102 if (record->event.pressed) {
103 layer_on(_ADJUST);
104 } else {
105 layer_off(_ADJUST);
106 }
107 return false;
108 break;
109 }
110 return true;
111}
diff --git a/keyboards/ergodash/mini/keymaps/yoshimaru46/readme.md b/keyboards/ergodash/mini/keymaps/yoshimaru46/readme.md
new file mode 100644
index 000000000..67a6ed9b9
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/yoshimaru46/readme.md
@@ -0,0 +1,4 @@
1# yoshimaru46's keymap for Ergodash mini
2
3This is the yoshimaru46's keymap configuration for Ergodash mini.
4There are three layers, QWERTY(default), LOWER, and RAISE.
diff --git a/keyboards/ergodash/mini/keymaps/yoshimaru46/rules.mk b/keyboards/ergodash/mini/keymaps/yoshimaru46/rules.mk
new file mode 100644
index 000000000..f85c6a415
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/yoshimaru46/rules.mk
@@ -0,0 +1,4 @@
1BACKLIGHT_ENABLE = no
2RGBLIGHT_ENABLE = no
3AUDIO_ENABLE = no
4KEY_OVERRIDE_ENABLE = yes
diff --git a/keyboards/ffkeebs/puca/info.json b/keyboards/ffkeebs/puca/info.json
index 0b5b957e6..204f0ca49 100644
--- a/keyboards/ffkeebs/puca/info.json
+++ b/keyboards/ffkeebs/puca/info.json
@@ -2,35 +2,105 @@
2 "keyboard_name": "Puca", 2 "keyboard_name": "Puca",
3 "url": "https://ffkeebs.com/collections/puca/", 3 "url": "https://ffkeebs.com/collections/puca/",
4 "maintainer": "Sleepdealr", 4 "maintainer": "Sleepdealr",
5 "layout_aliases": {
6 "LAYOUT": "LAYOUT_all"
7 },
5 "layouts": { 8 "layouts": {
6 "LAYOUT": { 9 "LAYOUT_all": {
7 "layout": [ 10 "layout": [
8 { "label": "Rotary", "x": 0.5, "y": 0 }, 11 { "label": "Rotary", "x": 0.5, "y": 0 },
9 { "label": "Pg Up", "x": 2, "y": 0 }, 12 { "label": "Pg Up", "x": 2, "y": 0 },
10 { "label": "Pg Dn", "x": 3, "y": 0 }, 13 { "label": "Pg Dn", "x": 3, "y": 0 },
14
11 { "label": "Layer Toggle", "x": 0, "y": 1.25 }, 15 { "label": "Layer Toggle", "x": 0, "y": 1.25 },
12 { "label": "/", "x": 1, "y": 1.25 }, 16 { "label": "/", "x": 1, "y": 1.25 },
13 { "label": "*", "x": 2, "y": 1.25 }, 17 { "label": "*", "x": 2, "y": 1.25 },
14 { "label": "-", "x": 3, "y": 1.25 }, 18 { "label": "-", "x": 3, "y": 1.25 },
19
15 { "label": "7", "x": 0, "y": 2.25 }, 20 { "label": "7", "x": 0, "y": 2.25 },
16 { "label": "8", "x": 1, "y": 2.25 }, 21 { "label": "8", "x": 1, "y": 2.25 },
17 { "label": "9", "x": 2, "y": 2.25 }, 22 { "label": "9", "x": 2, "y": 2.25 },
18 { "label": "+", "x": 3, "y": 2.25, "h": 2 }, 23 { "label": "+", "x": 3, "y": 2.25 },
19 { "label": "+", "x": 4, "y": 2.25 }, 24 { "label": "+", "x": 4, "y": 2.25, "h": 2 },
25
26 { "label": "4", "x": 0, "y": 3.25 },
27 { "label": "5", "x": 1, "y": 3.25 },
28 { "label": "6", "x": 2, "y": 3.25 },
29 { "label": "|", "x": 3, "y": 3.25 },
30
31 { "label": "1", "x": 0, "y": 4.25 },
32 { "label": "2", "x": 1, "y": 4.25 },
33 { "label": "3", "x": 2, "y": 4.25 },
34 { "label": "Enter", "x": 3, "y": 4.25 },
35 { "label": "Enter", "x": 4, "y": 4.25, "h": 2 },
36
37 { "label": "0", "x": 0, "y": 5.25 },
38 { "label": "00", "x": 1, "y": 5.25 },
39 { "label": ".", "x": 2, "y": 5.25 },
40 { "label": ".", "x": 3, "y": 5.25 },
41
42 { "label": "0", "x": 0, "y": 6.25, "w": 2 }
43 ]
44 },
45 "LAYOUT_numpad": {
46 "layout": [
47 { "label": "Rotary", "x": 0.5, "y": 0 },
48 { "label": "Pg Up", "x": 2, "y": 0 },
49 { "label": "Pg Dn", "x": 3, "y": 0 },
50
51 { "label": "Layer Toggle", "x": 0, "y": 1.25 },
52 { "label": "/", "x": 1, "y": 1.25 },
53 { "label": "*", "x": 2, "y": 1.25 },
54 { "label": "-", "x": 3, "y": 1.25 },
55
56 { "label": "7", "x": 0, "y": 2.25 },
57 { "label": "8", "x": 1, "y": 2.25 },
58 { "label": "9", "x": 2, "y": 2.25 },
59
20 { "label": "4", "x": 0, "y": 3.25 }, 60 { "label": "4", "x": 0, "y": 3.25 },
21 { "label": "5", "x": 1, "y": 3.25 }, 61 { "label": "5", "x": 1, "y": 3.25 },
22 { "label": "6", "x": 2, "y": 3.25 }, 62 { "label": "6", "x": 2, "y": 3.25 },
23 { "label": "|", "x": 4, "y": 3.25 }, 63 { "label": "+", "x": 3, "y": 2.25, "h": 2 },
64
24 { "label": "1", "x": 0, "y": 4.25 }, 65 { "label": "1", "x": 0, "y": 4.25 },
25 { "label": "2", "x": 1, "y": 4.25 }, 66 { "label": "2", "x": 1, "y": 4.25 },
26 { "label": "3", "x": 2, "y": 4.25 }, 67 { "label": "3", "x": 2, "y": 4.25 },
27 { "label": "Enter", "x": 3, "y": 4.25, "h": 2 }, 68
28 { "label": "Enter", "x": 4, "y": 4.25 },
29 { "label": "0", "x": 0, "y": 5.25, "w": 2 }, 69 { "label": "0", "x": 0, "y": 5.25, "w": 2 },
30 { "label": ".", "x": 2, "y": 5.25 }, 70 { "label": ".", "x": 2, "y": 5.25 },
31 { "label": ".", "x": 4, "y": 5.25 }, 71 { "label": "Enter", "x": 3, "y": 4.25, "h": 2 }
32 { "label": "0", "x": 0, "y": 6.25 }, 72 ]
33 { "label": "00", "x": 1, "y": 6.25 } 73 },
74 "LAYOUT_ortho": {
75 "layout": [
76 { "label": "Rotary", "x": 0.5, "y": 0 },
77 { "label": "Pg Up", "x": 2, "y": 0 },
78 { "label": "Pg Dn", "x": 3, "y": 0 },
79
80 { "label": "Layer Toggle", "x": 0, "y": 1.25 },
81 { "label": "/", "x": 1, "y": 1.25 },
82 { "label": "*", "x": 2, "y": 1.25 },
83 { "label": "-", "x": 3, "y": 1.25 },
84
85 { "label": "7", "x": 0, "y": 2.25 },
86 { "label": "8", "x": 1, "y": 2.25 },
87 { "label": "9", "x": 2, "y": 2.25 },
88 { "label": "+", "x": 3, "y": 2.25 },
89
90 { "label": "4", "x": 0, "y": 3.25 },
91 { "label": "5", "x": 1, "y": 3.25 },
92 { "label": "6", "x": 2, "y": 3.25 },
93 { "label": "|", "x": 3, "y": 3.25 },
94
95 { "label": "1", "x": 0, "y": 4.25 },
96 { "label": "2", "x": 1, "y": 4.25 },
97 { "label": "3", "x": 2, "y": 4.25 },
98 { "label": "Enter", "x": 3, "y": 4.25 },
99
100 { "label": "0", "x": 0, "y": 5.25 },
101 { "label": "00", "x": 1, "y": 5.25 },
102 { "label": ".", "x": 2, "y": 5.25 },
103 { "label": "Enter", "x": 3, "y": 5.25 }
34 ] 104 ]
35 } 105 }
36 } 106 }
diff --git a/keyboards/ffkeebs/puca/keymaps/default/keymap.c b/keyboards/ffkeebs/puca/keymaps/default/keymap.c
index fb8a6bc7c..12c20c014 100644
--- a/keyboards/ffkeebs/puca/keymaps/default/keymap.c
+++ b/keyboards/ffkeebs/puca/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
1/* Copyright 2021 Sleepdealer 1/* Copyright 2021 Sleepdealer, James Young for QMK (@noroadsleft)
2 * 2 *
3 * This program is free software: you can redistribute it and/or modify 3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by 4 * it under the terms of the GNU General Public License as published by
@@ -15,38 +15,26 @@
15 */ 15 */
16#include QMK_KEYBOARD_H 16#include QMK_KEYBOARD_H
17 17
18// 00 Functionality 18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19enum custom_keycodes {
20 MC_00 = SAFE_RANGE,
21};
22
23bool process_record_user(uint16_t keycode, keyrecord_t *record) {
24 switch (keycode) {
25 case MC_00:
26 if (record->event.pressed) {
27 SEND_STRING("00");
28 }
29 break;
30 }
31 return true;
32};
33 19
20 [0] = LAYOUT_all(
21 KC_MUTE, KC_PGUP, KC_PGDN,
22 TG(1), KC_PSLS, KC_PAST, KC_PMNS,
23 KC_P7, KC_P8, KC_P9, KC_PPLS, KC_PPLS,
24 KC_P4, KC_P5, KC_P6, KC_PIPE,
25 KC_P1, KC_P2, KC_P3, KC_ENTER, KC_ENTER,
26 KC_P0, MC_00, KC_PDOT, KC_PDOT,
27 KC_P0
28 ),
34 29
35const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 30 [1] = LAYOUT_all(
36 LAYOUT(
37 KC_MUTE, KC_PGUP, KC_PGDN,
38 TG(1), KC_PSLS, KC_PAST, KC_PMNS,
39 KC_P7, KC_P8, KC_P9, KC_PPLS, KC_PPLS,
40 KC_P4, KC_P5, KC_P6, KC_PIPE,
41 KC_P1, KC_P2, KC_P3, KC_ENTER, KC_ENTER,
42 KC_P0, MC_00, KC_PDOT, KC_PDOT,
43 KC_P0),
44 LAYOUT(
45 KC_TRNS, RGB_HUI, RGB_VAI, 31 KC_TRNS, RGB_HUI, RGB_VAI,
46 TG(1), RGB_TOG, RGB_HUD, RGB_VAD, 32 TG(1), RGB_TOG, RGB_HUD, RGB_VAD,
47 KC_PGUP, KC_UP, KC_PGDN, RGB_MOD, RGB_MOD, 33 KC_PGUP, KC_UP, KC_PGDN, RGB_MOD, RGB_MOD,
48 KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, 34 KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
49 KC_INS, KC_HOME, KC_END, RGB_RMOD, RGB_RMOD, 35 KC_INS, KC_HOME, KC_END, RGB_RMOD, RGB_RMOD,
50 KC_ESC, KC_TRNS, KC_DEL, KC_TRNS, 36 KC_ESC, KC_TRNS, KC_DEL, KC_TRNS,
51 KC_ESC) 37 KC_ESC
38 ),
39
52}; 40};
diff --git a/keyboards/ffkeebs/puca/keymaps/default_numpad/keymap.c b/keyboards/ffkeebs/puca/keymaps/default_numpad/keymap.c
new file mode 100644
index 000000000..fe6767861
--- /dev/null
+++ b/keyboards/ffkeebs/puca/keymaps/default_numpad/keymap.c
@@ -0,0 +1,38 @@
1/* Copyright 2021 Sleepdealer, James Young for QMK (@noroadsleft)
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19
20 [0] = LAYOUT_numpad(
21 KC_MUTE, KC_PGUP, KC_PGDN,
22 TG(1), KC_PSLS, KC_PAST, KC_PMNS,
23 KC_P7, KC_P8, KC_P9,
24 KC_P4, KC_P5, KC_P6, KC_PPLS,
25 KC_P1, KC_P2, KC_P3,
26 KC_P0, KC_PDOT, KC_ENTER
27 ),
28
29 [1] = LAYOUT_numpad(
30 _______, RGB_HUI, RGB_VAI,
31 TG(1), RGB_TOG, RGB_HUD, RGB_VAD,
32 KC_PGUP, KC_UP, KC_PGDN,
33 KC_LEFT, KC_DOWN, KC_RGHT, RGB_MOD,
34 KC_INS, KC_HOME, KC_END,
35 KC_ESC, KC_DEL, RGB_RMOD
36 ),
37
38};
diff --git a/keyboards/ffkeebs/puca/keymaps/default_ortho/keymap.c b/keyboards/ffkeebs/puca/keymaps/default_ortho/keymap.c
new file mode 100644
index 000000000..e734e6974
--- /dev/null
+++ b/keyboards/ffkeebs/puca/keymaps/default_ortho/keymap.c
@@ -0,0 +1,38 @@
1/* Copyright 2021 Sleepdealer, James Young for QMK (@noroadsleft)
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19
20 [0] = LAYOUT_ortho(
21 KC_MUTE, KC_PGUP, KC_PGDN,
22 TG(1), KC_PSLS, KC_PAST, KC_PMNS,
23 KC_P7, KC_P8, KC_P9, KC_PPLS,
24 KC_P4, KC_P5, KC_P6, KC_PIPE,
25 KC_P1, KC_P2, KC_P3, KC_ENTER,
26 KC_P0, MC_00, KC_PDOT, KC_ENTER
27 ),
28
29 [1] = LAYOUT_ortho(
30 _______, RGB_HUI, RGB_VAI,
31 TG(1), RGB_TOG, RGB_HUD, RGB_VAD,
32 KC_PGUP, KC_UP, KC_PGDN, RGB_MOD,
33 KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX,
34 KC_INS, KC_HOME, KC_END, RGB_RMOD,
35 KC_ESC, XXXXXXX, KC_DEL, XXXXXXX
36 )
37
38};
diff --git a/keyboards/ffkeebs/puca/puca.c b/keyboards/ffkeebs/puca/puca.c
index d131b97f7..21944a9e5 100644
--- a/keyboards/ffkeebs/puca/puca.c
+++ b/keyboards/ffkeebs/puca/puca.c
@@ -15,6 +15,20 @@
15 */ 15 */
16#include "puca.h" 16#include "puca.h"
17 17
18bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
19 if (!process_record_user(keycode, record)) {
20 return false;
21 }
22 switch (keycode) {
23 case MC_00:
24 if (record->event.pressed) {
25 SEND_STRING("00");
26 }
27 break;
28 }
29 return true;
30}
31
18bool encoder_update_kb(uint8_t index, bool clockwise) { 32bool encoder_update_kb(uint8_t index, bool clockwise) {
19 if (!encoder_update_user(index, clockwise)) { return false; } 33 if (!encoder_update_user(index, clockwise)) { return false; }
20 if (clockwise) { 34 if (clockwise) {
diff --git a/keyboards/ffkeebs/puca/puca.h b/keyboards/ffkeebs/puca/puca.h
index bc17c9f36..ab4dc3791 100644
--- a/keyboards/ffkeebs/puca/puca.h
+++ b/keyboards/ffkeebs/puca/puca.h
@@ -16,26 +16,86 @@
16 16
17#pragma once 17#pragma once
18 18
19// K24 is 2U Plus 19#include "quantum.h"
20// K44 is 2u Enter 20
21// K54 is 2u 0 21/* Keycodes defined here can be used by any keymap. If you wish to
22 * define additional keycodes for your personal keymap only, assign
23 * your first custom keycode to `= NEW_SAFE_RANGE`.
24 *
25 * See `process_record_kb()` in `puca.c`.
26 */
27enum keyboard_keycodes {
28 MC_00 = SAFE_RANGE,
29 NEW_SAFE_RANGE,
30};
22 31
32#define XXX KC_NO
23 33
24#include "quantum.h" 34/*
35 * ┌───┐ ┌───┬───┐
36 * │00 │ │02 │03 │
37 * └───┘ └───┴───┘
38 * ┌───┬───┬───┬───┐
39 * │10 │11 │12 │13 │
40 * ├───┼───┼───┼───┤ ┌───┐
41 * │20 │21 │22 │23 │ │ │
42 * ├───┼───┼───┼───┤ │24 │ 2u Plus
43 * │30 │31 │32 │33 │ │ │
44 * ├───┼───┼───┼───┤ ├───┤
45 * │40 │41 │42 │43 │ │ │
46 * ├───┼───┼───┼───┤ │44 │ 2u Enter
47 * │50 │51 │52 │53 │ │ │
48 * └───┴───┴───┴───┘ └───┘
49 * ┌───────┐
50 * │54 │ 2u 0
51 * └───────┘
52 */
53
54#define LAYOUT_all( \
55 K00, K02, K03, \
56 K10, K11, K12, K13, \
57 K20, K21, K22, K23, K24,\
58 K30, K31, K32, K33, \
59 K40, K41, K42, K43, K44,\
60 K50, K51, K52, K53, \
61 K54 \
62) { \
63 { K00, XXX, K02, K03, XXX }, \
64 { K10, K11, K12, K13, XXX }, \
65 { K20, K21, K22, K23, K24 }, \
66 { K30, K31, K32, K33, XXX }, \
67 { K40, K41, K42, K43, K44 }, \
68 { K50, K51, K52, K53, K54 }, \
69}
70
71#define LAYOUT_numpad( \
72 K00, K02, K03, \
73 K10, K11, K12, K13, \
74 K20, K21, K22, \
75 K30, K31, K32, K24, \
76 K40, K41, K42, \
77 K54, K52, K44 \
78) { \
79 { K00, XXX, K02, K03, XXX }, \
80 { K10, K11, K12, K13, XXX }, \
81 { K20, K21, K22, XXX, K24 }, \
82 { K30, K31, K32, XXX, XXX }, \
83 { K40, K41, K42, XXX, K44 }, \
84 { XXX, XXX, K52, XXX, K54 }, \
85}
25 86
26#define LAYOUT( \ 87#define LAYOUT_ortho( \
27 K00, K02, K03, \ 88 K00, K02, K03, \
28 K10, K11, K12, K13, \ 89 K10, K11, K12, K13, \
29 K20, K21, K22, K23, K24,\ 90 K20, K21, K22, K23, \
30 K30, K31, K32, K33, \ 91 K30, K31, K32, K33, \
31 K40, K41, K42, K43, K44,\ 92 K40, K41, K42, K43, \
32 K50, K51, K52, K53, \ 93 K50, K51, K52, K53 \
33 K54 \
34) { \ 94) { \
35 { K00, KC_NO, K02, K03, KC_NO }, \ 95 { K00, XXX, K02, K03, XXX }, \
36 { K10, K11, K12, K13, KC_NO }, \ 96 { K10, K11, K12, K13, XXX }, \
37 { K20, K21, K22, K23, K24 }, \ 97 { K20, K21, K22, K23, XXX }, \
38 { K30, K31, K32, K33, KC_NO }, \ 98 { K30, K31, K32, K33, XXX }, \
39 { K40, K41, K42, K43, K44 }, \ 99 { K40, K41, K42, K43, XXX }, \
40 { K50, K51, K52, K53, K54 }, \ 100 { K50, K51, K52, K53, XXX }, \
41} 101}
diff --git a/keyboards/ffkeebs/puca/readme.md b/keyboards/ffkeebs/puca/readme.md
index ff0b2c49a..ca4e0f93f 100644
--- a/keyboards/ffkeebs/puca/readme.md
+++ b/keyboards/ffkeebs/puca/readme.md
@@ -2,7 +2,7 @@
2 2
3* Keyboard Maintainer: [Sleepdealer](https://github.com/Sleepdealr) 3* Keyboard Maintainer: [Sleepdealer](https://github.com/Sleepdealr)
4* Hardware Supported: Puca Pad 4* Hardware Supported: Puca Pad
5* Hardware Availability: Puca GB 5* Hardware Availability: [Puca GB](https://ffkeebs.com/collections/puca)
6 6
7## Bootloader 7## Bootloader
8 8
diff --git a/keyboards/ffkeebs/puca/rules.mk b/keyboards/ffkeebs/puca/rules.mk
index b27ecc458..ede448ac2 100644
--- a/keyboards/ffkeebs/puca/rules.mk
+++ b/keyboards/ffkeebs/puca/rules.mk
@@ -19,7 +19,7 @@ NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality 19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow 20RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
21 21
22ENCODER_ENABLE = yes #Rotary encoder 22ENCODER_ENABLE = yes # Enable rotary encoder support
23OLED_ENABLE = yes # Enable OLED support
23 24
24OLED_ENABLE = yes #OLED 25LTO_ENABLE = yes # Enable Link Time Optimization to reduce firmware size
25LTO_ENABLE = yes # Enable Link Time Optimization to reduce firmware size
diff --git a/keyboards/handwired/split89/info.json b/keyboards/handwired/split89/info.json
index 7147420f3..52e7e305d 100644
--- a/keyboards/handwired/split89/info.json
+++ b/keyboards/handwired/split89/info.json
@@ -4,7 +4,102 @@
4 "url": "https://github.com/jurassic73/split89", 4 "url": "https://github.com/jurassic73/split89",
5 "layouts": { 5 "layouts": {
6 "LAYOUT": { 6 "LAYOUT": {
7 "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6, "y":0}, {"label":"F6", "x":10.25, "y":0}, {"label":"F7", "x":11.25, "y":0}, {"label":"F8", "x":12.25, "y":0}, {"label":"F9", "x":13.75, "y":0}, {"label":"F10", "x":14.75, "y":0}, {"label":"F11", "x":15.75, "y":0}, {"label":"F12", "x":16.75, "y":0}, {"label":"PrtSc", "x":18, "y":0}, {"label":"Scroll Lock", "x":19, "y":0}, {"label":"Pause", "x":20, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":9.75, "y":1.5}, {"label":"*", "x":10.75, "y":1.5}, {"label":"(", "x":11.75, "y":1.5}, {"label":")", "x":12.75, "y":1.5}, {"label":"_", "x":13.75, "y":1.5}, {"label":"+", "x":14.75, "y":1.5}, {"label":"Backspace", "x":15.75, "y":1.5, "w":2}, {"label":"Insert", "x":18, "y":1.5}, {"label":"Home", "x":19, "y":1.5}, {"label":"PgUp", "x":20, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":9.25, "y":2.5}, {"label":"U", "x":10.25, "y":2.5}, {"label":"I", "x":11.25, "y":2.5}, {"label":"O", "x":12.25, "y":2.5}, {"label":"P", "x":13.25, "y":2.5}, {"label":"{", "x":14.25, "y":2.5}, {"label":"}", "x":15.25, "y":2.5}, {"label":"|", "x":16.25, "y":2.5, "w":1.5}, {"label":"Delete", "x":18, "y":2.5}, {"label":"End", "x":19, "y":2.5}, {"label":"PgDn", "x":20, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":9.5, "y":3.5}, {"label":"J", "x":10.5, "y":3.5}, {"label":"K", "x":11.5, "y":3.5}, {"label":"L", "x":12.5, "y":3.5}, {"label":":", "x":13.5, "y":3.5}, {"label":"\"", "x":14.5, "y":3.5}, {"label":"Enter", "x":15.5, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":10, "y":4.5}, {"label":"M", "x":11, "y":4.5}, {"label":"<", "x":12, "y":4.5}, {"label":">", "x":13, "y":4.5}, {"label":"?", "x":14, "y":4.5}, {"label":"Shift", "x":15, "y":4.5, "w":2.75}, {"label":"\u2191", "x":19, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Fn", "x":1.25, "y":5.5, "w":1.25}, {"label":"Win", "x":2.5, "y":5.5, "w":1.25}, {"label":"Alt", "x":3.75, "y":5.5, "w":1.25}, {"x":5, "y":5.5, "w":2.25}, {"x":10, "y":5.5, "w":2.75}, {"label":"Alt", "x":12.75, "y":5.5, "w":1.25}, {"label":"Win", "x":14, "y":5.5, "w":1.25}, {"label":"Menu", "x":15.25, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":16.5, "y":5.5, "w":1.25}, {"label":"\u2190", "x":18, "y":5.5}, {"label":"\u2193", "x":19, "y":5.5}, {"label":"\u2192", "x":20, "y":5.5}] 7 "layout": [
8 {"label":"Esc", "x":0, "y":0},
9 {"label":"F1", "x":2, "y":0},
10 {"label":"F2", "x":3, "y":0},
11 {"label":"F3", "x":4, "y":0},
12 {"label":"F4", "x":5, "y":0},
13 {"label":"F5", "x":6, "y":0},
14 {"label":"F6", "x":8.5, "y":0},
15 {"label":"F7", "x":9.5, "y":0},
16 {"label":"F8", "x":10.5, "y":0},
17 {"label":"F9", "x":12.0, "y":0},
18 {"label":"F10", "x":13.0, "y":0},
19 {"label":"F11", "x":14.0, "y":0},
20 {"label":"F12", "x":15.0, "y":0},
21 {"label":"PrtSc", "x":16.25, "y":0},
22 {"label":"Scroll Lock", "x":17.25, "y":0},
23 {"label":"Pause", "x":18.25, "y":0},
24
25 {"label":"`~", "x":0, "y":1.25},
26 {"label":"1!", "x":1, "y":1.25},
27 {"label":"2@", "x":2, "y":1.25},
28 {"label":"3#", "x":3, "y":1.25},
29 {"label":"4$", "x":4, "y":1.25},
30 {"label":"5%", "x":5, "y":1.25},
31 {"label":"6^", "x":6, "y":1.25},
32 {"label":"7&", "x":8.0, "y":1.25},
33 {"label":"8*", "x":9.0, "y":1.25},
34 {"label":"9(", "x":10.0, "y":1.25},
35 {"label":"0)", "x":11.0, "y":1.25},
36 {"label":"-_", "x":12.0, "y":1.25},
37 {"label":"=+", "x":13.0, "y":1.25},
38 {"label":"Backspace", "x":14.0, "y":1.25, "w":2},
39 {"label":"Insert", "x":16.25, "y":1.25},
40 {"label":"Home", "x":17.25, "y":1.25},
41 {"label":"PgUp", "x":18.25, "y":1.25},
42
43 {"label":"Tab", "x":0, "y":2.25, "w":1.5},
44 {"label":"Q", "x":1.5, "y":2.25},
45 {"label":"W", "x":2.5, "y":2.25},
46 {"label":"E", "x":3.5, "y":2.25},
47 {"label":"R", "x":4.5, "y":2.25},
48 {"label":"T", "x":5.5, "y":2.25},
49 {"label":"Y", "x":7.5, "y":2.25},
50 {"label":"U", "x":8.5, "y":2.25},
51 {"label":"I", "x":9.5, "y":2.25},
52 {"label":"O", "x":10.5, "y":2.25},
53 {"label":"P", "x":11.5, "y":2.25},
54 {"label":"[{", "x":12.5, "y":2.25},
55 {"label":"]}", "x":13.5, "y":2.25},
56 {"label":"\\|", "x":14.5, "y":2.25, "w":1.5},
57 {"label":"Delete", "x":16.25, "y":2.25},
58 {"label":"End", "x":17.25, "y":2.25},
59 {"label":"PgDn", "x":18.25, "y":2.25},
60
61 {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
62 {"label":"A", "x":1.75, "y":3.25},
63 {"label":"S", "x":2.75, "y":3.25},
64 {"label":"D", "x":3.75, "y":3.25},
65 {"label":"F", "x":4.75, "y":3.25},
66 {"label":"G", "x":5.75, "y":3.25},
67 {"label":"H", "x":7.75, "y":3.25},
68 {"label":"J", "x":8.75, "y":3.25},
69 {"label":"K", "x":9.75, "y":3.25},
70 {"label":"L", "x":10.75, "y":3.25},
71 {"label":";:", "x":11.75, "y":3.25},
72 {"label":"'\"", "x":12.75, "y":3.25},
73 {"label":"Enter", "x":13.75, "y":3.25, "w":2.25},
74
75 {"label":"Shift", "x":0, "y":4.25, "w":2.25},
76 {"label":"Z", "x":2.25, "y":4.25},
77 {"label":"X", "x":3.25, "y":4.25},
78 {"label":"C", "x":4.25, "y":4.25},
79 {"label":"V", "x":5.25, "y":4.25},
80 {"label":"B", "x":6.25, "y":4.25},
81 {"label":"N", "x":8.25, "y":4.25},
82 {"label":"M", "x":9.25, "y":4.25},
83 {"label":",<", "x":10.25, "y":4.25},
84 {"label":".>", "x":11.25, "y":4.25},
85 {"label":"/?", "x":12.25, "y":4.25},
86 {"label":"Shift", "x":13.25, "y":4.25, "w":2.75},
87 {"label":"\u2191", "x":17.25, "y":4.25},
88
89 {"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
90 {"label":"Fn", "x":1.25, "y":5.25, "w":1.25},
91 {"label":"Win", "x":2.5, "y":5.25, "w":1.25},
92 {"label":"Alt", "x":3.75, "y":5.25, "w":1.25},
93 {"label":"Space", "x":5, "y":5.25, "w":2.25},
94 {"label":"Space", "x":8.25, "y":5.25, "w":2.75},
95 {"label":"Alt", "x":11.0, "y":5.25, "w":1.25},
96 {"label":"Win", "x":12.25, "y":5.25, "w":1.25},
97 {"label":"Menu", "x":13.5, "y":5.25, "w":1.25},
98 {"label":"Ctrl", "x":14.75, "y":5.25, "w":1.25},
99 {"label":"\u2190", "x":16.25, "y":5.25},
100 {"label":"\u2193", "x":17.25, "y":5.25},
101 {"label":"\u2192", "x":18.25, "y":5.25}
102 ]
8 } 103 }
9 } 104 }
10} 105}
diff --git a/keyboards/handwired/split89/keymaps/default/keymap.c b/keyboards/handwired/split89/keymaps/default/keymap.c
index 5b2ed1740..bc5540b37 100644
--- a/keyboards/handwired/split89/keymaps/default/keymap.c
+++ b/keyboards/handwired/split89/keymaps/default/keymap.c
@@ -23,20 +23,20 @@ enum layer_names {
23const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 23const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
24 /* Base */ 24 /* Base */
25 [0] = LAYOUT( 25 [0] = LAYOUT(
26 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, 26 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,
27 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, 27 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,
28 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, 28 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,
29 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, 29 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,
30 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, 30 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,
31 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 31 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
32 ), 32 ),
33 /* Volume */ 33 /* Volume */
34 [1] = LAYOUT( 34 [1] = LAYOUT(
35 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, 35 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
36 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, 36 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
37 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, 37 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
38 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, 38 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
39 KC_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, 39 KC_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,
40 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 40 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
41 ), 41 ),
42}; 42};
diff --git a/keyboards/handwired/split89/split89.h b/keyboards/handwired/split89/split89.h
index 7e9402707..693476cea 100644
--- a/keyboards/handwired/split89/split89.h
+++ b/keyboards/handwired/split89/split89.h
@@ -18,6 +18,8 @@
18 18
19#include "quantum.h" 19#include "quantum.h"
20 20
21#define XXX KC_NO
22
21/* This is a shortcut to help you visually see your layout. 23/* This is a shortcut to help you visually see your layout.
22 * 24 *
23 * The first section contains all of the arguments representing the physical 25 * The first section contains all of the arguments representing the physical
@@ -27,24 +29,24 @@
27 * represents the switch matrix which includes blanks in the wired out matrix. 29 * represents the switch matrix which includes blanks in the wired out matrix.
28 */ 30 */
29#define LAYOUT( \ 31#define LAYOUT( \
30 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, k14, k15, \ 32 K04, K05, K06, K07, K08, K09, K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, \
31 k32, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, \ 33 K24, K14, K15, K16, K17, K18, K19, K70, K71, K72, K73, K74, K75, K76, K77, K78, K79, \
32 k48, k33, k34, k35, k36, k37, k54, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, \ 34 K34, K25, K26, K27, K28, K29, K39, K90, K80, K81, K82, K83, K84, K85, K86, K87, K88, \
33 k61, k49, k50, k51, k52, k53, k67, k55, k56, k57, k58, k59, k60, \ 35 K89, K44, K35, K36, K37, K38, K49, KA0, K91, K92, K93, K94, K95, \
34 k74, k62, k63, k64, k65, k66, k80, k68, k69, k70, k71, k72, k73, \ 36 K96, K54, K45, K46, K47, K48, K59, KB0, KA1, KA2, KA3, KA4, KA6, \
35 k75, k76, k77, k78, k79, k81, k82, k83, k84, k85, k86, k87, k88 \ 37 KA8, K55, K56, K57, K58, KB1, KB3, KB4, KB5, KB6, KB7, KB8, KB9 \
36 ) \ 38 ) \
37 { \ 39 { \
38 { KC_NO, KC_NO, KC_NO, KC_NO, k00, k01, k02, k03, k04, k05 }, \ 40 { XXX, XXX, XXX, XXX, K04, K05, K06, K07, K08, K09 }, \
39 { KC_NO, KC_NO, KC_NO, KC_NO, k16, k17, k18, k19, k20, k21 }, \ 41 { XXX, XXX, XXX, XXX, K14, K15, K16, K17, K18, K19 }, \
40 { KC_NO, KC_NO, KC_NO, KC_NO, k32, k33, k34, k35, k36, k37 }, \ 42 { XXX, XXX, XXX, XXX, K24, K25, K26, K27, K28, K29 }, \
41 { KC_NO, KC_NO, KC_NO, KC_NO, k48, k49, k50, k51, k52, k53 }, \ 43 { XXX, XXX, XXX, XXX, K34, K35, K36, K37, K38, K39 }, \
42 { KC_NO, KC_NO, KC_NO, KC_NO, k61, k62, k63, k64, k65, k66, }, \ 44 { XXX, XXX, XXX, XXX, K44, K45, K46, K47, K48, K49 }, \
43 { KC_NO, KC_NO, KC_NO, KC_NO, k74, k75, k76, k77, k78, k79, }, \ 45 { XXX, XXX, XXX, XXX, K54, K55, K56, K57, K58, K59 }, \
44 { k06, k07, k08, k09, k10, k11, k12, k13, k14, k15 }, \ 46 { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69 }, \
45 { k22, k23, k24, k25, k26, k27, k28, k29, k30, k31 }, \ 47 { K70, K71, K72, K73, K74, K75, K76, K77, K78, K79 }, \
46 { k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 }, \ 48 { K80, K81, K82, K83, K84, K85, K86, K87, K88, K89 }, \
47 { k54, k55, k56, k57, k58, k59, k60, KC_NO, KC_NO, KC_NO }, \ 49 { K90, K91, K92, K93, K94, K95, K96, XXX, XXX, XXX }, \
48 { k67, k68, k69, k70, k71, KC_NO, k72, KC_NO, k73, KC_NO }, \ 50 { KA0, KA1, KA2, KA3, KA4, XXX, KA6, XXX, KA8, XXX }, \
49 { k80, k81, KC_NO, k82, k83, k84, k85, k86, k87, k88 } \ 51 { KB0, KB1, XXX, KB3, KB4, KB5, KB6, KB7, KB8, KB9 } \
50} 52}
diff --git a/keyboards/mechanickeys/miniashen40/config.h b/keyboards/mechanickeys/miniashen40/config.h
new file mode 100644
index 000000000..bf2ea6e00
--- /dev/null
+++ b/keyboards/mechanickeys/miniashen40/config.h
@@ -0,0 +1,53 @@
1/* Copyright 2021 jfescobar18
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15*/
16
17#pragma once
18
19#include "config_common.h"
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0x4D4B // MechanicKeys
23#define PRODUCT_ID 0x6D6E
24#define DEVICE_VER 0x0001
25#define MANUFACTURER MechanicKeys
26#define PRODUCT MINI ASHEN 40
27
28/* key matrix size */
29#define MATRIX_ROWS 4
30#define MATRIX_COLS 13
31
32/*
33 * Keyboard Matrix Assignments
34 *
35 * Change this to how you wired your keyboard
36 * COLS: AVR pins used for columns, left to right
37 * ROWS: AVR pins used for rows, top to bottom
38 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
39 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
40 *
41*/
42#define MATRIX_ROW_PINS { B1, B2, B3, B4 }
43#define MATRIX_COL_PINS { C5, C4, C3, D0, C2, D1, C1, C0, D4, B0, D7, D6, B5 }
44#define UNUSED_PINS
45
46/* COL2ROW or ROW2COL */
47#define DIODE_DIRECTION COL2ROW
48
49/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
50#define DEBOUNCE 5
51
52/* define if matrix has ghost (lacks anti-ghosting diodes) */
53//#define MATRIX_HAS_GHOST \ No newline at end of file
diff --git a/keyboards/mechanickeys/miniashen40/info.json b/keyboards/mechanickeys/miniashen40/info.json
new file mode 100644
index 000000000..6a6b1e951
--- /dev/null
+++ b/keyboards/mechanickeys/miniashen40/info.json
@@ -0,0 +1,15 @@
1{
2 "keyboard_name": "Mini Ashen 40",
3 "url": "",
4 "maintainer": "qmk",
5 "layouts": {
6 "LAYOUT": {
7 "layout": [
8 {"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},
9 {"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},
10 {"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},
11 {"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}
12 ]
13 }
14 }
15} \ No newline at end of file
diff --git a/keyboards/mechanickeys/miniashen40/keymaps/default/keymap.c b/keyboards/mechanickeys/miniashen40/keymaps/default/keymap.c
new file mode 100644
index 000000000..b49b5882f
--- /dev/null
+++ b/keyboards/mechanickeys/miniashen40/keymaps/default/keymap.c
@@ -0,0 +1,47 @@
1/* Copyright 2021 jfescobar18
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15*/
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT( /* 0: qwerty */
21 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,
22 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,
23 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,
24 KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
25 ),
26
27 [1] = LAYOUT( /* 1: Symbols */
28 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,
29 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,
30 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,
31 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
32 ),
33
34 [2] = LAYOUT( /* 2: Fn */
35 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,
36 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
37 KC_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,
38 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
39 ),
40
41 [3] = LAYOUT( /*3: Empty */
42 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,
43 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
44 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
45 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
46 ),
47};
diff --git a/keyboards/mechanickeys/miniashen40/keymaps/via/keymap.c b/keyboards/mechanickeys/miniashen40/keymaps/via/keymap.c
new file mode 100644
index 000000000..0aa9476b4
--- /dev/null
+++ b/keyboards/mechanickeys/miniashen40/keymaps/via/keymap.c
@@ -0,0 +1,47 @@
1/* Copyright 2021 Francisco Escobar
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15*/
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT( /* 0: qwerty */
21 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,
22 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,
23 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,
24 KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
25 ),
26
27 [1] = LAYOUT( /* 1: Symbols */
28 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,
29 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,
30 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,
31 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
32 ),
33
34 [2] = LAYOUT( /* 2: Fn */
35 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,
36 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
37 KC_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,
38 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
39 ),
40
41 [3] = LAYOUT( /*3: Empty */
42 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,
43 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
44 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
45 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
46 ),
47};
diff --git a/keyboards/mechanickeys/miniashen40/keymaps/via/rules.mk b/keyboards/mechanickeys/miniashen40/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/mechanickeys/miniashen40/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2LTO_ENABLE = yes
diff --git a/keyboards/mechanickeys/miniashen40/miniashen40.c b/keyboards/mechanickeys/miniashen40/miniashen40.c
new file mode 100644
index 000000000..9c740e117
--- /dev/null
+++ b/keyboards/mechanickeys/miniashen40/miniashen40.c
@@ -0,0 +1,17 @@
1/* Copyright 2021 jfescobar18
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15*/
16
17#include "miniashen40.h"
diff --git a/keyboards/mechanickeys/miniashen40/miniashen40.h b/keyboards/mechanickeys/miniashen40/miniashen40.h
new file mode 100644
index 000000000..4430396b4
--- /dev/null
+++ b/keyboards/mechanickeys/miniashen40/miniashen40.h
@@ -0,0 +1,42 @@
1/* Copyright 2021 jfescobar18
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15*/
16
17#pragma once
18
19#include "quantum.h"
20
21#define XXX KC_NO
22
23/* This is a shortcut to help you visually see your layout.
24 *
25 * The first section contains all of the arguments representing the physical
26 * layout of the board and position of the keys.
27 *
28 * The second converts the arguments into a two-dimensional array which
29 * represents the switch matrix.
30 */
31#define LAYOUT( \
32 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
33 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
34 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
35 K30, K31, K33, K36, K38, K39, K3A, K3B, K3C \
36) \
37{ \
38 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
39 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \
40 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }, \
41 { K30, K31, XXX, K33, XXX, XXX, K36, XXX, K38, K39, K3A, K3B, K3C } \
42}
diff --git a/keyboards/mechanickeys/miniashen40/readme.md b/keyboards/mechanickeys/miniashen40/readme.md
new file mode 100644
index 000000000..29f7b68fd
--- /dev/null
+++ b/keyboards/mechanickeys/miniashen40/readme.md
@@ -0,0 +1,40 @@
1# Mini Ashen 40
2
3![Mini Ashen 40](https://i.imgur.com/0k3gFZCh.jpeg)
4
5![Mini Ashen 40](https://i.imgur.com/B1w8qwPh.jpeg)
6
7![Mini Ashen 40](https://i.imgur.com/LqxXW0Rh.jpeg)
8
9A 40% keyboard with some extras
10 - Arrows
11 - Mini macro cluster
12 - Full assembly with only through hole components
13
14* Keyboard Maintainer: [jfescobar18](https://github.com/jfescobar18)
15* Hardware Supported: Mini Ashen 40 PCB and Case
16* Hardware Availability: [MechanicKeys](https://www.facebook.com/MechanicKeys-104963764775280)
17
18Make example for this keyboard (after setting up your build environment):
19
20 make mechanickeys/miniashen40:default
21
22Flashing example for this keyboard:
23
24 make mechanickeys/miniashen40:default:flash
25
26See 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).
27
28## Bootloader
29
30Enter the bootloader in 3 ways:
31
32* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
33* **Physical**:
34 1. Press and hold `BOOT` switch
35 2. Tap `RESET` switch
36 3. Release `BOOT` switch
37* **Keycode in layout**: Press the key mapped to `RESET` if it is available
38
39## Flash bootloader
40* [Follow this instructions](https://github.com/jfescobar18/USBaspLoader)
diff --git a/keyboards/mechanickeys/miniashen40/rules.mk b/keyboards/mechanickeys/miniashen40/rules.mk
new file mode 100644
index 000000000..2057d9c93
--- /dev/null
+++ b/keyboards/mechanickeys/miniashen40/rules.mk
@@ -0,0 +1,21 @@
1# MCU name
2MCU = atmega328p
3
4# Bootloader selection
5BOOTLOADER = usbasploader
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mtbkeys/mtb60/hotswap/config.h b/keyboards/mtbkeys/mtb60/hotswap/config.h
new file mode 100644
index 000000000..6cfc31224
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/hotswap/config.h
@@ -0,0 +1,79 @@
1/*
2Copyright 2021 MTBKeys
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x0001
25#define DEVICE_VER 0x0001
26#define MANUFACTURER MTBKeys
27#define PRODUCT honeyboard60
28
29/* key matrix size */
30#define MATRIX_ROWS 5
31#define MATRIX_COLS 15
32
33/* key matrix pinout */
34#define MATRIX_ROW_PINS { D6, D7, B4, B5, D5 }
35#define MATRIX_COL_PINS { D0, D1, D2, D3, B7, B6, F7, C6, C7, F6, F4, F1, F0, F5, E6 }
36#define UNUSED_PINS
37
38/* diode direction: COL2ROW or ROW2COL */
39#define DIODE_DIRECTION ROW2COL
40
41/* Pin WS2812 RGB LEDs are connected to */
42#define RGB_DI_PIN D4
43
44#ifdef RGB_DI_PIN
45# define RGBLED_NUM 16
46# define RGBLIGHT_HUE_STEP 8
47# define RGBLIGHT_SAT_STEP 8
48# define RGBLIGHT_VAL_STEP 8
49# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
50# define RGBLIGHT_SLEEP /* Turn RGB light off when the host goes to sleep */
51# define RGBLIGHT_EFFECT_ALTERNATING
52# define RGBLIGHT_EFFECT_BREATHING
53# define RGBLIGHT_EFFECT_CHRISTMAS
54# define RGBLIGHT_EFFECT_KNIGHT
55# define RGBLIGHT_EFFECT_RAINBOW_MOOD
56# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
57# define RGBLIGHT_EFFECT_RGB_TEST
58# define RGBLIGHT_EFFECT_SNAKE
59# define RGBLIGHT_EFFECT_STATIC_GRADIENT
60# define RGBLIGHT_EFFECT_TWINKLE
61# define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL /* Set default RGB */
62#endif /* RGB_DI_PIN */
63
64/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
65#define DEBOUNCE 5
66
67/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
68#define LOCKING_SUPPORT_ENABLE
69
70/* Locking resynchronize hack */
71#define LOCKING_RESYNC_ENABLE
72
73/* disable these deprecated features by default */
74#define NO_ACTION_MACRO
75#define NO_ACTION_FUNCTION
76
77/* Bootmagic Lite key configuration */
78#define BOOTMAGIC_LITE_ROW 0
79#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/mtbkeys/mtb60/hotswap/hotswap.c b/keyboards/mtbkeys/mtb60/hotswap/hotswap.c
new file mode 100644
index 000000000..f23de6af5
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/hotswap/hotswap.c
@@ -0,0 +1,17 @@
1/* Copyright 2021 MTBKeys
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "hotswap.h"
diff --git a/keyboards/mtbkeys/mtb60/hotswap/hotswap.h b/keyboards/mtbkeys/mtb60/hotswap/hotswap.h
new file mode 100644
index 000000000..7dae44b5d
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/hotswap/hotswap.h
@@ -0,0 +1,33 @@
1/* Copyright 2021 MTBKeys
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#define LAYOUT( \
22 k00, k10, k20, k30, k40, k50, k60, k70, k80, k90, ka0, kb0, kc0, ke0, \
23 k11, k21, k31, k41, k51, k61, k71, k81, k91, ka1, kb1, kc1, kd1, ke1, \
24 k02, k22, k32, k42, k52, k62, k72, k82, k92, ka2, kb2, kc2, kd2, \
25 k03, k23, k33, k43, k53, k63, k73, k83, k93, ka3, kb3, kd3, \
26 k04, k14, k24, k64, ka4, kb4, kd4, ke4 \
27) { \
28 { k00, k10, k20, k30, k40, k50, k60, k70, k80, k90, ka0, kb0, kc0, KC_NO, ke0 }, \
29 { KC_NO, k11, k21, k31, k41, k51, k61, k71, k81, k91, ka1, kb1, kc1, kd1, ke1 }, \
30 { k02, KC_NO, k22, k32, k42, k52, k62, k72, k82, k92, ka2, kb2, kc2, kd2, KC_NO }, \
31 { k03, KC_NO, k23, k33, k43, k53, k63, k73, k83, k93, ka3, kb3, KC_NO, kd3, KC_NO }, \
32 { k04, k14, k24, KC_NO, KC_NO, KC_NO, k64, KC_NO, KC_NO, KC_NO, ka4, kb4, kd4, KC_NO, ke4 } \
33}
diff --git a/keyboards/mtbkeys/mtb60/hotswap/info.json b/keyboards/mtbkeys/mtb60/hotswap/info.json
new file mode 100644
index 000000000..5718d7050
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/hotswap/info.json
@@ -0,0 +1,72 @@
1{
2 "keyboard_name": "MTB60",
3 "url": "mtbkeys.com",
4 "maintainer": "MTBKeys",
5 "layouts": {
6 "LAYOUT_all": {
7 "layout": [
8 {"label": "Esc" , "x": 0, "y": 0 },
9 {"label": "!" , "x": 1, "y": 0 },
10 {"label": "@" , "x": 2, "y": 0 },
11 {"label": "#" , "x": 3, "y": 0 },
12 {"label": "$" , "x": 4, "y": 0 },
13 {"label": "%" , "x": 5, "y": 0 },
14 {"label": "^" , "x": 6, "y": 0 },
15 {"label": "&" , "x": 7, "y": 0 },
16 {"label": "*" , "x": 8, "y": 0 },
17 {"label": "(" , "x": 9, "y": 0 },
18 {"label": ")" , "x": 10, "y": 0 },
19 {"label": "_" , "x": 11, "y": 0 },
20 {"label": "+" , "x": 12, "y": 0 },
21 {"label": "Back Space", "x": 13, "y": 0, "w": 2},
22 {"label": "Tab", "x": 0 , "y": 1, "w": 1.5},
23 {"label": "Q" , "x": 1.5, "y": 1 },
24 {"label": "W" , "x": 2.5, "y": 1 },
25 {"label": "E" , "x": 3.5, "y": 1 },
26 {"label": "R" , "x": 4.5, "y": 1 },
27 {"label": "T" , "x": 5.5, "y": 1 },
28 {"label": "Y" , "x": 6.5, "y": 1 },
29 {"label": "U" , "x": 7.5, "y": 1 },
30 {"label": "I" , "x": 8.5, "y": 1 },
31 {"label": "O" , "x": 9.5, "y": 1 },
32 {"label": "P" , "x": 10.5, "y": 1 },
33 {"label": "{" , "x": 11.5, "y": 1 },
34 {"label": "}" , "x": 12.5, "y": 1 },
35 {"label": "|" , "x": 13.5, "y": 1, "w": 1.5},
36 {"label": "Caps Lock", "x": 0 , "y": 2, "w": 1.75},
37 {"label": "A" , "x": 1.75, "y": 2 },
38 {"label": "S" , "x": 2.75, "y": 2 },
39 {"label": "D" , "x": 3.75, "y": 2 },
40 {"label": "F" , "x": 4.75, "y": 2 },
41 {"label": "G" , "x": 5.75, "y": 2 },
42 {"label": "H" , "x": 6.75, "y": 2 },
43 {"label": "J" , "x": 7.75, "y": 2 },
44 {"label": "K" , "x": 8.75, "y": 2 },
45 {"label": "L" , "x": 9.75, "y": 2 },
46 {"label": ":" , "x": 10.75, "y": 2 },
47 {"label": "\"" , "x": 11.75, "y": 2 },
48 {"label": "Enter" , "x": 12.75, "y": 2, "w": 2.25},
49 {"label": "Left Shift" , "x": 0 , "y": 3, "w": 2.25},
50 {"label": "Z" , "x": 2.25, "y": 3 },
51 {"label": "X" , "x": 3.25, "y": 3 },
52 {"label": "C" , "x": 4.25, "y": 3 },
53 {"label": "V" , "x": 5.25, "y": 3 },
54 {"label": "B" , "x": 6.25, "y": 3 },
55 {"label": "N" , "x": 7.25, "y": 3 },
56 {"label": "M" , "x": 8.25, "y": 3 },
57 {"label": "<" , "x": 9.25, "y": 3 },
58 {"label": ">" , "x": 10.25, "y": 3 },
59 {"label": "?" , "x": 11.25, "y": 3 },
60 {"label": "Right Shift", "x": 12.25, "y": 3, "w": 2.75},
61 {"label": "Left Ctrl" , "x": 0 , "y": 4, "w": 1.25},
62 {"label": "GUI" , "x": 1.25, "y": 4, "w": 1.25},
63 {"label": "Left Alt" , "x": 2.5 , "y": 4, "w": 1.25},
64 {"label": "Space" , "x": 3.75, "y": 4, "w": 6.25},
65 {"label": "Right Ctrl", "x": 10 , "y": 4, "w": 1.25},
66 {"label": "GUI" , "x": 11.25, "y": 4, "w": 1.25},
67 {"label": "MO(1)" , "x": 12.5 , "y": 4, "w": 1.25},
68 {"label": "Right Ctrl", "x": 13.75, "y": 4, "w": 1.25}
69 ]
70 }
71 }
72}
diff --git a/keyboards/mtbkeys/mtb60/hotswap/keymaps/default/keymap.c b/keyboards/mtbkeys/mtb60/hotswap/keymaps/default/keymap.c
new file mode 100644
index 000000000..648c8201f
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/hotswap/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
1/* Copyright 2021 MTBKeys
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 _BASE, ///< Default Layer
21 _FN ///< Function Layer
22};
23
24const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
25 [_BASE] = LAYOUT(
26 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,
27 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,
28 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,
29 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
30 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FN), KC_RCTL
31 ),
32 [_FN] = LAYOUT(
33 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,
34 _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
35 _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
36 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
37 _______, _______, _______, _______, _______, _______, _______, RGB_TOG
38 )
39};
diff --git a/keyboards/mtbkeys/mtb60/hotswap/readme.md b/keyboards/mtbkeys/mtb60/hotswap/readme.md
new file mode 100644
index 000000000..7afa26bbd
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/hotswap/readme.md
@@ -0,0 +1,26 @@
1# MTB60 (Hotswap Edition)
2
3## Details
4
5* Keyboard Maintainer: [MTBKeys](https://mtbkeys.com/)
6* Hardware Supported: MTB60 PCB (Hotswap edition)
7* Hardware Availability: [HB60 on MTBKeys Website](https://mtbkeys.com/)
8
9## Building Firmware
10
11Make example for this keyboard (after setting up your build environment):
12
13 make mtbkeys/mtb60/hotswap:default
14
15Flashing example for this keyboard:
16
17 make mtbkeys/mtb60/hotswap:default:flash
18
19## Bootloader
20
21Enter the bootloader in 2 ways:
22
231. **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
242. **Physical reset button**: Briefly press the button on the back of the PCB
25
26See 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).
diff --git a/keyboards/mtbkeys/mtb60/hotswap/rules.mk b/keyboards/mtbkeys/mtb60/hotswap/rules.mk
new file mode 100644
index 000000000..02ae23670
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/hotswap/rules.mk
@@ -0,0 +1,21 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
21AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mtbkeys/mtb60/solder/config.h b/keyboards/mtbkeys/mtb60/solder/config.h
new file mode 100644
index 000000000..02037e83d
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/solder/config.h
@@ -0,0 +1,79 @@
1/*
2Copyright 2021 MTBKeys
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x0000
25#define DEVICE_VER 0x0001
26#define MANUFACTURER MTBKeys
27#define PRODUCT MTB60
28
29/* key matrix size */
30#define MATRIX_ROWS 5
31#define MATRIX_COLS 15
32
33/* key matrix pinout */
34#define MATRIX_ROW_PINS { D0, D1, F4, F1, D2 }
35#define MATRIX_COL_PINS { E6, F0, F5, F6, F7, D5, D3, C7, C6, B6, B5, B4, D7, D6, D4 }
36#define UNUSED_PINS
37
38/* diode direction: COL2ROW or ROW2COL */
39#define DIODE_DIRECTION ROW2COL
40
41/* Pin WS2812 RGB LEDs are connected to */
42#define RGB_DI_PIN B0
43
44#ifdef RGB_DI_PIN
45# define RGBLED_NUM 16
46# define RGBLIGHT_HUE_STEP 8
47# define RGBLIGHT_SAT_STEP 8
48# define RGBLIGHT_VAL_STEP 8
49# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
50# define RGBLIGHT_SLEEP /* Turn RGB light off when the host goes to sleep */
51# define RGBLIGHT_EFFECT_ALTERNATING
52# define RGBLIGHT_EFFECT_BREATHING
53# define RGBLIGHT_EFFECT_CHRISTMAS
54# define RGBLIGHT_EFFECT_KNIGHT
55# define RGBLIGHT_EFFECT_RAINBOW_MOOD
56# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
57# define RGBLIGHT_EFFECT_RGB_TEST
58# define RGBLIGHT_EFFECT_SNAKE
59# define RGBLIGHT_EFFECT_STATIC_GRADIENT
60# define RGBLIGHT_EFFECT_TWINKLE
61# define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL /* Set default RGB */
62#endif /* RGB_DI_PIN */
63
64/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
65#define DEBOUNCE 5
66
67/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
68#define LOCKING_SUPPORT_ENABLE
69
70/* Locking resynchronize hack */
71#define LOCKING_RESYNC_ENABLE
72
73/* disable these deprecated features by default */
74#define NO_ACTION_MACRO
75#define NO_ACTION_FUNCTION
76
77/* Bootmagic Lite key configuration */
78#define BOOTMAGIC_LITE_ROW 0
79#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/mtbkeys/mtb60/solder/info.json b/keyboards/mtbkeys/mtb60/solder/info.json
new file mode 100644
index 000000000..e60d3eee2
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/solder/info.json
@@ -0,0 +1,75 @@
1{
2 "keyboard_name": "MTB60",
3 "url": "mtbkeys.com",
4 "maintainer": "MTBKeys",
5 "layouts": {
6 "LAYOUT_all": {
7 "layout": [
8 {"label": "Esc" , "x": 0, "y": 0},
9 {"label": "!" , "x": 1, "y": 0},
10 {"label": "@" , "x": 2, "y": 0},
11 {"label": "#" , "x": 3, "y": 0},
12 {"label": "$" , "x": 4, "y": 0},
13 {"label": "%" , "x": 5, "y": 0},
14 {"label": "^" , "x": 6, "y": 0},
15 {"label": "&" , "x": 7, "y": 0},
16 {"label": "*" , "x": 8, "y": 0},
17 {"label": "(" , "x": 9, "y": 0},
18 {"label": ")" , "x": 10, "y": 0},
19 {"label": "_" , "x": 11, "y": 0},
20 {"label": "+" , "x": 12, "y": 0},
21 {"label": "Back Space", "x": 13, "y": 0},
22 {"label": "Delete" , "x": 14, "y": 0},
23 {"label": "Tab", "x": 0 , "y": 1, "w": 1.5},
24 {"label": "Q" , "x": 1.5, "y": 1 },
25 {"label": "W" , "x": 2.5, "y": 1 },
26 {"label": "E" , "x": 3.5, "y": 1 },
27 {"label": "R" , "x": 4.5, "y": 1 },
28 {"label": "T" , "x": 5.5, "y": 1 },
29 {"label": "Y" , "x": 6.5, "y": 1 },
30 {"label": "U" , "x": 7.5, "y": 1 },
31 {"label": "I" , "x": 8.5, "y": 1 },
32 {"label": "O" , "x": 9.5, "y": 1 },
33 {"label": "P" , "x": 10.5, "y": 1 },
34 {"label": "{" , "x": 11.5, "y": 1 },
35 {"label": "}" , "x": 12.5, "y": 1 },
36 {"label": "|" , "x": 13.5, "y": 1, "w": 1.5},
37 {"label": "Caps Lock", "x": 0 , "y": 2, "w": 1.75},
38 {"label": "A" , "x": 1.75, "y": 2 },
39 {"label": "S" , "x": 2.75, "y": 2 },
40 {"label": "D" , "x": 3.75, "y": 2 },
41 {"label": "F" , "x": 4.75, "y": 2 },
42 {"label": "G" , "x": 5.75, "y": 2 },
43 {"label": "H" , "x": 6.75, "y": 2 },
44 {"label": "J" , "x": 7.75, "y": 2 },
45 {"label": "K" , "x": 8.75, "y": 2 },
46 {"label": "L" , "x": 9.75, "y": 2 },
47 {"label": ":" , "x": 10.75, "y": 2 },
48 {"label": "\"" , "x": 11.75, "y": 2 },
49 {"label": "Enter" , "x": 12.75, "y": 2, "w": 2.25},
50 {"label": "Left Shift" , "x": 0 , "y": 3, "w": 2.25},
51 {"label": "Z" , "x": 2.25, "y": 3 },
52 {"label": "X" , "x": 3.25, "y": 3 },
53 {"label": "C" , "x": 4.25, "y": 3 },
54 {"label": "V" , "x": 5.25, "y": 3 },
55 {"label": "B" , "x": 6.25, "y": 3 },
56 {"label": "N" , "x": 7.25, "y": 3 },
57 {"label": "M" , "x": 8.25, "y": 3 },
58 {"label": "<" , "x": 9.25, "y": 3 },
59 {"label": ">" , "x": 10.25, "y": 3 },
60 {"label": "?" , "x": 11.25, "y": 3 },
61 {"label": "Right Shift", "x": 12.25, "y": 3, "w": 2.75},
62 {"label": "Left Ctrl" , "x": 0 , "y": 4, "w": 1.25},
63 {"label": "GUI" , "x": 1.25, "y": 4, "w": 1.25},
64 {"label": "Left Alt" , "x": 2.5 , "y": 4, "w": 1.25},
65 {"label": "Space" , "x": 3.75, "y": 4, "w": 2.25},
66 {"label": "Space" , "x": 6 , "y": 4, "w": 1.25},
67 {"label": "Space" , "x": 7.25, "y": 4, "w": 2.75},
68 {"label": "Right Ctrl", "x": 10 , "y": 4, "w": 1.25},
69 {"label": "GUI" , "x": 11.25, "y": 4, "w": 1.25},
70 {"label": "MO(1)" , "x": 12.5 , "y": 4, "w": 1.25},
71 {"label": "Right Ctrl", "x": 13.75, "y": 4, "w": 1.25}
72 ]
73 }
74 }
75}
diff --git a/keyboards/mtbkeys/mtb60/solder/keymaps/default/keymap.c b/keyboards/mtbkeys/mtb60/solder/keymaps/default/keymap.c
new file mode 100644
index 000000000..6ed34b643
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/solder/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
1/* Copyright 2021 MTBKeys
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 _BASE,
21 _FN
22};
23
24const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
25 /* Base */
26 [_BASE] = LAYOUT(
27 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,
28 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,
29 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,
30 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,
31 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, MO(_FN), KC_RGUI, KC_RCTL
32 ),
33 [_FN] = LAYOUT(
34 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, _______, _______,
35 _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
36 _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
39 )
40};
diff --git a/keyboards/mtbkeys/mtb60/solder/readme.md b/keyboards/mtbkeys/mtb60/solder/readme.md
new file mode 100644
index 000000000..adaa94244
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/solder/readme.md
@@ -0,0 +1,26 @@
1# MTB60 (Solder Edition)
2
3## Details
4
5* Keyboard Maintainer: [MTBKeys](https://mtbkeys.com/)
6* Hardware Supported: MTB60 PCB (Solder edition)
7* Hardware Availability: [HB60 on MTBKeys Website](https://mtbkeys.com/)
8
9## Building Firmware
10
11Make example for this keyboard (after setting up your build environment):
12
13 make mtbkeys/mtb60/solder:default
14
15Flashing example for this keyboard:
16
17 make mtbkeys/mtb60/solder:default:flash
18
19## Bootloader
20
21Enter the bootloader in 2 ways:
22
231. **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
242. **Physical reset button**: Briefly press the button on the back of the PCB
25
26See 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).
diff --git a/keyboards/mtbkeys/mtb60/solder/rules.mk b/keyboards/mtbkeys/mtb60/solder/rules.mk
new file mode 100644
index 000000000..33e176337
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/solder/rules.mk
@@ -0,0 +1,21 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
21AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mtbkeys/mtb60/solder/solder.c b/keyboards/mtbkeys/mtb60/solder/solder.c
new file mode 100644
index 000000000..9bb7f2b98
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/solder/solder.c
@@ -0,0 +1,17 @@
1/* Copyright 2021 MTBKeys
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "solder.h"
diff --git a/keyboards/mtbkeys/mtb60/solder/solder.h b/keyboards/mtbkeys/mtb60/solder/solder.h
new file mode 100644
index 000000000..31756e7af
--- /dev/null
+++ b/keyboards/mtbkeys/mtb60/solder/solder.h
@@ -0,0 +1,33 @@
1/* Copyright 2021 MTBKeys
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#define LAYOUT( \
22 k00, k10, k20, k30, k40, k50, k60, k70, k80, k90, ka0, kb0, kc0, kd0, ke0, \
23 k11, k21, k31, k41, k51, k61, k71, k81, k91, ka1, kb1, kc1, kd1, ke1, \
24 k02, k22, k32, k42, k52, k62, k72, k82, k92, ka2, kb2, kc2, kd2, \
25 k03, k13, k23, k33, k43, k53, k63, k73, k83, k93, ka3, kb3, kc3, kd3, ke3, \
26 k04, k14, k34, k44, k64, k84, ka4, kb4, kc4, kd4, ke4 \
27) { \
28 { k00, k10, k20, k30, k40, k50, k60, k70, k80, k90, ka0, kb0, kc0, kd0, ke0 }, \
29 { KC_NO, k11, k21, k31, k41, k51, k61, k71, k81, k91, ka1, kb1, kc1, kd1, ke1 }, \
30 { k02, KC_NO, k22, k32, k42, k52, k62, k72, k82, k92, ka2, kb2, kc2, kd2, KC_NO }, \
31 { k03, k13, k23, k33, k43, k53, k63, k73, k83, k93, ka3, kb3, kc3, kd3, ke3 }, \
32 { k04, k14, KC_NO, k34, k44, KC_NO, k64, KC_NO, k84, KC_NO, ka4, kb4, kc4, kd4, ke4 } \
33}
diff --git a/lib/python/qmk/cli/format/python.py b/lib/python/qmk/cli/format/python.py
index b32a72640..95868d18a 100755
--- a/lib/python/qmk/cli/format/python.py
+++ b/lib/python/qmk/cli/format/python.py
@@ -4,23 +4,65 @@ from subprocess import CalledProcessError, DEVNULL
4 4
5from milc import cli 5from milc import cli
6 6
7from qmk.path import normpath
7 8
8@cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Don't actually format.") 9py_file_suffixes = ('py',)
9@cli.subcommand("Format python code according to QMK's style.", hidden=False if cli.config.user.developer else True) 10py_dirs = ['lib/python']
10def format_python(cli): 11
11 """Format python code according to QMK's style. 12
12 """ 13def yapf_run(files):
13 edit = '--diff' if cli.args.dry_run else '--in-place' 14 edit = '--diff' if cli.args.dry_run else '--in-place'
14 yapf_cmd = ['yapf', '-vv', '--recursive', edit, 'lib/python'] 15 yapf_cmd = ['yapf', '-vv', '--recursive', edit, *files]
15 try: 16 try:
16 cli.run(yapf_cmd, check=True, capture_output=False, stdin=DEVNULL) 17 cli.run(yapf_cmd, check=True, capture_output=False, stdin=DEVNULL)
17 cli.log.info('Python code in `lib/python` is correctly formatted.') 18 cli.log.info('Successfully formatted the python code.')
18 return True
19 19
20 except CalledProcessError: 20 except CalledProcessError:
21 if cli.args.dry_run: 21 cli.log.error(f'Python code in {",".join(py_dirs)} incorrectly formatted!')
22 cli.log.error('Python code in `lib/python` is incorrectly formatted!') 22 return False
23
24
25def filter_files(files):
26 """Yield only files to be formatted and skip the rest
27 """
28
29 for file in files:
30 if file and file.name.split('.')[-1] in py_file_suffixes:
31 yield file
23 else: 32 else:
24 cli.log.error('Error formatting python code!') 33 cli.log.debug('Skipping file %s', file)
34
35
36@cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Don't actually format.")
37@cli.argument('-b', '--base-branch', default='origin/master', help='Branch to compare to diffs to.')
38@cli.argument('-a', '--all-files', arg_only=True, action='store_true', help='Format all files.')
39@cli.argument('files', nargs='*', arg_only=True, type=normpath, help='Filename(s) to format.')
40@cli.subcommand("Format python code according to QMK's style.", hidden=False if cli.config.user.developer else True)
41def format_python(cli):
42 """Format python code according to QMK's style.
43 """
44 # Find the list of files to format
45 if cli.args.files:
46 files = list(filter_files(cli.args.files))
47
48 if not files:
49 cli.log.error('No Python files in filelist: %s', ', '.join(map(str, cli.args.files)))
50 exit(0)
51
52 if cli.args.all_files:
53 cli.log.warning('Filenames passed with -a, only formatting: %s', ','.join(map(str, files)))
54
55 elif cli.args.all_files:
56 files = py_dirs
57
58 else:
59 git_diff_cmd = ['git', 'diff', '--name-only', cli.args.base_branch, *py_dirs]
60 git_diff = cli.run(git_diff_cmd, stdin=DEVNULL)
61 files = list(filter(None, git_diff.stdout.split('\n')))
62
63 # Sanity check
64 if not files:
65 cli.log.error('No changed files detected. Use "qmk format-python -a" to format all files')
66 return False
25 67
26 return False 68 return yapf_run(files)
diff --git a/lib/python/qmk/cli/list/keymaps.py b/lib/python/qmk/cli/list/keymaps.py
index d79ab75b5..d2ef136c0 100644
--- a/lib/python/qmk/cli/list/keymaps.py
+++ b/lib/python/qmk/cli/list/keymaps.py
@@ -13,5 +13,10 @@ from qmk.keyboard import keyboard_completer, keyboard_folder
13def list_keymaps(cli): 13def list_keymaps(cli):
14 """List the keymaps for a specific keyboard 14 """List the keymaps for a specific keyboard
15 """ 15 """
16 if not cli.config.list_keymaps.keyboard:
17 cli.log.error('Missing required arguments: --keyboard')
18 cli.subcommands['list-keymaps'].print_help()
19 return False
20
16 for name in qmk.keymap.list_keymaps(cli.config.list_keymaps.keyboard): 21 for name in qmk.keymap.list_keymaps(cli.config.list_keymaps.keyboard):
17 print(name) 22 print(name)
diff --git a/lib/python/qmk/cli/list/layouts.py b/lib/python/qmk/cli/list/layouts.py
index 8e07afeec..df593dc39 100644
--- a/lib/python/qmk/cli/list/layouts.py
+++ b/lib/python/qmk/cli/list/layouts.py
@@ -13,6 +13,11 @@ from qmk.info import info_json
13def list_layouts(cli): 13def list_layouts(cli):
14 """List the layouts for a specific keyboard 14 """List the layouts for a specific keyboard
15 """ 15 """
16 if not cli.config.list_layouts.keyboard:
17 cli.log.error('Missing required arguments: --keyboard')
18 cli.subcommands['list-layouts'].print_help()
19 return False
20
16 info_data = info_json(cli.config.list_layouts.keyboard) 21 info_data = info_json(cli.config.list_layouts.keyboard)
17 for name in sorted(info_data.get('community_layouts', [])): 22 for name in sorted(info_data.get('community_layouts', [])):
18 print(name) 23 print(name)
diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py
index 9f2c258ab..1e3c64e73 100644
--- a/lib/python/qmk/tests/test_cli_commands.py
+++ b/lib/python/qmk/tests/test_cli_commands.py
@@ -81,9 +81,9 @@ def test_hello():
81 81
82 82
83def test_format_python(): 83def test_format_python():
84 result = check_subcommand('format-python', '--dry-run') 84 result = check_subcommand('format-python', '-n', '-a')
85 check_returncode(result) 85 check_returncode(result)
86 assert 'Python code in `lib/python` is correctly formatted.' in result.stdout 86 assert 'Successfully formatted the python code.' in result.stdout
87 87
88 88
89def test_list_keyboards(): 89def test_list_keyboards():