summaryrefslogtreecommitdiff
path: root/keyboards/p3d
diff options
context:
space:
mode:
authorフィルターペーパー <76888457+filterpaper@users.noreply.github.com>2024-02-13 07:37:17 +0800
committerGitHub <noreply@github.com>2024-02-12 16:37:17 -0700
commit0cad5e9d4a1cce52f3f8822db3838f2227eb0271 (patch)
tree7523a3e2bc95cc8b096aa6bc99bd4e07d6a8ce93 /keyboards/p3d
parent98a68b68a400f7b3821db1d77375a592b34cc8d6 (diff)
Refactor: move p3d keyboards (#22763)
Group standalone p3dstore keyboards into p3d folder
Diffstat (limited to 'keyboards/p3d')
-rw-r--r--keyboards/p3d/eu_isolation/config.h21
-rw-r--r--keyboards/p3d/eu_isolation/info.json189
-rw-r--r--keyboards/p3d/eu_isolation/keymaps/default/config.h18
-rw-r--r--keyboards/p3d/eu_isolation/keymaps/default/keymap.c60
-rw-r--r--keyboards/p3d/eu_isolation/keymaps/default/readme.md9
-rw-r--r--keyboards/p3d/eu_isolation/keymaps/default/rules.mk1
-rw-r--r--keyboards/p3d/eu_isolation/readme.md31
-rw-r--r--keyboards/p3d/eu_isolation/rules.mk12
-rw-r--r--keyboards/p3d/q4z/config.h21
-rw-r--r--keyboards/p3d/q4z/info.json70
-rw-r--r--keyboards/p3d/q4z/keymaps/default/config.h20
-rw-r--r--keyboards/p3d/q4z/keymaps/default/keymap.c101
-rw-r--r--keyboards/p3d/q4z/keymaps/default/readme.md1
-rw-r--r--keyboards/p3d/q4z/keymaps/default/rules.mk1
-rw-r--r--keyboards/p3d/q4z/keymaps/rjboone/config.h21
-rw-r--r--keyboards/p3d/q4z/keymaps/rjboone/keymap.c107
-rw-r--r--keyboards/p3d/q4z/keymaps/rjboone/readme.md1
-rw-r--r--keyboards/p3d/q4z/keymaps/rjboone/rules.mk1
-rw-r--r--keyboards/p3d/q4z/readme.md20
-rw-r--r--keyboards/p3d/q4z/rules.mk12
-rw-r--r--keyboards/p3d/spacey/info.json103
-rw-r--r--keyboards/p3d/spacey/keymaps/default/keymap.c47
-rw-r--r--keyboards/p3d/spacey/keymaps/default/readme.md1
-rw-r--r--keyboards/p3d/spacey/keymaps/via/keymap.c48
-rw-r--r--keyboards/p3d/spacey/keymaps/via/rules.mk2
-rw-r--r--keyboards/p3d/spacey/readme.md19
-rw-r--r--keyboards/p3d/spacey/rules.mk13
-rw-r--r--keyboards/p3d/synapse/config.h19
-rw-r--r--keyboards/p3d/synapse/info.json121
-rw-r--r--keyboards/p3d/synapse/keymaps/7u_space/config.h25
-rw-r--r--keyboards/p3d/synapse/keymaps/7u_space/keymap.c77
-rw-r--r--keyboards/p3d/synapse/keymaps/7u_space/rules.mk1
-rw-r--r--keyboards/p3d/synapse/keymaps/default/config.h25
-rw-r--r--keyboards/p3d/synapse/keymaps/default/keymap.c77
-rw-r--r--keyboards/p3d/synapse/keymaps/default/rules.mk1
-rw-r--r--keyboards/p3d/synapse/readme.md27
-rw-r--r--keyboards/p3d/synapse/rules.mk13
-rw-r--r--keyboards/p3d/synapse/synapse.c35
-rw-r--r--keyboards/p3d/tw40/config.h22
-rw-r--r--keyboards/p3d/tw40/info.json993
-rw-r--r--keyboards/p3d/tw40/keymaps/default/keymap.c39
-rw-r--r--keyboards/p3d/tw40/keymaps/default/readme.md1
-rw-r--r--keyboards/p3d/tw40/keymaps/via/keymap.c47
-rw-r--r--keyboards/p3d/tw40/keymaps/via/rules.mk2
-rw-r--r--keyboards/p3d/tw40/readme.md19
-rw-r--r--keyboards/p3d/tw40/rules.mk12
46 files changed, 2506 insertions, 0 deletions
diff --git a/keyboards/p3d/eu_isolation/config.h b/keyboards/p3d/eu_isolation/config.h
new file mode 100644
index 0000000000..de7206efe2
--- /dev/null
+++ b/keyboards/p3d/eu_isolation/config.h
@@ -0,0 +1,21 @@
1/* Copyright 2020 Austin "TuckTuckFloof" Ashmore
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* You should have received a copy of the GNU General Public License
13* along with this program. If not, see <http://www.gnu.org/licenses/>.
14*/
15#pragma once
16
17/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
18#define LOCKING_SUPPORT_ENABLE
19
20/* Locking resynchronize hack */
21#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/p3d/eu_isolation/info.json b/keyboards/p3d/eu_isolation/info.json
new file mode 100644
index 0000000000..f181418cf0
--- /dev/null
+++ b/keyboards/p3d/eu_isolation/info.json
@@ -0,0 +1,189 @@
1{
2 "keyboard_name": "EU ISOlation",
3 "manufacturer": "TuckTuckFloof",
4 "url": "",
5 "maintainer": "qmk",
6 "usb": {
7 "vid": "0xFEED",
8 "pid": "0x4373",
9 "device_version": "0.0.1"
10 },
11 "matrix_pins": {
12 "cols": ["D0", "D1", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4"],
13 "rows": ["D2", "D3", "F1", "F0"]
14 },
15 "diode_direction": "COL2ROW",
16 "processor": "atmega32u4",
17 "bootloader": "atmel-dfu",
18 "layouts": {
19 "LAYOUT_euiso_ortho": {
20 "layout": [
21 {"matrix": [0, 2], "x": 2, "y": 0},
22 {"matrix": [0, 3], "x": 3, "y": 0},
23 {"matrix": [0, 4], "x": 4, "y": 0},
24 {"matrix": [0, 5], "x": 5, "y": 0},
25 {"matrix": [0, 6], "x": 6, "y": 0},
26 {"matrix": [0, 7], "x": 7, "y": 0},
27 {"matrix": [0, 8], "x": 8, "y": 0},
28 {"matrix": [0, 9], "x": 9, "y": 0},
29 {"matrix": [0, 10], "x": 10, "y": 0},
30 {"matrix": [0, 11], "x": 11, "y": 0},
31 {"matrix": [0, 12], "x": 12, "y": 0},
32 {"matrix": [0, 13], "x": 13, "y": 0},
33
34 {"matrix": [1, 0], "x": 0, "y": 1},
35 {"matrix": [1, 1], "x": 1, "y": 1},
36 {"matrix": [1, 2], "x": 2, "y": 1},
37 {"matrix": [1, 3], "x": 3, "y": 1},
38 {"matrix": [1, 4], "x": 4, "y": 1},
39 {"matrix": [1, 5], "x": 5, "y": 1},
40 {"matrix": [1, 6], "x": 6, "y": 1},
41 {"matrix": [1, 7], "x": 7, "y": 1},
42 {"matrix": [1, 8], "x": 8, "y": 1},
43 {"matrix": [1, 9], "x": 9, "y": 1},
44 {"matrix": [1, 10], "x": 10, "y": 1},
45 {"matrix": [1, 11], "x": 11, "y": 1},
46 {"matrix": [1, 12], "x": 12, "y": 1},
47 {"matrix": [1, 13], "x": 13, "y": 1},
48
49 {"matrix": [2, 0], "x": 0, "y": 2},
50 {"matrix": [2, 1], "x": 1, "y": 2},
51 {"matrix": [2, 2], "x": 2, "y": 2},
52 {"matrix": [2, 3], "x": 3, "y": 2},
53 {"matrix": [2, 4], "x": 4, "y": 2},
54 {"matrix": [2, 5], "x": 5, "y": 2},
55 {"matrix": [2, 6], "x": 6, "y": 2},
56 {"matrix": [2, 7], "x": 7, "y": 2},
57 {"matrix": [2, 8], "x": 8, "y": 2},
58 {"matrix": [2, 9], "x": 9, "y": 2},
59 {"matrix": [2, 10], "x": 10, "y": 2},
60 {"matrix": [2, 11], "x": 11, "y": 2},
61 {"matrix": [2, 12], "x": 12, "y": 2},
62 {"matrix": [2, 13], "x": 13, "y": 2},
63
64 {"matrix": [3, 2], "x": 2, "y": 3},
65 {"matrix": [3, 3], "x": 3, "y": 3},
66 {"matrix": [3, 4], "x": 4, "y": 3},
67 {"matrix": [3, 5], "x": 5, "y": 3},
68 {"matrix": [3, 6], "x": 6, "y": 3},
69 {"matrix": [3, 7], "x": 7, "y": 3},
70 {"matrix": [3, 8], "x": 8, "y": 3},
71 {"matrix": [3, 9], "x": 9, "y": 3},
72 {"matrix": [3, 10], "x": 10, "y": 3},
73 {"matrix": [3, 11], "x": 11, "y": 3},
74 {"matrix": [3, 12], "x": 12, "y": 3},
75 {"matrix": [3, 13], "x": 13, "y": 3}
76 ]
77 },
78 "LAYOUT_euiso_mit": {
79 "layout": [
80 {"matrix": [0, 2], "x": 2, "y": 0},
81 {"matrix": [0, 3], "x": 3, "y": 0},
82 {"matrix": [0, 4], "x": 4, "y": 0},
83 {"matrix": [0, 5], "x": 5, "y": 0},
84 {"matrix": [0, 6], "x": 6, "y": 0},
85 {"matrix": [0, 7], "x": 7, "y": 0},
86 {"matrix": [0, 8], "x": 8, "y": 0},
87 {"matrix": [0, 9], "x": 9, "y": 0},
88 {"matrix": [0, 10], "x": 10, "y": 0},
89 {"matrix": [0, 11], "x": 11, "y": 0},
90 {"matrix": [0, 12], "x": 12, "y": 0},
91 {"matrix": [0, 13], "x": 13, "y": 0},
92
93 {"matrix": [1, 0], "x": 0, "y": 1},
94 {"matrix": [1, 1], "x": 1, "y": 1},
95 {"matrix": [1, 2], "x": 2, "y": 1},
96 {"matrix": [1, 3], "x": 3, "y": 1},
97 {"matrix": [1, 4], "x": 4, "y": 1},
98 {"matrix": [1, 5], "x": 5, "y": 1},
99 {"matrix": [1, 6], "x": 6, "y": 1},
100 {"matrix": [1, 7], "x": 7, "y": 1},
101 {"matrix": [1, 8], "x": 8, "y": 1},
102 {"matrix": [1, 9], "x": 9, "y": 1},
103 {"matrix": [1, 10], "x": 10, "y": 1},
104 {"matrix": [1, 11], "x": 11, "y": 1},
105 {"matrix": [1, 12], "x": 12, "y": 1},
106 {"matrix": [1, 13], "x": 13, "y": 1},
107
108 {"matrix": [2, 0], "x": 0, "y": 2},
109 {"matrix": [2, 1], "x": 1, "y": 2},
110 {"matrix": [2, 2], "x": 2, "y": 2},
111 {"matrix": [2, 3], "x": 3, "y": 2},
112 {"matrix": [2, 4], "x": 4, "y": 2},
113 {"matrix": [2, 5], "x": 5, "y": 2},
114 {"matrix": [2, 6], "x": 6, "y": 2},
115 {"matrix": [2, 7], "x": 7, "y": 2},
116 {"matrix": [2, 8], "x": 8, "y": 2},
117 {"matrix": [2, 9], "x": 9, "y": 2},
118 {"matrix": [2, 10], "x": 10, "y": 2},
119 {"matrix": [2, 11], "x": 11, "y": 2},
120 {"matrix": [2, 12], "x": 12, "y": 2},
121 {"matrix": [2, 13], "x": 13, "y": 2},
122
123 {"matrix": [3, 2], "x": 2, "y": 3},
124 {"matrix": [3, 3], "x": 3, "y": 3},
125 {"matrix": [3, 4], "x": 4, "y": 3},
126 {"matrix": [3, 5], "x": 5, "y": 3},
127 {"matrix": [3, 6], "x": 6, "y": 3},
128 {"matrix": [3, 7], "x": 7, "y": 3, "w": 2},
129 {"matrix": [3, 9], "x": 9, "y": 3},
130 {"matrix": [3, 10], "x": 10, "y": 3},
131 {"matrix": [3, 11], "x": 11, "y": 3},
132 {"matrix": [3, 12], "x": 12, "y": 3},
133 {"matrix": [3, 13], "x": 13, "y": 3}
134 ]
135 },
136 "LAYOUT_euiso_bigspace": {
137 "layout": [
138 {"matrix": [0, 2], "x": 2, "y": 0},
139 {"matrix": [0, 3], "x": 3, "y": 0},
140 {"matrix": [0, 4], "x": 4, "y": 0},
141 {"matrix": [0, 5], "x": 5, "y": 0},
142 {"matrix": [0, 6], "x": 6, "y": 0},
143 {"matrix": [0, 7], "x": 7, "y": 0},
144 {"matrix": [0, 8], "x": 8, "y": 0},
145 {"matrix": [0, 9], "x": 9, "y": 0},
146 {"matrix": [0, 10], "x": 10, "y": 0},
147 {"matrix": [0, 11], "x": 11, "y": 0},
148 {"matrix": [0, 12], "x": 12, "y": 0},
149 {"matrix": [0, 13], "x": 13, "y": 0},
150
151 {"matrix": [1, 0], "x": 0, "y": 1},
152 {"matrix": [1, 1], "x": 1, "y": 1},
153 {"matrix": [1, 2], "x": 2, "y": 1},
154 {"matrix": [1, 3], "x": 3, "y": 1},
155 {"matrix": [1, 4], "x": 4, "y": 1},
156 {"matrix": [1, 5], "x": 5, "y": 1},
157 {"matrix": [1, 6], "x": 6, "y": 1},
158 {"matrix": [1, 7], "x": 7, "y": 1},
159 {"matrix": [1, 8], "x": 8, "y": 1},
160 {"matrix": [1, 9], "x": 9, "y": 1},
161 {"matrix": [1, 10], "x": 10, "y": 1},
162 {"matrix": [1, 11], "x": 11, "y": 1},
163 {"matrix": [1, 12], "x": 12, "y": 1},
164 {"matrix": [1, 13], "x": 13, "y": 1},
165
166 {"matrix": [2, 0], "x": 0, "y": 2},
167 {"matrix": [2, 1], "x": 1, "y": 2},
168 {"matrix": [2, 2], "x": 2, "y": 2},
169 {"matrix": [2, 3], "x": 3, "y": 2},
170 {"matrix": [2, 4], "x": 4, "y": 2},
171 {"matrix": [2, 5], "x": 5, "y": 2},
172 {"matrix": [2, 6], "x": 6, "y": 2},
173 {"matrix": [2, 7], "x": 7, "y": 2},
174 {"matrix": [2, 8], "x": 8, "y": 2},
175 {"matrix": [2, 9], "x": 9, "y": 2},
176 {"matrix": [2, 10], "x": 10, "y": 2},
177 {"matrix": [2, 11], "x": 11, "y": 2},
178 {"matrix": [2, 12], "x": 12, "y": 2},
179 {"matrix": [2, 13], "x": 13, "y": 2},
180
181 {"matrix": [3, 2], "x": 2, "y": 3, "w": 1.25},
182 {"matrix": [3, 3], "x": 3.25, "y": 3, "w": 1.25},
183 {"matrix": [3, 7], "x": 4.5, "y": 3, "w": 7},
184 {"matrix": [3, 12], "x": 11.5, "y": 3, "w": 1.25},
185 {"matrix": [3, 13], "x": 12.75, "y": 3, "w": 1.25}
186 ]
187 }
188 }
189}
diff --git a/keyboards/p3d/eu_isolation/keymaps/default/config.h b/keyboards/p3d/eu_isolation/keymaps/default/config.h
new file mode 100644
index 0000000000..ad4389af3e
--- /dev/null
+++ b/keyboards/p3d/eu_isolation/keymaps/default/config.h
@@ -0,0 +1,18 @@
1/* Copyright 2020 Austin "TuckTuckFloof" Ashmore
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* You should have received a copy of the GNU General Public License
13* along with this program. If not, see <http://www.gnu.org/licenses/>.
14*/
15
16#pragma once
17
18#define COMBO_TERM 175
diff --git a/keyboards/p3d/eu_isolation/keymaps/default/keymap.c b/keyboards/p3d/eu_isolation/keymaps/default/keymap.c
new file mode 100644
index 0000000000..65dc381974
--- /dev/null
+++ b/keyboards/p3d/eu_isolation/keymaps/default/keymap.c
@@ -0,0 +1,60 @@
1/* Copyright 2020 Austin "TuckTuckFloof" Ashmore
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* You should have received a copy of the GNU General Public License
13* along with this program. If not, see <http://www.gnu.org/licenses/>.
14*/
15
16#include QMK_KEYBOARD_H
17
18enum layers {
19 _BASE,
20 _FN1,
21 _FN2
22};
23
24// I put these combos in because they're easy to impliment and it gives you an idea of what you need to do
25// Go nuts, have fun! It's why I build the board :)
26enum WOMBO_COMBOS {
27 VOLUME_UP = 0,
28 VOLUME_DOWN
29};
30
31const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END };
32const uint16_t PROGMEM VOLUME_DN_COMBO[] = { KC_F3, KC_F4, COMBO_END };
33
34combo_t key_combos[] = {
35 [VOLUME_UP] = COMBO(VOLUME_UP_COMBO, KC_VOLU),
36 [VOLUME_DOWN] = COMBO(VOLUME_DN_COMBO, KC_VOLD)
37};
38
39const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
40 [_BASE] = LAYOUT_euiso_ortho(
41 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
42 KC_F1, KC_F2, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
43 KC_F3, KC_F4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
44 KC_CAPS, KC_LCTL, KC_LGUI, KC_LALT,MO(_FN1), KC_SPC, KC_SPC,MO(_FN2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
45 ),
46
47 [_FN1] = LAYOUT_euiso_ortho(
48 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
49 _______, _______, KC_ESC , KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______,
50 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______,
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
52 ),
53
54 [_FN2] = LAYOUT_euiso_ortho(
55 KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
56 _______, _______, KC_ESC , KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, _______, _______,
57 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_VOLU, _______,
58 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
59 )
60};
diff --git a/keyboards/p3d/eu_isolation/keymaps/default/readme.md b/keyboards/p3d/eu_isolation/keymaps/default/readme.md
new file mode 100644
index 0000000000..b1f90f9ef4
--- /dev/null
+++ b/keyboards/p3d/eu_isolation/keymaps/default/readme.md
@@ -0,0 +1,9 @@
1# Default layout for EU ISOlation
2
3Fairly standard layout using all 1U keycaps for the body and of course 4 ISO
4enter keys to keep things interesting.
5
6* The 4 ISO enters are mapped to F1-F4 by default
7* The ISO enters have a combo, holding the top to is volume up, the bottom two
8 is volume down
9* Play with the combos and ISO Enters and see what you can do!
diff --git a/keyboards/p3d/eu_isolation/keymaps/default/rules.mk b/keyboards/p3d/eu_isolation/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ab1e438182
--- /dev/null
+++ b/keyboards/p3d/eu_isolation/keymaps/default/rules.mk
@@ -0,0 +1 @@
COMBO_ENABLE = yes
diff --git a/keyboards/p3d/eu_isolation/readme.md b/keyboards/p3d/eu_isolation/readme.md
new file mode 100644
index 0000000000..44cb4277e4
--- /dev/null
+++ b/keyboards/p3d/eu_isolation/readme.md
@@ -0,0 +1,31 @@
1# EU ISOlation
2
3![euisolation](https://i.imgur.com/5LGsiJZh.jpg)
4
5EU ISOlation is an ortholinear 40% keyboard designed to use up your spare iso
6enters from you collection of keyboard kits.
7
8* Keyboard Maintainer: Originally by [TuckTuckFloof](https://github.com/TuckTuckFloof)
9 cleaned up and merged to QMK by [aadriance](https://github.com/aadriance)
10* Hardware Supported: EU ISOlation
11* Hardware Availability: Originally a [P3DStore](https://p3dstore.com/) group buy.
12 Open source pcb info available on [TuckTuckFloofs github](https://github.com/TuckTuckFloof/EUISO-pcb)
13
14## Bootloader
15
16Enter the bootloader in 3 ways:
17
18* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
19* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
20
21## Information
22
23Make example for this keyboard (after setting up your build environment):
24
25 make p3d/eu_isolation:default
26
27Flashing example for this keyboard:
28
29 make p3d/eu_isolation:default:flash
30
31See 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/p3d/eu_isolation/rules.mk b/keyboards/p3d/eu_isolation/rules.mk
new file mode 100644
index 0000000000..20825c8cfa
--- /dev/null
+++ b/keyboards/p3d/eu_isolation/rules.mk
@@ -0,0 +1,12 @@
1# Build Options
2# change yes to no to disable
3#
4BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
5MOUSEKEY_ENABLE = yes # Mouse keys
6EXTRAKEY_ENABLE = yes # Audio control and System control
7CONSOLE_ENABLE = yes # Console for debug
8COMMAND_ENABLE = no # Commands for debug and configuration
9NKRO_ENABLE = yes # Enable N-Key Rollover
10BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
11RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
12AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/p3d/q4z/config.h b/keyboards/p3d/q4z/config.h
new file mode 100644
index 0000000000..67553a4432
--- /dev/null
+++ b/keyboards/p3d/q4z/config.h
@@ -0,0 +1,21 @@
1/* Copyright 2021 rjboone
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#pragma once
17
18/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
19#define LOCKING_SUPPORT_ENABLE
20/* Locking resynchronize hack */
21#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/p3d/q4z/info.json b/keyboards/p3d/q4z/info.json
new file mode 100644
index 0000000000..dc02296131
--- /dev/null
+++ b/keyboards/p3d/q4z/info.json
@@ -0,0 +1,70 @@
1{
2 "keyboard_name": "q4z",
3 "manufacturer": "drmmr",
4 "url": "",
5 "maintainer": "rjboone",
6 "usb": {
7 "vid": "0x0001",
8 "pid": "0x0001",
9 "device_version": "0.0.1"
10 },
11 "matrix_pins": {
12 "cols": ["D1", "D0", "D4", "B6", "B2", "B3", "B1", "F7", "F6", "F5"],
13 "rows": ["F4", "C6", "D7", "E6", "B4"]
14 },
15 "diode_direction": "COL2ROW",
16 "processor": "atmega32u4",
17 "bootloader": "atmel-dfu",
18 "layouts": {
19 "LAYOUT": {
20 "layout": [
21 {"matrix": [0, 0], "x": 0.5, "y": 0},
22 {"matrix": [0, 1], "x": 1.5, "y": 0},
23 {"matrix": [0, 2], "x": 2.5, "y": 0},
24 {"matrix": [0, 3], "x": 3.5, "y": 0},
25 {"matrix": [0, 4], "x": 4.5, "y": 0},
26
27 {"matrix": [1, 0], "x": 0, "y": 1},
28 {"matrix": [1, 1], "x": 1, "y": 1},
29 {"matrix": [1, 2], "x": 2, "y": 1},
30 {"matrix": [1, 3], "x": 3, "y": 1},
31 {"matrix": [1, 4], "x": 4, "y": 1},
32 {"matrix": [1, 5], "x": 5, "y": 1},
33 {"matrix": [1, 6], "x": 6, "y": 1},
34 {"matrix": [1, 7], "x": 7, "y": 1},
35 {"matrix": [1, 8], "x": 8, "y": 1},
36 {"matrix": [1, 9], "x": 9, "y": 1, "w": 1.25},
37
38 {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.25},
39 {"matrix": [2, 1], "x": 1.25, "y": 2},
40 {"matrix": [2, 2], "x": 2.25, "y": 2},
41 {"matrix": [2, 3], "x": 3.25, "y": 2},
42 {"matrix": [2, 4], "x": 4.25, "y": 2},
43 {"matrix": [2, 5], "x": 5.25, "y": 2},
44 {"matrix": [2, 6], "x": 6.25, "y": 2},
45 {"matrix": [2, 7], "x": 7.25, "y": 2},
46 {"matrix": [2, 8], "x": 8.25, "y": 2},
47 {"matrix": [2, 9], "x": 9.25, "y": 2},
48
49 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
50 {"matrix": [3, 1], "x": 1.75, "y": 3},
51 {"matrix": [3, 2], "x": 2.75, "y": 3},
52 {"matrix": [3, 3], "x": 3.75, "y": 3},
53 {"matrix": [3, 4], "x": 4.75, "y": 3},
54 {"matrix": [3, 5], "x": 5.75, "y": 3},
55 {"matrix": [3, 6], "x": 6.75, "y": 3},
56 {"matrix": [3, 7], "x": 7.75, "y": 3},
57 {"matrix": [3, 8], "x": 8.75, "y": 3, "w": 1.5},
58
59 {"matrix": [4, 0], "x": 0, "y": 4},
60 {"matrix": [4, 1], "x": 1, "y": 4},
61 {"matrix": [4, 2], "x": 2, "y": 4},
62 {"matrix": [4, 3], "x": 3, "y": 4, "w": 2.25},
63 {"matrix": [4, 4], "x": 5.25, "y": 4, "w": 2},
64 {"matrix": [4, 5], "x": 7.25, "y": 4},
65 {"matrix": [4, 6], "x": 8.25, "y": 4},
66 {"matrix": [4, 7], "x": 9.25, "y": 4}
67 ]
68 }
69 }
70}
diff --git a/keyboards/p3d/q4z/keymaps/default/config.h b/keyboards/p3d/q4z/keymaps/default/config.h
new file mode 100644
index 0000000000..88392557de
--- /dev/null
+++ b/keyboards/p3d/q4z/keymaps/default/config.h
@@ -0,0 +1,20 @@
1/* Copyright 2021 rjboone
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#pragma once
17
18#ifdef COMBO_ENABLE
19#define COMBO_TERM 200
20#endif
diff --git a/keyboards/p3d/q4z/keymaps/default/keymap.c b/keyboards/p3d/q4z/keymaps/default/keymap.c
new file mode 100644
index 0000000000..4a7c28acb1
--- /dev/null
+++ b/keyboards/p3d/q4z/keymaps/default/keymap.c
@@ -0,0 +1,101 @@
1/* Copyright 2021 rjboone
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
18enum layers{
19 _BASE,
20 _NUM_SYM,
21 _NAV,
22 _GAME
23};
24
25enum combo_events {
26 COMBO_BSPC,
27 COMBO_NUMBAK,
28 COMBO_TAB,
29 COMBO_ESC,
30 COMBO_DEL,
31};
32
33#define KC_SF LSFT_T(KC_F)
34#define KC_SJ RSFT_T(KC_J)
35
36const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
37 [_BASE] = LAYOUT(
38 KC_1, KC_2, KC_3, KC_4, KC_5,
39 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
40 KC_A, KC_S, KC_D, KC_SF, KC_G, KC_H, KC_SJ, KC_K, KC_L, KC_SCLN,
41 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,
42 KC_LCTL, KC_LALT, KC_LGUI, LT(_NUM_SYM, KC_ENT), KC_SPC, MO(_NAV), TG(_GAME), KC_SLSH
43 ),
44
45 [_NUM_SYM] = LAYOUT(
46 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
47 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
48 KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,
49 KC_LCBR, KC_LBRC, KC_LPRN, KC_UNDS, KC_RPRN, KC_RBRC, KC_RCBR, KC_SCLN, KC_QUOTE,
50 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_TRNS, KC_TRNS, KC_BSLS
51 ),
52
53 [_NAV] = LAYOUT(
54 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
55 QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS,
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS,
57 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
58 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
59 ),
60
61 [_GAME] = LAYOUT(
62 KC_1, KC_2, KC_3, KC_4, KC_5,
63 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_NO, KC_NO,
64 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, KC_NO, KC_NO,
65 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_NO,
66 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_NO, TG(_GAME), KC_NO
67 ),
68};
69
70#ifdef COMBO_ENABLE
71const uint16_t PROGMEM combo_bspc[] = {KC_O, KC_P, COMBO_END};
72const uint16_t PROGMEM combo_numbak[] = {KC_0, KC_9, COMBO_END};
73const uint16_t PROGMEM combo_tab[] = {KC_A, KC_S, COMBO_END};
74const uint16_t PROGMEM combo_esc[] = {KC_Q, KC_W, COMBO_END};
75const uint16_t PROGMEM combo_del[] = {KC_MINS, KC_EQL, COMBO_END};
76
77combo_t key_combos[] = {
78 [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
79 [COMBO_NUMBAK] = COMBO(combo_numbak,KC_BSPC),
80 [COMBO_TAB] = COMBO(combo_tab,KC_TAB),
81 [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
82 [COMBO_DEL] = COMBO(combo_del,KC_DEL),
83
84};
85#endif
86
87layer_state_t layer_state_set_user(layer_state_t state) {
88
89#ifdef COMBO_ENABLE
90 switch(get_highest_layer(state)) {
91 case _GAME:
92 combo_disable();
93 break;
94 default:
95 combo_enable();
96 break;
97 }
98#endif // COMBO_ENABLE
99
100 return state;
101}
diff --git a/keyboards/p3d/q4z/keymaps/default/readme.md b/keyboards/p3d/q4z/keymaps/default/readme.md
new file mode 100644
index 0000000000..28186f64d8
--- /dev/null
+++ b/keyboards/p3d/q4z/keymaps/default/readme.md
@@ -0,0 +1 @@
# Default Q4Z Keymap
diff --git a/keyboards/p3d/q4z/keymaps/default/rules.mk b/keyboards/p3d/q4z/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ab1e438182
--- /dev/null
+++ b/keyboards/p3d/q4z/keymaps/default/rules.mk
@@ -0,0 +1 @@
COMBO_ENABLE = yes
diff --git a/keyboards/p3d/q4z/keymaps/rjboone/config.h b/keyboards/p3d/q4z/keymaps/rjboone/config.h
new file mode 100644
index 0000000000..9264f33bae
--- /dev/null
+++ b/keyboards/p3d/q4z/keymaps/rjboone/config.h
@@ -0,0 +1,21 @@
1/* Copyright 2021 rjboone
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#pragma once
17
18#undef TAPPING_TERM
19#define TAPPING_TERM 300
20
21#define COMBO_TERM 50
diff --git a/keyboards/p3d/q4z/keymaps/rjboone/keymap.c b/keyboards/p3d/q4z/keymaps/rjboone/keymap.c
new file mode 100644
index 0000000000..c54ec014ec
--- /dev/null
+++ b/keyboards/p3d/q4z/keymaps/rjboone/keymap.c
@@ -0,0 +1,107 @@
1/* Copyright 2021 rjboone
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
18enum layers{
19 _BASE,
20 _NUM_SYM,
21 _NAV,
22 _GAME
23};
24
25enum combo_events {
26 COMBO_BSPC,
27 COMBO_NUMBAK,
28 COMBO_TAB,
29 COMBO_ESC,
30 COMBO_DEL,
31};
32
33#define KC_GA LGUI_T(KC_A)
34#define KC_AS LALT_T(KC_S)
35#define KC_CD LCTL_T(KC_D)
36#define KC_SF LSFT_T(KC_F)
37#define KC_SJ RSFT_T(KC_J)
38#define KC_CK RCTL_T(KC_K)
39#define KC_AL RALT_T(KC_L)
40#define KC_GSCLN RGUI_T(KC_SCLN)
41
42const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
43 [_BASE] = LAYOUT(
44 KC_1, KC_2, KC_3, KC_4, KC_5,
45 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
46 KC_A, KC_S, KC_D, KC_SF, KC_G, KC_H, KC_SJ, KC_K, KC_L, KC_SCLN,
47 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,
48 KC_LCTL, KC_LALT, KC_LGUI, LT(_NUM_SYM, KC_ENT), KC_SPC, MO(_NAV), TG(_GAME), KC_SLSH
49 ),
50
51 [_NUM_SYM] = LAYOUT(
52 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
53 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
54 KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_LBRC, KC_RBRC, KC_EQL, KC_TRNS, KC_TRNS, KC_QUOT,
55 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_TRNS, KC_TRNS, KC_BSLS
57 ),
58
59 [_NAV] = LAYOUT(
60 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
61 QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS,
62 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS,
63 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
64 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
65 ),
66
67 [_GAME] = LAYOUT(
68 KC_1, KC_2, KC_3, KC_4, KC_5,
69 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_NO, KC_NO,
70 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, KC_NO, KC_NO,
71 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_NO,
72 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_NO, TG(_GAME), KC_NO
73 ),
74};
75
76#ifdef COMBO_ENABLE
77const uint16_t PROGMEM combo_bspc[] = {KC_O, KC_P, COMBO_END};
78const uint16_t PROGMEM combo_numbak[] = {KC_0, KC_9, COMBO_END};
79const uint16_t PROGMEM combo_tab[] = {KC_A, KC_S, COMBO_END};
80const uint16_t PROGMEM combo_esc[] = {KC_Q, KC_W, COMBO_END};
81const uint16_t PROGMEM combo_del[] = {KC_MINS, KC_EQL, COMBO_END};
82
83combo_t key_combos[] = {
84 [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
85 [COMBO_NUMBAK] = COMBO(combo_numbak,KC_BSPC),
86 [COMBO_TAB] = COMBO(combo_tab,KC_TAB),
87 [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
88 [COMBO_DEL] = COMBO(combo_del,KC_DEL),
89
90};
91#endif
92
93layer_state_t layer_state_set_user(layer_state_t state) {
94
95#ifdef COMBO_ENABLE
96 switch(get_highest_layer(state)) {
97 case _GAME:
98 combo_disable();
99 break;
100 default:
101 combo_enable();
102 break;
103 }
104#endif // COMBO_ENABLE
105
106 return state;
107}
diff --git a/keyboards/p3d/q4z/keymaps/rjboone/readme.md b/keyboards/p3d/q4z/keymaps/rjboone/readme.md
new file mode 100644
index 0000000000..29f2d31f6f
--- /dev/null
+++ b/keyboards/p3d/q4z/keymaps/rjboone/readme.md
@@ -0,0 +1 @@
# Default Le Chiffre Keymap
diff --git a/keyboards/p3d/q4z/keymaps/rjboone/rules.mk b/keyboards/p3d/q4z/keymaps/rjboone/rules.mk
new file mode 100644
index 0000000000..ab1e438182
--- /dev/null
+++ b/keyboards/p3d/q4z/keymaps/rjboone/rules.mk
@@ -0,0 +1 @@
COMBO_ENABLE = yes
diff --git a/keyboards/p3d/q4z/readme.md b/keyboards/p3d/q4z/readme.md
new file mode 100644
index 0000000000..f6f4afecc8
--- /dev/null
+++ b/keyboards/p3d/q4z/readme.md
@@ -0,0 +1,20 @@
1# Q4Z
2
3![Q4Z](https://cdn.shopify.com/s/files/1/0501/7537/7592/products/q4n-6_470x.jpg?v=1623373518)
4
5Q4Z is a play on everybody's favorite 10.25u layout. With the addition of 5 number keys and a handle,
6this little board is ready for whatever a raging gamer can throw it at.
7
8* Keyboard Maintainer: [Ryan Boone](https://github.com/rjboone) (Drmmr#0004)
9* Hardware Supported: Pro Micro or equivalent
10* Hardware Availability: This board is available to purchase from [P3D Store](https://p3dstore.com)
11
12Make example for this keyboard (after setting up your build environment):
13
14 make p3d/q4z:default
15
16Flashing example for this keyboard:
17
18 make p3d/q4z:default:flash
19
20See 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/p3d/q4z/rules.mk b/keyboards/p3d/q4z/rules.mk
new file mode 100644
index 0000000000..6d3709762d
--- /dev/null
+++ b/keyboards/p3d/q4z/rules.mk
@@ -0,0 +1,12 @@
1# Build Options
2# change yes to no to disable
3#
4BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
5MOUSEKEY_ENABLE = yes # Mouse keys
6EXTRAKEY_ENABLE = yes # Audio control and System control
7CONSOLE_ENABLE = no # Console for debug
8COMMAND_ENABLE = no # Commands for debug and configuration
9NKRO_ENABLE = yes # Enable N-Key Rollover
10BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
11RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
12AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/p3d/spacey/info.json b/keyboards/p3d/spacey/info.json
new file mode 100644
index 0000000000..289eff730f
--- /dev/null
+++ b/keyboards/p3d/spacey/info.json
@@ -0,0 +1,103 @@
1{
2 "keyboard_name": "spacey",
3 "manufacturer": "vanilla",
4 "url": "",
5 "maintainer": "vanilla",
6 "usb": {
7 "vid": "0x5641",
8 "pid": "0x2045",
9 "device_version": "0.0.1"
10 },
11 "matrix_pins": {
12 "cols": ["D5", "B7", "B5", "B4", "E6", "D7", "C7", "B3", "B2", "B6", "F0", "F1", "B1", "F7"],
13 "rows": ["D4", "C6", "F6", "F5", "F4"]
14 },
15 "diode_direction": "COL2ROW",
16 "encoder": {
17 "rotary": [
18 {"pin_a": "D0", "pin_b": "D1"}
19 ]
20 },
21 "processor": "atmega32u4",
22 "bootloader": "atmel-dfu",
23 "layouts": {
24 "LAYOUT": {
25 "layout": [
26 {"matrix": [0, 0], "x": 0, "y": 0},
27 {"matrix": [0, 1], "x": 1, "y": 0},
28 {"matrix": [0, 2], "x": 2, "y": 0},
29 {"matrix": [0, 3], "x": 3, "y": 0},
30 {"matrix": [0, 4], "x": 4, "y": 0},
31 {"matrix": [0, 5], "x": 5, "y": 0},
32 {"matrix": [0, 6], "x": 6, "y": 0},
33 {"matrix": [0, 7], "x": 7, "y": 0},
34 {"matrix": [0, 8], "x": 8, "y": 0},
35 {"matrix": [0, 9], "x": 9, "y": 0},
36 {"matrix": [0, 10], "x": 10, "y": 0},
37 {"matrix": [0, 11], "x": 11, "y": 0},
38 {"matrix": [0, 12], "x": 12, "y": 0},
39 {"matrix": [0, 13], "x": 13, "y": 0},
40
41 {"matrix": [1, 0], "x": 0, "y": 1},
42 {"matrix": [1, 1], "x": 1, "y": 1},
43 {"matrix": [1, 2], "x": 2, "y": 1},
44 {"matrix": [1, 3], "x": 3, "y": 1},
45 {"matrix": [1, 4], "x": 4, "y": 1},
46 {"matrix": [1, 5], "x": 5, "y": 1},
47 {"matrix": [1, 6], "x": 6, "y": 1},
48 {"matrix": [1, 7], "x": 7, "y": 1},
49 {"matrix": [1, 8], "x": 8, "y": 1},
50 {"matrix": [1, 9], "x": 9, "y": 1},
51 {"matrix": [1, 10], "x": 10, "y": 1},
52 {"matrix": [1, 11], "x": 11, "y": 1},
53 {"matrix": [1, 12], "x": 12, "y": 1},
54 {"matrix": [1, 13], "x": 13, "y": 1},
55
56 {"matrix": [2, 0], "x": 0, "y": 2},
57 {"matrix": [2, 1], "x": 1, "y": 2},
58 {"matrix": [2, 2], "x": 2, "y": 2},
59 {"matrix": [2, 3], "x": 3, "y": 2},
60 {"matrix": [2, 4], "x": 4, "y": 2},
61 {"matrix": [2, 5], "x": 5, "y": 2},
62 {"matrix": [2, 6], "x": 6, "y": 2},
63 {"matrix": [2, 7], "x": 7, "y": 2},
64 {"matrix": [2, 8], "x": 8, "y": 2},
65 {"matrix": [2, 9], "x": 9, "y": 2},
66 {"matrix": [2, 10], "x": 10, "y": 2},
67 {"matrix": [2, 11], "x": 11, "y": 2},
68 {"matrix": [2, 12], "x": 12, "y": 2},
69 {"matrix": [2, 13], "x": 13, "y": 2},
70
71 {"matrix": [3, 0], "x": 0, "y": 3},
72 {"matrix": [3, 1], "x": 1, "y": 3},
73 {"matrix": [3, 2], "x": 2, "y": 3},
74 {"matrix": [3, 3], "x": 3, "y": 3},
75 {"matrix": [3, 4], "x": 4, "y": 3},
76 {"matrix": [3, 5], "x": 5, "y": 3},
77 {"matrix": [3, 6], "x": 6, "y": 3},
78 {"matrix": [3, 7], "x": 7, "y": 3},
79 {"matrix": [3, 8], "x": 8, "y": 3},
80 {"matrix": [3, 9], "x": 9, "y": 3},
81 {"matrix": [3, 10], "x": 10, "y": 3},
82 {"matrix": [3, 11], "x": 11, "y": 3},
83 {"matrix": [3, 12], "x": 12, "y": 3},
84 {"matrix": [3, 13], "x": 13, "y": 3},
85
86 {"matrix": [4, 0], "x": 0, "y": 4},
87 {"matrix": [4, 1], "x": 1, "y": 4},
88 {"matrix": [4, 2], "x": 2, "y": 4},
89 {"matrix": [4, 3], "x": 3, "y": 4},
90 {"matrix": [4, 4], "x": 4, "y": 4},
91 {"matrix": [4, 5], "x": 5, "y": 4},
92 {"matrix": [4, 6], "x": 6, "y": 4},
93 {"matrix": [4, 7], "x": 7, "y": 4},
94 {"matrix": [4, 8], "x": 8, "y": 4},
95 {"matrix": [4, 9], "x": 9, "y": 4},
96 {"matrix": [4, 10], "x": 10, "y": 4},
97 {"matrix": [4, 11], "x": 11, "y": 4},
98 {"matrix": [4, 12], "x": 12, "y": 4},
99 {"matrix": [4, 13], "x": 13, "y": 4}
100 ]
101 }
102 }
103}
diff --git a/keyboards/p3d/spacey/keymaps/default/keymap.c b/keyboards/p3d/spacey/keymaps/default/keymap.c
new file mode 100644
index 0000000000..8d0b138390
--- /dev/null
+++ b/keyboards/p3d/spacey/keymaps/default/keymap.c
@@ -0,0 +1,47 @@
1/* Copyright 2021 vanilla
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#define FN MO(_FN)
18
19// Defines names for use in layer keycodes and the keymap
20enum layer_names {
21 _BASE = 0,
22 _FN
23};
24
25// Defines the keycodes used by our macros in process_record_user
26enum custom_keycodes {
27 QMKBEST = SAFE_RANGE,
28 QMKURL
29};
30
31const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
32 /* Base */
33 [_BASE] = LAYOUT(
34 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,
35 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,
36 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_UP,
37 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_LEFT, KC_DOWN,
38 KC_LCTL, KC_LGUI, FN, KC_MUTE, KC_LALT, KC_SPC, KC_NO, KC_BSPC, KC_DEL, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, KC_RGHT
39 ),
40 [_FN] = LAYOUT(
41 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_BSPC,
42 KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL,
43 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_ENT, KC_MS_U,
44 KC_LSFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_COMM,KC_DOT,KC_SLSH,KC_RSFT, KC_MS_L, KC_MS_D,
45 KC_LCTL, KC_LGUI, KC_NO, KC_ESC, KC_LALT, KC_SPC, KC_NO, KC_BSPC, KC_RALT, KC_NO, KC_APP, KC_RGUI, KC_RCTL, KC_MS_R
46 )
47};
diff --git a/keyboards/p3d/spacey/keymaps/default/readme.md b/keyboards/p3d/spacey/keymaps/default/readme.md
new file mode 100644
index 0000000000..808ab68264
--- /dev/null
+++ b/keyboards/p3d/spacey/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for spacey
diff --git a/keyboards/p3d/spacey/keymaps/via/keymap.c b/keyboards/p3d/spacey/keymaps/via/keymap.c
new file mode 100644
index 0000000000..17dec84fc7
--- /dev/null
+++ b/keyboards/p3d/spacey/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
1/* Copyright 2021 vanilla
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 /* Base */
20 [0] = LAYOUT(
21 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,
22 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,
23 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_UP,
24 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_LEFT, KC_DOWN,
25 KC_LCTL, KC_LGUI, MO(1), KC_MUTE, KC_LALT, KC_SPC, KC_NO, KC_BSPC, KC_DEL, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, KC_RGHT
26 ),
27 [1] = LAYOUT(
28 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_BSPC,
29 KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL,
30 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_ENT, KC_MS_U,
31 KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_COMM,KC_DOT,KC_SLSH,KC_RSFT, KC_MS_L, KC_MS_D,
32 KC_LCTL, KC_LGUI, KC_NO, KC_ESC, KC_LALT, KC_SPC, KC_NO, KC_BSPC, KC_RALT, KC_NO, KC_APP, KC_RGUI, KC_RCTL, KC_MS_R
33 ),
34 [2] = LAYOUT(
35 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
36 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
39 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
40 ),
41 [3] = LAYOUT(
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
43 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
46 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
47 )
48};
diff --git a/keyboards/p3d/spacey/keymaps/via/rules.mk b/keyboards/p3d/spacey/keymaps/via/rules.mk
new file mode 100644
index 0000000000..43061db1dd
--- /dev/null
+++ b/keyboards/p3d/spacey/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2LTO_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/p3d/spacey/readme.md b/keyboards/p3d/spacey/readme.md
new file mode 100644
index 0000000000..252cc39f86
--- /dev/null
+++ b/keyboards/p3d/spacey/readme.md
@@ -0,0 +1,19 @@
1# spacey
2
3![spacey](https://i.imgur.com/Dzon2hbh.jpeg)
4
5Spacey, designed by Vanilla Keyboards is a 45/65% keyboard with a little personality. Hosting ortholinear alphas with traditional modifiers, diamond shaped arrows, rotary encoder, and a couple optional spacebars at the top of the board, it's a balance between functional and unique.
6
7* Keyboard Maintainer: [vanilla](https://github.com/vanillakeyboards)
8* Hardware Supported: Elite C, Spacey PCB plates and acrylic drop_in case
9* Hardware Availability: [P3D Store](https://p3dstore.com/collections/ended-group-buys/products/spacey?variant=37742593147064)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make p3d/spacey:default
14
15Flashing example for this keyboard:
16
17 make p3d/spacey:default:flash
18
19See 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/p3d/spacey/rules.mk b/keyboards/p3d/spacey/rules.mk
new file mode 100644
index 0000000000..b03b6fa905
--- /dev/null
+++ b/keyboards/p3d/spacey/rules.mk
@@ -0,0 +1,13 @@
1# Build Options
2# change yes to no to disable
3#
4BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
5MOUSEKEY_ENABLE = yes # Mouse keys
6EXTRAKEY_ENABLE = yes # Audio control and System control
7CONSOLE_ENABLE = no # Console for debug
8COMMAND_ENABLE = no # Commands for debug and configuration
9NKRO_ENABLE = no # Enable N-Key Rollover
10BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
11RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
12AUDIO_ENABLE = no # Audio output
13ENCODER_ENABLE = yes
diff --git a/keyboards/p3d/synapse/config.h b/keyboards/p3d/synapse/config.h
new file mode 100644
index 0000000000..9f86bdabd7
--- /dev/null
+++ b/keyboards/p3d/synapse/config.h
@@ -0,0 +1,19 @@
1/* Copyright 2021 qpockets
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#define LOCKING_SUPPORT_ENABLE
diff --git a/keyboards/p3d/synapse/info.json b/keyboards/p3d/synapse/info.json
new file mode 100644
index 0000000000..85659dc8a5
--- /dev/null
+++ b/keyboards/p3d/synapse/info.json
@@ -0,0 +1,121 @@
1{
2 "keyboard_name": "synapse",
3 "manufacturer": "drmmr",
4 "url": "",
5 "maintainer": "qpockets",
6 "usb": {
7 "vid": "0x7170",
8 "pid": "0x5359",
9 "device_version": "0.0.1"
10 },
11 "matrix_pins": {
12 "cols": ["F0", "D4", "F5", "B1", "B2", "B3", "B7", "D0", "D1", "D2", "D3", "B6"],
13 "rows": ["E6", "B0", "F4", "F1"]
14 },
15 "diode_direction": "COL2ROW",
16 "encoder": {
17 "rotary": [
18 {"pin_a": "D7", "pin_b": "D6"},
19 {"pin_a": "C7", "pin_b": "C6"}
20 ]
21 },
22 "processor": "atmega32u4",
23 "bootloader": "atmel-dfu",
24 "layouts": {
25 "LAYOUT_7u_space": {
26 "layout": [
27 {"matrix": [0, 0], "x": 0, "y": 0},
28 {"matrix": [0, 1], "x": 1, "y": 0},
29 {"matrix": [0, 2], "x": 2, "y": 0},
30 {"matrix": [0, 3], "x": 3, "y": 0},
31 {"matrix": [0, 4], "x": 4, "y": 0},
32 {"matrix": [0, 5], "x": 5, "y": 0},
33 {"matrix": [0, 6], "x": 6, "y": 0},
34 {"matrix": [0, 7], "x": 7, "y": 0},
35 {"matrix": [0, 8], "x": 8, "y": 0},
36 {"matrix": [0, 9], "x": 9, "y": 0},
37 {"matrix": [0, 10], "x": 10, "y": 0},
38 {"matrix": [0, 11], "x": 11, "y": 0},
39
40 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
41 {"matrix": [1, 1], "x": 1.25, "y": 1},
42 {"matrix": [1, 2], "x": 2.25, "y": 1},
43 {"matrix": [1, 3], "x": 3.25, "y": 1},
44 {"matrix": [1, 4], "x": 4.25, "y": 1},
45 {"matrix": [1, 5], "x": 5.25, "y": 1},
46 {"matrix": [1, 6], "x": 6.25, "y": 1},
47 {"matrix": [1, 7], "x": 7.25, "y": 1},
48 {"matrix": [1, 8], "x": 8.25, "y": 1},
49 {"matrix": [1, 9], "x": 9.25, "y": 1},
50 {"matrix": [1, 10], "x": 10.25, "y": 1, "w": 1.75},
51
52 {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
53 {"matrix": [2, 1], "x": 1.75, "y": 2},
54 {"matrix": [2, 2], "x": 2.75, "y": 2},
55 {"matrix": [2, 3], "x": 3.75, "y": 2},
56 {"matrix": [2, 4], "x": 4.75, "y": 2},
57 {"matrix": [2, 5], "x": 5.75, "y": 2},
58 {"matrix": [2, 6], "x": 6.75, "y": 2},
59 {"matrix": [2, 7], "x": 7.75, "y": 2},
60 {"matrix": [2, 8], "x": 8.75, "y": 2},
61 {"matrix": [2, 9], "x": 9.75, "y": 2},
62 {"matrix": [2, 10], "x": 10.75, "y": 2, "w": 1.25},
63
64 {"matrix": [3, 0], "x": 0, "y": 3},
65 {"matrix": [3, 1], "x": 1, "y": 3, "w": 1.5},
66 {"matrix": [3, 3], "x": 2.5, "y": 3, "w": 7},
67 {"matrix": [3, 9], "x": 9.5, "y": 3, "w": 1.5},
68 {"matrix": [3, 10], "x": 11, "y": 3}
69 ]
70 },
71 "LAYOUT_default": {
72 "layout": [
73 {"matrix": [0, 0], "x": 0, "y": 0},
74 {"matrix": [0, 1], "x": 1, "y": 0},
75 {"matrix": [0, 2], "x": 2, "y": 0},
76 {"matrix": [0, 3], "x": 3, "y": 0},
77 {"matrix": [0, 4], "x": 4, "y": 0},
78 {"matrix": [0, 5], "x": 5, "y": 0},
79 {"matrix": [0, 6], "x": 6, "y": 0},
80 {"matrix": [0, 7], "x": 7, "y": 0},
81 {"matrix": [0, 8], "x": 8, "y": 0},
82 {"matrix": [0, 9], "x": 9, "y": 0},
83 {"matrix": [0, 10], "x": 10, "y": 0},
84 {"matrix": [0, 11], "x": 11, "y": 0},
85
86 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
87 {"matrix": [1, 1], "x": 1.25, "y": 1},
88 {"matrix": [1, 2], "x": 2.25, "y": 1},
89 {"matrix": [1, 3], "x": 3.25, "y": 1},
90 {"matrix": [1, 4], "x": 4.25, "y": 1},
91 {"matrix": [1, 5], "x": 5.25, "y": 1},
92 {"matrix": [1, 6], "x": 6.25, "y": 1},
93 {"matrix": [1, 7], "x": 7.25, "y": 1},
94 {"matrix": [1, 8], "x": 8.25, "y": 1},
95 {"matrix": [1, 9], "x": 9.25, "y": 1},
96 {"matrix": [1, 10], "x": 10.25, "y": 1, "w": 1.75},
97
98 {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
99 {"matrix": [2, 1], "x": 1.75, "y": 2},
100 {"matrix": [2, 2], "x": 2.75, "y": 2},
101 {"matrix": [2, 3], "x": 3.75, "y": 2},
102 {"matrix": [2, 4], "x": 4.75, "y": 2},
103 {"matrix": [2, 5], "x": 5.75, "y": 2},
104 {"matrix": [2, 6], "x": 6.75, "y": 2},
105 {"matrix": [2, 7], "x": 7.75, "y": 2},
106 {"matrix": [2, 8], "x": 8.75, "y": 2},
107 {"matrix": [2, 9], "x": 9.75, "y": 2},
108 {"matrix": [2, 10], "x": 10.75, "y": 2, "w": 1.25},
109
110 {"matrix": [3, 0], "x": 0, "y": 3},
111 {"matrix": [3, 1], "x": 1, "y": 3},
112 {"matrix": [3, 2], "x": 2, "y": 3},
113 {"matrix": [3, 3], "x": 3, "y": 3, "w": 3},
114 {"matrix": [3, 6], "x": 6, "y": 3, "w": 3},
115 {"matrix": [3, 8], "x": 9, "y": 3},
116 {"matrix": [3, 9], "x": 10, "y": 3},
117 {"matrix": [3, 10], "x": 11, "y": 3}
118 ]
119 }
120 }
121}
diff --git a/keyboards/p3d/synapse/keymaps/7u_space/config.h b/keyboards/p3d/synapse/keymaps/7u_space/config.h
new file mode 100644
index 0000000000..e398cb5b2d
--- /dev/null
+++ b/keyboards/p3d/synapse/keymaps/7u_space/config.h
@@ -0,0 +1,25 @@
1/* Copyright 2021 qpockets
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/*Modtaps*/
20#define TAPPING_TERM 165
21
22/*Combos*/
23#ifdef COMBO_ENABLE
24# define COMBO_TERM 50
25#endif
diff --git a/keyboards/p3d/synapse/keymaps/7u_space/keymap.c b/keyboards/p3d/synapse/keymaps/7u_space/keymap.c
new file mode 100644
index 0000000000..b530e91c78
--- /dev/null
+++ b/keyboards/p3d/synapse/keymaps/7u_space/keymap.c
@@ -0,0 +1,77 @@
1/* Copyright 2021 qpockets
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 _BASE,
21 _SYM,
22 _NAV
23};
24
25enum combo_events {
26 COMBO_BSPC,
27 COMBO_ENT,
28 COMBO_TAB,
29 COMBO_ESC,
30 COMBO_DEL
31};
32#define KC_DN_CTL LT(_NAV, KC_LCTL)
33#define KC_UP_SPC LT(_SYM, KC_SPC)
34#define KC_SF LSFT_T(KC_F)
35#define KC_SJ RSFT_T(KC_J)
36
37const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38 [_BASE] = LAYOUT_7u_space(
39 KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
40 KC_TAB, KC_A, KC_S, KC_D, KC_SF, KC_G, KC_H, KC_SJ, KC_K, KC_L, KC_QUOT,
41 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
42 KC_LGUI, KC_DN_CTL, KC_UP_SPC, KC_RALT, KC_RGUI
43 ),
44
45 [_SYM] = LAYOUT_7u_space(
46 KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
47 KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,
48 KC_TRNS, KC_PIPE, KC_BSLS, KC_LPRN, KC_LBRC, KC_SCLN, KC_COLN, KC_RBRC, KC_RPRN, KC_PLUS, KC_UNDS,
49 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
50 ),
51
52 [_NAV] = LAYOUT_7u_space(
53 QK_BOOT, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_F1, KC_F2, KC_F3, KC_F4, KC_BSPC, KC_TRNS,
54 KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, KC_F4, KC_F5, KC_F6, KC_F7, KC_TAB,
55 KC_LCAP, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_ENT,
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
57 ),
58};
59
60
61
62
63#ifdef COMBO_ENABLE
64const uint16_t PROGMEM combo_bspc[] = {KC_O, KC_P, COMBO_END};
65const uint16_t PROGMEM combo_ent[] = {KC_K, KC_L, COMBO_END};
66const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
67const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
68const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};
69
70combo_t key_combos[] = {
71 [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
72 [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
73 [COMBO_TAB] = COMBO(combo_tab,KC_TAB),
74 [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
75 [COMBO_DEL] = COMBO(combo_del,KC_DEL)
76};
77#endif
diff --git a/keyboards/p3d/synapse/keymaps/7u_space/rules.mk b/keyboards/p3d/synapse/keymaps/7u_space/rules.mk
new file mode 100644
index 0000000000..ab1e438182
--- /dev/null
+++ b/keyboards/p3d/synapse/keymaps/7u_space/rules.mk
@@ -0,0 +1 @@
COMBO_ENABLE = yes
diff --git a/keyboards/p3d/synapse/keymaps/default/config.h b/keyboards/p3d/synapse/keymaps/default/config.h
new file mode 100644
index 0000000000..e398cb5b2d
--- /dev/null
+++ b/keyboards/p3d/synapse/keymaps/default/config.h
@@ -0,0 +1,25 @@
1/* Copyright 2021 qpockets
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/*Modtaps*/
20#define TAPPING_TERM 165
21
22/*Combos*/
23#ifdef COMBO_ENABLE
24# define COMBO_TERM 50
25#endif
diff --git a/keyboards/p3d/synapse/keymaps/default/keymap.c b/keyboards/p3d/synapse/keymaps/default/keymap.c
new file mode 100644
index 0000000000..3428272ee9
--- /dev/null
+++ b/keyboards/p3d/synapse/keymaps/default/keymap.c
@@ -0,0 +1,77 @@
1/* Copyright 2021 qpockets
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 _BASE,
21 _SYM,
22 _NAV
23};
24
25enum combo_events {
26 COMBO_BSPC,
27 COMBO_ENT,
28 COMBO_TAB,
29 COMBO_ESC,
30 COMBO_DEL
31};
32#define KC_DN_BSPC LT(_NAV, KC_BSPC)
33#define KC_UP_SPC LT(_SYM, KC_SPC)
34#define KC_SF LSFT_T(KC_F)
35#define KC_SJ RSFT_T(KC_J)
36
37const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38 [_BASE] = LAYOUT_default(
39 KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
40 KC_TAB, KC_A, KC_S, KC_D, KC_SF, KC_G, KC_H, KC_SJ, KC_K, KC_L, KC_QUOT,
41 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
42 KC_LALT, KC_LGUI, KC_LCTL, KC_DN_BSPC, KC_UP_SPC, KC_RALT, KC_RGUI, KC_RCTL
43 ),
44
45 [_SYM] = LAYOUT_default(
46 KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
47 KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,
48 KC_TRNS, KC_PIPE, KC_BSLS, KC_LPRN, KC_LBRC, KC_SCLN, KC_COLN, KC_RBRC, KC_RPRN, KC_PLUS, KC_UNDS,
49 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
50 ),
51
52 [_NAV] = LAYOUT_default(
53 QK_BOOT, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_F1, KC_F2, KC_F3, KC_F4, KC_BSPC, KC_TRNS,
54 KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, KC_F4, KC_F5, KC_F6, KC_F7, KC_TAB,
55 KC_LCAP, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_ENT,
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
57 ),
58};
59
60
61
62
63#ifdef COMBO_ENABLE
64const uint16_t PROGMEM combo_bspc[] = {KC_O, KC_P, COMBO_END};
65const uint16_t PROGMEM combo_ent[] = {KC_K, KC_L, COMBO_END};
66const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
67const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
68const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};
69
70combo_t key_combos[] = {
71 [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
72 [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
73 [COMBO_TAB] = COMBO(combo_tab,KC_TAB),
74 [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
75 [COMBO_DEL] = COMBO(combo_del,KC_DEL)
76};
77#endif
diff --git a/keyboards/p3d/synapse/keymaps/default/rules.mk b/keyboards/p3d/synapse/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ab1e438182
--- /dev/null
+++ b/keyboards/p3d/synapse/keymaps/default/rules.mk
@@ -0,0 +1 @@
COMBO_ENABLE = yes
diff --git a/keyboards/p3d/synapse/readme.md b/keyboards/p3d/synapse/readme.md
new file mode 100644
index 0000000000..8de1e779d5
--- /dev/null
+++ b/keyboards/p3d/synapse/readme.md
@@ -0,0 +1,27 @@
1# synapse
2
3![synapse](https://i.imgur.com/OQNNPBhh.jpg)
4
5Stagger PCB for Cervello!
6
7* Keyboard Maintainer: https://github.com/qpockets
8* Hardware Availability: [P3D Store](https://p3dstore.com/products/cervello-acrylic-keyboard-case-and-pcb-group-buy?_pos=4&_sid=fd078da46&_ss=r&variant=40398412677304) Group Buy
9
10Make example for this keyboard (after setting up your build environment):
11
12 make p3d/synapse:default
13
14Flashing example for this keyboard:
15
16 make p3d/synapse:default:flash
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).
19
20## Bootloader
21
22Enter the bootloader in 3 ways:
23
24* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
25* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
26* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
27*
diff --git a/keyboards/p3d/synapse/rules.mk b/keyboards/p3d/synapse/rules.mk
new file mode 100644
index 0000000000..ebe0d0e0e3
--- /dev/null
+++ b/keyboards/p3d/synapse/rules.mk
@@ -0,0 +1,13 @@
1# Build Options
2# change yes to no to disable
3#
4BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
5MOUSEKEY_ENABLE = yes # Mouse keys
6EXTRAKEY_ENABLE = yes # Audio control and System control
7CONSOLE_ENABLE = no # Console for debug
8COMMAND_ENABLE = no # Commands for debug and configuration
9NKRO_ENABLE = yes # Enable N-Key Rollover
10BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
11RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
12AUDIO_ENABLE = no # Audio output
13ENCODER_ENABLE = yes
diff --git a/keyboards/p3d/synapse/synapse.c b/keyboards/p3d/synapse/synapse.c
new file mode 100644
index 0000000000..0b532eaab6
--- /dev/null
+++ b/keyboards/p3d/synapse/synapse.c
@@ -0,0 +1,35 @@
1/* Copyright 2021 qpockets
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 "quantum.h"
18
19bool encoder_update_kb(uint8_t index, bool clockwise) {
20 if (!encoder_update_user(index, clockwise)) { return false; }
21 if (index == 1) { /* left encoder*/
22 if (clockwise){
23 tap_code(KC_WH_U);
24 } else {
25 tap_code(KC_WH_D);
26 }
27 } else if (index == 0) { /* right encoder */
28 if (clockwise){
29 tap_code(KC_VOLU);
30 } else {
31 tap_code(KC_VOLD);
32 }
33 }
34 return true;
35}
diff --git a/keyboards/p3d/tw40/config.h b/keyboards/p3d/tw40/config.h
new file mode 100644
index 0000000000..99549d9efa
--- /dev/null
+++ b/keyboards/p3d/tw40/config.h
@@ -0,0 +1,22 @@
1/*
2Copyright 2020 KnoblesseOblige
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#define LOCKING_SUPPORT_ENABLE
21
22#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/p3d/tw40/info.json b/keyboards/p3d/tw40/info.json
new file mode 100644
index 0000000000..79f3d7fbaa
--- /dev/null
+++ b/keyboards/p3d/tw40/info.json
@@ -0,0 +1,993 @@
1{
2 "keyboard_name": "TW40",
3 "manufacturer": "KnoblesseOblige",
4 "url": "https://p3dstore.com/products/tw40-gb",
5 "maintainer": "KnoblesseOblige",
6 "usb": {
7 "vid": "0x503D",
8 "pid": "0x5457",
9 "device_version": "0.0.1"
10 },
11 "rgblight": {
12 "led_count": 15,
13 "animations": {
14 "breathing": true,
15 "rainbow_mood": true,
16 "rainbow_swirl": true,
17 "snake": true,
18 "knight": true,
19 "christmas": true,
20 "static_gradient": true,
21 "rgb_test": true,
22 "alternating": true,
23 "twinkle": true
24 }
25 },
26 "ws2812": {
27 "pin": "E6"
28 },
29 "matrix_pins": {
30 "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"],
31 "rows": ["B0", "D5", "D3", "D2"]
32 },
33 "diode_direction": "COL2ROW",
34 "processor": "atmega32u4",
35 "bootloader": "atmel-dfu",
36 "layouts": {
37 "LAYOUT_all": {
38 "layout": [
39 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
40 {"matrix": [0, 1], "x": 1.5, "y": 0},
41 {"matrix": [0, 2], "x": 2.5, "y": 0},
42 {"matrix": [0, 3], "x": 3.5, "y": 0},
43 {"matrix": [0, 4], "x": 4.5, "y": 0},
44 {"matrix": [0, 5], "x": 5.5, "y": 0},
45 {"matrix": [0, 6], "x": 6.5, "y": 0},
46 {"matrix": [0, 7], "x": 7.5, "y": 0},
47 {"matrix": [0, 8], "x": 8.5, "y": 0},
48 {"matrix": [0, 9], "x": 9.5, "y": 0},
49 {"matrix": [0, 10], "x": 10.5, "y": 0},
50 {"matrix": [0, 11], "x": 11.5, "y": 0},
51 {"matrix": [0, 12], "x": 12.5, "y": 0},
52 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
53
54 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
55 {"matrix": [1, 1], "x": 1.75, "y": 1},
56 {"matrix": [1, 2], "x": 2.75, "y": 1},
57 {"matrix": [1, 3], "x": 3.75, "y": 1},
58 {"matrix": [1, 4], "x": 4.75, "y": 1},
59 {"matrix": [1, 5], "x": 5.75, "y": 1},
60 {"matrix": [1, 6], "x": 6.75, "y": 1},
61 {"matrix": [1, 7], "x": 7.75, "y": 1},
62 {"matrix": [1, 8], "x": 8.75, "y": 1},
63 {"matrix": [1, 9], "x": 9.75, "y": 1},
64 {"matrix": [1, 10], "x": 10.75, "y": 1},
65 {"matrix": [1, 11], "x": 11.75, "y": 1},
66 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
67
68 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
69 {"matrix": [2, 1], "x": 2.25, "y": 2},
70 {"matrix": [2, 2], "x": 3.25, "y": 2},
71 {"matrix": [2, 3], "x": 4.25, "y": 2},
72 {"matrix": [2, 4], "x": 5.25, "y": 2},
73 {"matrix": [2, 5], "x": 6.25, "y": 2},
74 {"matrix": [2, 6], "x": 7.25, "y": 2},
75 {"matrix": [2, 7], "x": 8.25, "y": 2},
76 {"matrix": [2, 8], "x": 9.25, "y": 2},
77 {"matrix": [2, 9], "x": 10.25, "y": 2},
78 {"matrix": [2, 11], "x": 11.25, "y": 2, "w": 1.75},
79 {"matrix": [2, 12], "x": 13, "y": 2},
80 {"matrix": [2, 13], "x": 14, "y": 2},
81
82 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
83 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
84 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
85 {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.25},
86 {"matrix": [3, 4], "x": 5, "y": 3, "w": 2.25},
87 {"matrix": [3, 5], "x": 7.25, "y": 3, "w": 1.25},
88 {"matrix": [3, 6], "x": 8.5, "y": 3, "w": 1.5},
89 {"matrix": [3, 9], "x": 10, "y": 3},
90 {"matrix": [3, 10], "x": 11, "y": 3},
91 {"matrix": [3, 11], "x": 12, "y": 3},
92 {"matrix": [3, 12], "x": 13, "y": 3},
93 {"matrix": [3, 13], "x": 14, "y": 3}
94 ]
95 },
96 "LAYOUT_3_split_space_standard_rshift_4x_125": {
97 "layout": [
98 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
99 {"matrix": [0, 1], "x": 1.5, "y": 0},
100 {"matrix": [0, 2], "x": 2.5, "y": 0},
101 {"matrix": [0, 3], "x": 3.5, "y": 0},
102 {"matrix": [0, 4], "x": 4.5, "y": 0},
103 {"matrix": [0, 5], "x": 5.5, "y": 0},
104 {"matrix": [0, 6], "x": 6.5, "y": 0},
105 {"matrix": [0, 7], "x": 7.5, "y": 0},
106 {"matrix": [0, 8], "x": 8.5, "y": 0},
107 {"matrix": [0, 9], "x": 9.5, "y": 0},
108 {"matrix": [0, 10], "x": 10.5, "y": 0},
109 {"matrix": [0, 11], "x": 11.5, "y": 0},
110 {"matrix": [0, 12], "x": 12.5, "y": 0},
111 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
112
113 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
114 {"matrix": [1, 1], "x": 1.75, "y": 1},
115 {"matrix": [1, 2], "x": 2.75, "y": 1},
116 {"matrix": [1, 3], "x": 3.75, "y": 1},
117 {"matrix": [1, 4], "x": 4.75, "y": 1},
118 {"matrix": [1, 5], "x": 5.75, "y": 1},
119 {"matrix": [1, 6], "x": 6.75, "y": 1},
120 {"matrix": [1, 7], "x": 7.75, "y": 1},
121 {"matrix": [1, 8], "x": 8.75, "y": 1},
122 {"matrix": [1, 9], "x": 9.75, "y": 1},
123 {"matrix": [1, 10], "x": 10.75, "y": 1},
124 {"matrix": [1, 11], "x": 11.75, "y": 1},
125 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
126
127 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
128 {"matrix": [2, 1], "x": 2.25, "y": 2},
129 {"matrix": [2, 2], "x": 3.25, "y": 2},
130 {"matrix": [2, 3], "x": 4.25, "y": 2},
131 {"matrix": [2, 4], "x": 5.25, "y": 2},
132 {"matrix": [2, 5], "x": 6.25, "y": 2},
133 {"matrix": [2, 6], "x": 7.25, "y": 2},
134 {"matrix": [2, 7], "x": 8.25, "y": 2},
135 {"matrix": [2, 8], "x": 9.25, "y": 2},
136 {"matrix": [2, 9], "x": 10.25, "y": 2},
137 {"matrix": [2, 11], "x": 11.25, "y": 2},
138 {"matrix": [2, 12], "x": 12.25, "y": 2, "w": 2.75},
139
140 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
141 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
142 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
143 {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 2.25},
144 {"matrix": [3, 4], "x": 6, "y": 3, "w": 1.25},
145 {"matrix": [3, 6], "x": 7.25, "y": 3, "w": 2.75},
146 {"matrix": [3, 9], "x": 10, "y": 3, "w": 1.25},
147 {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.25},
148 {"matrix": [3, 12], "x": 12.5, "y": 3, "w": 1.25},
149 {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25}
150 ]
151 },
152 "LAYOUT_3_split_space_standard_rshift_5x_100": {
153 "layout": [
154 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
155 {"matrix": [0, 1], "x": 1.5, "y": 0},
156 {"matrix": [0, 2], "x": 2.5, "y": 0},
157 {"matrix": [0, 3], "x": 3.5, "y": 0},
158 {"matrix": [0, 4], "x": 4.5, "y": 0},
159 {"matrix": [0, 5], "x": 5.5, "y": 0},
160 {"matrix": [0, 6], "x": 6.5, "y": 0},
161 {"matrix": [0, 7], "x": 7.5, "y": 0},
162 {"matrix": [0, 8], "x": 8.5, "y": 0},
163 {"matrix": [0, 9], "x": 9.5, "y": 0},
164 {"matrix": [0, 10], "x": 10.5, "y": 0},
165 {"matrix": [0, 11], "x": 11.5, "y": 0},
166 {"matrix": [0, 12], "x": 12.5, "y": 0},
167 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
168
169 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
170 {"matrix": [1, 1], "x": 1.75, "y": 1},
171 {"matrix": [1, 2], "x": 2.75, "y": 1},
172 {"matrix": [1, 3], "x": 3.75, "y": 1},
173 {"matrix": [1, 4], "x": 4.75, "y": 1},
174 {"matrix": [1, 5], "x": 5.75, "y": 1},
175 {"matrix": [1, 6], "x": 6.75, "y": 1},
176 {"matrix": [1, 7], "x": 7.75, "y": 1},
177 {"matrix": [1, 8], "x": 8.75, "y": 1},
178 {"matrix": [1, 9], "x": 9.75, "y": 1},
179 {"matrix": [1, 10], "x": 10.75, "y": 1},
180 {"matrix": [1, 11], "x": 11.75, "y": 1},
181 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
182
183 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
184 {"matrix": [2, 1], "x": 2.25, "y": 2},
185 {"matrix": [2, 2], "x": 3.25, "y": 2},
186 {"matrix": [2, 3], "x": 4.25, "y": 2},
187 {"matrix": [2, 4], "x": 5.25, "y": 2},
188 {"matrix": [2, 5], "x": 6.25, "y": 2},
189 {"matrix": [2, 6], "x": 7.25, "y": 2},
190 {"matrix": [2, 7], "x": 8.25, "y": 2},
191 {"matrix": [2, 8], "x": 9.25, "y": 2},
192 {"matrix": [2, 9], "x": 10.25, "y": 2},
193 {"matrix": [2, 11], "x": 11.25, "y": 2},
194 {"matrix": [2, 12], "x": 12.25, "y": 2, "w": 2.75},
195
196 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
197 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
198 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
199 {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 2.25},
200 {"matrix": [3, 4], "x": 6, "y": 3, "w": 1.25},
201 {"matrix": [3, 6], "x": 7.25, "y": 3, "w": 2.75},
202 {"matrix": [3, 9], "x": 10, "y": 3},
203 {"matrix": [3, 10], "x": 11, "y": 3},
204 {"matrix": [3, 11], "x": 12, "y": 3},
205 {"matrix": [3, 12], "x": 13, "y": 3},
206 {"matrix": [3, 13], "x": 14, "y": 3}
207 ]
208 },
209 "LAYOUT_3_split_space_split_rshift_4x_125": {
210 "layout": [
211 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
212 {"matrix": [0, 1], "x": 1.5, "y": 0},
213 {"matrix": [0, 2], "x": 2.5, "y": 0},
214 {"matrix": [0, 3], "x": 3.5, "y": 0},
215 {"matrix": [0, 4], "x": 4.5, "y": 0},
216 {"matrix": [0, 5], "x": 5.5, "y": 0},
217 {"matrix": [0, 6], "x": 6.5, "y": 0},
218 {"matrix": [0, 7], "x": 7.5, "y": 0},
219 {"matrix": [0, 8], "x": 8.5, "y": 0},
220 {"matrix": [0, 9], "x": 9.5, "y": 0},
221 {"matrix": [0, 10], "x": 10.5, "y": 0},
222 {"matrix": [0, 11], "x": 11.5, "y": 0},
223 {"matrix": [0, 12], "x": 12.5, "y": 0},
224 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
225
226 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
227 {"matrix": [1, 1], "x": 1.75, "y": 1},
228 {"matrix": [1, 2], "x": 2.75, "y": 1},
229 {"matrix": [1, 3], "x": 3.75, "y": 1},
230 {"matrix": [1, 4], "x": 4.75, "y": 1},
231 {"matrix": [1, 5], "x": 5.75, "y": 1},
232 {"matrix": [1, 6], "x": 6.75, "y": 1},
233 {"matrix": [1, 7], "x": 7.75, "y": 1},
234 {"matrix": [1, 8], "x": 8.75, "y": 1},
235 {"matrix": [1, 9], "x": 9.75, "y": 1},
236 {"matrix": [1, 10], "x": 10.75, "y": 1},
237 {"matrix": [1, 11], "x": 11.75, "y": 1},
238 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
239
240 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
241 {"matrix": [2, 1], "x": 2.25, "y": 2},
242 {"matrix": [2, 2], "x": 3.25, "y": 2},
243 {"matrix": [2, 3], "x": 4.25, "y": 2},
244 {"matrix": [2, 4], "x": 5.25, "y": 2},
245 {"matrix": [2, 5], "x": 6.25, "y": 2},
246 {"matrix": [2, 6], "x": 7.25, "y": 2},
247 {"matrix": [2, 7], "x": 8.25, "y": 2},
248 {"matrix": [2, 8], "x": 9.25, "y": 2},
249 {"matrix": [2, 9], "x": 10.25, "y": 2},
250 {"matrix": [2, 11], "x": 11.25, "y": 2, "w": 1.75},
251 {"matrix": [2, 12], "x": 13, "y": 2},
252 {"matrix": [2, 13], "x": 14, "y": 2},
253
254 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
255 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
256 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
257 {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 2.25},
258 {"matrix": [3, 4], "x": 6, "y": 3, "w": 1.25},
259 {"matrix": [3, 6], "x": 7.25, "y": 3, "w": 2.75},
260 {"matrix": [3, 9], "x": 10, "y": 3, "w": 1.25},
261 {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.25},
262 {"matrix": [3, 12], "x": 12.5, "y": 3, "w": 1.25},
263 {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25}
264 ]
265 },
266 "LAYOUT_3_split_space_split_rshift_5x_100": {
267 "layout": [
268 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
269 {"matrix": [0, 1], "x": 1.5, "y": 0},
270 {"matrix": [0, 2], "x": 2.5, "y": 0},
271 {"matrix": [0, 3], "x": 3.5, "y": 0},
272 {"matrix": [0, 4], "x": 4.5, "y": 0},
273 {"matrix": [0, 5], "x": 5.5, "y": 0},
274 {"matrix": [0, 6], "x": 6.5, "y": 0},
275 {"matrix": [0, 7], "x": 7.5, "y": 0},
276 {"matrix": [0, 8], "x": 8.5, "y": 0},
277 {"matrix": [0, 9], "x": 9.5, "y": 0},
278 {"matrix": [0, 10], "x": 10.5, "y": 0},
279 {"matrix": [0, 11], "x": 11.5, "y": 0},
280 {"matrix": [0, 12], "x": 12.5, "y": 0},
281 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
282
283 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
284 {"matrix": [1, 1], "x": 1.75, "y": 1},
285 {"matrix": [1, 2], "x": 2.75, "y": 1},
286 {"matrix": [1, 3], "x": 3.75, "y": 1},
287 {"matrix": [1, 4], "x": 4.75, "y": 1},
288 {"matrix": [1, 5], "x": 5.75, "y": 1},
289 {"matrix": [1, 6], "x": 6.75, "y": 1},
290 {"matrix": [1, 7], "x": 7.75, "y": 1},
291 {"matrix": [1, 8], "x": 8.75, "y": 1},
292 {"matrix": [1, 9], "x": 9.75, "y": 1},
293 {"matrix": [1, 10], "x": 10.75, "y": 1},
294 {"matrix": [1, 11], "x": 11.75, "y": 1},
295 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
296
297 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
298 {"matrix": [2, 1], "x": 2.25, "y": 2},
299 {"matrix": [2, 2], "x": 3.25, "y": 2},
300 {"matrix": [2, 3], "x": 4.25, "y": 2},
301 {"matrix": [2, 4], "x": 5.25, "y": 2},
302 {"matrix": [2, 5], "x": 6.25, "y": 2},
303 {"matrix": [2, 6], "x": 7.25, "y": 2},
304 {"matrix": [2, 7], "x": 8.25, "y": 2},
305 {"matrix": [2, 8], "x": 9.25, "y": 2},
306 {"matrix": [2, 9], "x": 10.25, "y": 2},
307 {"matrix": [2, 11], "x": 11.25, "y": 2, "w": 1.75},
308 {"matrix": [2, 12], "x": 13, "y": 2},
309 {"matrix": [2, 13], "x": 14, "y": 2},
310
311 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
312 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
313 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
314 {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 2.25},
315 {"matrix": [3, 4], "x": 6, "y": 3, "w": 1.25},
316 {"matrix": [3, 6], "x": 7.25, "y": 3, "w": 2.75},
317 {"matrix": [3, 9], "x": 10, "y": 3},
318 {"matrix": [3, 10], "x": 11, "y": 3},
319 {"matrix": [3, 11], "x": 12, "y": 3},
320 {"matrix": [3, 12], "x": 13, "y": 3},
321 {"matrix": [3, 13], "x": 14, "y": 3}
322 ]
323 },
324 "LAYOUT_4_split_space_standard_rshift_4x_125": {
325 "layout": [
326 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
327 {"matrix": [0, 1], "x": 1.5, "y": 0},
328 {"matrix": [0, 2], "x": 2.5, "y": 0},
329 {"matrix": [0, 3], "x": 3.5, "y": 0},
330 {"matrix": [0, 4], "x": 4.5, "y": 0},
331 {"matrix": [0, 5], "x": 5.5, "y": 0},
332 {"matrix": [0, 6], "x": 6.5, "y": 0},
333 {"matrix": [0, 7], "x": 7.5, "y": 0},
334 {"matrix": [0, 8], "x": 8.5, "y": 0},
335 {"matrix": [0, 9], "x": 9.5, "y": 0},
336 {"matrix": [0, 10], "x": 10.5, "y": 0},
337 {"matrix": [0, 11], "x": 11.5, "y": 0},
338 {"matrix": [0, 12], "x": 12.5, "y": 0},
339 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
340
341 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
342 {"matrix": [1, 1], "x": 1.75, "y": 1},
343 {"matrix": [1, 2], "x": 2.75, "y": 1},
344 {"matrix": [1, 3], "x": 3.75, "y": 1},
345 {"matrix": [1, 4], "x": 4.75, "y": 1},
346 {"matrix": [1, 5], "x": 5.75, "y": 1},
347 {"matrix": [1, 6], "x": 6.75, "y": 1},
348 {"matrix": [1, 7], "x": 7.75, "y": 1},
349 {"matrix": [1, 8], "x": 8.75, "y": 1},
350 {"matrix": [1, 9], "x": 9.75, "y": 1},
351 {"matrix": [1, 10], "x": 10.75, "y": 1},
352 {"matrix": [1, 11], "x": 11.75, "y": 1},
353 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
354
355 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
356 {"matrix": [2, 1], "x": 2.25, "y": 2},
357 {"matrix": [2, 2], "x": 3.25, "y": 2},
358 {"matrix": [2, 3], "x": 4.25, "y": 2},
359 {"matrix": [2, 4], "x": 5.25, "y": 2},
360 {"matrix": [2, 5], "x": 6.25, "y": 2},
361 {"matrix": [2, 6], "x": 7.25, "y": 2},
362 {"matrix": [2, 7], "x": 8.25, "y": 2},
363 {"matrix": [2, 8], "x": 9.25, "y": 2},
364 {"matrix": [2, 9], "x": 10.25, "y": 2},
365 {"matrix": [2, 11], "x": 11.25, "y": 2},
366 {"matrix": [2, 12], "x": 12.25, "y": 2, "w": 2.75},
367
368 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
369 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
370 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
371 {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.25},
372 {"matrix": [3, 4], "x": 5, "y": 3, "w": 2.25},
373 {"matrix": [3, 5], "x": 7.25, "y": 3, "w": 1.25},
374 {"matrix": [3, 6], "x": 8.5, "y": 3, "w": 1.5},
375 {"matrix": [3, 9], "x": 10, "y": 3, "w": 1.25},
376 {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.25},
377 {"matrix": [3, 12], "x": 12.5, "y": 3, "w": 1.25},
378 {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25}
379 ]
380 },
381 "LAYOUT_4_split_space_standard_rshift_5x_100": {
382 "layout": [
383 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
384 {"matrix": [0, 1], "x": 1.5, "y": 0},
385 {"matrix": [0, 2], "x": 2.5, "y": 0},
386 {"matrix": [0, 3], "x": 3.5, "y": 0},
387 {"matrix": [0, 4], "x": 4.5, "y": 0},
388 {"matrix": [0, 5], "x": 5.5, "y": 0},
389 {"matrix": [0, 6], "x": 6.5, "y": 0},
390 {"matrix": [0, 7], "x": 7.5, "y": 0},
391 {"matrix": [0, 8], "x": 8.5, "y": 0},
392 {"matrix": [0, 9], "x": 9.5, "y": 0},
393 {"matrix": [0, 10], "x": 10.5, "y": 0},
394 {"matrix": [0, 11], "x": 11.5, "y": 0},
395 {"matrix": [0, 12], "x": 12.5, "y": 0},
396 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
397
398 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
399 {"matrix": [1, 1], "x": 1.75, "y": 1},
400 {"matrix": [1, 2], "x": 2.75, "y": 1},
401 {"matrix": [1, 3], "x": 3.75, "y": 1},
402 {"matrix": [1, 4], "x": 4.75, "y": 1},
403 {"matrix": [1, 5], "x": 5.75, "y": 1},
404 {"matrix": [1, 6], "x": 6.75, "y": 1},
405 {"matrix": [1, 7], "x": 7.75, "y": 1},
406 {"matrix": [1, 8], "x": 8.75, "y": 1},
407 {"matrix": [1, 9], "x": 9.75, "y": 1},
408 {"matrix": [1, 10], "x": 10.75, "y": 1},
409 {"matrix": [1, 11], "x": 11.75, "y": 1},
410 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
411
412 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
413 {"matrix": [2, 1], "x": 2.25, "y": 2},
414 {"matrix": [2, 2], "x": 3.25, "y": 2},
415 {"matrix": [2, 3], "x": 4.25, "y": 2},
416 {"matrix": [2, 4], "x": 5.25, "y": 2},
417 {"matrix": [2, 5], "x": 6.25, "y": 2},
418 {"matrix": [2, 6], "x": 7.25, "y": 2},
419 {"matrix": [2, 7], "x": 8.25, "y": 2},
420 {"matrix": [2, 8], "x": 9.25, "y": 2},
421 {"matrix": [2, 9], "x": 10.25, "y": 2},
422 {"matrix": [2, 11], "x": 11.25, "y": 2},
423 {"matrix": [2, 12], "x": 12.25, "y": 2, "w": 2.75},
424
425 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
426 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
427 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
428 {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.25},
429 {"matrix": [3, 4], "x": 5, "y": 3, "w": 2.25},
430 {"matrix": [3, 5], "x": 7.25, "y": 3, "w": 1.25},
431 {"matrix": [3, 6], "x": 8.5, "y": 3, "w": 1.5},
432 {"matrix": [3, 9], "x": 10, "y": 3},
433 {"matrix": [3, 10], "x": 11, "y": 3},
434 {"matrix": [3, 11], "x": 12, "y": 3},
435 {"matrix": [3, 12], "x": 13, "y": 3},
436 {"matrix": [3, 13], "x": 14, "y": 3}
437 ]
438 },
439 "LAYOUT_4_split_space_split_rshift_4x_125": {
440 "layout": [
441 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
442 {"matrix": [0, 1], "x": 1.5, "y": 0},
443 {"matrix": [0, 2], "x": 2.5, "y": 0},
444 {"matrix": [0, 3], "x": 3.5, "y": 0},
445 {"matrix": [0, 4], "x": 4.5, "y": 0},
446 {"matrix": [0, 5], "x": 5.5, "y": 0},
447 {"matrix": [0, 6], "x": 6.5, "y": 0},
448 {"matrix": [0, 7], "x": 7.5, "y": 0},
449 {"matrix": [0, 8], "x": 8.5, "y": 0},
450 {"matrix": [0, 9], "x": 9.5, "y": 0},
451 {"matrix": [0, 10], "x": 10.5, "y": 0},
452 {"matrix": [0, 11], "x": 11.5, "y": 0},
453 {"matrix": [0, 12], "x": 12.5, "y": 0},
454 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
455
456 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
457 {"matrix": [1, 1], "x": 1.75, "y": 1},
458 {"matrix": [1, 2], "x": 2.75, "y": 1},
459 {"matrix": [1, 3], "x": 3.75, "y": 1},
460 {"matrix": [1, 4], "x": 4.75, "y": 1},
461 {"matrix": [1, 5], "x": 5.75, "y": 1},
462 {"matrix": [1, 6], "x": 6.75, "y": 1},
463 {"matrix": [1, 7], "x": 7.75, "y": 1},
464 {"matrix": [1, 8], "x": 8.75, "y": 1},
465 {"matrix": [1, 9], "x": 9.75, "y": 1},
466 {"matrix": [1, 10], "x": 10.75, "y": 1},
467 {"matrix": [1, 11], "x": 11.75, "y": 1},
468 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
469
470 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
471 {"matrix": [2, 1], "x": 2.25, "y": 2},
472 {"matrix": [2, 2], "x": 3.25, "y": 2},
473 {"matrix": [2, 3], "x": 4.25, "y": 2},
474 {"matrix": [2, 4], "x": 5.25, "y": 2},
475 {"matrix": [2, 5], "x": 6.25, "y": 2},
476 {"matrix": [2, 6], "x": 7.25, "y": 2},
477 {"matrix": [2, 7], "x": 8.25, "y": 2},
478 {"matrix": [2, 8], "x": 9.25, "y": 2},
479 {"matrix": [2, 9], "x": 10.25, "y": 2},
480 {"matrix": [2, 11], "x": 11.25, "y": 2, "w": 1.75},
481 {"matrix": [2, 12], "x": 13, "y": 2},
482 {"matrix": [2, 13], "x": 14, "y": 2},
483
484 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
485 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
486 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
487 {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.25},
488 {"matrix": [3, 4], "x": 5, "y": 3, "w": 2.25},
489 {"matrix": [3, 5], "x": 7.25, "y": 3, "w": 1.25},
490 {"matrix": [3, 6], "x": 8.5, "y": 3, "w": 1.5},
491 {"matrix": [3, 9], "x": 10, "y": 3, "w": 1.25},
492 {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.25},
493 {"matrix": [3, 12], "x": 12.5, "y": 3, "w": 1.25},
494 {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25}
495 ]
496 },
497 "LAYOUT_4_split_space_split_rshift_5x_100": {
498 "layout": [
499 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
500 {"matrix": [0, 1], "x": 1.5, "y": 0},
501 {"matrix": [0, 2], "x": 2.5, "y": 0},
502 {"matrix": [0, 3], "x": 3.5, "y": 0},
503 {"matrix": [0, 4], "x": 4.5, "y": 0},
504 {"matrix": [0, 5], "x": 5.5, "y": 0},
505 {"matrix": [0, 6], "x": 6.5, "y": 0},
506 {"matrix": [0, 7], "x": 7.5, "y": 0},
507 {"matrix": [0, 8], "x": 8.5, "y": 0},
508 {"matrix": [0, 9], "x": 9.5, "y": 0},
509 {"matrix": [0, 10], "x": 10.5, "y": 0},
510 {"matrix": [0, 11], "x": 11.5, "y": 0},
511 {"matrix": [0, 12], "x": 12.5, "y": 0},
512 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
513
514 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
515 {"matrix": [1, 1], "x": 1.75, "y": 1},
516 {"matrix": [1, 2], "x": 2.75, "y": 1},
517 {"matrix": [1, 3], "x": 3.75, "y": 1},
518 {"matrix": [1, 4], "x": 4.75, "y": 1},
519 {"matrix": [1, 5], "x": 5.75, "y": 1},
520 {"matrix": [1, 6], "x": 6.75, "y": 1},
521 {"matrix": [1, 7], "x": 7.75, "y": 1},
522 {"matrix": [1, 8], "x": 8.75, "y": 1},
523 {"matrix": [1, 9], "x": 9.75, "y": 1},
524 {"matrix": [1, 10], "x": 10.75, "y": 1},
525 {"matrix": [1, 11], "x": 11.75, "y": 1},
526 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
527
528 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
529 {"matrix": [2, 1], "x": 2.25, "y": 2},
530 {"matrix": [2, 2], "x": 3.25, "y": 2},
531 {"matrix": [2, 3], "x": 4.25, "y": 2},
532 {"matrix": [2, 4], "x": 5.25, "y": 2},
533 {"matrix": [2, 5], "x": 6.25, "y": 2},
534 {"matrix": [2, 6], "x": 7.25, "y": 2},
535 {"matrix": [2, 7], "x": 8.25, "y": 2},
536 {"matrix": [2, 8], "x": 9.25, "y": 2},
537 {"matrix": [2, 9], "x": 10.25, "y": 2},
538 {"matrix": [2, 11], "x": 11.25, "y": 2, "w": 1.75},
539 {"matrix": [2, 12], "x": 13, "y": 2},
540 {"matrix": [2, 13], "x": 14, "y": 2},
541
542 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
543 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
544 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
545 {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.25},
546 {"matrix": [3, 4], "x": 5, "y": 3, "w": 2.25},
547 {"matrix": [3, 5], "x": 7.25, "y": 3, "w": 1.25},
548 {"matrix": [3, 6], "x": 8.5, "y": 3, "w": 1.5},
549 {"matrix": [3, 9], "x": 10, "y": 3},
550 {"matrix": [3, 10], "x": 11, "y": 3},
551 {"matrix": [3, 11], "x": 12, "y": 3},
552 {"matrix": [3, 12], "x": 13, "y": 3},
553 {"matrix": [3, 13], "x": 14, "y": 3}
554 ]
555 },
556 "LAYOUT_625_standard_rshift_4x_125": {
557 "layout": [
558 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
559 {"matrix": [0, 1], "x": 1.5, "y": 0},
560 {"matrix": [0, 2], "x": 2.5, "y": 0},
561 {"matrix": [0, 3], "x": 3.5, "y": 0},
562 {"matrix": [0, 4], "x": 4.5, "y": 0},
563 {"matrix": [0, 5], "x": 5.5, "y": 0},
564 {"matrix": [0, 6], "x": 6.5, "y": 0},
565 {"matrix": [0, 7], "x": 7.5, "y": 0},
566 {"matrix": [0, 8], "x": 8.5, "y": 0},
567 {"matrix": [0, 9], "x": 9.5, "y": 0},
568 {"matrix": [0, 10], "x": 10.5, "y": 0},
569 {"matrix": [0, 11], "x": 11.5, "y": 0},
570 {"matrix": [0, 12], "x": 12.5, "y": 0},
571 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
572
573 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
574 {"matrix": [1, 1], "x": 1.75, "y": 1},
575 {"matrix": [1, 2], "x": 2.75, "y": 1},
576 {"matrix": [1, 3], "x": 3.75, "y": 1},
577 {"matrix": [1, 4], "x": 4.75, "y": 1},
578 {"matrix": [1, 5], "x": 5.75, "y": 1},
579 {"matrix": [1, 6], "x": 6.75, "y": 1},
580 {"matrix": [1, 7], "x": 7.75, "y": 1},
581 {"matrix": [1, 8], "x": 8.75, "y": 1},
582 {"matrix": [1, 9], "x": 9.75, "y": 1},
583 {"matrix": [1, 10], "x": 10.75, "y": 1},
584 {"matrix": [1, 11], "x": 11.75, "y": 1},
585 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
586
587 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
588 {"matrix": [2, 1], "x": 2.25, "y": 2},
589 {"matrix": [2, 2], "x": 3.25, "y": 2},
590 {"matrix": [2, 3], "x": 4.25, "y": 2},
591 {"matrix": [2, 4], "x": 5.25, "y": 2},
592 {"matrix": [2, 5], "x": 6.25, "y": 2},
593 {"matrix": [2, 6], "x": 7.25, "y": 2},
594 {"matrix": [2, 7], "x": 8.25, "y": 2},
595 {"matrix": [2, 8], "x": 9.25, "y": 2},
596 {"matrix": [2, 9], "x": 10.25, "y": 2},
597 {"matrix": [2, 11], "x": 11.25, "y": 2},
598 {"matrix": [2, 12], "x": 12.25, "y": 2, "w": 2.75},
599
600 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
601 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
602 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
603 {"matrix": [3, 4], "x": 3.75, "y": 3, "w": 6.25},
604 {"matrix": [3, 9], "x": 10, "y": 3, "w": 1.25},
605 {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.25},
606 {"matrix": [3, 12], "x": 12.5, "y": 3, "w": 1.25},
607 {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25}
608 ]
609 },
610 "LAYOUT_625_standard_rshift_5x_100": {
611 "layout": [
612 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
613 {"matrix": [0, 1], "x": 1.5, "y": 0},
614 {"matrix": [0, 2], "x": 2.5, "y": 0},
615 {"matrix": [0, 3], "x": 3.5, "y": 0},
616 {"matrix": [0, 4], "x": 4.5, "y": 0},
617 {"matrix": [0, 5], "x": 5.5, "y": 0},
618 {"matrix": [0, 6], "x": 6.5, "y": 0},
619 {"matrix": [0, 7], "x": 7.5, "y": 0},
620 {"matrix": [0, 8], "x": 8.5, "y": 0},
621 {"matrix": [0, 9], "x": 9.5, "y": 0},
622 {"matrix": [0, 10], "x": 10.5, "y": 0},
623 {"matrix": [0, 11], "x": 11.5, "y": 0},
624 {"matrix": [0, 12], "x": 12.5, "y": 0},
625 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
626
627 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
628 {"matrix": [1, 1], "x": 1.75, "y": 1},
629 {"matrix": [1, 2], "x": 2.75, "y": 1},
630 {"matrix": [1, 3], "x": 3.75, "y": 1},
631 {"matrix": [1, 4], "x": 4.75, "y": 1},
632 {"matrix": [1, 5], "x": 5.75, "y": 1},
633 {"matrix": [1, 6], "x": 6.75, "y": 1},
634 {"matrix": [1, 7], "x": 7.75, "y": 1},
635 {"matrix": [1, 8], "x": 8.75, "y": 1},
636 {"matrix": [1, 9], "x": 9.75, "y": 1},
637 {"matrix": [1, 10], "x": 10.75, "y": 1},
638 {"matrix": [1, 11], "x": 11.75, "y": 1},
639 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
640
641 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
642 {"matrix": [2, 1], "x": 2.25, "y": 2},
643 {"matrix": [2, 2], "x": 3.25, "y": 2},
644 {"matrix": [2, 3], "x": 4.25, "y": 2},
645 {"matrix": [2, 4], "x": 5.25, "y": 2},
646 {"matrix": [2, 5], "x": 6.25, "y": 2},
647 {"matrix": [2, 6], "x": 7.25, "y": 2},
648 {"matrix": [2, 7], "x": 8.25, "y": 2},
649 {"matrix": [2, 8], "x": 9.25, "y": 2},
650 {"matrix": [2, 9], "x": 10.25, "y": 2},
651 {"matrix": [2, 11], "x": 11.25, "y": 2},
652 {"matrix": [2, 12], "x": 12.25, "y": 2, "w": 2.75},
653
654 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
655 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
656 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
657 {"matrix": [3, 4], "x": 3.75, "y": 3, "w": 6.25},
658 {"matrix": [3, 9], "x": 10, "y": 3},
659 {"matrix": [3, 10], "x": 11, "y": 3},
660 {"matrix": [3, 11], "x": 12, "y": 3},
661 {"matrix": [3, 12], "x": 13, "y": 3},
662 {"matrix": [3, 13], "x": 14, "y": 3}
663 ]
664 },
665 "LAYOUT_625_split_rshift_4x_125": {
666 "layout": [
667 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
668 {"matrix": [0, 1], "x": 1.5, "y": 0},
669 {"matrix": [0, 2], "x": 2.5, "y": 0},
670 {"matrix": [0, 3], "x": 3.5, "y": 0},
671 {"matrix": [0, 4], "x": 4.5, "y": 0},
672 {"matrix": [0, 5], "x": 5.5, "y": 0},
673 {"matrix": [0, 6], "x": 6.5, "y": 0},
674 {"matrix": [0, 7], "x": 7.5, "y": 0},
675 {"matrix": [0, 8], "x": 8.5, "y": 0},
676 {"matrix": [0, 9], "x": 9.5, "y": 0},
677 {"matrix": [0, 10], "x": 10.5, "y": 0},
678 {"matrix": [0, 11], "x": 11.5, "y": 0},
679 {"matrix": [0, 12], "x": 12.5, "y": 0},
680 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
681
682 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
683 {"matrix": [1, 1], "x": 1.75, "y": 1},
684 {"matrix": [1, 2], "x": 2.75, "y": 1},
685 {"matrix": [1, 3], "x": 3.75, "y": 1},
686 {"matrix": [1, 4], "x": 4.75, "y": 1},
687 {"matrix": [1, 5], "x": 5.75, "y": 1},
688 {"matrix": [1, 6], "x": 6.75, "y": 1},
689 {"matrix": [1, 7], "x": 7.75, "y": 1},
690 {"matrix": [1, 8], "x": 8.75, "y": 1},
691 {"matrix": [1, 9], "x": 9.75, "y": 1},
692 {"matrix": [1, 10], "x": 10.75, "y": 1},
693 {"matrix": [1, 11], "x": 11.75, "y": 1},
694 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
695
696 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
697 {"matrix": [2, 1], "x": 2.25, "y": 2},
698 {"matrix": [2, 2], "x": 3.25, "y": 2},
699 {"matrix": [2, 3], "x": 4.25, "y": 2},
700 {"matrix": [2, 4], "x": 5.25, "y": 2},
701 {"matrix": [2, 5], "x": 6.25, "y": 2},
702 {"matrix": [2, 6], "x": 7.25, "y": 2},
703 {"matrix": [2, 7], "x": 8.25, "y": 2},
704 {"matrix": [2, 8], "x": 9.25, "y": 2},
705 {"matrix": [2, 9], "x": 10.25, "y": 2},
706 {"matrix": [2, 11], "x": 11.25, "y": 2, "w": 1.75},
707 {"matrix": [2, 12], "x": 13, "y": 2},
708 {"matrix": [2, 13], "x": 14, "y": 2},
709
710 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
711 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
712 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
713 {"matrix": [3, 4], "x": 3.75, "y": 3, "w": 6.25},
714 {"matrix": [3, 9], "x": 10, "y": 3, "w": 1.25},
715 {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.25},
716 {"matrix": [3, 12], "x": 12.5, "y": 3, "w": 1.25},
717 {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25}
718 ]
719 },
720 "LAYOUT_625_split_rshift_5x_100": {
721 "layout": [
722 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
723 {"matrix": [0, 1], "x": 1.5, "y": 0},
724 {"matrix": [0, 2], "x": 2.5, "y": 0},
725 {"matrix": [0, 3], "x": 3.5, "y": 0},
726 {"matrix": [0, 4], "x": 4.5, "y": 0},
727 {"matrix": [0, 5], "x": 5.5, "y": 0},
728 {"matrix": [0, 6], "x": 6.5, "y": 0},
729 {"matrix": [0, 7], "x": 7.5, "y": 0},
730 {"matrix": [0, 8], "x": 8.5, "y": 0},
731 {"matrix": [0, 9], "x": 9.5, "y": 0},
732 {"matrix": [0, 10], "x": 10.5, "y": 0},
733 {"matrix": [0, 11], "x": 11.5, "y": 0},
734 {"matrix": [0, 12], "x": 12.5, "y": 0},
735 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
736
737 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
738 {"matrix": [1, 1], "x": 1.75, "y": 1},
739 {"matrix": [1, 2], "x": 2.75, "y": 1},
740 {"matrix": [1, 3], "x": 3.75, "y": 1},
741 {"matrix": [1, 4], "x": 4.75, "y": 1},
742 {"matrix": [1, 5], "x": 5.75, "y": 1},
743 {"matrix": [1, 6], "x": 6.75, "y": 1},
744 {"matrix": [1, 7], "x": 7.75, "y": 1},
745 {"matrix": [1, 8], "x": 8.75, "y": 1},
746 {"matrix": [1, 9], "x": 9.75, "y": 1},
747 {"matrix": [1, 10], "x": 10.75, "y": 1},
748 {"matrix": [1, 11], "x": 11.75, "y": 1},
749 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
750
751 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
752 {"matrix": [2, 1], "x": 2.25, "y": 2},
753 {"matrix": [2, 2], "x": 3.25, "y": 2},
754 {"matrix": [2, 3], "x": 4.25, "y": 2},
755 {"matrix": [2, 4], "x": 5.25, "y": 2},
756 {"matrix": [2, 5], "x": 6.25, "y": 2},
757 {"matrix": [2, 6], "x": 7.25, "y": 2},
758 {"matrix": [2, 7], "x": 8.25, "y": 2},
759 {"matrix": [2, 8], "x": 9.25, "y": 2},
760 {"matrix": [2, 9], "x": 10.25, "y": 2},
761 {"matrix": [2, 11], "x": 11.25, "y": 2, "w": 1.75},
762 {"matrix": [2, 12], "x": 13, "y": 2},
763 {"matrix": [2, 13], "x": 14, "y": 2},
764
765 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
766 {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
767 {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
768 {"matrix": [3, 4], "x": 3.75, "y": 3, "w": 6.25},
769 {"matrix": [3, 9], "x": 10, "y": 3},
770 {"matrix": [3, 10], "x": 11, "y": 3},
771 {"matrix": [3, 11], "x": 12, "y": 3},
772 {"matrix": [3, 12], "x": 13, "y": 3},
773 {"matrix": [3, 13], "x": 14, "y": 3}
774 ]
775 },
776 "LAYOUT_700_standard_rshift_4x_125": {
777 "layout": [
778 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
779 {"matrix": [0, 1], "x": 1.5, "y": 0},
780 {"matrix": [0, 2], "x": 2.5, "y": 0},
781 {"matrix": [0, 3], "x": 3.5, "y": 0},
782 {"matrix": [0, 4], "x": 4.5, "y": 0},
783 {"matrix": [0, 5], "x": 5.5, "y": 0},
784 {"matrix": [0, 6], "x": 6.5, "y": 0},
785 {"matrix": [0, 7], "x": 7.5, "y": 0},
786 {"matrix": [0, 8], "x": 8.5, "y": 0},
787 {"matrix": [0, 9], "x": 9.5, "y": 0},
788 {"matrix": [0, 10], "x": 10.5, "y": 0},
789 {"matrix": [0, 11], "x": 11.5, "y": 0},
790 {"matrix": [0, 12], "x": 12.5, "y": 0},
791 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
792
793 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
794 {"matrix": [1, 1], "x": 1.75, "y": 1},
795 {"matrix": [1, 2], "x": 2.75, "y": 1},
796 {"matrix": [1, 3], "x": 3.75, "y": 1},
797 {"matrix": [1, 4], "x": 4.75, "y": 1},
798 {"matrix": [1, 5], "x": 5.75, "y": 1},
799 {"matrix": [1, 6], "x": 6.75, "y": 1},
800 {"matrix": [1, 7], "x": 7.75, "y": 1},
801 {"matrix": [1, 8], "x": 8.75, "y": 1},
802 {"matrix": [1, 9], "x": 9.75, "y": 1},
803 {"matrix": [1, 10], "x": 10.75, "y": 1},
804 {"matrix": [1, 11], "x": 11.75, "y": 1},
805 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
806
807 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
808 {"matrix": [2, 1], "x": 2.25, "y": 2},
809 {"matrix": [2, 2], "x": 3.25, "y": 2},
810 {"matrix": [2, 3], "x": 4.25, "y": 2},
811 {"matrix": [2, 4], "x": 5.25, "y": 2},
812 {"matrix": [2, 5], "x": 6.25, "y": 2},
813 {"matrix": [2, 6], "x": 7.25, "y": 2},
814 {"matrix": [2, 7], "x": 8.25, "y": 2},
815 {"matrix": [2, 8], "x": 9.25, "y": 2},
816 {"matrix": [2, 9], "x": 10.25, "y": 2},
817 {"matrix": [2, 11], "x": 11.25, "y": 2},
818 {"matrix": [2, 12], "x": 12.25, "y": 2, "w": 2.75},
819
820 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
821 {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.5},
822 {"matrix": [3, 4], "x": 3, "y": 3, "w": 7},
823 {"matrix": [3, 9], "x": 10, "y": 3, "w": 1.25},
824 {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.25},
825 {"matrix": [3, 12], "x": 12.5, "y": 3, "w": 1.25},
826 {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25}
827 ]
828 },
829 "LAYOUT_700_standard_rshift_5x_100": {
830 "layout": [
831 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
832 {"matrix": [0, 1], "x": 1.5, "y": 0},
833 {"matrix": [0, 2], "x": 2.5, "y": 0},
834 {"matrix": [0, 3], "x": 3.5, "y": 0},
835 {"matrix": [0, 4], "x": 4.5, "y": 0},
836 {"matrix": [0, 5], "x": 5.5, "y": 0},
837 {"matrix": [0, 6], "x": 6.5, "y": 0},
838 {"matrix": [0, 7], "x": 7.5, "y": 0},
839 {"matrix": [0, 8], "x": 8.5, "y": 0},
840 {"matrix": [0, 9], "x": 9.5, "y": 0},
841 {"matrix": [0, 10], "x": 10.5, "y": 0},
842 {"matrix": [0, 11], "x": 11.5, "y": 0},
843 {"matrix": [0, 12], "x": 12.5, "y": 0},
844 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
845
846 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
847 {"matrix": [1, 1], "x": 1.75, "y": 1},
848 {"matrix": [1, 2], "x": 2.75, "y": 1},
849 {"matrix": [1, 3], "x": 3.75, "y": 1},
850 {"matrix": [1, 4], "x": 4.75, "y": 1},
851 {"matrix": [1, 5], "x": 5.75, "y": 1},
852 {"matrix": [1, 6], "x": 6.75, "y": 1},
853 {"matrix": [1, 7], "x": 7.75, "y": 1},
854 {"matrix": [1, 8], "x": 8.75, "y": 1},
855 {"matrix": [1, 9], "x": 9.75, "y": 1},
856 {"matrix": [1, 10], "x": 10.75, "y": 1},
857 {"matrix": [1, 11], "x": 11.75, "y": 1},
858 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
859
860 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
861 {"matrix": [2, 1], "x": 2.25, "y": 2},
862 {"matrix": [2, 2], "x": 3.25, "y": 2},
863 {"matrix": [2, 3], "x": 4.25, "y": 2},
864 {"matrix": [2, 4], "x": 5.25, "y": 2},
865 {"matrix": [2, 5], "x": 6.25, "y": 2},
866 {"matrix": [2, 6], "x": 7.25, "y": 2},
867 {"matrix": [2, 7], "x": 8.25, "y": 2},
868 {"matrix": [2, 8], "x": 9.25, "y": 2},
869 {"matrix": [2, 9], "x": 10.25, "y": 2},
870 {"matrix": [2, 11], "x": 11.25, "y": 2},
871 {"matrix": [2, 12], "x": 12.25, "y": 2, "w": 2.75},
872
873 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
874 {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.5},
875 {"matrix": [3, 4], "x": 3, "y": 3, "w": 7},
876 {"matrix": [3, 9], "x": 10, "y": 3},
877 {"matrix": [3, 10], "x": 11, "y": 3},
878 {"matrix": [3, 11], "x": 12, "y": 3},
879 {"matrix": [3, 12], "x": 13, "y": 3},
880 {"matrix": [3, 13], "x": 14, "y": 3}
881 ]
882 },
883 "LAYOUT_700_split_rshift_4x_125": {
884 "layout": [
885 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
886 {"matrix": [0, 1], "x": 1.5, "y": 0},
887 {"matrix": [0, 2], "x": 2.5, "y": 0},
888 {"matrix": [0, 3], "x": 3.5, "y": 0},
889 {"matrix": [0, 4], "x": 4.5, "y": 0},
890 {"matrix": [0, 5], "x": 5.5, "y": 0},
891 {"matrix": [0, 6], "x": 6.5, "y": 0},
892 {"matrix": [0, 7], "x": 7.5, "y": 0},
893 {"matrix": [0, 8], "x": 8.5, "y": 0},
894 {"matrix": [0, 9], "x": 9.5, "y": 0},
895 {"matrix": [0, 10], "x": 10.5, "y": 0},
896 {"matrix": [0, 11], "x": 11.5, "y": 0},
897 {"matrix": [0, 12], "x": 12.5, "y": 0},
898 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
899
900 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
901 {"matrix": [1, 1], "x": 1.75, "y": 1},
902 {"matrix": [1, 2], "x": 2.75, "y": 1},
903 {"matrix": [1, 3], "x": 3.75, "y": 1},
904 {"matrix": [1, 4], "x": 4.75, "y": 1},
905 {"matrix": [1, 5], "x": 5.75, "y": 1},
906 {"matrix": [1, 6], "x": 6.75, "y": 1},
907 {"matrix": [1, 7], "x": 7.75, "y": 1},
908 {"matrix": [1, 8], "x": 8.75, "y": 1},
909 {"matrix": [1, 9], "x": 9.75, "y": 1},
910 {"matrix": [1, 10], "x": 10.75, "y": 1},
911 {"matrix": [1, 11], "x": 11.75, "y": 1},
912 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
913
914 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
915 {"matrix": [2, 1], "x": 2.25, "y": 2},
916 {"matrix": [2, 2], "x": 3.25, "y": 2},
917 {"matrix": [2, 3], "x": 4.25, "y": 2},
918 {"matrix": [2, 4], "x": 5.25, "y": 2},
919 {"matrix": [2, 5], "x": 6.25, "y": 2},
920 {"matrix": [2, 6], "x": 7.25, "y": 2},
921 {"matrix": [2, 7], "x": 8.25, "y": 2},
922 {"matrix": [2, 8], "x": 9.25, "y": 2},
923 {"matrix": [2, 9], "x": 10.25, "y": 2},
924 {"matrix": [2, 11], "x": 11.25, "y": 2, "w": 1.75},
925 {"matrix": [2, 12], "x": 13, "y": 2},
926 {"matrix": [2, 13], "x": 14, "y": 2},
927
928 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
929 {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.5},
930 {"matrix": [3, 4], "x": 3, "y": 3, "w": 7},
931 {"matrix": [3, 9], "x": 10, "y": 3, "w": 1.25},
932 {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.25},
933 {"matrix": [3, 12], "x": 12.5, "y": 3, "w": 1.25},
934 {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25}
935 ]
936 },
937 "LAYOUT_700_split_rshift_5x_100": {
938 "layout": [
939 {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
940 {"matrix": [0, 1], "x": 1.5, "y": 0},
941 {"matrix": [0, 2], "x": 2.5, "y": 0},
942 {"matrix": [0, 3], "x": 3.5, "y": 0},
943 {"matrix": [0, 4], "x": 4.5, "y": 0},
944 {"matrix": [0, 5], "x": 5.5, "y": 0},
945 {"matrix": [0, 6], "x": 6.5, "y": 0},
946 {"matrix": [0, 7], "x": 7.5, "y": 0},
947 {"matrix": [0, 8], "x": 8.5, "y": 0},
948 {"matrix": [0, 9], "x": 9.5, "y": 0},
949 {"matrix": [0, 10], "x": 10.5, "y": 0},
950 {"matrix": [0, 11], "x": 11.5, "y": 0},
951 {"matrix": [0, 12], "x": 12.5, "y": 0},
952 {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
953
954 {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
955 {"matrix": [1, 1], "x": 1.75, "y": 1},
956 {"matrix": [1, 2], "x": 2.75, "y": 1},
957 {"matrix": [1, 3], "x": 3.75, "y": 1},
958 {"matrix": [1, 4], "x": 4.75, "y": 1},
959 {"matrix": [1, 5], "x": 5.75, "y": 1},
960 {"matrix": [1, 6], "x": 6.75, "y": 1},
961 {"matrix": [1, 7], "x": 7.75, "y": 1},
962 {"matrix": [1, 8], "x": 8.75, "y": 1},
963 {"matrix": [1, 9], "x": 9.75, "y": 1},
964 {"matrix": [1, 10], "x": 10.75, "y": 1},
965 {"matrix": [1, 11], "x": 11.75, "y": 1},
966 {"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
967
968 {"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
969 {"matrix": [2, 1], "x": 2.25, "y": 2},
970 {"matrix": [2, 2], "x": 3.25, "y": 2},
971 {"matrix": [2, 3], "x": 4.25, "y": 2},
972 {"matrix": [2, 4], "x": 5.25, "y": 2},
973 {"matrix": [2, 5], "x": 6.25, "y": 2},
974 {"matrix": [2, 6], "x": 7.25, "y": 2},
975 {"matrix": [2, 7], "x": 8.25, "y": 2},
976 {"matrix": [2, 8], "x": 9.25, "y": 2},
977 {"matrix": [2, 9], "x": 10.25, "y": 2},
978 {"matrix": [2, 11], "x": 11.25, "y": 2, "w": 1.75},
979 {"matrix": [2, 12], "x": 13, "y": 2},
980 {"matrix": [2, 13], "x": 14, "y": 2},
981
982 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
983 {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.5},
984 {"matrix": [3, 4], "x": 3, "y": 3, "w": 7},
985 {"matrix": [3, 9], "x": 10, "y": 3},
986 {"matrix": [3, 10], "x": 11, "y": 3},
987 {"matrix": [3, 11], "x": 12, "y": 3},
988 {"matrix": [3, 12], "x": 13, "y": 3},
989 {"matrix": [3, 13], "x": 14, "y": 3}
990 ]
991 }
992 }
993}
diff --git a/keyboards/p3d/tw40/keymaps/default/keymap.c b/keyboards/p3d/tw40/keymaps/default/keymap.c
new file mode 100644
index 0000000000..11b3d0d6e9
--- /dev/null
+++ b/keyboards/p3d/tw40/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
1/* Copyright 2020 KnoblesseOblige
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 /* Base */
20 [0] = LAYOUT_all(
21 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
22 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,
23 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, MO(2),
24 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, MO(1), KC_SPC, KC_LALT, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
25
26 ),
27 [1] = LAYOUT_all(
28 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_DEL,
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_BSLS,
30 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LSFT, 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
32 ),
33 [2] = LAYOUT_all(
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, KC_TRNS,
35 KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
36 KC_TRNS, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, 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
38 )
39};
diff --git a/keyboards/p3d/tw40/keymaps/default/readme.md b/keyboards/p3d/tw40/keymaps/default/readme.md
new file mode 100644
index 0000000000..4dfa184e29
--- /dev/null
+++ b/keyboards/p3d/tw40/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for tw40
diff --git a/keyboards/p3d/tw40/keymaps/via/keymap.c b/keyboards/p3d/tw40/keymaps/via/keymap.c
new file mode 100644
index 0000000000..ffa7470bc1
--- /dev/null
+++ b/keyboards/p3d/tw40/keymaps/via/keymap.c
@@ -0,0 +1,47 @@
1/* Copyright 2020 KnoblesseOblige
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 /* Base */
20 [0] = LAYOUT_all(
21 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
22 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,
23 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, MO(2),
24 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, MO(1), KC_SPC, KC_LALT, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
25
26 ),
27 [1] = LAYOUT_all(
28 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_DEL,
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_BSLS,
30 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LSFT, 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
32 ),
33 [2] = LAYOUT_all(
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, KC_TRNS,
35 KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
36 KC_TRNS, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, 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
38 ),
39 [3] = LAYOUT_all(
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, KC_TRNS, KC_TRNS,
41 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
42 KC_TRNS, 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
44
45 )
46
47};
diff --git a/keyboards/p3d/tw40/keymaps/via/rules.mk b/keyboards/p3d/tw40/keymaps/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/p3d/tw40/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2LTO_ENABLE = yes
diff --git a/keyboards/p3d/tw40/readme.md b/keyboards/p3d/tw40/readme.md
new file mode 100644
index 0000000000..1019ca4914
--- /dev/null
+++ b/keyboards/p3d/tw40/readme.md
@@ -0,0 +1,19 @@
1# Training Wheel 40
2
3![tw40](https://cdn.shopify.com/s/files/1/0501/7537/7592/products/tw40_600x.jpg?v=1607835284)
4
5* Keyboard Maintainer: [KnoblesseOblige](https://github.com/KnoblesseOblige)
6* Hardware Supported: Training Wheel 40 PCB
7* Hardware Availability: https://p3dstore.com/products/tw40-gb
8
9Make example for this keyboard (after setting up your build environment):
10
11 make p3d/tw40:default
12
13To flash a new firmware plug in the keyboard while holding Esc (top left key) and then run the commands below.
14
15Flashing example for this keyboard:
16
17 make p3d/tw40:default:flash
18
19See 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/p3d/tw40/rules.mk b/keyboards/p3d/tw40/rules.mk
new file mode 100644
index 0000000000..2eba275490
--- /dev/null
+++ b/keyboards/p3d/tw40/rules.mk
@@ -0,0 +1,12 @@
1# Build Options
2# change yes to no to disable
3#
4BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
5MOUSEKEY_ENABLE = yes # Mouse keys
6EXTRAKEY_ENABLE = yes # Audio control and System control
7CONSOLE_ENABLE = no # Console for debug
8COMMAND_ENABLE = no # Commands for debug and configuration
9NKRO_ENABLE = no # Enable N-Key Rollover
10BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
11RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
12AUDIO_ENABLE = no # Audio output