aboutsummaryrefslogtreecommitdiff
path: root/keyboards/clueboard
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/clueboard')
-rw-r--r--keyboards/clueboard/17/.noci0
-rw-r--r--keyboards/clueboard/17/17.c43
-rw-r--r--keyboards/clueboard/17/17.h3
-rw-r--r--keyboards/clueboard/17/config.h23
-rw-r--r--keyboards/clueboard/17/info.json65
-rw-r--r--keyboards/clueboard/17/keymaps/default/keymap.c52
-rw-r--r--keyboards/clueboard/17/keymaps/default/readme.md1
-rw-r--r--keyboards/clueboard/17/readme.md16
-rw-r--r--keyboards/clueboard/17/rules.mk2
-rw-r--r--keyboards/clueboard/2x1800/2018/.noci0
-rw-r--r--keyboards/clueboard/2x1800/2018/2018.c16
-rw-r--r--keyboards/clueboard/2x1800/2018/2018.h19
-rw-r--r--keyboards/clueboard/2x1800/2018/config.h31
-rw-r--r--keyboards/clueboard/2x1800/2018/info.json432
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/default/keymap.json11
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/default/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/default_4u/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/default_4u/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/default_7u/keymap.c49
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/default_7u/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/macroboard/keymap.c123
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/macroboard/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/mouseboard_left/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/mouseboard_left/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/mouseboard_right/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2018/keymaps/mouseboard_right/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2018/readme.md13
-rw-r--r--keyboards/clueboard/2x1800/2018/rules.mk1
-rw-r--r--keyboards/clueboard/2x1800/2019/2019.c181
-rw-r--r--keyboards/clueboard/2x1800/2019/2019.h35
-rw-r--r--keyboards/clueboard/2x1800/2019/config.h50
-rw-r--r--keyboards/clueboard/2x1800/2019/info.json1232
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default/keymap.json11
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_1u_ansi/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_1u_ansi/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_1u_iso/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_1u_iso/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_2u_ansi/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_2u_ansi/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_2u_iso/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_2u_iso/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_4u_ansi/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_4u_ansi/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_4u_iso/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_4u_iso/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_7u_ansi/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_7u_ansi/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_7u_iso/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2019/keymaps/default_7u_iso/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2019/readme.md13
-rw-r--r--keyboards/clueboard/2x1800/2019/rules.mk1
-rw-r--r--keyboards/clueboard/2x1800/2021/.noci0
-rw-r--r--keyboards/clueboard/2x1800/2021/2021.c154
-rw-r--r--keyboards/clueboard/2x1800/2021/2021.h18
-rw-r--r--keyboards/clueboard/2x1800/2021/config.h96
-rw-r--r--keyboards/clueboard/2x1800/2021/font.h156
-rw-r--r--keyboards/clueboard/2x1800/2021/info.json419
-rw-r--r--keyboards/clueboard/2x1800/2021/keymaps/default/keymap.json18
-rw-r--r--keyboards/clueboard/2x1800/2021/keymaps/default_4u/keymap.c28
-rw-r--r--keyboards/clueboard/2x1800/2021/keymaps/default_4u/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2021/keymaps/default_7u/keymap.c49
-rw-r--r--keyboards/clueboard/2x1800/2021/keymaps/default_7u/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2021/keymaps/signboard/config.h20
-rw-r--r--keyboards/clueboard/2x1800/2021/keymaps/signboard/keymap.c50
-rw-r--r--keyboards/clueboard/2x1800/2021/keymaps/signboard/readme.md1
-rw-r--r--keyboards/clueboard/2x1800/2021/max7219.c318
-rw-r--r--keyboards/clueboard/2x1800/2021/max7219.h87
-rw-r--r--keyboards/clueboard/2x1800/2021/readme.md17
-rw-r--r--keyboards/clueboard/2x1800/2021/rules.mk1
-rw-r--r--keyboards/clueboard/2x1800/info.json3
-rw-r--r--keyboards/clueboard/2x1800/readme.md18
-rw-r--r--keyboards/clueboard/60/.noci0
-rw-r--r--keyboards/clueboard/60/60.c16
-rw-r--r--keyboards/clueboard/60/60.h19
-rw-r--r--keyboards/clueboard/60/config.h24
-rw-r--r--keyboards/clueboard/60/halconf.h37
-rw-r--r--keyboards/clueboard/60/info.json368
-rw-r--r--keyboards/clueboard/60/keymaps/default/keymap.c125
-rw-r--r--keyboards/clueboard/60/keymaps/default/readme.md1
-rw-r--r--keyboards/clueboard/60/keymaps/default_aek/keymap.c41
-rw-r--r--keyboards/clueboard/60/keymaps/default_aek/readme.md1
-rw-r--r--keyboards/clueboard/60/led.c41
-rw-r--r--keyboards/clueboard/60/mcuconf.h43
-rw-r--r--keyboards/clueboard/60/readme.md14
-rw-r--r--keyboards/clueboard/60/rules.mk2
-rw-r--r--keyboards/clueboard/66/info.json1
-rw-r--r--keyboards/clueboard/66/keymaps/66_ansi/keymap.c36
-rw-r--r--keyboards/clueboard/66/keymaps/66_ansi/readme.md9
-rw-r--r--keyboards/clueboard/66/keymaps/66_iso/keymap.c36
-rw-r--r--keyboards/clueboard/66/keymaps/66_iso/readme.md6
-rw-r--r--keyboards/clueboard/66/keymaps/badger/keymap.c53
-rw-r--r--keyboards/clueboard/66/keymaps/bloodlvst/config.h3
-rw-r--r--keyboards/clueboard/66/keymaps/bloodlvst/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/bloodlvst/readme.md17
-rw-r--r--keyboards/clueboard/66/keymaps/bloodlvst/rules.mk2
-rw-r--r--keyboards/clueboard/66/keymaps/caps_fn/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/caps_fn/readme.md4
-rw-r--r--keyboards/clueboard/66/keymaps/colemak/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/default/keymap.c36
-rw-r--r--keyboards/clueboard/66/keymaps/default/readme.md6
-rw-r--r--keyboards/clueboard/66/keymaps/jokrik/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/jokrik/readme.md2
-rw-r--r--keyboards/clueboard/66/keymaps/mac_optimized/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/mac_optimized/readme.md4
-rw-r--r--keyboards/clueboard/66/keymaps/magicmonty/config.h32
-rw-r--r--keyboards/clueboard/66/keymaps/magicmonty/keymap.c222
-rw-r--r--keyboards/clueboard/66/keymaps/magicmonty/readme.md53
-rw-r--r--keyboards/clueboard/66/keymaps/magicmonty/rules.mk10
-rw-r--r--keyboards/clueboard/66/keymaps/manofinterests/keymap.c36
-rw-r--r--keyboards/clueboard/66/keymaps/manofinterests/readme.md8
-rw-r--r--keyboards/clueboard/66/keymaps/maximised/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/maximised/readme.md3
-rw-r--r--keyboards/clueboard/66/keymaps/mouse_keys/keymap.c48
-rw-r--r--keyboards/clueboard/66/keymaps/mouse_keys/readme.md5
-rw-r--r--keyboards/clueboard/66/keymaps/mouse_keys/rules.mk1
-rw-r--r--keyboards/clueboard/66/keymaps/mrscooty/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/mrscooty/readme.md15
-rw-r--r--keyboards/clueboard/66/keymaps/mrscooty/rules.mk4
-rw-r--r--keyboards/clueboard/66/keymaps/muzfuz/keymap.c74
-rw-r--r--keyboards/clueboard/66/keymaps/muzfuz/readme.md8
-rw-r--r--keyboards/clueboard/66/keymaps/serubin/keymap.c49
-rw-r--r--keyboards/clueboard/66/keymaps/serubin/readme.md14
-rw-r--r--keyboards/clueboard/66/keymaps/serubin/rules.mk4
-rw-r--r--keyboards/clueboard/66/keymaps/shift_fn/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/shift_fn/readme.md6
-rw-r--r--keyboards/clueboard/66/keymaps/smt/keymap.c132
-rw-r--r--keyboards/clueboard/66/keymaps/smt/readme.md21
-rw-r--r--keyboards/clueboard/66/keymaps/tetris/keymap.c156
-rw-r--r--keyboards/clueboard/66/keymaps/tetris/readme.md33
-rw-r--r--keyboards/clueboard/66/keymaps/tetris/rules.mk3
-rw-r--r--keyboards/clueboard/66/keymaps/tetris/tetris_text.c505
-rw-r--r--keyboards/clueboard/66/keymaps/tetris/tetris_text.h45
-rw-r--r--keyboards/clueboard/66/keymaps/unix_optimized/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/unix_optimized/readme.md4
-rw-r--r--keyboards/clueboard/66/keymaps/via/keymap.c46
-rw-r--r--keyboards/clueboard/66/keymaps/via/rules.mk4
-rw-r--r--keyboards/clueboard/66/keymaps/win_optimized/keymap.c38
-rw-r--r--keyboards/clueboard/66/keymaps/win_optimized/readme.md6
-rw-r--r--keyboards/clueboard/66/readme.md18
-rw-r--r--keyboards/clueboard/66/rev1/.noci0
-rw-r--r--keyboards/clueboard/66/rev1/config.h3
-rw-r--r--keyboards/clueboard/66/rev1/info.json268
-rw-r--r--keyboards/clueboard/66/rev1/readme.md15
-rw-r--r--keyboards/clueboard/66/rev1/rev1.c1
-rw-r--r--keyboards/clueboard/66/rev1/rev1.h3
-rw-r--r--keyboards/clueboard/66/rev1/rules.mk1
-rw-r--r--keyboards/clueboard/66/rev2/.noci0
-rw-r--r--keyboards/clueboard/66/rev2/config.h18
-rw-r--r--keyboards/clueboard/66/rev2/info.json268
-rw-r--r--keyboards/clueboard/66/rev2/readme.md15
-rw-r--r--keyboards/clueboard/66/rev2/rev2.c29
-rw-r--r--keyboards/clueboard/66/rev2/rev2.h4
-rw-r--r--keyboards/clueboard/66/rev2/rules.mk2
-rw-r--r--keyboards/clueboard/66/rev3/config.h16
-rw-r--r--keyboards/clueboard/66/rev3/info.json268
-rw-r--r--keyboards/clueboard/66/rev3/readme.md15
-rw-r--r--keyboards/clueboard/66/rev3/rev3.c29
-rw-r--r--keyboards/clueboard/66/rev3/rev3.h4
-rw-r--r--keyboards/clueboard/66/rev3/rules.mk1
-rw-r--r--keyboards/clueboard/66/rev4/config.h22
-rw-r--r--keyboards/clueboard/66/rev4/halconf.h37
-rw-r--r--keyboards/clueboard/66/rev4/info.json266
-rw-r--r--keyboards/clueboard/66/rev4/keymaps/keymap.c13
-rw-r--r--keyboards/clueboard/66/rev4/keymaps/mine/keymap.c13
-rw-r--r--keyboards/clueboard/66/rev4/mcuconf.h43
-rw-r--r--keyboards/clueboard/66/rev4/mine/keymap.c13
-rw-r--r--keyboards/clueboard/66/rev4/readme.md15
-rw-r--r--keyboards/clueboard/66/rev4/rev4.c24
-rw-r--r--keyboards/clueboard/66/rev4/rev4.h3
-rw-r--r--keyboards/clueboard/66/rev4/rules.mk1
-rw-r--r--keyboards/clueboard/66_hotswap/66_hotswap.c1
-rw-r--r--keyboards/clueboard/66_hotswap/66_hotswap.h9
-rw-r--r--keyboards/clueboard/66_hotswap/config.h26
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/config.h114
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/gen1.c126
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/gen1.h18
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/halconf.h35
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/info.json179
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/keymaps/66_ansi/keymap.c52
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/keymaps/66_ansi/readme.md11
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/keymaps/default/keymap.c139
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/keymaps/default/readme.md8
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/keymaps/json/keymap.json1
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/mcuconf.h40
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/readme.md16
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/rules.mk2
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/.noci0
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/config.h27
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/info.json194
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/keymaps/66_ansi/keymap.c52
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/keymaps/66_ansi/readme.md11
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/keymaps/default/keymap.c139
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/keymaps/default/readme.md8
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/prototype.c29
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/prototype.h3
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/readme.md16
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/rules.mk3
-rw-r--r--keyboards/clueboard/66_hotswap/readme.md16
-rw-r--r--keyboards/clueboard/california/california.c1
-rw-r--r--keyboards/clueboard/california/california.h3
-rw-r--r--keyboards/clueboard/california/config.h7
-rw-r--r--keyboards/clueboard/california/info.json41
-rw-r--r--keyboards/clueboard/california/keymaps/default/keymap.json7
-rw-r--r--keyboards/clueboard/california/keymaps/default/readme.md1
-rw-r--r--keyboards/clueboard/california/readme.md13
-rw-r--r--keyboards/clueboard/california/rules.mk1
-rw-r--r--keyboards/clueboard/card/.noci0
-rw-r--r--keyboards/clueboard/card/card.c72
-rw-r--r--keyboards/clueboard/card/card.h3
-rw-r--r--keyboards/clueboard/card/config.h26
-rw-r--r--keyboards/clueboard/card/info.json60
-rw-r--r--keyboards/clueboard/card/keymaps/default/keymap.c59
-rw-r--r--keyboards/clueboard/card/keymaps/default/readme.md3
-rw-r--r--keyboards/clueboard/card/keymaps/default/rules.mk9
-rw-r--r--keyboards/clueboard/card/keymaps/rgb_effects/config.h7
-rw-r--r--keyboards/clueboard/card/keymaps/rgb_effects/keymap.c14
-rw-r--r--keyboards/clueboard/card/keymaps/rgb_effects/readme.md5
-rw-r--r--keyboards/clueboard/card/keymaps/rgb_effects/rules.mk9
-rw-r--r--keyboards/clueboard/card/readme.md15
-rw-r--r--keyboards/clueboard/card/rules.mk2
-rw-r--r--keyboards/clueboard/info.json8
-rw-r--r--keyboards/clueboard/readme.md13
223 files changed, 10157 insertions, 0 deletions
diff --git a/keyboards/clueboard/17/.noci b/keyboards/clueboard/17/.noci
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/clueboard/17/.noci
diff --git a/keyboards/clueboard/17/17.c b/keyboards/clueboard/17/17.c
new file mode 100644
index 000000000..44b55a323
--- /dev/null
+++ b/keyboards/clueboard/17/17.c
@@ -0,0 +1,43 @@
1#include "17.h"
2
3int pwm_level;
4
5void backlight_init_ports(void) {
6 // Set C7 to output
7 DDRC |= (1<<7);
8
9 // Initialize the timer
10 TC4H = 0x03;
11 OCR4C = 0xFF;
12 TCCR4A = 0b10000010;
13 TCCR4B = 0b00000001;
14}
15
16void backlight_set(uint8_t level) {
17 // Determine the PWM level
18 switch (level)
19 {
20 case 0:
21 // 33%
22 pwm_level = 0x54;
23 break;
24 case 1:
25 // 66%
26 pwm_level = 0xA8;
27 break;
28 case 2:
29 // 100%
30 pwm_level = 0xFF;
31 break;
32 case 3:
33 // 0%
34 pwm_level = 0x00;
35 break;
36 default:
37 xprintf("Unknown level: %d\n", level);
38 }
39
40 // Write the PWM level to the timer
41 TC4H = pwm_level >> 8;
42 OCR4A = 0xFF & pwm_level;
43}
diff --git a/keyboards/clueboard/17/17.h b/keyboards/clueboard/17/17.h
new file mode 100644
index 000000000..ef5b3f3e0
--- /dev/null
+++ b/keyboards/clueboard/17/17.h
@@ -0,0 +1,3 @@
1#pragma once
2
3#include "quantum.h"
diff --git a/keyboards/clueboard/17/config.h b/keyboards/clueboard/17/config.h
new file mode 100644
index 000000000..e2d0d1a23
--- /dev/null
+++ b/keyboards/clueboard/17/config.h
@@ -0,0 +1,23 @@
1/*
2Copyright 2012 Jun Wako <[email protected]>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* Number of backlighting levels */
23#define BACKLIGHT_LEVELS 3
diff --git a/keyboards/clueboard/17/info.json b/keyboards/clueboard/17/info.json
new file mode 100644
index 000000000..fb12f7dcc
--- /dev/null
+++ b/keyboards/clueboard/17/info.json
@@ -0,0 +1,65 @@
1{
2 "manufacturer": "Clueboard",
3 "keyboard_name": "Clueboard 17% (Cluepad)",
4 "maintainer": "skullydazed",
5 "diode_direction": "COL2ROW",
6 "processor": "atmega32u4",
7 "features": {
8 "backlight": true,
9 "bootmagic": false,
10 "command": false,
11 "console": true,
12 "extrakey": true,
13 "midi": false,
14 "mousekey": true,
15 "nkro": true,
16 "rgblight": true,
17 "unicode": false
18 },
19 "matrix_pins": {
20 "cols": ["F4", "E6", "B1", "D2"],
21 "rows": ["B0", "D3", "D5", "D4", "D6"]
22 },
23 "rgblight": {
24 "animations": {
25 "all": true
26 },
27 "brightness_steps": 17,
28 "hue_steps": 10,
29 "led_count": 4,
30 "pin": "F6",
31 "saturation_steps": 17
32 },
33 "url": "",
34 "usb": {
35 "device_ver": "0x0001",
36 "pid": "0x2312",
37 "vid": "0xC1ED"
38 },
39 "layout_aliases": {
40 "LAYOUT": "LAYOUT_numpad_5x4"
41 },
42 "layouts": {
43 "LAYOUT_numpad_5x4": {
44 "layout": [
45 { "label": "Num Lock", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
46 { "label": "/", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
47 { "label": "*", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
48 { "label": "-", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
49 { "label": "7", "matrix": [1, 0], "w": 1, "x": 0, "y": 1 },
50 { "label": "8", "matrix": [1, 1], "w": 1, "x": 1, "y": 1 },
51 { "label": "9", "matrix": [1, 2], "w": 1, "x": 2, "y": 1 },
52 { "label": "4", "matrix": [2, 0], "w": 1, "x": 0, "y": 2 },
53 { "label": "5", "matrix": [2, 1], "w": 1, "x": 1, "y": 2 },
54 { "label": "6", "matrix": [2, 2], "w": 1, "x": 2, "y": 2 },
55 { "h": 2, "label": "+", "matrix": [1, 3], "w": 1, "x": 3, "y": 1 },
56 { "label": "1", "matrix": [3, 0], "w": 1, "x": 0, "y": 3 },
57 { "label": "2", "matrix": [3, 1], "w": 1, "x": 1, "y": 3 },
58 { "label": "3", "matrix": [3, 2], "w": 1, "x": 2, "y": 3 },
59 { "label": "0", "matrix": [4, 0], "w": 2, "x": 0, "y": 4 },
60 { "label": ".", "matrix": [4, 2], "w": 1, "x": 2, "y": 4 },
61 { "h": 2, "label": "Enter", "matrix": [3, 3], "w": 1, "x": 3, "y": 3 }
62 ]
63 }
64 }
65}
diff --git a/keyboards/clueboard/17/keymaps/default/keymap.c b/keyboards/clueboard/17/keymaps/default/keymap.c
new file mode 100644
index 000000000..155eb6e6e
--- /dev/null
+++ b/keyboards/clueboard/17/keymaps/default/keymap.c
@@ -0,0 +1,52 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9
10const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11 /* Keymap _BL: (Base Layer) Default Layer
12 * .-------------------.
13 * |NL F| /| *| -|
14 * |-------------------|
15 * | 7| 8| 9| |
16 * |--------------| |
17 * | 4| 5| 6| +|
18 * |-------------------|
19 * | 1| 2| 3| |
20 * |--------------| |
21 * | 0| .| Ent|
22 * '-------------------'
23 */
24 [_BL] = LAYOUT_numpad_5x4(
25 LT(_FL, KC_NLCK), KC_PSLS, KC_PAST, KC_PMNS,
26 KC_P7, KC_P8, KC_P9,
27 KC_P4, KC_P5, KC_P6, KC_PPLS,
28 KC_P1, KC_P2, KC_P3,
29 KC_P0, KC_PDOT, KC_PENT
30 ),
31
32 /* Keymap _FL: Function Layer
33 * .-------------------.
34 * |NL F| | | Fn0|
35 * |-------------------|
36 * | | Fn4| | |
37 * |--------------| |
38 * | Fn3|BL_S| Fn2| Fn6|
39 * |-------------------|
40 * | | Fn5| | |
41 * |--------------| |
42 * | Fn1| | Fn7|
43 * '-------------------'
44 */
45 [_FL] = LAYOUT_numpad_5x4(
46 LT(_FL, KC_NLCK), _______, _______, RGB_TOG,
47 _______, RGB_SAI, _______,
48 RGB_HUD, BL_STEP, RGB_HUI, RGB_VAI,
49 _______, RGB_SAD, _______,
50 RGB_MOD, _______, RGB_VAD
51 )
52};
diff --git a/keyboards/clueboard/17/keymaps/default/readme.md b/keyboards/clueboard/17/keymaps/default/readme.md
new file mode 100644
index 000000000..4fc9092b3
--- /dev/null
+++ b/keyboards/clueboard/17/keymaps/default/readme.md
@@ -0,0 +1 @@
Default keymap for the Clueboard 17.
diff --git a/keyboards/clueboard/17/readme.md b/keyboards/clueboard/17/readme.md
new file mode 100644
index 000000000..c183657f9
--- /dev/null
+++ b/keyboards/clueboard/17/readme.md
@@ -0,0 +1,16 @@
1# Clueboard 17% (Formerly Cluepad)
2
3![Clueboard 17%](https://i.imgur.com/3XBC5c0.jpg)
4
5A basic 17 key numpad PCB.
6
7* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
8* Hardware Supported:
9 * Cluepad PCB 1.0
10* Hardware Availability: [clueboard.co](https://clueboard.co/)
11
12Make example for this keyboard (after setting up your build environment):
13
14 make clueboard/17:default
15
16See 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/clueboard/17/rules.mk b/keyboards/clueboard/17/rules.mk
new file mode 100644
index 000000000..d2e52d56b
--- /dev/null
+++ b/keyboards/clueboard/17/rules.mk
@@ -0,0 +1,2 @@
1# Build Options
2BACKLIGHT_DRIVER = custom
diff --git a/keyboards/clueboard/2x1800/2018/.noci b/keyboards/clueboard/2x1800/2018/.noci
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/.noci
diff --git a/keyboards/clueboard/2x1800/2018/2018.c b/keyboards/clueboard/2x1800/2018/2018.c
new file mode 100644
index 000000000..dee0c01b5
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/2018.c
@@ -0,0 +1,16 @@
1/* Copyright 2017 Zach White <[email protected]>
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 "2018.h"
diff --git a/keyboards/clueboard/2x1800/2018/2018.h b/keyboards/clueboard/2x1800/2018/2018.h
new file mode 100644
index 000000000..6e2d3b383
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/2018.h
@@ -0,0 +1,19 @@
1/* Copyright 2017 Zach White <[email protected]>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
diff --git a/keyboards/clueboard/2x1800/2018/config.h b/keyboards/clueboard/2x1800/2018/config.h
new file mode 100644
index 000000000..9d5b9b514
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/config.h
@@ -0,0 +1,31 @@
1/*
2Copyright 2017 Zach White <[email protected]>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* audio support */
23#define AUDIO_PIN_ALT B7
24#define AUDIO_PIN C4
25#define AUDIO_CLICKY
26
27/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
28#define LOCKING_SUPPORT_ENABLE
29
30/* Locking resynchronize hack */
31#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/clueboard/2x1800/2018/info.json b/keyboards/clueboard/2x1800/2018/info.json
new file mode 100644
index 000000000..38e7421a1
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/info.json
@@ -0,0 +1,432 @@
1{
2 "manufacturer": "Clueboard",
3 "keyboard_name": "Clueboard 2x1800 2018",
4 "maintainer": "skullydazed",
5 "processor": "at90usb1286",
6 "bootloader": "halfkay",
7 "debounce": 5,
8 "diode_direction": "ROW2COL",
9 "features": {
10 "audio": true,
11 "bootmagic": false,
12 "command": false,
13 "console": true,
14 "extrakey": true,
15 "midi": false,
16 "mousekey": true,
17 "nkro": true,
18 "rgblight": true,
19 "unicode": false
20 },
21 "indicators": {
22 "num_lock": "B4",
23 "caps_lock": "B5",
24 "scroll_lock": "B6"
25 },
26 "matrix_pins": {
27 "cols": ["D2", "D3", "D4", "D5", "D7", "E0", "E1", "B0", "E6", "B3", "B2"],
28 "rows": ["C0", "C1", "C2", "C3", "C7", "F7", "B1", "F2", "F3", "F4", "F5", "F6"]
29 },
30 "rgblight": {
31 "animations": {
32 "all": true
33 },
34 "brightness_steps": 8,
35 "hue_steps": 8,
36 "led_count": 16,
37 "pin": "C6",
38 "saturation_steps": 8
39 },
40 "usb": {
41 "pid": "0x23A0"
42 },
43 "layout_aliases": {
44 "LAYOUT": "LAYOUT_all"
45 },
46 "layouts": {
47 "LAYOUT_4u_space": {
48 "layout": [
49 { "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
50 { "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
51 { "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
52 { "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
53 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 0 },
54 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
55 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
56 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
57 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 0 },
58 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 0 },
59 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 0 },
60 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 0 },
61 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 0 },
62 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 0 },
63 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 0 },
64 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 0 },
65 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 0 },
66 { "matrix": [6, 7], "w": 1, "x": 20, "y": 0 },
67 { "matrix": [6, 8], "w": 1, "x": 21, "y": 0 },
68 { "matrix": [6, 9], "w": 1, "x": 22, "y": 0 },
69 { "matrix": [6, 10], "w": 1, "x": 23, "y": 0 },
70 { "matrix": [1, 0], "w": 1, "x": 0, "y": 1.25 },
71 { "matrix": [1, 1], "w": 1, "x": 1, "y": 1.25 },
72 { "matrix": [1, 2], "w": 1, "x": 2, "y": 1.25 },
73 { "matrix": [1, 3], "w": 1, "x": 3, "y": 1.25 },
74 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1.25 },
75 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1.25 },
76 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1.25 },
77 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1.25 },
78 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1.25 },
79 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1.25 },
80 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1.25 },
81 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 1.25 },
82 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 1.25 },
83 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 1.25 },
84 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 1.25 },
85 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 1.25 },
86 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 1.25 },
87 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 1.25 },
88 { "matrix": [7, 7], "w": 1, "x": 20, "y": 1.25 },
89 { "matrix": [7, 8], "w": 1, "x": 21, "y": 1.25 },
90 { "matrix": [7, 9], "w": 1, "x": 22, "y": 1.25 },
91 { "matrix": [7, 10], "w": 1, "x": 23, "y": 1.25 },
92 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 2.25 },
93 { "matrix": [2, 1], "w": 1, "x": 1, "y": 2.25 },
94 { "matrix": [2, 2], "w": 1, "x": 2, "y": 2.25 },
95 { "matrix": [2, 3], "w": 1, "x": 3, "y": 2.25 },
96 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 2.25 },
97 { "matrix": [2, 5], "w": 1, "x": 6, "y": 2.25 },
98 { "matrix": [2, 6], "w": 1, "x": 7, "y": 2.25 },
99 { "matrix": [2, 7], "w": 1, "x": 8, "y": 2.25 },
100 { "matrix": [2, 8], "w": 1, "x": 9, "y": 2.25 },
101 { "matrix": [2, 9], "w": 1, "x": 10, "y": 2.25 },
102 { "matrix": [2, 10], "w": 1, "x": 11, "y": 2.25 },
103 { "matrix": [8, 0], "w": 1, "x": 12, "y": 2.25 },
104 { "matrix": [8, 1], "w": 1, "x": 13, "y": 2.25 },
105 { "matrix": [8, 2], "w": 1, "x": 14, "y": 2.25 },
106 { "matrix": [8, 3], "w": 1, "x": 15, "y": 2.25 },
107 { "matrix": [8, 4], "w": 1, "x": 16, "y": 2.25 },
108 { "matrix": [8, 5], "w": 1, "x": 17, "y": 2.25 },
109 { "matrix": [8, 6], "w": 1.5, "x": 18, "y": 2.25 },
110 { "matrix": [8, 7], "w": 1, "x": 20, "y": 2.25 },
111 { "matrix": [8, 8], "w": 1, "x": 21, "y": 2.25 },
112 { "matrix": [8, 9], "w": 1, "x": 22, "y": 2.25 },
113 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 2.25 },
114 { "matrix": [3, 1], "w": 1, "x": 1, "y": 3.25 },
115 { "matrix": [3, 2], "w": 1, "x": 2, "y": 3.25 },
116 { "matrix": [3, 3], "w": 1, "x": 3, "y": 3.25 },
117 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 3.25 },
118 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3.25 },
119 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3.25 },
120 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3.25 },
121 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3.25 },
122 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3.25 },
123 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3.25 },
124 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 3.25 },
125 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 3.25 },
126 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 3.25 },
127 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 3.25 },
128 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 3.25 },
129 { "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 3.25 },
130 { "matrix": [9, 7], "w": 1, "x": 20, "y": 3.25 },
131 { "matrix": [9, 8], "w": 1, "x": 21, "y": 3.25 },
132 { "matrix": [9, 9], "w": 1, "x": 22, "y": 3.25 },
133 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 4.25 },
134 { "matrix": [4, 1], "w": 1, "x": 1, "y": 4.25 },
135 { "matrix": [4, 2], "w": 1, "x": 2, "y": 4.25 },
136 { "matrix": [4, 3], "w": 1, "x": 3, "y": 4.25 },
137 { "matrix": [4, 4], "w": 1.25, "x": 5.5, "y": 4.25 },
138 { "matrix": [4, 5], "w": 1, "x": 6.75, "y": 4.25 },
139 { "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4.25 },
140 { "matrix": [4, 7], "w": 1, "x": 8.75, "y": 4.25 },
141 { "matrix": [4, 8], "w": 1, "x": 9.75, "y": 4.25 },
142 { "matrix": [4, 9], "w": 1, "x": 10.75, "y": 4.25 },
143 { "matrix": [4, 10], "w": 1, "x": 11.75, "y": 4.25 },
144 { "matrix": [10, 0], "w": 1, "x": 12.75, "y": 4.25 },
145 { "matrix": [10, 1], "w": 1, "x": 13.75, "y": 4.25 },
146 { "matrix": [10, 2], "w": 1, "x": 14.75, "y": 4.25 },
147 { "matrix": [10, 3], "w": 1, "x": 15.75, "y": 4.25 },
148 { "matrix": [10, 4], "w": 1.75, "x": 16.75, "y": 4.25 },
149 { "matrix": [10, 5], "w": 1, "x": 20, "y": 4.25 },
150 { "matrix": [9, 6], "w": 1, "x": 21, "y": 4.25 },
151 { "matrix": [10, 7], "w": 1, "x": 22, "y": 4.25 },
152 { "h": 2, "matrix": [10, 8], "w": 1, "x": 23, "y": 4.25 },
153 { "matrix": [10, 9], "w": 1, "x": 4.25, "y": 4.5 },
154 { "matrix": [10, 10], "w": 1, "x": 18.75, "y": 4.5 },
155 { "matrix": [5, 1], "w": 1, "x": 1, "y": 5.25 },
156 { "matrix": [5, 2], "w": 1, "x": 2, "y": 5.25 },
157 { "matrix": [5, 3], "w": 1, "x": 6.5, "y": 5.25 },
158 { "matrix": [5, 4], "w": 1, "x": 7.5, "y": 5.25 },
159 { "matrix": [5, 5], "w": 1, "x": 8.5, "y": 5.25 },
160 { "matrix": [5, 6], "w": 4, "x": 9.5, "y": 5.25 },
161 { "matrix": [5, 7], "w": 1, "x": 13.5, "y": 5.25 },
162 { "matrix": [5, 8], "w": 1, "x": 14.5, "y": 5.25 },
163 { "matrix": [11, 0], "w": 1, "x": 15.5, "y": 5.25 },
164 { "matrix": [11, 2], "w": 1, "x": 16.5, "y": 5.25 },
165 { "matrix": [11, 3], "w": 1, "x": 21, "y": 5.25 },
166 { "matrix": [11, 4], "w": 1, "x": 22, "y": 5.25 },
167 { "matrix": [11, 5], "w": 1, "x": 3.25, "y": 5.5 },
168 { "matrix": [10, 6], "w": 1, "x": 4.25, "y": 5.5 },
169 { "matrix": [11, 6], "w": 1, "x": 5.25, "y": 5.5 },
170 { "matrix": [11, 7], "w": 1, "x": 17.75, "y": 5.5 },
171 { "matrix": [11, 8], "w": 1, "x": 18.75, "y": 5.5 },
172 { "matrix": [11, 9], "w": 1, "x": 19.75, "y": 5.5 }
173 ]
174 },
175 "LAYOUT_7u_space": {
176 "layout": [
177 { "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
178 { "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
179 { "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
180 { "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
181 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 0 },
182 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
183 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
184 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
185 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 0 },
186 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 0 },
187 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 0 },
188 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 0 },
189 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 0 },
190 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 0 },
191 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 0 },
192 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 0 },
193 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 0 },
194 { "matrix": [6, 7], "w": 1, "x": 20, "y": 0 },
195 { "matrix": [6, 8], "w": 1, "x": 21, "y": 0 },
196 { "matrix": [6, 9], "w": 1, "x": 22, "y": 0 },
197 { "matrix": [6, 10], "w": 1, "x": 23, "y": 0 },
198 { "matrix": [1, 0], "w": 1, "x": 0, "y": 1.25 },
199 { "matrix": [1, 1], "w": 1, "x": 1, "y": 1.25 },
200 { "matrix": [1, 2], "w": 1, "x": 2, "y": 1.25 },
201 { "matrix": [1, 3], "w": 1, "x": 3, "y": 1.25 },
202 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1.25 },
203 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1.25 },
204 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1.25 },
205 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1.25 },
206 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1.25 },
207 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1.25 },
208 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1.25 },
209 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 1.25 },
210 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 1.25 },
211 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 1.25 },
212 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 1.25 },
213 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 1.25 },
214 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 1.25 },
215 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 1.25 },
216 { "matrix": [7, 7], "w": 1, "x": 20, "y": 1.25 },
217 { "matrix": [7, 8], "w": 1, "x": 21, "y": 1.25 },
218 { "matrix": [7, 9], "w": 1, "x": 22, "y": 1.25 },
219 { "matrix": [7, 10], "w": 1, "x": 23, "y": 1.25 },
220 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 2.25 },
221 { "matrix": [2, 1], "w": 1, "x": 1, "y": 2.25 },
222 { "matrix": [2, 2], "w": 1, "x": 2, "y": 2.25 },
223 { "matrix": [2, 3], "w": 1, "x": 3, "y": 2.25 },
224 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 2.25 },
225 { "matrix": [2, 5], "w": 1, "x": 6, "y": 2.25 },
226 { "matrix": [2, 6], "w": 1, "x": 7, "y": 2.25 },
227 { "matrix": [2, 7], "w": 1, "x": 8, "y": 2.25 },
228 { "matrix": [2, 8], "w": 1, "x": 9, "y": 2.25 },
229 { "matrix": [2, 9], "w": 1, "x": 10, "y": 2.25 },
230 { "matrix": [2, 10], "w": 1, "x": 11, "y": 2.25 },
231 { "matrix": [8, 0], "w": 1, "x": 12, "y": 2.25 },
232 { "matrix": [8, 1], "w": 1, "x": 13, "y": 2.25 },
233 { "matrix": [8, 2], "w": 1, "x": 14, "y": 2.25 },
234 { "matrix": [8, 3], "w": 1, "x": 15, "y": 2.25 },
235 { "matrix": [8, 4], "w": 1, "x": 16, "y": 2.25 },
236 { "matrix": [8, 5], "w": 1, "x": 17, "y": 2.25 },
237 { "matrix": [8, 6], "w": 1.5, "x": 18, "y": 2.25 },
238 { "matrix": [8, 7], "w": 1, "x": 20, "y": 2.25 },
239 { "matrix": [8, 8], "w": 1, "x": 21, "y": 2.25 },
240 { "matrix": [8, 9], "w": 1, "x": 22, "y": 2.25 },
241 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 2.25 },
242 { "matrix": [3, 1], "w": 1, "x": 1, "y": 3.25 },
243 { "matrix": [3, 2], "w": 1, "x": 2, "y": 3.25 },
244 { "matrix": [3, 3], "w": 1, "x": 3, "y": 3.25 },
245 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 3.25 },
246 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3.25 },
247 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3.25 },
248 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3.25 },
249 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3.25 },
250 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3.25 },
251 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3.25 },
252 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 3.25 },
253 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 3.25 },
254 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 3.25 },
255 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 3.25 },
256 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 3.25 },
257 { "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 3.25 },
258 { "matrix": [9, 7], "w": 1, "x": 20, "y": 3.25 },
259 { "matrix": [9, 8], "w": 1, "x": 21, "y": 3.25 },
260 { "matrix": [9, 9], "w": 1, "x": 22, "y": 3.25 },
261 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 4.25 },
262 { "matrix": [4, 1], "w": 1, "x": 1, "y": 4.25 },
263 { "matrix": [4, 2], "w": 1, "x": 2, "y": 4.25 },
264 { "matrix": [4, 3], "w": 1, "x": 3, "y": 4.25 },
265 { "matrix": [4, 4], "w": 1.25, "x": 5.5, "y": 4.25 },
266 { "matrix": [4, 5], "w": 1, "x": 6.75, "y": 4.25 },
267 { "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4.25 },
268 { "matrix": [4, 7], "w": 1, "x": 8.75, "y": 4.25 },
269 { "matrix": [4, 8], "w": 1, "x": 9.75, "y": 4.25 },
270 { "matrix": [4, 9], "w": 1, "x": 10.75, "y": 4.25 },
271 { "matrix": [4, 10], "w": 1, "x": 11.75, "y": 4.25 },
272 { "matrix": [10, 0], "w": 1, "x": 12.75, "y": 4.25 },
273 { "matrix": [10, 1], "w": 1, "x": 13.75, "y": 4.25 },
274 { "matrix": [10, 2], "w": 1, "x": 14.75, "y": 4.25 },
275 { "matrix": [10, 3], "w": 1, "x": 15.75, "y": 4.25 },
276 { "matrix": [10, 4], "w": 1.75, "x": 16.75, "y": 4.25 },
277 { "matrix": [10, 5], "w": 1, "x": 20, "y": 4.25 },
278 { "matrix": [9, 6], "w": 1, "x": 21, "y": 4.25 },
279 { "matrix": [10, 7], "w": 1, "x": 22, "y": 4.25 },
280 { "h": 2, "matrix": [10, 8], "w": 1, "x": 23, "y": 4.25 },
281 { "matrix": [10, 9], "w": 1, "x": 4.25, "y": 4.5 },
282 { "matrix": [10, 10], "w": 1, "x": 18.75, "y": 4.5 },
283 { "matrix": [5, 1], "w": 1, "x": 1, "y": 5.25 },
284 { "matrix": [5, 2], "w": 1, "x": 2, "y": 5.25 },
285 { "matrix": [5, 3], "w": 1, "x": 6.5, "y": 5.25 },
286 { "matrix": [5, 4], "w": 1, "x": 7.5, "y": 5.25 },
287 { "matrix": [5, 5], "w": 7, "x": 8.5, "y": 5.25 },
288 { "matrix": [5, 6], "w": 1, "x": 15.5, "y": 5.25 },
289 { "matrix": [5, 7], "w": 1, "x": 16.5, "y": 5.25 },
290 { "matrix": [11, 0], "w": 1, "x": 21, "y": 5.25 },
291 { "matrix": [11, 4], "w": 1, "x": 22, "y": 5.25 },
292 { "matrix": [11, 5], "w": 1, "x": 3.25, "y": 5.5 },
293 { "matrix": [10, 6], "w": 1, "x": 4.25, "y": 5.5 },
294 { "matrix": [11, 6], "w": 1, "x": 5.25, "y": 5.5 },
295 { "matrix": [11, 7], "w": 1, "x": 17.75, "y": 5.5 },
296 { "matrix": [11, 8], "w": 1, "x": 18.75, "y": 5.5 },
297 { "matrix": [11, 9], "w": 1, "x": 19.75, "y": 5.5 }
298 ]
299 },
300 "LAYOUT_all": {
301 "layout": [
302 { "label": "Home", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
303 { "label": "End", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
304 { "label": "PgUp", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
305 { "label": "PgDn", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
306 { "label": "Esc", "matrix": [0, 4], "w": 1, "x": 4.75, "y": 0 },
307 { "label": "F1", "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
308 { "label": "F2", "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
309 { "label": "F3", "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
310 { "label": "F4", "matrix": [0, 9], "w": 1, "x": 9.25, "y": 0 },
311 { "label": "F5", "matrix": [0, 10], "w": 1, "x": 10.75, "y": 0 },
312 { "label": "F6", "matrix": [6, 0], "w": 1, "x": 11.75, "y": 0 },
313 { "label": "F7", "matrix": [6, 1], "w": 1, "x": 12.75, "y": 0 },
314 { "label": "F8", "matrix": [6, 2], "w": 1, "x": 13.75, "y": 0 },
315 { "label": "F9", "matrix": [6, 3], "w": 1, "x": 15.25, "y": 0 },
316 { "label": "F10", "matrix": [6, 4], "w": 1, "x": 16.25, "y": 0 },
317 { "label": "F11", "matrix": [6, 5], "w": 1, "x": 17.25, "y": 0 },
318 { "label": "F12", "matrix": [6, 6], "w": 1, "x": 18.25, "y": 0 },
319 { "label": "PrtSc", "matrix": [6, 7], "w": 1, "x": 20, "y": 0 },
320 { "label": "Scroll Lock", "matrix": [6, 8], "w": 1, "x": 21, "y": 0 },
321 { "label": "Pause", "matrix": [6, 9], "w": 1, "x": 22, "y": 0 },
322 { "label": "Insert", "matrix": [6, 10], "w": 1, "x": 23, "y": 0 },
323 { "label": "-", "matrix": [1, 0], "w": 1, "x": 0, "y": 1.25 },
324 { "label": "Num Lock", "matrix": [1, 1], "w": 1, "x": 1, "y": 1.25 },
325 { "label": "/", "matrix": [1, 2], "w": 1, "x": 2, "y": 1.25 },
326 { "label": "*", "matrix": [1, 3], "w": 1, "x": 3, "y": 1.25 },
327 { "label": "~", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1.25 },
328 { "label": "!", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1.25 },
329 { "label": "@", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1.25 },
330 { "label": "#", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1.25 },
331 { "label": "$", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1.25 },
332 { "label": "%", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1.25 },
333 { "label": "^", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1.25 },
334 { "label": "&", "matrix": [7, 0], "w": 1, "x": 11.5, "y": 1.25 },
335 { "label": "*", "matrix": [7, 1], "w": 1, "x": 12.5, "y": 1.25 },
336 { "label": "(", "matrix": [7, 2], "w": 1, "x": 13.5, "y": 1.25 },
337 { "label": ")", "matrix": [7, 3], "w": 1, "x": 14.5, "y": 1.25 },
338 { "label": "_", "matrix": [7, 4], "w": 1, "x": 15.5, "y": 1.25 },
339 { "label": "+", "matrix": [7, 5], "w": 1, "x": 16.5, "y": 1.25 },
340 { "label": "Backspace", "matrix": [7, 6], "w": 2, "x": 17.5, "y": 1.25 },
341 { "label": "Num Lock", "matrix": [7, 7], "w": 1, "x": 20, "y": 1.25 },
342 { "label": "/", "matrix": [7, 8], "w": 1, "x": 21, "y": 1.25 },
343 { "label": "*", "matrix": [7, 9], "w": 1, "x": 22, "y": 1.25 },
344 { "label": "-", "matrix": [7, 10], "w": 1, "x": 23, "y": 1.25 },
345 { "h": 2, "label": "+", "matrix": [2, 0], "w": 1, "x": 0, "y": 2.25 },
346 { "label": "7", "matrix": [2, 1], "w": 1, "x": 1, "y": 2.25 },
347 { "label": "8", "matrix": [2, 2], "w": 1, "x": 2, "y": 2.25 },
348 { "label": "9", "matrix": [2, 3], "w": 1, "x": 3, "y": 2.25 },
349 { "label": "Tab", "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 2.25 },
350 { "label": "Q", "matrix": [2, 5], "w": 1, "x": 6, "y": 2.25 },
351 { "label": "W", "matrix": [2, 6], "w": 1, "x": 7, "y": 2.25 },
352 { "label": "E", "matrix": [2, 7], "w": 1, "x": 8, "y": 2.25 },
353 { "label": "R", "matrix": [2, 8], "w": 1, "x": 9, "y": 2.25 },
354 { "label": "T", "matrix": [2, 9], "w": 1, "x": 10, "y": 2.25 },
355 { "label": "Y", "matrix": [2, 10], "w": 1, "x": 11, "y": 2.25 },
356 { "label": "U", "matrix": [8, 0], "w": 1, "x": 12, "y": 2.25 },
357 { "label": "I", "matrix": [8, 1], "w": 1, "x": 13, "y": 2.25 },
358 { "label": "O", "matrix": [8, 2], "w": 1, "x": 14, "y": 2.25 },
359 { "label": "P", "matrix": [8, 3], "w": 1, "x": 15, "y": 2.25 },
360 { "label": "{", "matrix": [8, 4], "w": 1, "x": 16, "y": 2.25 },
361 { "label": "}", "matrix": [8, 5], "w": 1, "x": 17, "y": 2.25 },
362 { "label": "|", "matrix": [8, 6], "w": 1.5, "x": 18, "y": 2.25 },
363 { "label": "7", "matrix": [8, 7], "w": 1, "x": 20, "y": 2.25 },
364 { "label": "8", "matrix": [8, 8], "w": 1, "x": 21, "y": 2.25 },
365 { "label": "9", "matrix": [8, 9], "w": 1, "x": 22, "y": 2.25 },
366 { "h": 2, "label": "+", "matrix": [8, 10], "w": 1, "x": 23, "y": 2.25 },
367 { "label": "4", "matrix": [3, 1], "w": 1, "x": 1, "y": 3.25 },
368 { "label": "5", "matrix": [3, 2], "w": 1, "x": 2, "y": 3.25 },
369 { "label": "6", "matrix": [3, 3], "w": 1, "x": 3, "y": 3.25 },
370 { "label": "Caps Lock", "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 3.25 },
371 { "label": "A", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3.25 },
372 { "label": "S", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3.25 },
373 { "label": "D", "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3.25 },
374 { "label": "F", "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3.25 },
375 { "label": "G", "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3.25 },
376 { "label": "H", "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3.25 },
377 { "label": "J", "matrix": [9, 0], "w": 1, "x": 12.25, "y": 3.25 },
378 { "label": "K", "matrix": [9, 1], "w": 1, "x": 13.25, "y": 3.25 },
379 { "label": "L", "matrix": [9, 2], "w": 1, "x": 14.25, "y": 3.25 },
380 { "label": ":", "matrix": [9, 3], "w": 1, "x": 15.25, "y": 3.25 },
381 { "label": "\"", "matrix": [9, 4], "w": 1, "x": 16.25, "y": 3.25 },
382 { "label": "Enter", "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 3.25 },
383 { "label": "4", "matrix": [9, 7], "w": 1, "x": 20, "y": 3.25 },
384 { "label": "5", "matrix": [9, 8], "w": 1, "x": 21, "y": 3.25 },
385 { "label": "6", "matrix": [9, 9], "w": 1, "x": 22, "y": 3.25 },
386 { "h": 2, "label": "Enter", "matrix": [4, 0], "w": 1, "x": 0, "y": 4.25 },
387 { "label": "1", "matrix": [4, 1], "w": 1, "x": 1, "y": 4.25 },
388 { "label": "2", "matrix": [4, 2], "w": 1, "x": 2, "y": 4.25 },
389 { "label": "3", "matrix": [4, 3], "w": 1, "x": 3, "y": 4.25 },
390 { "label": "\\u2191", "matrix": [4, 4], "w": 1, "x": 4.25, "y": 4.5 },
391 { "label": "Shift", "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 4.25 },
392 { "label": "Z", "matrix": [4, 6], "w": 1, "x": 6.75, "y": 4.25 },
393 { "label": "X", "matrix": [4, 7], "w": 1, "x": 7.75, "y": 4.25 },
394 { "label": "C", "matrix": [4, 8], "w": 1, "x": 8.75, "y": 4.25 },
395 { "label": "V", "matrix": [4, 9], "w": 1, "x": 9.75, "y": 4.25 },
396 { "label": "B", "matrix": [4, 10], "w": 1, "x": 10.75, "y": 4.25 },
397 { "label": "N", "matrix": [10, 0], "w": 1, "x": 11.75, "y": 4.25 },
398 { "label": "M", "matrix": [10, 1], "w": 1, "x": 12.75, "y": 4.25 },
399 { "label": "<", "matrix": [10, 2], "w": 1, "x": 13.75, "y": 4.25 },
400 { "label": ">", "matrix": [10, 3], "w": 1, "x": 14.75, "y": 4.25 },
401 { "label": "?", "matrix": [10, 4], "w": 1, "x": 15.75, "y": 4.25 },
402 { "label": "Shift", "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 4.25 },
403 { "label": "\\u2191", "matrix": [9, 6], "w": 1, "x": 18.75, "y": 4.5 },
404 { "label": "1", "matrix": [10, 7], "w": 1, "x": 20, "y": 4.25 },
405 { "label": "2", "matrix": [10, 8], "w": 1, "x": 21, "y": 4.25 },
406 { "label": "3", "matrix": [10, 9], "w": 1, "x": 22, "y": 4.25 },
407 { "h": 2, "label": "Enter", "matrix": [10, 10], "w": 1, "x": 23, "y": 4.25 },
408 { "label": "0", "matrix": [5, 1], "w": 1, "x": 1, "y": 5.25 },
409 { "label": ".", "matrix": [5, 2], "w": 1, "x": 2, "y": 5.25 },
410 { "label": "\\u2190", "matrix": [5, 3], "w": 1, "x": 3.25, "y": 5.5 },
411 { "label": "\\u2193", "matrix": [5, 4], "w": 1, "x": 4.25, "y": 5.5 },
412 { "label": "\\u2192", "matrix": [5, 5], "w": 1, "x": 5.25, "y": 5.5 },
413 { "label": "Ctrl", "matrix": [5, 6], "w": 1, "x": 6.5, "y": 5.25 },
414 { "label": "Win", "matrix": [5, 7], "w": 1, "x": 7.5, "y": 5.25 },
415 { "label": "Alt", "matrix": [5, 8], "w": 1, "x": 8.5, "y": 5.25 },
416 { "label": "1u", "matrix": [5, 9], "w": 1, "x": 9.5, "y": 5.25 },
417 { "label": "1u", "matrix": [5, 10], "w": 1, "x": 10.5, "y": 5.25 },
418 { "label": "1u", "matrix": [11, 0], "w": 1, "x": 11.5, "y": 5.25 },
419 { "label": "1u", "matrix": [11, 1], "w": 1, "x": 12.5, "y": 5.25 },
420 { "label": "Alt", "matrix": [11, 2], "w": 1, "x": 13.5, "y": 5.25 },
421 { "label": "Win", "matrix": [11, 3], "w": 1, "x": 14.5, "y": 5.25 },
422 { "label": "Menu", "matrix": [11, 4], "w": 1, "x": 15.5, "y": 5.25 },
423 { "label": "Ctrl", "matrix": [11, 5], "w": 1, "x": 16.5, "y": 5.25 },
424 { "label": "\\u2190", "matrix": [10, 6], "w": 1, "x": 17.75, "y": 5.5 },
425 { "label": "\\u2193", "matrix": [11, 6], "w": 1, "x": 18.75, "y": 5.5 },
426 { "label": "\\u2192", "matrix": [11, 7], "w": 1, "x": 19.75, "y": 5.5 },
427 { "label": "0", "matrix": [11, 8], "w": 1, "x": 21, "y": 5.25 },
428 { "label": ".", "matrix": [11, 9], "w": 1, "x": 22, "y": 5.25 }
429 ]
430 }
431 }
432}
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/default/keymap.json b/keyboards/clueboard/2x1800/2018/keymaps/default/keymap.json
new file mode 100644
index 000000000..f7316001c
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/default/keymap.json
@@ -0,0 +1,11 @@
1{
2 "keyboard":"clueboard/2x1800/2018",
3 "keymap":"default",
4 "layout":"LAYOUT",
5 "layers":[
6 ["KC_HOME","KC_END","KC_PGUP","KC_PGDN","KC_ESC","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F11","KC_F12","KC_PSCR","KC_SLCK","KC_PAUS","KC_INS","KC_PMNS","KC_NLCK","KC_PSLS","KC_PAST","KC_GRV","KC_1","KC_2","KC_3","KC_4","KC_5","KC_6","KC_7","KC_8","KC_9","KC_0","KC_MINS","KC_EQL","KC_BSPC","KC_NLCK","KC_PSLS","KC_PAST","KC_PMNS","KC_PPLS","KC_P7","KC_P8","KC_P9","KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_LBRC","KC_RBRC","KC_BSLS","KC_P7","KC_P8","KC_P9","KC_PSLS","KC_P4","KC_P5","KC_P6","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_P4","KC_P5","KC_P6","KC_PENT","KC_P1","KC_P2","KC_P3","KC_UP","KC_LSFT","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_N","KC_M","KC_SLSH","KC_COMM","KC_DOT","KC_RSFT","KC_UP","KC_P1","KC_P2","KC_P3","KC_PENT","KC_P0","KC_PDOT","KC_LEFT","KC_DOWN","KC_RGHT","KC_LCTL","KC_LGUI","KC_LALT","KC_SPC","KC_SPC","KC_SPC","KC_SPC","KC_RALT","KC_RGUI","KC_APP","KC_RCTL","KC_LEFT","KC_DOWN","KC_RGHT","KC_P0","KC_PDOT"]
7 ],
8 "author":"skullydazed",
9 "notes":"",
10 "version":1
11}
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/default/readme.md b/keyboards/clueboard/2x1800/2018/keymaps/default/readme.md
new file mode 100644
index 000000000..4e3457efc
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/default_4u/keymap.c b/keyboards/clueboard/2x1800/2018/keymaps/default_4u/keymap.c
new file mode 100644
index 000000000..71c5226ec
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/default_4u/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_4u_space(
20 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
21
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/default_4u/readme.md b/keyboards/clueboard/2x1800/2018/keymaps/default_4u/readme.md
new file mode 100644
index 000000000..a696972e8
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/default_4u/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 4u Spacebar
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/default_7u/keymap.c b/keyboards/clueboard/2x1800/2018/keymaps/default_7u/keymap.c
new file mode 100644
index 000000000..5a1a00c19
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/default_7u/keymap.c
@@ -0,0 +1,49 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_7u_space(
20 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL,
21
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
29
30
31#ifdef AUDIO_ENABLE
32 float song_one_up[][2] = SONG(ONE_UP_SOUND);
33#endif
34
35volatile uint8_t runonce = true;
36static uint16_t my_timer;
37
38void matrix_init_user(void) {
39 my_timer = timer_read();
40}
41
42void matrix_scan_user(void) {
43 if (runonce && timer_elapsed(my_timer) > 500) {
44 runonce = false;
45#ifdef AUDIO_ENABLE
46 PLAY_SONG(song_one_up);
47#endif
48 }
49}
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/default_7u/readme.md b/keyboards/clueboard/2x1800/2018/keymaps/default_7u/readme.md
new file mode 100644
index 000000000..f5718e842
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/default_7u/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 7u spacebar
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/macroboard/keymap.c b/keyboards/clueboard/2x1800/2018/keymaps/macroboard/keymap.c
new file mode 100644
index 000000000..8a1e4ac5c
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/macroboard/keymap.c
@@ -0,0 +1,123 @@
1/* Copyright 2017 Zach White <[email protected]>
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 custom_keycodes {
19 MACRO01 = SAFE_RANGE,
20 MACRO02,
21 MACRO03,
22 MACRO04,
23 MACRO05,
24 MACRO06,
25 MACRO07,
26 MACRO08,
27 MACRO09,
28 MACRO10,
29 MACRO11,
30 MACRO12,
31 MACRO13,
32 MACRO14,
33 MACRO15,
34 MACRO16,
35 MACRO17,
36 MACRO18,
37 MACRO19,
38 MACRO20,
39 MACRO21,
40};
41
42const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
43[0] = LAYOUT(
44 MACRO01, MACRO02, MACRO03, MACRO04, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
45
46 MACRO05, MACRO06, MACRO07, MACRO08, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
47 MACRO09, MACRO10, MACRO11, MACRO12, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PSLS,
48 MACRO13, MACRO14, MACRO15, 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_P4, KC_P5, KC_P6,
49 MACRO16, MACRO17, MACRO18, MACRO19, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
50 MACRO20, MACRO21, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
51)
52};
53
54bool process_record_user(uint16_t keycode, keyrecord_t *record) {
55 if (record->event.pressed) {
56 switch(keycode) {
57 case MACRO01:
58 SEND_STRING("This is macro 01");
59 return false;
60 case MACRO02:
61 SEND_STRING("This is macro 02");
62 return false;
63 case MACRO03:
64 SEND_STRING("This is macro 03");
65 return false;
66 case MACRO04:
67 SEND_STRING("This is macro 04");
68 return false;
69 case MACRO05:
70 SEND_STRING("This is macro 05");
71 return false;
72 case MACRO06:
73 SEND_STRING("This is macro 06");
74 return false;
75 case MACRO07:
76 SEND_STRING("This is macro 07");
77 return false;
78 case MACRO08:
79 SEND_STRING("This is macro 08");
80 return false;
81 case MACRO09:
82 SEND_STRING("This is macro 09");
83 return false;
84 case MACRO10:
85 SEND_STRING("This is macro 10");
86 return false;
87 case MACRO11:
88 SEND_STRING("This is macro 11");
89 return false;
90 case MACRO12:
91 SEND_STRING("This is macro 12");
92 return false;
93 case MACRO13:
94 SEND_STRING("This is macro 13");
95 return false;
96 case MACRO14:
97 SEND_STRING("This is macro 14");
98 return false;
99 case MACRO15:
100 SEND_STRING("This is macro 15");
101 return false;
102 case MACRO16:
103 SEND_STRING("This is macro 16");
104 return false;
105 case MACRO17:
106 SEND_STRING("This is macro 17");
107 return false;
108 case MACRO18:
109 SEND_STRING("This is macro 18");
110 return false;
111 case MACRO19:
112 SEND_STRING("This is macro 19");
113 return false;
114 case MACRO20:
115 SEND_STRING("This is macro 20");
116 return false;
117 case MACRO21:
118 SEND_STRING("This is macro 21");
119 return false;
120 }
121 }
122 return true;
123};
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/macroboard/readme.md b/keyboards/clueboard/2x1800/2018/keymaps/macroboard/readme.md
new file mode 100644
index 000000000..61c9468e7
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/macroboard/readme.md
@@ -0,0 +1 @@
# A macro keymap template
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_left/keymap.c b/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_left/keymap.c
new file mode 100644
index 000000000..02d142132
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_left/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT(
20 KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
21
22 KC_NO, KC_NO, KC_BTN4, KC_BTN5, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_WH_U, KC_NO, KC_MS_U, KC_NO, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_MS_L, KC_BTN3, KC_MS_R, 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_P4, KC_P5, KC_P6,
25 KC_WH_D, KC_BTN1, KC_MS_D, KC_BTN2, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_WH_L, KC_WH_R, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_left/readme.md b/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_left/readme.md
new file mode 100644
index 000000000..41304eca5
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_left/readme.md
@@ -0,0 +1 @@
# Mouse keys in the left numpad
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_right/keymap.c b/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_right/keymap.c
new file mode 100644
index 000000000..1640229f9
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_right/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT(
20 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
21
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO, KC_ACL0, KC_ACL1, KC_ACL2,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_NO, KC_MS_U, KC_NO, KC_WH_U,
24 KC_P4, KC_P5, KC_P6, 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_MS_L, KC_BTN3, KC_MS_R,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_BTN1, KC_MS_D, KC_BTN2, KC_WH_D,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_WH_L, KC_WH_R
27)
28};
diff --git a/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_right/readme.md b/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_right/readme.md
new file mode 100644
index 000000000..51939d634
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/keymaps/mouseboard_right/readme.md
@@ -0,0 +1 @@
# Mouse keys in the right numpad
diff --git a/keyboards/clueboard/2x1800/2018/readme.md b/keyboards/clueboard/2x1800/2018/readme.md
new file mode 100644
index 000000000..df4412de4
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/readme.md
@@ -0,0 +1,13 @@
1# Clueboard 2x1800
2
3Clueboard Double 1800 All The Way
4
5* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
6* Hardware Supported: Clueboard 2x1800 PCB
7* Hardware Availability: 2018 Apr 1 Group Buy
8
9Make example for this keyboard:
10
11 make clueboard/2x1800/2018:default
12
13See 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/clueboard/2x1800/2018/rules.mk b/keyboards/clueboard/2x1800/2018/rules.mk
new file mode 100644
index 000000000..6e7633bfe
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2018/rules.mk
@@ -0,0 +1 @@
# This file intentionally left blank
diff --git a/keyboards/clueboard/2x1800/2019/2019.c b/keyboards/clueboard/2x1800/2019/2019.c
new file mode 100644
index 000000000..40032cd66
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/2019.c
@@ -0,0 +1,181 @@
1/* Copyright 2017 Zach White <[email protected]>
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 "2019.h"
17
18void matrix_init_kb(void) {
19 // Set our LED pins as output
20 setPinOutput(D6);
21 setPinOutput(B4);
22 setPinOutput(B5);
23 setPinOutput(B6);
24
25 // Set our Tilt Sensor pins as input
26 setPinInputHigh(SHAKE_PIN_A);
27 setPinInputHigh(SHAKE_PIN_B);
28
29 // Run the keymap level init
30 matrix_init_user();
31}
32
33#ifdef DRAWING_ENABLE
34bool drawing_mode = false;
35bool btn1_pressed = false;
36bool btn2_pressed = false;
37bool btn3_pressed = false;
38bool btn4_pressed = false;
39
40void check_encoder_buttons(void) {
41 if (btn1_pressed && btn2_pressed && btn3_pressed && btn4_pressed) {
42 // All 4 buttons pressed, toggle drawing mode
43 if (drawing_mode) {
44 dprintf("Turning drawing mode off.\n");
45 drawing_mode = false;
46 writePinLow(D6);
47 unregister_code(KC_BTN1);
48 } else {
49 dprintf("Turning drawing mode on.\n");
50 drawing_mode = true;
51 writePinHigh(D6);
52 register_code(KC_BTN1);
53 }
54 }
55}
56#endif
57
58#ifdef SHAKE_ENABLE
59uint8_t tilt_state = 0x11;
60uint8_t detected_shakes = 0;
61static uint16_t shake_timer;
62#endif
63
64void matrix_scan_kb(void) {
65#ifdef SHAKE_ENABLE
66 // Read the current state of the tilt sensor. It is physically
67 // impossible for both pins to register a low state at the same time.
68 uint8_t tilt_read = (readPin(SHAKE_PIN_A) << 4) | readPin(SHAKE_PIN_B);
69
70 // Check to see if the tilt sensor has changed state since our last read
71 if (tilt_state != tilt_read) {
72 shake_timer = timer_read();
73 detected_shakes++;
74 tilt_state = tilt_read;
75 }
76
77 if ((detected_shakes > 0) && (timer_elapsed(shake_timer) > SHAKE_TIMEOUT)) {
78 if (detected_shakes > SHAKE_COUNT) {
79 dprintf("Shake triggered! We detected %d shakes.\n", detected_shakes);
80 tap_code16(SHAKE_KEY);
81 } else {
82 dprintf("Shake not triggered! We detected %d shakes.\n", detected_shakes);
83 }
84 detected_shakes = 0;
85 }
86#endif
87
88 matrix_scan_user();
89}
90
91bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
92#ifdef DRAWING_ENABLE
93 if (keycode == ENC_BTN1) {
94 if (record->event.pressed) {
95 btn1_pressed = true;
96 register_code(KC_BTN1);
97 } else {
98 btn1_pressed = false;
99 unregister_code(KC_BTN1);
100 }
101 }
102 if (keycode == ENC_BTN2) {
103 if (record->event.pressed) {
104 btn2_pressed = true;
105 register_code(KC_BTN2);
106 } else {
107 btn2_pressed = false;
108 unregister_code(KC_BTN2);
109 }
110 }
111 if (keycode == ENC_BTN3) {
112 if (record->event.pressed) {
113 btn3_pressed = true;
114 register_code(KC_BTN3);
115 } else {
116 btn3_pressed = false;
117 unregister_code(KC_BTN3);
118 }
119 }
120 if (keycode == ENC_BTN4) {
121 if (record->event.pressed) {
122 btn4_pressed = true;
123 register_code(KC_BTN4);
124 } else {
125 btn4_pressed = false;
126 unregister_code(KC_BTN4);
127 }
128 }
129
130 check_encoder_buttons();
131#endif
132
133 return process_record_user(keycode, record);
134}
135
136bool led_update_kb(led_t led_state) {
137 bool res = led_update_user(led_state);
138 if(res) {
139 writePin(B4, !led_state.num_lock);
140 writePin(B5, !led_state.caps_lock);
141 writePin(B6, !led_state.scroll_lock);
142 }
143
144 return res;
145}
146
147__attribute__((weak)) bool encoder_update_keymap(uint8_t index, bool clockwise) { return true; }
148__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return encoder_update_keymap(index, clockwise); }
149
150bool encoder_update_kb(uint8_t index, bool clockwise) {
151 if (!encoder_update_user(index, clockwise)) {
152 // Encoder 1, outside left
153 if (index == 0 && clockwise) {
154 tap_code(KC_MS_U); // turned right
155 } else if (index == 0) {
156 tap_code(KC_MS_D); // turned left
157 }
158
159 // Encoder 2, inside left
160 else if (index == 1 && clockwise) {
161 tap_code(KC_WH_D); // turned right
162 } else if (index == 1) {
163 tap_code(KC_WH_U); // turned left
164 }
165
166 // Encoder 3, inside right
167 else if (index == 2 && clockwise) {
168 tap_code(KC_VOLU); // turned right
169 } else if (index == 2) {
170 tap_code(KC_VOLD); // turned left
171 }
172
173 // Encoder 4, outside right
174 else if (index == 3 && clockwise) {
175 tap_code(KC_MS_R); // turned right
176 } else if (index == 3) {
177 tap_code(KC_MS_L); // turned left
178 }
179 }
180 return true;
181}
diff --git a/keyboards/clueboard/2x1800/2019/2019.h b/keyboards/clueboard/2x1800/2019/2019.h
new file mode 100644
index 000000000..5debfacc5
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/2019.h
@@ -0,0 +1,35 @@
1/* Copyright 2017 Zach White <[email protected]>
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#include "quantum.h"
19
20enum TWOx1800_keycodes {
21 ENC_BTN1 = SAFE_RANGE,
22 ENC_BTN2,
23 ENC_BTN3,
24 ENC_BTN4,
25 NEW_SAFE_RANGE
26};
27
28#undef SAFE_RANGE
29#define SAFE_RANGE NEW_SAFE_RANGE
30
31// Encoder update function that returns true/false
32bool encoder_update_keymap(uint8_t index, bool clockwise);
33
34// Encoder button combo check
35void check_encoder_buttons(void);
diff --git a/keyboards/clueboard/2x1800/2019/config.h b/keyboards/clueboard/2x1800/2019/config.h
new file mode 100644
index 000000000..162d41a2e
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/config.h
@@ -0,0 +1,50 @@
1/*
2Copyright 2017 Zach White <[email protected]>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/*
23 * Encoder Assignments
24 */
25#define ENCODERS_PAD_A { A5, A4, A2, A1 }
26#define ENCODERS_PAD_B { A6, A7, A3, A0 }
27#define ENCODER_RESOLUTION 4
28
29/* audio support */
30#define AUDIO_PIN_ALT B7
31#define AUDIO_PIN C4
32#define AUDIO_CLICKY
33
34/*
35 * Drawing mode
36 */
37#define DRAWING_ENABLE
38//#define UNDO_KEY LGUI(KC_Z) // What key to send for undo
39//#define UNDO_KEY LCTL(KC_Z)
40#define UNDO_KEY LGUI(KC_SLSH)
41
42/*
43 * Shake to undo configuration
44 */
45#define SHAKE_ENABLE
46#define SHAKE_PIN_A E4
47#define SHAKE_PIN_B E5
48#define SHAKE_TIMEOUT 500 // How long after shaking stops before we register it
49#define SHAKE_COUNT 8 // How many shakes it takes to activate
50#define SHAKE_KEY UNDO_KEY // What key to send after a shake
diff --git a/keyboards/clueboard/2x1800/2019/info.json b/keyboards/clueboard/2x1800/2019/info.json
new file mode 100644
index 000000000..a877cae8b
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/info.json
@@ -0,0 +1,1232 @@
1{
2 "manufacturer": "Clueboard",
3 "keyboard_name": "Clueboard 2x1800 2019",
4 "maintainer": "skullydazed",
5 "debounce": 5,
6 "processor": "at90usb1286",
7 "bootloader": "halfkay",
8 "diode_direction": "ROW2COL",
9 "features": {
10 "audio": true,
11 "bootmagic": false,
12 "command": true,
13 "console": true,
14 "encoder": true,
15 "extrakey": true,
16 "midi": false,
17 "mousekey": true,
18 "nkro": true,
19 "rgblight": false,
20 "unicode": false
21 },
22 "matrix_pins": {
23 "cols": ["D2", "D3", "D4", "D5", "D7", "E0", "E1", "B0", "E6", "B3", "B2"],
24 "rows": ["C0", "C1", "C2", "C3", "C7", "F7", "B1", "F2", "F3", "F4", "F5", "F6", "C6"]
25 },
26 "usb": {
27 "device_ver": "0x0001",
28 "pid": "0x23A0",
29 "vid": "0xC1ED"
30 },
31 "layout_aliases": {
32 "LAYOUT": "LAYOUT_all"
33 },
34 "layouts": {
35 "LAYOUT_1u_ansi": {
36 "layout": [
37 { "matrix": [12, 3], "w": 1, "x": 3, "y": 0 },
38 { "matrix": [12, 4], "w": 1, "x": 4, "y": 0 },
39 { "matrix": [12, 9], "w": 1, "x": 19, "y": 0 },
40 { "matrix": [12, 10], "w": 1, "x": 20, "y": 0 },
41 { "matrix": [0, 0], "w": 1, "x": 0, "y": 1.5 },
42 { "matrix": [0, 1], "w": 1, "x": 1, "y": 1.5 },
43 { "matrix": [0, 2], "w": 1, "x": 2, "y": 1.5 },
44 { "matrix": [0, 3], "w": 1, "x": 3, "y": 1.5 },
45 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 1.5 },
46 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 1.5 },
47 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 1.5 },
48 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 1.5 },
49 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 1.5 },
50 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 1.5 },
51 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 1.5 },
52 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 1.5 },
53 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 1.5 },
54 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 1.5 },
55 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 1.5 },
56 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 1.5 },
57 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 1.5 },
58 { "matrix": [6, 7], "w": 1, "x": 20, "y": 1.5 },
59 { "matrix": [6, 8], "w": 1, "x": 21, "y": 1.5 },
60 { "matrix": [6, 9], "w": 1, "x": 22, "y": 1.5 },
61 { "matrix": [6, 10], "w": 1, "x": 23, "y": 1.5 },
62 { "matrix": [1, 0], "w": 1, "x": 0, "y": 2.75 },
63 { "matrix": [1, 1], "w": 1, "x": 1, "y": 2.75 },
64 { "matrix": [1, 2], "w": 1, "x": 2, "y": 2.75 },
65 { "matrix": [1, 3], "w": 1, "x": 3, "y": 2.75 },
66 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 2.75 },
67 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.75 },
68 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 2.75 },
69 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 2.75 },
70 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 2.75 },
71 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 2.75 },
72 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 2.75 },
73 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 2.75 },
74 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 2.75 },
75 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 2.75 },
76 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 2.75 },
77 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 2.75 },
78 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 2.75 },
79 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 2.75 },
80 { "matrix": [7, 7], "w": 1, "x": 20, "y": 2.75 },
81 { "matrix": [7, 8], "w": 1, "x": 21, "y": 2.75 },
82 { "matrix": [7, 9], "w": 1, "x": 22, "y": 2.75 },
83 { "matrix": [7, 10], "w": 1, "x": 23, "y": 2.75 },
84 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 3.75 },
85 { "matrix": [2, 1], "w": 1, "x": 1, "y": 3.75 },
86 { "matrix": [2, 2], "w": 1, "x": 2, "y": 3.75 },
87 { "matrix": [2, 3], "w": 1, "x": 3, "y": 3.75 },
88 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 3.75 },
89 { "matrix": [2, 5], "w": 1, "x": 6, "y": 3.75 },
90 { "matrix": [2, 6], "w": 1, "x": 7, "y": 3.75 },
91 { "matrix": [2, 7], "w": 1, "x": 8, "y": 3.75 },
92 { "matrix": [2, 8], "w": 1, "x": 9, "y": 3.75 },
93 { "matrix": [2, 9], "w": 1, "x": 10, "y": 3.75 },
94 { "matrix": [2, 10], "w": 1, "x": 11, "y": 3.75 },
95 { "matrix": [8, 0], "w": 1, "x": 12, "y": 3.75 },
96 { "matrix": [8, 1], "w": 1, "x": 13, "y": 3.75 },
97 { "matrix": [8, 2], "w": 1, "x": 14, "y": 3.75 },
98 { "matrix": [8, 3], "w": 1, "x": 15, "y": 3.75 },
99 { "matrix": [8, 4], "w": 1, "x": 16, "y": 3.75 },
100 { "matrix": [8, 5], "w": 1, "x": 17, "y": 3.75 },
101 { "matrix": [8, 6], "w": 1.5, "x": 18, "y": 3.75 },
102 { "matrix": [8, 7], "w": 1, "x": 20, "y": 3.75 },
103 { "matrix": [8, 8], "w": 1, "x": 21, "y": 3.75 },
104 { "matrix": [8, 9], "w": 1, "x": 22, "y": 3.75 },
105 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 3.75 },
106 { "matrix": [3, 1], "w": 1, "x": 1, "y": 4.75 },
107 { "matrix": [3, 2], "w": 1, "x": 2, "y": 4.75 },
108 { "matrix": [3, 3], "w": 1, "x": 3, "y": 4.75 },
109 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 4.75 },
110 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 4.75 },
111 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 4.75 },
112 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 4.75 },
113 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 4.75 },
114 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 4.75 },
115 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 4.75 },
116 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 4.75 },
117 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 4.75 },
118 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 4.75 },
119 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 4.75 },
120 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 4.75 },
121 { "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 4.75 },
122 { "matrix": [9, 7], "w": 1, "x": 20, "y": 4.75 },
123 { "matrix": [9, 8], "w": 1, "x": 21, "y": 4.75 },
124 { "matrix": [9, 9], "w": 1, "x": 22, "y": 4.75 },
125 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 5.75 },
126 { "matrix": [4, 1], "w": 1, "x": 1, "y": 5.75 },
127 { "matrix": [4, 2], "w": 1, "x": 2, "y": 5.75 },
128 { "matrix": [4, 3], "w": 1, "x": 3, "y": 5.75 },
129 { "matrix": [4, 4], "w": 1, "x": 4.25, "y": 6 },
130 { "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 5.75 },
131 { "matrix": [4, 6], "w": 1, "x": 6.75, "y": 5.75 },
132 { "matrix": [4, 7], "w": 1, "x": 7.75, "y": 5.75 },
133 { "matrix": [4, 8], "w": 1, "x": 8.75, "y": 5.75 },
134 { "matrix": [4, 9], "w": 1, "x": 9.75, "y": 5.75 },
135 { "matrix": [4, 10], "w": 1, "x": 10.75, "y": 5.75 },
136 { "matrix": [10, 0], "w": 1, "x": 11.75, "y": 5.75 },
137 { "matrix": [10, 1], "w": 1, "x": 12.75, "y": 5.75 },
138 { "matrix": [10, 2], "w": 1, "x": 13.75, "y": 5.75 },
139 { "matrix": [10, 3], "w": 1, "x": 14.75, "y": 5.75 },
140 { "matrix": [10, 4], "w": 1, "x": 15.75, "y": 5.75 },
141 { "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 5.75 },
142 { "matrix": [9, 6], "w": 1, "x": 18.75, "y": 6 },
143 { "matrix": [10, 7], "w": 1, "x": 20, "y": 5.75 },
144 { "matrix": [10, 8], "w": 1, "x": 21, "y": 5.75 },
145 { "matrix": [10, 9], "w": 1, "x": 22, "y": 5.75 },
146 { "h": 2, "matrix": [10, 10], "w": 1, "x": 23, "y": 5.75 },
147 { "matrix": [5, 1], "w": 1, "x": 1, "y": 6.75 },
148 { "matrix": [5, 2], "w": 1, "x": 2, "y": 6.75 },
149 { "matrix": [5, 3], "w": 1, "x": 3.25, "y": 7 },
150 { "matrix": [5, 4], "w": 1, "x": 4.25, "y": 7 },
151 { "matrix": [5, 5], "w": 1, "x": 5.25, "y": 7 },
152 { "matrix": [5, 6], "w": 1, "x": 6.5, "y": 6.75 },
153 { "matrix": [5, 7], "w": 1, "x": 7.5, "y": 6.75 },
154 { "matrix": [5, 8], "w": 1, "x": 8.5, "y": 6.75 },
155 { "matrix": [5, 9], "w": 1, "x": 9.5, "y": 6.75 },
156 { "matrix": [5, 10], "w": 1, "x": 10.5, "y": 6.75 },
157 { "matrix": [11, 0], "w": 1, "x": 11.5, "y": 6.75 },
158 { "matrix": [11, 1], "w": 1, "x": 12.5, "y": 6.75 },
159 { "matrix": [11, 2], "w": 1, "x": 13.5, "y": 6.75 },
160 { "matrix": [11, 3], "w": 1, "x": 14.5, "y": 6.75 },
161 { "matrix": [11, 4], "w": 1, "x": 15.5, "y": 6.75 },
162 { "matrix": [11, 5], "w": 1, "x": 16.5, "y": 6.75 },
163 { "matrix": [10, 6], "w": 1, "x": 17.75, "y": 7 },
164 { "matrix": [11, 6], "w": 1, "x": 18.75, "y": 7 },
165 { "matrix": [11, 7], "w": 1, "x": 19.75, "y": 7 },
166 { "matrix": [11, 8], "w": 1, "x": 21, "y": 6.75 },
167 { "matrix": [11, 9], "w": 1, "x": 22, "y": 6.75 }
168 ]
169 },
170 "LAYOUT_1u_iso": {
171 "layout": [
172 { "matrix": [12, 3], "w": 1, "x": 3, "y": 0 },
173 { "matrix": [12, 4], "w": 1, "x": 4, "y": 0 },
174 { "matrix": [12, 9], "w": 1, "x": 19, "y": 0 },
175 { "matrix": [12, 10], "w": 1, "x": 20, "y": 0 },
176 { "matrix": [0, 0], "w": 1, "x": 0, "y": 1.5 },
177 { "matrix": [0, 1], "w": 1, "x": 1, "y": 1.5 },
178 { "matrix": [0, 2], "w": 1, "x": 2, "y": 1.5 },
179 { "matrix": [0, 3], "w": 1, "x": 3, "y": 1.5 },
180 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 1.5 },
181 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 1.5 },
182 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 1.5 },
183 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 1.5 },
184 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 1.5 },
185 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 1.5 },
186 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 1.5 },
187 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 1.5 },
188 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 1.5 },
189 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 1.5 },
190 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 1.5 },
191 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 1.5 },
192 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 1.5 },
193 { "matrix": [6, 7], "w": 1, "x": 20, "y": 1.5 },
194 { "matrix": [6, 8], "w": 1, "x": 21, "y": 1.5 },
195 { "matrix": [6, 9], "w": 1, "x": 22, "y": 1.5 },
196 { "matrix": [6, 10], "w": 1, "x": 23, "y": 1.5 },
197 { "matrix": [1, 0], "w": 1, "x": 0, "y": 2.75 },
198 { "matrix": [1, 1], "w": 1, "x": 1, "y": 2.75 },
199 { "matrix": [1, 2], "w": 1, "x": 2, "y": 2.75 },
200 { "matrix": [1, 3], "w": 1, "x": 3, "y": 2.75 },
201 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 2.75 },
202 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.75 },
203 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 2.75 },
204 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 2.75 },
205 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 2.75 },
206 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 2.75 },
207 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 2.75 },
208 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 2.75 },
209 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 2.75 },
210 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 2.75 },
211 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 2.75 },
212 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 2.75 },
213 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 2.75 },
214 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 2.75 },
215 { "matrix": [7, 7], "w": 1, "x": 20, "y": 2.75 },
216 { "matrix": [7, 8], "w": 1, "x": 21, "y": 2.75 },
217 { "matrix": [7, 9], "w": 1, "x": 22, "y": 2.75 },
218 { "matrix": [7, 10], "w": 1, "x": 23, "y": 2.75 },
219 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 3.75 },
220 { "matrix": [2, 1], "w": 1, "x": 1, "y": 3.75 },
221 { "matrix": [2, 2], "w": 1, "x": 2, "y": 3.75 },
222 { "matrix": [2, 3], "w": 1, "x": 3, "y": 3.75 },
223 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 3.75 },
224 { "matrix": [2, 5], "w": 1, "x": 6, "y": 3.75 },
225 { "matrix": [2, 6], "w": 1, "x": 7, "y": 3.75 },
226 { "matrix": [2, 7], "w": 1, "x": 8, "y": 3.75 },
227 { "matrix": [2, 8], "w": 1, "x": 9, "y": 3.75 },
228 { "matrix": [2, 9], "w": 1, "x": 10, "y": 3.75 },
229 { "matrix": [2, 10], "w": 1, "x": 11, "y": 3.75 },
230 { "matrix": [8, 0], "w": 1, "x": 12, "y": 3.75 },
231 { "matrix": [8, 1], "w": 1, "x": 13, "y": 3.75 },
232 { "matrix": [8, 2], "w": 1, "x": 14, "y": 3.75 },
233 { "matrix": [8, 3], "w": 1, "x": 15, "y": 3.75 },
234 { "matrix": [8, 4], "w": 1, "x": 16, "y": 3.75 },
235 { "matrix": [8, 5], "w": 1, "x": 17, "y": 3.75 },
236 { "matrix": [8, 7], "w": 1, "x": 20, "y": 3.75 },
237 { "matrix": [8, 8], "w": 1, "x": 21, "y": 3.75 },
238 { "matrix": [8, 9], "w": 1, "x": 22, "y": 3.75 },
239 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 3.75 },
240 { "matrix": [3, 1], "w": 1, "x": 1, "y": 4.75 },
241 { "matrix": [3, 2], "w": 1, "x": 2, "y": 4.75 },
242 { "matrix": [3, 3], "w": 1, "x": 3, "y": 4.75 },
243 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 4.75 },
244 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 4.75 },
245 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 4.75 },
246 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 4.75 },
247 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 4.75 },
248 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 4.75 },
249 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 4.75 },
250 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 4.75 },
251 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 4.75 },
252 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 4.75 },
253 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 4.75 },
254 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 4.75 },
255 { "matrix": [9, 10], "w": 1, "x": 17.25, "y": 4.75 },
256 { "h": 2, "matrix": [9, 5], "w": 1.25, "x": 18.25, "y": 3.75 },
257 { "matrix": [9, 7], "w": 1, "x": 20, "y": 4.75 },
258 { "matrix": [9, 8], "w": 1, "x": 21, "y": 4.75 },
259 { "matrix": [9, 9], "w": 1, "x": 22, "y": 4.75 },
260 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 5.75 },
261 { "matrix": [4, 1], "w": 1, "x": 1, "y": 5.75 },
262 { "matrix": [4, 2], "w": 1, "x": 2, "y": 5.75 },
263 { "matrix": [4, 3], "w": 1, "x": 3, "y": 5.75 },
264 { "matrix": [4, 4], "w": 1, "x": 4.25, "y": 6 },
265 { "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 5.75 },
266 { "matrix": [4, 6], "w": 1, "x": 6.75, "y": 5.75 },
267 { "matrix": [4, 7], "w": 1, "x": 7.75, "y": 5.75 },
268 { "matrix": [4, 8], "w": 1, "x": 8.75, "y": 5.75 },
269 { "matrix": [4, 9], "w": 1, "x": 9.75, "y": 5.75 },
270 { "matrix": [4, 10], "w": 1, "x": 10.75, "y": 5.75 },
271 { "matrix": [10, 0], "w": 1, "x": 11.75, "y": 5.75 },
272 { "matrix": [10, 1], "w": 1, "x": 12.75, "y": 5.75 },
273 { "matrix": [10, 2], "w": 1, "x": 13.75, "y": 5.75 },
274 { "matrix": [10, 3], "w": 1, "x": 14.75, "y": 5.75 },
275 { "matrix": [10, 4], "w": 1, "x": 15.75, "y": 5.75 },
276 { "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 5.75 },
277 { "matrix": [9, 6], "w": 1, "x": 18.75, "y": 6 },
278 { "matrix": [10, 7], "w": 1, "x": 20, "y": 5.75 },
279 { "matrix": [10, 8], "w": 1, "x": 21, "y": 5.75 },
280 { "matrix": [10, 9], "w": 1, "x": 22, "y": 5.75 },
281 { "h": 2, "matrix": [10, 10], "w": 1, "x": 23, "y": 5.75 },
282 { "matrix": [5, 1], "w": 1, "x": 1, "y": 6.75 },
283 { "matrix": [5, 2], "w": 1, "x": 2, "y": 6.75 },
284 { "matrix": [5, 3], "w": 1, "x": 3.25, "y": 7 },
285 { "matrix": [5, 4], "w": 1, "x": 4.25, "y": 7 },
286 { "matrix": [5, 5], "w": 1, "x": 5.25, "y": 7 },
287 { "matrix": [5, 6], "w": 1, "x": 6.5, "y": 6.75 },
288 { "matrix": [5, 7], "w": 1, "x": 7.5, "y": 6.75 },
289 { "matrix": [5, 8], "w": 1, "x": 8.5, "y": 6.75 },
290 { "matrix": [5, 9], "w": 1, "x": 9.5, "y": 6.75 },
291 { "matrix": [5, 10], "w": 1, "x": 10.5, "y": 6.75 },
292 { "matrix": [11, 0], "w": 1, "x": 11.5, "y": 6.75 },
293 { "matrix": [11, 1], "w": 1, "x": 12.5, "y": 6.75 },
294 { "matrix": [11, 2], "w": 1, "x": 13.5, "y": 6.75 },
295 { "matrix": [11, 3], "w": 1, "x": 14.5, "y": 6.75 },
296 { "matrix": [11, 4], "w": 1, "x": 15.5, "y": 6.75 },
297 { "matrix": [11, 5], "w": 1, "x": 16.5, "y": 6.75 },
298 { "matrix": [10, 6], "w": 1, "x": 17.75, "y": 7 },
299 { "matrix": [11, 6], "w": 1, "x": 18.75, "y": 7 },
300 { "matrix": [11, 7], "w": 1, "x": 19.75, "y": 7 },
301 { "matrix": [11, 8], "w": 1, "x": 21, "y": 6.75 },
302 { "matrix": [11, 9], "w": 1, "x": 22, "y": 6.75 }
303 ]
304 },
305 "LAYOUT_2u_ansi": {
306 "layout": [
307 { "matrix": [12, 3], "w": 1, "x": 3, "y": 0 },
308 { "matrix": [12, 4], "w": 1, "x": 4, "y": 0 },
309 { "matrix": [12, 9], "w": 1, "x": 19, "y": 0 },
310 { "matrix": [12, 10], "w": 1, "x": 20, "y": 0 },
311 { "matrix": [0, 0], "w": 1, "x": 0, "y": 1.5 },
312 { "matrix": [0, 1], "w": 1, "x": 1, "y": 1.5 },
313 { "matrix": [0, 2], "w": 1, "x": 2, "y": 1.5 },
314 { "matrix": [0, 3], "w": 1, "x": 3, "y": 1.5 },
315 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 1.5 },
316 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 1.5 },
317 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 1.5 },
318 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 1.5 },
319 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 1.5 },
320 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 1.5 },
321 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 1.5 },
322 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 1.5 },
323 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 1.5 },
324 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 1.5 },
325 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 1.5 },
326 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 1.5 },
327 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 1.5 },
328 { "matrix": [6, 7], "w": 1, "x": 20, "y": 1.5 },
329 { "matrix": [6, 8], "w": 1, "x": 21, "y": 1.5 },
330 { "matrix": [6, 9], "w": 1, "x": 22, "y": 1.5 },
331 { "matrix": [6, 10], "w": 1, "x": 23, "y": 1.5 },
332 { "matrix": [1, 0], "w": 1, "x": 0, "y": 2.75 },
333 { "matrix": [1, 1], "w": 1, "x": 1, "y": 2.75 },
334 { "matrix": [1, 2], "w": 1, "x": 2, "y": 2.75 },
335 { "matrix": [1, 3], "w": 1, "x": 3, "y": 2.75 },
336 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 2.75 },
337 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.75 },
338 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 2.75 },
339 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 2.75 },
340 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 2.75 },
341 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 2.75 },
342 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 2.75 },
343 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 2.75 },
344 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 2.75 },
345 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 2.75 },
346 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 2.75 },
347 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 2.75 },
348 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 2.75 },
349 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 2.75 },
350 { "matrix": [7, 7], "w": 1, "x": 20, "y": 2.75 },
351 { "matrix": [7, 8], "w": 1, "x": 21, "y": 2.75 },
352 { "matrix": [7, 9], "w": 1, "x": 22, "y": 2.75 },
353 { "matrix": [7, 10], "w": 1, "x": 23, "y": 2.75 },
354 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 3.75 },
355 { "matrix": [2, 1], "w": 1, "x": 1, "y": 3.75 },
356 { "matrix": [2, 2], "w": 1, "x": 2, "y": 3.75 },
357 { "matrix": [2, 3], "w": 1, "x": 3, "y": 3.75 },
358 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 3.75 },
359 { "matrix": [2, 5], "w": 1, "x": 6, "y": 3.75 },
360 { "matrix": [2, 6], "w": 1, "x": 7, "y": 3.75 },
361 { "matrix": [2, 7], "w": 1, "x": 8, "y": 3.75 },
362 { "matrix": [2, 8], "w": 1, "x": 9, "y": 3.75 },
363 { "matrix": [2, 9], "w": 1, "x": 10, "y": 3.75 },
364 { "matrix": [2, 10], "w": 1, "x": 11, "y": 3.75 },
365 { "matrix": [8, 0], "w": 1, "x": 12, "y": 3.75 },
366 { "matrix": [8, 1], "w": 1, "x": 13, "y": 3.75 },
367 { "matrix": [8, 2], "w": 1, "x": 14, "y": 3.75 },
368 { "matrix": [8, 3], "w": 1, "x": 15, "y": 3.75 },
369 { "matrix": [8, 4], "w": 1, "x": 16, "y": 3.75 },
370 { "matrix": [8, 5], "w": 1, "x": 17, "y": 3.75 },
371 { "matrix": [8, 6], "w": 1.5, "x": 18, "y": 3.75 },
372 { "matrix": [8, 7], "w": 1, "x": 20, "y": 3.75 },
373 { "matrix": [8, 8], "w": 1, "x": 21, "y": 3.75 },
374 { "matrix": [8, 9], "w": 1, "x": 22, "y": 3.75 },
375 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 3.75 },
376 { "matrix": [3, 1], "w": 1, "x": 1, "y": 4.75 },
377 { "matrix": [3, 2], "w": 1, "x": 2, "y": 4.75 },
378 { "matrix": [3, 3], "w": 1, "x": 3, "y": 4.75 },
379 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 4.75 },
380 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 4.75 },
381 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 4.75 },
382 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 4.75 },
383 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 4.75 },
384 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 4.75 },
385 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 4.75 },
386 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 4.75 },
387 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 4.75 },
388 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 4.75 },
389 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 4.75 },
390 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 4.75 },
391 { "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 4.75 },
392 { "matrix": [9, 7], "w": 1, "x": 20, "y": 4.75 },
393 { "matrix": [9, 8], "w": 1, "x": 21, "y": 4.75 },
394 { "matrix": [9, 9], "w": 1, "x": 22, "y": 4.75 },
395 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 5.75 },
396 { "matrix": [4, 1], "w": 1, "x": 1, "y": 5.75 },
397 { "matrix": [4, 2], "w": 1, "x": 2, "y": 5.75 },
398 { "matrix": [4, 3], "w": 1, "x": 3, "y": 5.75 },
399 { "matrix": [4, 4], "w": 1, "x": 4.25, "y": 6 },
400 { "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 5.75 },
401 { "matrix": [4, 6], "w": 1, "x": 6.75, "y": 5.75 },
402 { "matrix": [4, 7], "w": 1, "x": 7.75, "y": 5.75 },
403 { "matrix": [4, 8], "w": 1, "x": 8.75, "y": 5.75 },
404 { "matrix": [4, 9], "w": 1, "x": 9.75, "y": 5.75 },
405 { "matrix": [4, 10], "w": 1, "x": 10.75, "y": 5.75 },
406 { "matrix": [10, 0], "w": 1, "x": 11.75, "y": 5.75 },
407 { "matrix": [10, 1], "w": 1, "x": 12.75, "y": 5.75 },
408 { "matrix": [10, 2], "w": 1, "x": 13.75, "y": 5.75 },
409 { "matrix": [10, 3], "w": 1, "x": 14.75, "y": 5.75 },
410 { "matrix": [10, 4], "w": 1, "x": 15.75, "y": 5.75 },
411 { "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 5.75 },
412 { "matrix": [9, 6], "w": 1, "x": 18.75, "y": 6 },
413 { "matrix": [10, 7], "w": 1, "x": 20, "y": 5.75 },
414 { "matrix": [10, 8], "w": 1, "x": 21, "y": 5.75 },
415 { "matrix": [10, 9], "w": 1, "x": 22, "y": 5.75 },
416 { "h": 2, "matrix": [10, 10], "w": 1, "x": 23, "y": 5.75 },
417 { "matrix": [5, 1], "w": 1, "x": 1, "y": 6.75 },
418 { "matrix": [5, 2], "w": 1, "x": 2, "y": 6.75 },
419 { "matrix": [5, 3], "w": 1, "x": 3.25, "y": 7 },
420 { "matrix": [5, 4], "w": 1, "x": 4.25, "y": 7 },
421 { "matrix": [5, 5], "w": 1, "x": 5.25, "y": 7 },
422 { "matrix": [5, 6], "w": 1, "x": 6.5, "y": 6.75 },
423 { "matrix": [5, 7], "w": 1, "x": 7.5, "y": 6.75 },
424 { "matrix": [5, 8], "w": 1, "x": 8.5, "y": 6.75 },
425 { "matrix": [5, 9], "w": 1, "x": 9.5, "y": 6.75 },
426 { "matrix": [11, 0], "w": 2, "x": 10.5, "y": 6.75 },
427 { "matrix": [11, 1], "w": 1, "x": 12.5, "y": 6.75 },
428 { "matrix": [11, 2], "w": 1, "x": 13.5, "y": 6.75 },
429 { "matrix": [11, 3], "w": 1, "x": 14.5, "y": 6.75 },
430 { "matrix": [11, 4], "w": 1, "x": 15.5, "y": 6.75 },
431 { "matrix": [11, 5], "w": 1, "x": 16.5, "y": 6.75 },
432 { "matrix": [10, 6], "w": 1, "x": 17.75, "y": 7 },
433 { "matrix": [11, 6], "w": 1, "x": 18.75, "y": 7 },
434 { "matrix": [11, 7], "w": 1, "x": 19.75, "y": 7 },
435 { "matrix": [11, 8], "w": 1, "x": 21, "y": 6.75 },
436 { "matrix": [11, 9], "w": 1, "x": 22, "y": 6.75 }
437 ]
438 },
439 "LAYOUT_2u_iso": {
440 "layout": [
441 { "matrix": [12, 3], "w": 1, "x": 3, "y": 0 },
442 { "matrix": [12, 4], "w": 1, "x": 4, "y": 0 },
443 { "matrix": [12, 9], "w": 1, "x": 19, "y": 0 },
444 { "matrix": [12, 10], "w": 1, "x": 20, "y": 0 },
445 { "matrix": [0, 0], "w": 1, "x": 0, "y": 1.5 },
446 { "matrix": [0, 1], "w": 1, "x": 1, "y": 1.5 },
447 { "matrix": [0, 2], "w": 1, "x": 2, "y": 1.5 },
448 { "matrix": [0, 3], "w": 1, "x": 3, "y": 1.5 },
449 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 1.5 },
450 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 1.5 },
451 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 1.5 },
452 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 1.5 },
453 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 1.5 },
454 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 1.5 },
455 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 1.5 },
456 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 1.5 },
457 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 1.5 },
458 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 1.5 },
459 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 1.5 },
460 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 1.5 },
461 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 1.5 },
462 { "matrix": [6, 7], "w": 1, "x": 20, "y": 1.5 },
463 { "matrix": [6, 8], "w": 1, "x": 21, "y": 1.5 },
464 { "matrix": [6, 9], "w": 1, "x": 22, "y": 1.5 },
465 { "matrix": [6, 10], "w": 1, "x": 23, "y": 1.5 },
466 { "matrix": [1, 0], "w": 1, "x": 0, "y": 2.75 },
467 { "matrix": [1, 1], "w": 1, "x": 1, "y": 2.75 },
468 { "matrix": [1, 2], "w": 1, "x": 2, "y": 2.75 },
469 { "matrix": [1, 3], "w": 1, "x": 3, "y": 2.75 },
470 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 2.75 },
471 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.75 },
472 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 2.75 },
473 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 2.75 },
474 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 2.75 },
475 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 2.75 },
476 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 2.75 },
477 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 2.75 },
478 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 2.75 },
479 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 2.75 },
480 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 2.75 },
481 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 2.75 },
482 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 2.75 },
483 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 2.75 },
484 { "matrix": [7, 7], "w": 1, "x": 20, "y": 2.75 },
485 { "matrix": [7, 8], "w": 1, "x": 21, "y": 2.75 },
486 { "matrix": [7, 9], "w": 1, "x": 22, "y": 2.75 },
487 { "matrix": [7, 10], "w": 1, "x": 23, "y": 2.75 },
488 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 3.75 },
489 { "matrix": [2, 1], "w": 1, "x": 1, "y": 3.75 },
490 { "matrix": [2, 2], "w": 1, "x": 2, "y": 3.75 },
491 { "matrix": [2, 3], "w": 1, "x": 3, "y": 3.75 },
492 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 3.75 },
493 { "matrix": [2, 5], "w": 1, "x": 6, "y": 3.75 },
494 { "matrix": [2, 6], "w": 1, "x": 7, "y": 3.75 },
495 { "matrix": [2, 7], "w": 1, "x": 8, "y": 3.75 },
496 { "matrix": [2, 8], "w": 1, "x": 9, "y": 3.75 },
497 { "matrix": [2, 9], "w": 1, "x": 10, "y": 3.75 },
498 { "matrix": [2, 10], "w": 1, "x": 11, "y": 3.75 },
499 { "matrix": [8, 0], "w": 1, "x": 12, "y": 3.75 },
500 { "matrix": [8, 1], "w": 1, "x": 13, "y": 3.75 },
501 { "matrix": [8, 2], "w": 1, "x": 14, "y": 3.75 },
502 { "matrix": [8, 3], "w": 1, "x": 15, "y": 3.75 },
503 { "matrix": [8, 4], "w": 1, "x": 16, "y": 3.75 },
504 { "matrix": [8, 5], "w": 1, "x": 17, "y": 3.75 },
505 { "matrix": [8, 7], "w": 1, "x": 20, "y": 3.75 },
506 { "matrix": [8, 8], "w": 1, "x": 21, "y": 3.75 },
507 { "matrix": [8, 9], "w": 1, "x": 22, "y": 3.75 },
508 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 3.75 },
509 { "matrix": [3, 1], "w": 1, "x": 1, "y": 4.75 },
510 { "matrix": [3, 2], "w": 1, "x": 2, "y": 4.75 },
511 { "matrix": [3, 3], "w": 1, "x": 3, "y": 4.75 },
512 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 4.75 },
513 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 4.75 },
514 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 4.75 },
515 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 4.75 },
516 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 4.75 },
517 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 4.75 },
518 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 4.75 },
519 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 4.75 },
520 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 4.75 },
521 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 4.75 },
522 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 4.75 },
523 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 4.75 },
524 { "matrix": [9, 10], "w": 1, "x": 17.25, "y": 4.75 },
525 { "h": 2, "matrix": [9, 5], "w": 1.25, "x": 18.25, "y": 3.75 },
526 { "matrix": [9, 7], "w": 1, "x": 20, "y": 4.75 },
527 { "matrix": [9, 8], "w": 1, "x": 21, "y": 4.75 },
528 { "matrix": [9, 9], "w": 1, "x": 22, "y": 4.75 },
529 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 5.75 },
530 { "matrix": [4, 1], "w": 1, "x": 1, "y": 5.75 },
531 { "matrix": [4, 2], "w": 1, "x": 2, "y": 5.75 },
532 { "matrix": [4, 3], "w": 1, "x": 3, "y": 5.75 },
533 { "matrix": [4, 4], "w": 1, "x": 4.25, "y": 6 },
534 { "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 5.75 },
535 { "matrix": [4, 6], "w": 1, "x": 6.75, "y": 5.75 },
536 { "matrix": [4, 7], "w": 1, "x": 7.75, "y": 5.75 },
537 { "matrix": [4, 8], "w": 1, "x": 8.75, "y": 5.75 },
538 { "matrix": [4, 9], "w": 1, "x": 9.75, "y": 5.75 },
539 { "matrix": [4, 10], "w": 1, "x": 10.75, "y": 5.75 },
540 { "matrix": [10, 0], "w": 1, "x": 11.75, "y": 5.75 },
541 { "matrix": [10, 1], "w": 1, "x": 12.75, "y": 5.75 },
542 { "matrix": [10, 2], "w": 1, "x": 13.75, "y": 5.75 },
543 { "matrix": [10, 3], "w": 1, "x": 14.75, "y": 5.75 },
544 { "matrix": [10, 4], "w": 1, "x": 15.75, "y": 5.75 },
545 { "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 5.75 },
546 { "matrix": [9, 6], "w": 1, "x": 18.75, "y": 6 },
547 { "matrix": [10, 7], "w": 1, "x": 20, "y": 5.75 },
548 { "matrix": [10, 8], "w": 1, "x": 21, "y": 5.75 },
549 { "matrix": [10, 9], "w": 1, "x": 22, "y": 5.75 },
550 { "h": 2, "matrix": [10, 10], "w": 1, "x": 23, "y": 5.75 },
551 { "matrix": [5, 1], "w": 1, "x": 1, "y": 6.75 },
552 { "matrix": [5, 2], "w": 1, "x": 2, "y": 6.75 },
553 { "matrix": [5, 3], "w": 1, "x": 3.25, "y": 7 },
554 { "matrix": [5, 4], "w": 1, "x": 4.25, "y": 7 },
555 { "matrix": [5, 5], "w": 1, "x": 5.25, "y": 7 },
556 { "matrix": [5, 6], "w": 1, "x": 6.5, "y": 6.75 },
557 { "matrix": [5, 7], "w": 1, "x": 7.5, "y": 6.75 },
558 { "matrix": [5, 8], "w": 1, "x": 8.5, "y": 6.75 },
559 { "matrix": [5, 9], "w": 1, "x": 9.5, "y": 6.75 },
560 { "matrix": [11, 0], "w": 2, "x": 10.5, "y": 6.75 },
561 { "matrix": [11, 1], "w": 1, "x": 12.5, "y": 6.75 },
562 { "matrix": [11, 2], "w": 1, "x": 13.5, "y": 6.75 },
563 { "matrix": [11, 3], "w": 1, "x": 14.5, "y": 6.75 },
564 { "matrix": [11, 4], "w": 1, "x": 15.5, "y": 6.75 },
565 { "matrix": [11, 5], "w": 1, "x": 16.5, "y": 6.75 },
566 { "matrix": [10, 6], "w": 1, "x": 17.75, "y": 7 },
567 { "matrix": [11, 6], "w": 1, "x": 18.75, "y": 7 },
568 { "matrix": [11, 7], "w": 1, "x": 19.75, "y": 7 },
569 { "matrix": [11, 8], "w": 1, "x": 21, "y": 6.75 },
570 { "matrix": [11, 9], "w": 1, "x": 22, "y": 6.75 }
571 ]
572 },
573 "LAYOUT_4u_ansi": {
574 "layout": [
575 { "matrix": [12, 3], "w": 1, "x": 3, "y": 0 },
576 { "matrix": [12, 4], "w": 1, "x": 4, "y": 0 },
577 { "matrix": [12, 9], "w": 1, "x": 19, "y": 0 },
578 { "matrix": [12, 10], "w": 1, "x": 20, "y": 0 },
579 { "matrix": [0, 0], "w": 1, "x": 0, "y": 1.5 },
580 { "matrix": [0, 1], "w": 1, "x": 1, "y": 1.5 },
581 { "matrix": [0, 2], "w": 1, "x": 2, "y": 1.5 },
582 { "matrix": [0, 3], "w": 1, "x": 3, "y": 1.5 },
583 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 1.5 },
584 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 1.5 },
585 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 1.5 },
586 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 1.5 },
587 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 1.5 },
588 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 1.5 },
589 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 1.5 },
590 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 1.5 },
591 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 1.5 },
592 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 1.5 },
593 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 1.5 },
594 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 1.5 },
595 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 1.5 },
596 { "matrix": [6, 7], "w": 1, "x": 20, "y": 1.5 },
597 { "matrix": [6, 8], "w": 1, "x": 21, "y": 1.5 },
598 { "matrix": [6, 9], "w": 1, "x": 22, "y": 1.5 },
599 { "matrix": [6, 10], "w": 1, "x": 23, "y": 1.5 },
600 { "matrix": [1, 0], "w": 1, "x": 0, "y": 2.75 },
601 { "matrix": [1, 1], "w": 1, "x": 1, "y": 2.75 },
602 { "matrix": [1, 2], "w": 1, "x": 2, "y": 2.75 },
603 { "matrix": [1, 3], "w": 1, "x": 3, "y": 2.75 },
604 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 2.75 },
605 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.75 },
606 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 2.75 },
607 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 2.75 },
608 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 2.75 },
609 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 2.75 },
610 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 2.75 },
611 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 2.75 },
612 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 2.75 },
613 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 2.75 },
614 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 2.75 },
615 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 2.75 },
616 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 2.75 },
617 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 2.75 },
618 { "matrix": [7, 7], "w": 1, "x": 20, "y": 2.75 },
619 { "matrix": [7, 8], "w": 1, "x": 21, "y": 2.75 },
620 { "matrix": [7, 9], "w": 1, "x": 22, "y": 2.75 },
621 { "matrix": [7, 10], "w": 1, "x": 23, "y": 2.75 },
622 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 3.75 },
623 { "matrix": [2, 1], "w": 1, "x": 1, "y": 3.75 },
624 { "matrix": [2, 2], "w": 1, "x": 2, "y": 3.75 },
625 { "matrix": [2, 3], "w": 1, "x": 3, "y": 3.75 },
626 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 3.75 },
627 { "matrix": [2, 5], "w": 1, "x": 6, "y": 3.75 },
628 { "matrix": [2, 6], "w": 1, "x": 7, "y": 3.75 },
629 { "matrix": [2, 7], "w": 1, "x": 8, "y": 3.75 },
630 { "matrix": [2, 8], "w": 1, "x": 9, "y": 3.75 },
631 { "matrix": [2, 9], "w": 1, "x": 10, "y": 3.75 },
632 { "matrix": [2, 10], "w": 1, "x": 11, "y": 3.75 },
633 { "matrix": [8, 0], "w": 1, "x": 12, "y": 3.75 },
634 { "matrix": [8, 1], "w": 1, "x": 13, "y": 3.75 },
635 { "matrix": [8, 2], "w": 1, "x": 14, "y": 3.75 },
636 { "matrix": [8, 3], "w": 1, "x": 15, "y": 3.75 },
637 { "matrix": [8, 4], "w": 1, "x": 16, "y": 3.75 },
638 { "matrix": [8, 5], "w": 1, "x": 17, "y": 3.75 },
639 { "matrix": [8, 6], "w": 1.5, "x": 18, "y": 3.75 },
640 { "matrix": [8, 7], "w": 1, "x": 20, "y": 3.75 },
641 { "matrix": [8, 8], "w": 1, "x": 21, "y": 3.75 },
642 { "matrix": [8, 9], "w": 1, "x": 22, "y": 3.75 },
643 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 3.75 },
644 { "matrix": [3, 1], "w": 1, "x": 1, "y": 4.75 },
645 { "matrix": [3, 2], "w": 1, "x": 2, "y": 4.75 },
646 { "matrix": [3, 3], "w": 1, "x": 3, "y": 4.75 },
647 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 4.75 },
648 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 4.75 },
649 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 4.75 },
650 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 4.75 },
651 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 4.75 },
652 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 4.75 },
653 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 4.75 },
654 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 4.75 },
655 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 4.75 },
656 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 4.75 },
657 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 4.75 },
658 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 4.75 },
659 { "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 4.75 },
660 { "matrix": [9, 7], "w": 1, "x": 20, "y": 4.75 },
661 { "matrix": [9, 8], "w": 1, "x": 21, "y": 4.75 },
662 { "matrix": [9, 9], "w": 1, "x": 22, "y": 4.75 },
663 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 5.75 },
664 { "matrix": [4, 1], "w": 1, "x": 1, "y": 5.75 },
665 { "matrix": [4, 2], "w": 1, "x": 2, "y": 5.75 },
666 { "matrix": [4, 3], "w": 1, "x": 3, "y": 5.75 },
667 { "matrix": [4, 4], "w": 1, "x": 4.25, "y": 6 },
668 { "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 5.75 },
669 { "matrix": [4, 6], "w": 1, "x": 6.75, "y": 5.75 },
670 { "matrix": [4, 7], "w": 1, "x": 7.75, "y": 5.75 },
671 { "matrix": [4, 8], "w": 1, "x": 8.75, "y": 5.75 },
672 { "matrix": [4, 9], "w": 1, "x": 9.75, "y": 5.75 },
673 { "matrix": [4, 10], "w": 1, "x": 10.75, "y": 5.75 },
674 { "matrix": [10, 0], "w": 1, "x": 11.75, "y": 5.75 },
675 { "matrix": [10, 1], "w": 1, "x": 12.75, "y": 5.75 },
676 { "matrix": [10, 2], "w": 1, "x": 13.75, "y": 5.75 },
677 { "matrix": [10, 3], "w": 1, "x": 14.75, "y": 5.75 },
678 { "matrix": [10, 4], "w": 1, "x": 15.75, "y": 5.75 },
679 { "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 5.75 },
680 { "matrix": [9, 6], "w": 1, "x": 18.75, "y": 6 },
681 { "matrix": [10, 7], "w": 1, "x": 20, "y": 5.75 },
682 { "matrix": [10, 8], "w": 1, "x": 21, "y": 5.75 },
683 { "matrix": [10, 9], "w": 1, "x": 22, "y": 5.75 },
684 { "h": 2, "matrix": [10, 10], "w": 1, "x": 23, "y": 5.75 },
685 { "matrix": [5, 1], "w": 1, "x": 1, "y": 6.75 },
686 { "matrix": [5, 2], "w": 1, "x": 2, "y": 6.75 },
687 { "matrix": [5, 3], "w": 1, "x": 3.25, "y": 7 },
688 { "matrix": [5, 4], "w": 1, "x": 4.25, "y": 7 },
689 { "matrix": [5, 5], "w": 1, "x": 5.25, "y": 7 },
690 { "matrix": [5, 6], "w": 1, "x": 6.5, "y": 6.75 },
691 { "matrix": [5, 7], "w": 1, "x": 7.5, "y": 6.75 },
692 { "matrix": [5, 8], "w": 1, "x": 8.5, "y": 6.75 },
693 { "matrix": [11, 0], "w": 4, "x": 9.5, "y": 6.75 },
694 { "matrix": [11, 2], "w": 1, "x": 13.5, "y": 6.75 },
695 { "matrix": [11, 3], "w": 1, "x": 14.5, "y": 6.75 },
696 { "matrix": [11, 4], "w": 1, "x": 15.5, "y": 6.75 },
697 { "matrix": [11, 5], "w": 1, "x": 16.5, "y": 6.75 },
698 { "matrix": [10, 6], "w": 1, "x": 17.75, "y": 7 },
699 { "matrix": [11, 6], "w": 1, "x": 18.75, "y": 7 },
700 { "matrix": [11, 7], "w": 1, "x": 19.75, "y": 7 },
701 { "matrix": [11, 8], "w": 1, "x": 21, "y": 6.75 },
702 { "matrix": [11, 9], "w": 1, "x": 22, "y": 6.75 }
703 ]
704 },
705 "LAYOUT_4u_iso": {
706 "layout": [
707 { "matrix": [12, 3], "w": 1, "x": 3, "y": 0 },
708 { "matrix": [12, 4], "w": 1, "x": 4, "y": 0 },
709 { "matrix": [12, 9], "w": 1, "x": 19, "y": 0 },
710 { "matrix": [12, 10], "w": 1, "x": 20, "y": 0 },
711 { "matrix": [0, 0], "w": 1, "x": 0, "y": 1.5 },
712 { "matrix": [0, 1], "w": 1, "x": 1, "y": 1.5 },
713 { "matrix": [0, 2], "w": 1, "x": 2, "y": 1.5 },
714 { "matrix": [0, 3], "w": 1, "x": 3, "y": 1.5 },
715 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 1.5 },
716 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 1.5 },
717 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 1.5 },
718 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 1.5 },
719 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 1.5 },
720 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 1.5 },
721 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 1.5 },
722 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 1.5 },
723 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 1.5 },
724 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 1.5 },
725 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 1.5 },
726 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 1.5 },
727 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 1.5 },
728 { "matrix": [6, 7], "w": 1, "x": 20, "y": 1.5 },
729 { "matrix": [6, 8], "w": 1, "x": 21, "y": 1.5 },
730 { "matrix": [6, 9], "w": 1, "x": 22, "y": 1.5 },
731 { "matrix": [6, 10], "w": 1, "x": 23, "y": 1.5 },
732 { "matrix": [1, 0], "w": 1, "x": 0, "y": 2.75 },
733 { "matrix": [1, 1], "w": 1, "x": 1, "y": 2.75 },
734 { "matrix": [1, 2], "w": 1, "x": 2, "y": 2.75 },
735 { "matrix": [1, 3], "w": 1, "x": 3, "y": 2.75 },
736 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 2.75 },
737 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.75 },
738 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 2.75 },
739 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 2.75 },
740 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 2.75 },
741 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 2.75 },
742 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 2.75 },
743 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 2.75 },
744 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 2.75 },
745 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 2.75 },
746 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 2.75 },
747 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 2.75 },
748 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 2.75 },
749 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 2.75 },
750 { "matrix": [7, 7], "w": 1, "x": 20, "y": 2.75 },
751 { "matrix": [7, 8], "w": 1, "x": 21, "y": 2.75 },
752 { "matrix": [7, 9], "w": 1, "x": 22, "y": 2.75 },
753 { "matrix": [7, 10], "w": 1, "x": 23, "y": 2.75 },
754 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 3.75 },
755 { "matrix": [2, 1], "w": 1, "x": 1, "y": 3.75 },
756 { "matrix": [2, 2], "w": 1, "x": 2, "y": 3.75 },
757 { "matrix": [2, 3], "w": 1, "x": 3, "y": 3.75 },
758 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 3.75 },
759 { "matrix": [2, 5], "w": 1, "x": 6, "y": 3.75 },
760 { "matrix": [2, 6], "w": 1, "x": 7, "y": 3.75 },
761 { "matrix": [2, 7], "w": 1, "x": 8, "y": 3.75 },
762 { "matrix": [2, 8], "w": 1, "x": 9, "y": 3.75 },
763 { "matrix": [2, 9], "w": 1, "x": 10, "y": 3.75 },
764 { "matrix": [2, 10], "w": 1, "x": 11, "y": 3.75 },
765 { "matrix": [8, 0], "w": 1, "x": 12, "y": 3.75 },
766 { "matrix": [8, 1], "w": 1, "x": 13, "y": 3.75 },
767 { "matrix": [8, 2], "w": 1, "x": 14, "y": 3.75 },
768 { "matrix": [8, 3], "w": 1, "x": 15, "y": 3.75 },
769 { "matrix": [8, 4], "w": 1, "x": 16, "y": 3.75 },
770 { "matrix": [8, 5], "w": 1, "x": 17, "y": 3.75 },
771 { "matrix": [8, 7], "w": 1, "x": 20, "y": 3.75 },
772 { "matrix": [8, 8], "w": 1, "x": 21, "y": 3.75 },
773 { "matrix": [8, 9], "w": 1, "x": 22, "y": 3.75 },
774 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 3.75 },
775 { "matrix": [3, 1], "w": 1, "x": 1, "y": 4.75 },
776 { "matrix": [3, 2], "w": 1, "x": 2, "y": 4.75 },
777 { "matrix": [3, 3], "w": 1, "x": 3, "y": 4.75 },
778 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 4.75 },
779 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 4.75 },
780 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 4.75 },
781 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 4.75 },
782 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 4.75 },
783 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 4.75 },
784 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 4.75 },
785 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 4.75 },
786 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 4.75 },
787 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 4.75 },
788 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 4.75 },
789 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 4.75 },
790 { "matrix": [9, 10], "w": 1, "x": 17.25, "y": 4.75 },
791 { "h": 2, "matrix": [9, 5], "w": 1.25, "x": 18.25, "y": 3.75 },
792 { "matrix": [9, 7], "w": 1, "x": 20, "y": 4.75 },
793 { "matrix": [9, 8], "w": 1, "x": 21, "y": 4.75 },
794 { "matrix": [9, 9], "w": 1, "x": 22, "y": 4.75 },
795 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 5.75 },
796 { "matrix": [4, 1], "w": 1, "x": 1, "y": 5.75 },
797 { "matrix": [4, 2], "w": 1, "x": 2, "y": 5.75 },
798 { "matrix": [4, 3], "w": 1, "x": 3, "y": 5.75 },
799 { "matrix": [4, 4], "w": 1, "x": 4.25, "y": 6 },
800 { "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 5.75 },
801 { "matrix": [4, 6], "w": 1, "x": 6.75, "y": 5.75 },
802 { "matrix": [4, 7], "w": 1, "x": 7.75, "y": 5.75 },
803 { "matrix": [4, 8], "w": 1, "x": 8.75, "y": 5.75 },
804 { "matrix": [4, 9], "w": 1, "x": 9.75, "y": 5.75 },
805 { "matrix": [4, 10], "w": 1, "x": 10.75, "y": 5.75 },
806 { "matrix": [10, 0], "w": 1, "x": 11.75, "y": 5.75 },
807 { "matrix": [10, 1], "w": 1, "x": 12.75, "y": 5.75 },
808 { "matrix": [10, 2], "w": 1, "x": 13.75, "y": 5.75 },
809 { "matrix": [10, 3], "w": 1, "x": 14.75, "y": 5.75 },
810 { "matrix": [10, 4], "w": 1, "x": 15.75, "y": 5.75 },
811 { "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 5.75 },
812 { "matrix": [9, 6], "w": 1, "x": 18.75, "y": 6 },
813 { "matrix": [10, 7], "w": 1, "x": 20, "y": 5.75 },
814 { "matrix": [10, 8], "w": 1, "x": 21, "y": 5.75 },
815 { "matrix": [10, 9], "w": 1, "x": 22, "y": 5.75 },
816 { "h": 2, "matrix": [10, 10], "w": 1, "x": 23, "y": 5.75 },
817 { "matrix": [5, 1], "w": 1, "x": 1, "y": 6.75 },
818 { "matrix": [5, 2], "w": 1, "x": 2, "y": 6.75 },
819 { "matrix": [5, 3], "w": 1, "x": 3.25, "y": 7 },
820 { "matrix": [5, 4], "w": 1, "x": 4.25, "y": 7 },
821 { "matrix": [5, 5], "w": 1, "x": 5.25, "y": 7 },
822 { "matrix": [5, 6], "w": 1, "x": 6.5, "y": 6.75 },
823 { "matrix": [5, 7], "w": 1, "x": 7.5, "y": 6.75 },
824 { "matrix": [5, 8], "w": 1, "x": 8.5, "y": 6.75 },
825 { "matrix": [11, 0], "w": 4, "x": 9.5, "y": 6.75 },
826 { "matrix": [11, 2], "w": 1, "x": 13.5, "y": 6.75 },
827 { "matrix": [11, 3], "w": 1, "x": 14.5, "y": 6.75 },
828 { "matrix": [11, 4], "w": 1, "x": 15.5, "y": 6.75 },
829 { "matrix": [11, 5], "w": 1, "x": 16.5, "y": 6.75 },
830 { "matrix": [10, 6], "w": 1, "x": 17.75, "y": 7 },
831 { "matrix": [11, 6], "w": 1, "x": 18.75, "y": 7 },
832 { "matrix": [11, 7], "w": 1, "x": 19.75, "y": 7 },
833 { "matrix": [11, 8], "w": 1, "x": 21, "y": 6.75 },
834 { "matrix": [11, 9], "w": 1, "x": 22, "y": 6.75 }
835 ]
836 },
837 "LAYOUT_7u_ansi": {
838 "layout": [
839 { "matrix": [12, 3], "w": 1, "x": 3, "y": 0 },
840 { "matrix": [12, 4], "w": 1, "x": 4, "y": 0 },
841 { "matrix": [12, 9], "w": 1, "x": 19, "y": 0 },
842 { "matrix": [12, 10], "w": 1, "x": 20, "y": 0 },
843 { "matrix": [0, 0], "w": 1, "x": 0, "y": 1.5 },
844 { "matrix": [0, 1], "w": 1, "x": 1, "y": 1.5 },
845 { "matrix": [0, 2], "w": 1, "x": 2, "y": 1.5 },
846 { "matrix": [0, 3], "w": 1, "x": 3, "y": 1.5 },
847 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 1.5 },
848 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 1.5 },
849 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 1.5 },
850 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 1.5 },
851 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 1.5 },
852 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 1.5 },
853 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 1.5 },
854 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 1.5 },
855 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 1.5 },
856 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 1.5 },
857 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 1.5 },
858 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 1.5 },
859 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 1.5 },
860 { "matrix": [6, 7], "w": 1, "x": 20, "y": 1.5 },
861 { "matrix": [6, 8], "w": 1, "x": 21, "y": 1.5 },
862 { "matrix": [6, 9], "w": 1, "x": 22, "y": 1.5 },
863 { "matrix": [6, 10], "w": 1, "x": 23, "y": 1.5 },
864 { "matrix": [1, 0], "w": 1, "x": 0, "y": 2.75 },
865 { "matrix": [1, 1], "w": 1, "x": 1, "y": 2.75 },
866 { "matrix": [1, 2], "w": 1, "x": 2, "y": 2.75 },
867 { "matrix": [1, 3], "w": 1, "x": 3, "y": 2.75 },
868 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 2.75 },
869 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.75 },
870 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 2.75 },
871 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 2.75 },
872 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 2.75 },
873 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 2.75 },
874 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 2.75 },
875 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 2.75 },
876 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 2.75 },
877 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 2.75 },
878 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 2.75 },
879 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 2.75 },
880 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 2.75 },
881 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 2.75 },
882 { "matrix": [7, 7], "w": 1, "x": 20, "y": 2.75 },
883 { "matrix": [7, 8], "w": 1, "x": 21, "y": 2.75 },
884 { "matrix": [7, 9], "w": 1, "x": 22, "y": 2.75 },
885 { "matrix": [7, 10], "w": 1, "x": 23, "y": 2.75 },
886 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 3.75 },
887 { "matrix": [2, 1], "w": 1, "x": 1, "y": 3.75 },
888 { "matrix": [2, 2], "w": 1, "x": 2, "y": 3.75 },
889 { "matrix": [2, 3], "w": 1, "x": 3, "y": 3.75 },
890 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 3.75 },
891 { "matrix": [2, 5], "w": 1, "x": 6, "y": 3.75 },
892 { "matrix": [2, 6], "w": 1, "x": 7, "y": 3.75 },
893 { "matrix": [2, 7], "w": 1, "x": 8, "y": 3.75 },
894 { "matrix": [2, 8], "w": 1, "x": 9, "y": 3.75 },
895 { "matrix": [2, 9], "w": 1, "x": 10, "y": 3.75 },
896 { "matrix": [2, 10], "w": 1, "x": 11, "y": 3.75 },
897 { "matrix": [8, 0], "w": 1, "x": 12, "y": 3.75 },
898 { "matrix": [8, 1], "w": 1, "x": 13, "y": 3.75 },
899 { "matrix": [8, 2], "w": 1, "x": 14, "y": 3.75 },
900 { "matrix": [8, 3], "w": 1, "x": 15, "y": 3.75 },
901 { "matrix": [8, 4], "w": 1, "x": 16, "y": 3.75 },
902 { "matrix": [8, 5], "w": 1, "x": 17, "y": 3.75 },
903 { "matrix": [8, 6], "w": 1.5, "x": 18, "y": 3.75 },
904 { "matrix": [8, 7], "w": 1, "x": 20, "y": 3.75 },
905 { "matrix": [8, 8], "w": 1, "x": 21, "y": 3.75 },
906 { "matrix": [8, 9], "w": 1, "x": 22, "y": 3.75 },
907 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 3.75 },
908 { "matrix": [3, 1], "w": 1, "x": 1, "y": 4.75 },
909 { "matrix": [3, 2], "w": 1, "x": 2, "y": 4.75 },
910 { "matrix": [3, 3], "w": 1, "x": 3, "y": 4.75 },
911 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 4.75 },
912 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 4.75 },
913 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 4.75 },
914 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 4.75 },
915 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 4.75 },
916 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 4.75 },
917 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 4.75 },
918 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 4.75 },
919 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 4.75 },
920 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 4.75 },
921 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 4.75 },
922 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 4.75 },
923 { "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 4.75 },
924 { "matrix": [9, 7], "w": 1, "x": 20, "y": 4.75 },
925 { "matrix": [9, 8], "w": 1, "x": 21, "y": 4.75 },
926 { "matrix": [9, 9], "w": 1, "x": 22, "y": 4.75 },
927 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 5.75 },
928 { "matrix": [4, 1], "w": 1, "x": 1, "y": 5.75 },
929 { "matrix": [4, 2], "w": 1, "x": 2, "y": 5.75 },
930 { "matrix": [4, 3], "w": 1, "x": 3, "y": 5.75 },
931 { "matrix": [4, 4], "w": 1, "x": 4.25, "y": 6 },
932 { "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 5.75 },
933 { "matrix": [4, 6], "w": 1, "x": 6.75, "y": 5.75 },
934 { "matrix": [4, 7], "w": 1, "x": 7.75, "y": 5.75 },
935 { "matrix": [4, 8], "w": 1, "x": 8.75, "y": 5.75 },
936 { "matrix": [4, 9], "w": 1, "x": 9.75, "y": 5.75 },
937 { "matrix": [4, 10], "w": 1, "x": 10.75, "y": 5.75 },
938 { "matrix": [10, 0], "w": 1, "x": 11.75, "y": 5.75 },
939 { "matrix": [10, 1], "w": 1, "x": 12.75, "y": 5.75 },
940 { "matrix": [10, 2], "w": 1, "x": 13.75, "y": 5.75 },
941 { "matrix": [10, 3], "w": 1, "x": 14.75, "y": 5.75 },
942 { "matrix": [10, 4], "w": 1, "x": 15.75, "y": 5.75 },
943 { "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 5.75 },
944 { "matrix": [9, 6], "w": 1, "x": 18.75, "y": 6 },
945 { "matrix": [10, 7], "w": 1, "x": 20, "y": 5.75 },
946 { "matrix": [10, 8], "w": 1, "x": 21, "y": 5.75 },
947 { "matrix": [10, 9], "w": 1, "x": 22, "y": 5.75 },
948 { "h": 2, "matrix": [10, 10], "w": 1, "x": 23, "y": 5.75 },
949 { "matrix": [5, 1], "w": 1, "x": 1, "y": 6.75 },
950 { "matrix": [5, 2], "w": 1, "x": 2, "y": 6.75 },
951 { "matrix": [5, 3], "w": 1, "x": 3.25, "y": 7 },
952 { "matrix": [5, 4], "w": 1, "x": 4.25, "y": 7 },
953 { "matrix": [5, 5], "w": 1, "x": 5.25, "y": 7 },
954 { "matrix": [5, 6], "w": 1, "x": 6.5, "y": 6.75 },
955 { "matrix": [5, 7], "w": 1, "x": 7.5, "y": 6.75 },
956 { "matrix": [11, 0], "w": 7, "x": 8.5, "y": 6.75 },
957 { "matrix": [11, 4], "w": 1, "x": 15.5, "y": 6.75 },
958 { "matrix": [11, 5], "w": 1, "x": 16.5, "y": 6.75 },
959 { "matrix": [10, 6], "w": 1, "x": 17.75, "y": 7 },
960 { "matrix": [11, 6], "w": 1, "x": 18.75, "y": 7 },
961 { "matrix": [11, 7], "w": 1, "x": 19.75, "y": 7 },
962 { "matrix": [11, 8], "w": 1, "x": 21, "y": 6.75 },
963 { "matrix": [11, 9], "w": 1, "x": 22, "y": 6.75 }
964 ]
965 },
966 "LAYOUT_7u_iso": {
967 "layout": [
968 { "matrix": [12, 3], "w": 1, "x": 3, "y": 0 },
969 { "matrix": [12, 4], "w": 1, "x": 4, "y": 0 },
970 { "matrix": [12, 9], "w": 1, "x": 19, "y": 0 },
971 { "matrix": [12, 10], "w": 1, "x": 20, "y": 0 },
972 { "matrix": [0, 0], "w": 1, "x": 0, "y": 1.5 },
973 { "matrix": [0, 1], "w": 1, "x": 1, "y": 1.5 },
974 { "matrix": [0, 2], "w": 1, "x": 2, "y": 1.5 },
975 { "matrix": [0, 3], "w": 1, "x": 3, "y": 1.5 },
976 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 1.5 },
977 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 1.5 },
978 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 1.5 },
979 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 1.5 },
980 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 1.5 },
981 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 1.5 },
982 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 1.5 },
983 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 1.5 },
984 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 1.5 },
985 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 1.5 },
986 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 1.5 },
987 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 1.5 },
988 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 1.5 },
989 { "matrix": [6, 7], "w": 1, "x": 20, "y": 1.5 },
990 { "matrix": [6, 8], "w": 1, "x": 21, "y": 1.5 },
991 { "matrix": [6, 9], "w": 1, "x": 22, "y": 1.5 },
992 { "matrix": [6, 10], "w": 1, "x": 23, "y": 1.5 },
993 { "matrix": [1, 0], "w": 1, "x": 0, "y": 2.75 },
994 { "matrix": [1, 1], "w": 1, "x": 1, "y": 2.75 },
995 { "matrix": [1, 2], "w": 1, "x": 2, "y": 2.75 },
996 { "matrix": [1, 3], "w": 1, "x": 3, "y": 2.75 },
997 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 2.75 },
998 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.75 },
999 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 2.75 },
1000 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 2.75 },
1001 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 2.75 },
1002 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 2.75 },
1003 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 2.75 },
1004 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 2.75 },
1005 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 2.75 },
1006 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 2.75 },
1007 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 2.75 },
1008 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 2.75 },
1009 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 2.75 },
1010 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 2.75 },
1011 { "matrix": [7, 7], "w": 1, "x": 20, "y": 2.75 },
1012 { "matrix": [7, 8], "w": 1, "x": 21, "y": 2.75 },
1013 { "matrix": [7, 9], "w": 1, "x": 22, "y": 2.75 },
1014 { "matrix": [7, 10], "w": 1, "x": 23, "y": 2.75 },
1015 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 3.75 },
1016 { "matrix": [2, 1], "w": 1, "x": 1, "y": 3.75 },
1017 { "matrix": [2, 2], "w": 1, "x": 2, "y": 3.75 },
1018 { "matrix": [2, 3], "w": 1, "x": 3, "y": 3.75 },
1019 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 3.75 },
1020 { "matrix": [2, 5], "w": 1, "x": 6, "y": 3.75 },
1021 { "matrix": [2, 6], "w": 1, "x": 7, "y": 3.75 },
1022 { "matrix": [2, 7], "w": 1, "x": 8, "y": 3.75 },
1023 { "matrix": [2, 8], "w": 1, "x": 9, "y": 3.75 },
1024 { "matrix": [2, 9], "w": 1, "x": 10, "y": 3.75 },
1025 { "matrix": [2, 10], "w": 1, "x": 11, "y": 3.75 },
1026 { "matrix": [8, 0], "w": 1, "x": 12, "y": 3.75 },
1027 { "matrix": [8, 1], "w": 1, "x": 13, "y": 3.75 },
1028 { "matrix": [8, 2], "w": 1, "x": 14, "y": 3.75 },
1029 { "matrix": [8, 3], "w": 1, "x": 15, "y": 3.75 },
1030 { "matrix": [8, 4], "w": 1, "x": 16, "y": 3.75 },
1031 { "matrix": [8, 5], "w": 1, "x": 17, "y": 3.75 },
1032 { "matrix": [8, 7], "w": 1, "x": 20, "y": 3.75 },
1033 { "matrix": [8, 8], "w": 1, "x": 21, "y": 3.75 },
1034 { "matrix": [8, 9], "w": 1, "x": 22, "y": 3.75 },
1035 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 3.75 },
1036 { "matrix": [3, 1], "w": 1, "x": 1, "y": 4.75 },
1037 { "matrix": [3, 2], "w": 1, "x": 2, "y": 4.75 },
1038 { "matrix": [3, 3], "w": 1, "x": 3, "y": 4.75 },
1039 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 4.75 },
1040 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 4.75 },
1041 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 4.75 },
1042 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 4.75 },
1043 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 4.75 },
1044 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 4.75 },
1045 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 4.75 },
1046 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 4.75 },
1047 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 4.75 },
1048 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 4.75 },
1049 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 4.75 },
1050 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 4.75 },
1051 { "matrix": [9, 10], "w": 1, "x": 17.25, "y": 4.75 },
1052 { "h": 2, "matrix": [9, 5], "w": 1.25, "x": 18.25, "y": 3.75 },
1053 { "matrix": [9, 7], "w": 1, "x": 20, "y": 4.75 },
1054 { "matrix": [9, 8], "w": 1, "x": 21, "y": 4.75 },
1055 { "matrix": [9, 9], "w": 1, "x": 22, "y": 4.75 },
1056 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 5.75 },
1057 { "matrix": [4, 1], "w": 1, "x": 1, "y": 5.75 },
1058 { "matrix": [4, 2], "w": 1, "x": 2, "y": 5.75 },
1059 { "matrix": [4, 3], "w": 1, "x": 3, "y": 5.75 },
1060 { "matrix": [4, 4], "w": 1, "x": 4.25, "y": 6 },
1061 { "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 5.75 },
1062 { "matrix": [4, 6], "w": 1, "x": 6.75, "y": 5.75 },
1063 { "matrix": [4, 7], "w": 1, "x": 7.75, "y": 5.75 },
1064 { "matrix": [4, 8], "w": 1, "x": 8.75, "y": 5.75 },
1065 { "matrix": [4, 9], "w": 1, "x": 9.75, "y": 5.75 },
1066 { "matrix": [4, 10], "w": 1, "x": 10.75, "y": 5.75 },
1067 { "matrix": [10, 0], "w": 1, "x": 11.75, "y": 5.75 },
1068 { "matrix": [10, 1], "w": 1, "x": 12.75, "y": 5.75 },
1069 { "matrix": [10, 2], "w": 1, "x": 13.75, "y": 5.75 },
1070 { "matrix": [10, 3], "w": 1, "x": 14.75, "y": 5.75 },
1071 { "matrix": [10, 4], "w": 1, "x": 15.75, "y": 5.75 },
1072 { "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 5.75 },
1073 { "matrix": [9, 6], "w": 1, "x": 18.75, "y": 6 },
1074 { "matrix": [10, 7], "w": 1, "x": 20, "y": 5.75 },
1075 { "matrix": [10, 8], "w": 1, "x": 21, "y": 5.75 },
1076 { "matrix": [10, 9], "w": 1, "x": 22, "y": 5.75 },
1077 { "h": 2, "matrix": [10, 10], "w": 1, "x": 23, "y": 5.75 },
1078 { "matrix": [5, 1], "w": 1, "x": 1, "y": 6.75 },
1079 { "matrix": [5, 2], "w": 1, "x": 2, "y": 6.75 },
1080 { "matrix": [5, 3], "w": 1, "x": 3.25, "y": 7 },
1081 { "matrix": [5, 4], "w": 1, "x": 4.25, "y": 7 },
1082 { "matrix": [5, 5], "w": 1, "x": 5.25, "y": 7 },
1083 { "matrix": [5, 6], "w": 1, "x": 6.5, "y": 6.75 },
1084 { "matrix": [5, 7], "w": 1, "x": 7.5, "y": 6.75 },
1085 { "matrix": [11, 0], "w": 7, "x": 8.5, "y": 6.75 },
1086 { "matrix": [11, 4], "w": 1, "x": 15.5, "y": 6.75 },
1087 { "matrix": [11, 5], "w": 1, "x": 16.5, "y": 6.75 },
1088 { "matrix": [10, 6], "w": 1, "x": 17.75, "y": 7 },
1089 { "matrix": [11, 6], "w": 1, "x": 18.75, "y": 7 },
1090 { "matrix": [11, 7], "w": 1, "x": 19.75, "y": 7 },
1091 { "matrix": [11, 8], "w": 1, "x": 21, "y": 6.75 },
1092 { "matrix": [11, 9], "w": 1, "x": 22, "y": 6.75 }
1093 ]
1094 },
1095 "LAYOUT_all": {
1096 "layout": [
1097 { "matrix": [12, 3], "w": 1, "x": 3, "y": 0 },
1098 { "matrix": [12, 4], "w": 1, "x": 4, "y": 0 },
1099 { "matrix": [12, 9], "w": 1, "x": 19, "y": 0 },
1100 { "matrix": [12, 10], "w": 1, "x": 20, "y": 0 },
1101 { "matrix": [0, 0], "w": 1, "x": 0, "y": 1.5 },
1102 { "matrix": [0, 1], "w": 1, "x": 1, "y": 1.5 },
1103 { "matrix": [0, 2], "w": 1, "x": 2, "y": 1.5 },
1104 { "matrix": [0, 3], "w": 1, "x": 3, "y": 1.5 },
1105 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 1.5 },
1106 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 1.5 },
1107 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 1.5 },
1108 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 1.5 },
1109 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 1.5 },
1110 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 1.5 },
1111 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 1.5 },
1112 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 1.5 },
1113 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 1.5 },
1114 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 1.5 },
1115 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 1.5 },
1116 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 1.5 },
1117 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 1.5 },
1118 { "matrix": [6, 7], "w": 1, "x": 20, "y": 1.5 },
1119 { "matrix": [6, 8], "w": 1, "x": 21, "y": 1.5 },
1120 { "matrix": [6, 9], "w": 1, "x": 22, "y": 1.5 },
1121 { "matrix": [6, 10], "w": 1, "x": 23, "y": 1.5 },
1122 { "matrix": [1, 0], "w": 1, "x": 0, "y": 2.75 },
1123 { "matrix": [1, 1], "w": 1, "x": 1, "y": 2.75 },
1124 { "matrix": [1, 2], "w": 1, "x": 2, "y": 2.75 },
1125 { "matrix": [1, 3], "w": 1, "x": 3, "y": 2.75 },
1126 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 2.75 },
1127 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.75 },
1128 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 2.75 },
1129 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 2.75 },
1130 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 2.75 },
1131 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 2.75 },
1132 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 2.75 },
1133 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 2.75 },
1134 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 2.75 },
1135 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 2.75 },
1136 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 2.75 },
1137 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 2.75 },
1138 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 2.75 },
1139 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 2.75 },
1140 { "matrix": [7, 7], "w": 1, "x": 20, "y": 2.75 },
1141 { "matrix": [7, 8], "w": 1, "x": 21, "y": 2.75 },
1142 { "matrix": [7, 9], "w": 1, "x": 22, "y": 2.75 },
1143 { "matrix": [7, 10], "w": 1, "x": 23, "y": 2.75 },
1144 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 3.75 },
1145 { "matrix": [2, 1], "w": 1, "x": 1, "y": 3.75 },
1146 { "matrix": [2, 2], "w": 1, "x": 2, "y": 3.75 },
1147 { "matrix": [2, 3], "w": 1, "x": 3, "y": 3.75 },
1148 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 3.75 },
1149 { "matrix": [2, 5], "w": 1, "x": 6, "y": 3.75 },
1150 { "matrix": [2, 6], "w": 1, "x": 7, "y": 3.75 },
1151 { "matrix": [2, 7], "w": 1, "x": 8, "y": 3.75 },
1152 { "matrix": [2, 8], "w": 1, "x": 9, "y": 3.75 },
1153 { "matrix": [2, 9], "w": 1, "x": 10, "y": 3.75 },
1154 { "matrix": [2, 10], "w": 1, "x": 11, "y": 3.75 },
1155 { "matrix": [8, 0], "w": 1, "x": 12, "y": 3.75 },
1156 { "matrix": [8, 1], "w": 1, "x": 13, "y": 3.75 },
1157 { "matrix": [8, 2], "w": 1, "x": 14, "y": 3.75 },
1158 { "matrix": [8, 3], "w": 1, "x": 15, "y": 3.75 },
1159 { "matrix": [8, 4], "w": 1, "x": 16, "y": 3.75 },
1160 { "matrix": [8, 5], "w": 1, "x": 17, "y": 3.75 },
1161 { "matrix": [8, 6], "w": 1.5, "x": 18, "y": 3.75 },
1162 { "matrix": [8, 7], "w": 1, "x": 20, "y": 3.75 },
1163 { "matrix": [8, 8], "w": 1, "x": 21, "y": 3.75 },
1164 { "matrix": [8, 9], "w": 1, "x": 22, "y": 3.75 },
1165 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 3.75 },
1166 { "matrix": [3, 1], "w": 1, "x": 1, "y": 4.75 },
1167 { "matrix": [3, 2], "w": 1, "x": 2, "y": 4.75 },
1168 { "matrix": [3, 3], "w": 1, "x": 3, "y": 4.75 },
1169 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 4.75 },
1170 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 4.75 },
1171 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 4.75 },
1172 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 4.75 },
1173 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 4.75 },
1174 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 4.75 },
1175 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 4.75 },
1176 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 4.75 },
1177 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 4.75 },
1178 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 4.75 },
1179 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 4.75 },
1180 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 4.75 },
1181 { "matrix": [9, 10], "w": 1, "x": 17.25, "y": 4.75 },
1182 { "matrix": [9, 5], "w": 1.25, "x": 18.25, "y": 4.75 },
1183 { "matrix": [9, 7], "w": 1, "x": 20, "y": 4.75 },
1184 { "matrix": [9, 8], "w": 1, "x": 21, "y": 4.75 },
1185 { "matrix": [9, 9], "w": 1, "x": 22, "y": 4.75 },
1186 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 5.75 },
1187 { "matrix": [4, 1], "w": 1, "x": 1, "y": 5.75 },
1188 { "matrix": [4, 2], "w": 1, "x": 2, "y": 5.75 },
1189 { "matrix": [4, 3], "w": 1, "x": 3, "y": 5.75 },
1190 { "matrix": [4, 4], "w": 1, "x": 4.25, "y": 6 },
1191 { "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 5.75 },
1192 { "matrix": [4, 6], "w": 1, "x": 6.75, "y": 5.75 },
1193 { "matrix": [4, 7], "w": 1, "x": 7.75, "y": 5.75 },
1194 { "matrix": [4, 8], "w": 1, "x": 8.75, "y": 5.75 },
1195 { "matrix": [4, 9], "w": 1, "x": 9.75, "y": 5.75 },
1196 { "matrix": [4, 10], "w": 1, "x": 10.75, "y": 5.75 },
1197 { "matrix": [10, 0], "w": 1, "x": 11.75, "y": 5.75 },
1198 { "matrix": [10, 1], "w": 1, "x": 12.75, "y": 5.75 },
1199 { "matrix": [10, 2], "w": 1, "x": 13.75, "y": 5.75 },
1200 { "matrix": [10, 3], "w": 1, "x": 14.75, "y": 5.75 },
1201 { "matrix": [10, 4], "w": 1, "x": 15.75, "y": 5.75 },
1202 { "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 5.75 },
1203 { "matrix": [9, 6], "w": 1, "x": 18.75, "y": 6 },
1204 { "matrix": [10, 7], "w": 1, "x": 20, "y": 5.75 },
1205 { "matrix": [10, 8], "w": 1, "x": 21, "y": 5.75 },
1206 { "matrix": [10, 9], "w": 1, "x": 22, "y": 5.75 },
1207 { "h": 2, "matrix": [10, 10], "w": 1, "x": 23, "y": 5.75 },
1208 { "matrix": [5, 1], "w": 1, "x": 1, "y": 6.75 },
1209 { "matrix": [5, 2], "w": 1, "x": 2, "y": 6.75 },
1210 { "matrix": [5, 3], "w": 1, "x": 3.25, "y": 7 },
1211 { "matrix": [5, 4], "w": 1, "x": 4.25, "y": 7 },
1212 { "matrix": [5, 5], "w": 1, "x": 5.25, "y": 7 },
1213 { "matrix": [5, 6], "w": 1, "x": 6.5, "y": 6.75 },
1214 { "matrix": [5, 7], "w": 1, "x": 7.5, "y": 6.75 },
1215 { "matrix": [5, 8], "w": 1, "x": 8.5, "y": 6.75 },
1216 { "matrix": [5, 9], "w": 1, "x": 9.5, "y": 6.75 },
1217 { "matrix": [5, 10], "w": 1, "x": 10.5, "y": 6.75 },
1218 { "matrix": [11, 0], "w": 1, "x": 11.5, "y": 6.75 },
1219 { "matrix": [11, 1], "w": 1, "x": 12.5, "y": 6.75 },
1220 { "matrix": [11, 2], "w": 1, "x": 13.5, "y": 6.75 },
1221 { "matrix": [11, 3], "w": 1, "x": 14.5, "y": 6.75 },
1222 { "matrix": [11, 4], "w": 1, "x": 15.5, "y": 6.75 },
1223 { "matrix": [11, 5], "w": 1, "x": 16.5, "y": 6.75 },
1224 { "matrix": [10, 6], "w": 1, "x": 17.75, "y": 7 },
1225 { "matrix": [11, 6], "w": 1, "x": 18.75, "y": 7 },
1226 { "matrix": [11, 7], "w": 1, "x": 19.75, "y": 7 },
1227 { "matrix": [11, 8], "w": 1, "x": 21, "y": 6.75 },
1228 { "matrix": [11, 9], "w": 1, "x": 22, "y": 6.75 }
1229 ]
1230 }
1231 }
1232}
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default/keymap.json b/keyboards/clueboard/2x1800/2019/keymaps/default/keymap.json
new file mode 100644
index 000000000..3a60ce9c8
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default/keymap.json
@@ -0,0 +1,11 @@
1{
2 "keyboard":"clueboard/2x1800/2019",
3 "keymap":"default",
4 "layout":"LAYOUT_all",
5 "layers":[
6 ["ENC_BTN1","ENC_BTN2","ENC_BTN3","ENC_BTN4","KC_HOME","KC_END","KC_PGUP","KC_PGDN","KC_ESC","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F11","KC_F12","KC_PSCR","KC_SLCK","KC_PAUS","KC_INS","KC_PMNS","KC_NLCK","KC_PSLS","KC_PAST","KC_GRV","KC_1","KC_2","KC_3","KC_4","KC_5","KC_6","KC_7","KC_8","KC_9","KC_0","KC_MINS","KC_EQL","KC_BSPC","KC_NLCK","KC_PSLS","KC_PAST","KC_PMNS","KC_PPLS","KC_P7","KC_P8","KC_P9","KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_LBRC","KC_RBRC","KC_BSLS","KC_P7","KC_P8","KC_P9","KC_PSLS","KC_P4","KC_P5","KC_P6","KC_CAPS","KC_A","KC_S","KC_D","KC_F","KC_G","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT","KC_NUHS","KC_ENT","KC_P4","KC_P5","KC_P6","KC_PENT","KC_P1","KC_P2","KC_P3","KC_UP","KC_LSFT","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_N","KC_M","KC_SLSH","KC_COMM","KC_DOT","KC_RSFT","KC_UP","KC_P1","KC_P2","KC_P3","KC_PENT","KC_P0","KC_PDOT","KC_LEFT","KC_DOWN","KC_RGHT","KC_LCTL","KC_LGUI","KC_LALT","KC_SPC","KC_SPC","KC_SPC","KC_SPC","KC_RALT","KC_RGUI","KC_APP","KC_RCTL","KC_LEFT","KC_DOWN","KC_RGHT","KC_P0","KC_PDOT"]
7 ],
8 "author":"skullydazed",
9 "notes":"",
10 "version":1
11}
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default/readme.md b/keyboards/clueboard/2x1800/2019/keymaps/default/readme.md
new file mode 100644
index 000000000..4e3457efc
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_1u_ansi/keymap.c b/keyboards/clueboard/2x1800/2019/keymaps/default_1u_ansi/keymap.c
new file mode 100644
index 000000000..3c504930d
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_1u_ansi/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_1u_ansi(
20 KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4,
21 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_1u_ansi/readme.md b/keyboards/clueboard/2x1800/2019/keymaps/default_1u_ansi/readme.md
new file mode 100644
index 000000000..4e3457efc
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_1u_ansi/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_1u_iso/keymap.c b/keyboards/clueboard/2x1800/2019/keymaps/default_1u_iso/keymap.c
new file mode 100644
index 000000000..17cb57abe
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_1u_iso/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_1u_iso(
20 KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4,
21 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_1u_iso/readme.md b/keyboards/clueboard/2x1800/2019/keymaps/default_1u_iso/readme.md
new file mode 100644
index 000000000..4e3457efc
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_1u_iso/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_2u_ansi/keymap.c b/keyboards/clueboard/2x1800/2019/keymaps/default_2u_ansi/keymap.c
new file mode 100644
index 000000000..2bd91000b
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_2u_ansi/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_2u_ansi(
20 KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4,
21 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_2u_ansi/readme.md b/keyboards/clueboard/2x1800/2019/keymaps/default_2u_ansi/readme.md
new file mode 100644
index 000000000..c933ee3ed
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_2u_ansi/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 2u spacebar
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_2u_iso/keymap.c b/keyboards/clueboard/2x1800/2019/keymaps/default_2u_iso/keymap.c
new file mode 100644
index 000000000..5e1c96d14
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_2u_iso/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_2u_iso(
20 KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4,
21 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_2u_iso/readme.md b/keyboards/clueboard/2x1800/2019/keymaps/default_2u_iso/readme.md
new file mode 100644
index 000000000..c933ee3ed
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_2u_iso/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 2u spacebar
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_4u_ansi/keymap.c b/keyboards/clueboard/2x1800/2019/keymaps/default_4u_ansi/keymap.c
new file mode 100644
index 000000000..9e1c211a8
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_4u_ansi/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_4u_ansi(
20 KC_1, KC_2, KC_3, KC_4,
21 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_4u_ansi/readme.md b/keyboards/clueboard/2x1800/2019/keymaps/default_4u_ansi/readme.md
new file mode 100644
index 000000000..a696972e8
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_4u_ansi/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 4u Spacebar
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_4u_iso/keymap.c b/keyboards/clueboard/2x1800/2019/keymaps/default_4u_iso/keymap.c
new file mode 100644
index 000000000..261f578cd
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_4u_iso/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_4u_iso(
20 KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4,
21 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_4u_iso/readme.md b/keyboards/clueboard/2x1800/2019/keymaps/default_4u_iso/readme.md
new file mode 100644
index 000000000..a696972e8
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_4u_iso/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 4u Spacebar
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_7u_ansi/keymap.c b/keyboards/clueboard/2x1800/2019/keymaps/default_7u_ansi/keymap.c
new file mode 100644
index 000000000..f8f9d820d
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_7u_ansi/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_7u_ansi(
20 KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4,
21 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL,
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_7u_ansi/readme.md b/keyboards/clueboard/2x1800/2019/keymaps/default_7u_ansi/readme.md
new file mode 100644
index 000000000..f5718e842
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_7u_ansi/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 7u spacebar
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_7u_iso/keymap.c b/keyboards/clueboard/2x1800/2019/keymaps/default_7u_iso/keymap.c
new file mode 100644
index 000000000..88ea3fb85
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_7u_iso/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_7u_iso(
20 KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4,
21 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL,
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PSLS,
24 KC_P4, KC_P5, KC_P6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2019/keymaps/default_7u_iso/readme.md b/keyboards/clueboard/2x1800/2019/keymaps/default_7u_iso/readme.md
new file mode 100644
index 000000000..f5718e842
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/keymaps/default_7u_iso/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 7u spacebar
diff --git a/keyboards/clueboard/2x1800/2019/readme.md b/keyboards/clueboard/2x1800/2019/readme.md
new file mode 100644
index 000000000..538c15324
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/readme.md
@@ -0,0 +1,13 @@
1# Clueboard 2x1800
2
3Clueboard 2x1800 Mechanical Drawing Toy Edition
4
5* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
6* Hardware Supported: Clueboard 2x1800 2019 PCB
7* Hardware Availability: 2019 Apr 1 Group Buy
8
9Make example for this keyboard:
10
11 make clueboard/2x1800/2019:default
12
13See 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/clueboard/2x1800/2019/rules.mk b/keyboards/clueboard/2x1800/2019/rules.mk
new file mode 100644
index 000000000..6e7633bfe
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2019/rules.mk
@@ -0,0 +1 @@
# This file intentionally left blank
diff --git a/keyboards/clueboard/2x1800/2021/.noci b/keyboards/clueboard/2x1800/2021/.noci
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/.noci
diff --git a/keyboards/clueboard/2x1800/2021/2021.c b/keyboards/clueboard/2x1800/2021/2021.c
new file mode 100644
index 000000000..40f2a2ed6
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/2021.c
@@ -0,0 +1,154 @@
1/* Copyright 2017 Zach White <[email protected]>
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 "2021.h"
18#include "max7219.h"
19#include "font.h"
20
21#ifndef DRAWING_TOY_MODE
22static uint16_t led_frame_timer = 0;
23
24void matrix_scan_kb(void) {
25 if (timer_elapsed(led_frame_timer) > 100) {
26 max7219_message_sign_task(true);
27 led_frame_timer = timer_read();
28 }
29}
30#endif
31
32void matrix_init_kb(void) {
33 max7219_init();
34
35#if defined(MAX7219_LED_TEST)
36 while(1) {
37 for (int i=0; i<MAX7219_CONTROLLERS; i++) {
38 max7219_display_test(i, true);
39 wait_ms(500);
40 max7219_display_test(i, false);
41 }
42 }
43#elif defined(MAX7219_LED_ITERATE)
44 while (1) {
45 for (int row=0; row<8; row++) {
46 for(int col=0;col<8*MAX7219_CONTROLLERS;col++) {
47 max7219_set_led(row, col, true);
48 wait_ms(500);
49 max7219_set_led(row, col, false);
50 }
51 }
52 }
53#elif defined(MAX7219_LED_DANCE)
54 while (1) {
55 for (int col=0; col<8; col++) {
56 for (int device_num=0; device_num<MAX7219_CONTROLLERS; device_num++) {
57 if (col % 2 == 0) {
58 max7219_led_a[col][device_num] = 0b01010101;
59 } else {
60 max7219_led_a[col][device_num] = 0b10101010;
61 }
62 }
63 }
64 max7219_write_frame();
65 wait_ms(500);
66 for (int col=0; col<8; col++) {
67 for (int device_num=0; device_num<MAX7219_CONTROLLERS; device_num++) {
68 if (col % 2 == 0) {
69 max7219_led_a[col][device_num] = 0b10101010;
70 } else {
71 max7219_led_a[col][device_num] = 0b01010101;
72 }
73 }
74 }
75 max7219_write_frame();
76 wait_ms(500);
77 }
78#elif defined(MAX7219_LED_FONTTEST)
79 uint8_t message[MSG_FONTTEST_LEN][6] = MSG_FONTTEST;
80 max7219_message_sign(message, MSG_FONTTEST_LEN);
81#elif defined(MAX7219_LED_CLUEBOARD)
82 uint8_t message[MSG_CLUEBOARD_LEN][6] = MSG_CLUEBOARD;
83 max7219_message_sign(message, MSG_CLUEBOARD_LEN);
84#elif defined(MAX7219_LED_KONAMI)
85 uint8_t message[MSG_KONAMI_LEN][6] = MSG_KONAMI;
86 max7219_message_sign(message, MSG_KONAMI_LEN);
87#elif defined(MAX7219_LED_QMK_POWERED)
88 uint8_t message[MSG_QMK_POWERED_LEN][6] = MSG_QMK_POWERED;
89 max7219_message_sign(message, MSG_QMK_POWERED_LEN);
90#elif defined(DRAWING_TOY_MODE)
91 max7219_set_led(0, 0, true);
92#endif
93}
94
95__attribute__ ((weak))
96bool encoder_update_keymap(int8_t index, bool clockwise) {
97 return false;
98}
99
100#define NUM_COLUMNS 8*MAX7219_CONTROLLERS
101uint8_t led_position[2] = {0,0}; // The location of the cursor in the matrix
102
103bool encoder_update_kb(uint8_t index, bool clockwise) {
104 if (!encoder_update_keymap(index, clockwise)) {
105#if defined(DRAWING_TOY_MODE)
106 // Encoder 1, left
107 if (index == 0 && clockwise) {
108 if (led_position[0] < NUM_COLUMNS-1) { // turned right
109 led_position[0]++;
110 } else {
111 led_position[0]=0;
112 }
113 } else if (index == 0) {
114 if (led_position[0] > 0) { // turned left
115 led_position[0]--;
116 } else {
117 led_position[0]=NUM_COLUMNS-1;
118 }
119 }
120
121 // Encoder 2, right
122 else if (index == 1 && clockwise) {
123 if (led_position[1] < 7) { // turned right
124 led_position[1]++;
125 } else {
126 led_position[1]=0;
127 }
128 } else if (index == 1) {
129 if (led_position[1] > 0) { // turned left
130 led_position[1]--;
131 } else {
132 led_position[1]=7;
133 }
134 }
135
136 max7219_set_led(led_position[1], led_position[0], true);
137#else
138 // Encoder 1, left
139 if (index == 0 && clockwise) {
140 tap_code(KC_MS_R); // turned right
141 } else if (index == 0) {
142 tap_code(KC_MS_L); // turned left
143 }
144
145 // Encoder 2, right
146 else if (index == 1 && clockwise) {
147 tap_code(KC_MS_U); // turned right
148 } else if (index == 1) {
149 tap_code(KC_MS_D); // turned left
150 }
151#endif
152 }
153 return true;
154}
diff --git a/keyboards/clueboard/2x1800/2021/2021.h b/keyboards/clueboard/2x1800/2021/2021.h
new file mode 100644
index 000000000..ecb9e00c4
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/2021.h
@@ -0,0 +1,18 @@
1/* Copyright 2017 Zach White <[email protected]>
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#include "quantum.h"
diff --git a/keyboards/clueboard/2x1800/2021/config.h b/keyboards/clueboard/2x1800/2021/config.h
new file mode 100644
index 000000000..eccede6a4
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/config.h
@@ -0,0 +1,96 @@
1/*
2Copyright 2017 Zach White <[email protected]>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* audio support */
23#define AUDIO_PIN_ALT B7
24#define AUDIO_PIN C4
25#define AUDIO_CLICKY
26
27/*
28 * Encoder Assignments
29 */
30#define ENCODERS_PAD_A { D0, C5 }
31#define ENCODERS_PAD_B { D1, C6 }
32#define ENCODER_RESOLUTION 4
33
34/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
35#define LOCKING_SUPPORT_ENABLE
36
37/* Locking resynchronize hack */
38#define LOCKING_RESYNC_ENABLE
39
40// Configure our MAX7219's
41//#define MAX7219_LOAD B0
42//#define MAX7219_CONTROLLERS 4
43//#define MAX7219_LED_INTENSITY 1 // Max: 15
44
45// Define this to disable the startup test
46//#define MAX7219_NO_STARTUP_TEST
47
48/* This controls the speed of the sign, lower is faster. This is the minimal
49 * time between animation frames, in ms. Actual time between frames will
50 * always be slightly longer due to other keyboard tasks.
51 */
52//#define MAX7219_SCROLL_TIME 100
53
54/* This setting controls how big the scrollable area for your message sign
55 * is. If you set it to 0 your display will not work. If you set it to 1
56 * you will have no buffer area, and you will only be able to display a
57 * total of 6 characters. Every number after that increases the buffer area
58 * by 32 columns.
59 *
60 * You can calculate how big to make this for the number of characters you
61 * want to display:
62 *
63 * <number of characters in message> * 6 / 32 + 1
64 *
65 * You do not need to tune this unless you are trying to save ram.
66 */
67//#define MAX7219_BUFFER_MULTIPLIER 24
68
69// You can only define one of these at a time:
70
71// Define this to test all LEDs. Keyboard functions will not work.
72//#define MAX7219_LED_TEST
73
74// Define this to iterate through LEDs 1 by 1. Keyboard functions will not work.
75//#define MAX7219_LED_ITERATE
76
77// Define this to show a simple animation. Keyboard functions will not work.
78//#define MAX7219_LED_DANCE
79
80// Define this to show all the characters available
81//#define MAX7219_LED_FONTTEST
82
83// Define this to show Clueboard on the sign
84//#define MAX7219_LED_CLUEBOARD
85
86// Define this to show the Konami code on the sign
87//#define MAX7219_LED_KONAMI
88
89// Define this to show QMK on the sign
90//#define MAX7219_LED_QMK_POWERED
91
92// Define this to treat the message board like an etch-a-sketch
93//#define DRAWING_TOY_MODE
94
95// Define this if you don't want any of the above
96//#define MAX7219_LED_CUSTOM
diff --git a/keyboards/clueboard/2x1800/2021/font.h b/keyboards/clueboard/2x1800/2021/font.h
new file mode 100644
index 000000000..5ddcbfba5
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/font.h
@@ -0,0 +1,156 @@
1/* 5x8 Font for Clueboard 2x1800.
2 *
3 * Copyright (c) 2021 Zach White <[email protected]>
4 *
5 * Permission is hereby granted, free of charge, to any person
6 * obtaining a copy of this software and associated documentation
7 * files (the "Software"), to deal in the Software without
8 * restriction, including without limitation the rights to use,
9 * copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following
12 * conditions:
13 *
14 * This permission notice shall be included in all copies or
15 * substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24 * OTHER DEALINGS IN THE SOFTWARE.
25 */
26
27// Top row of keyboard, when shift held
28#define CHR_TILDE {0b00110000, 0b01000000, 0b00110000, 0b00001000, 0b00110000, 0b00000000}
29#define CHR_BANG {0b00000000, 0b00000000, 0b11111010, 0b10000000, 0b00000000, 0b00000000}
30#define CHR_AT {0b01001100, 0b10010010, 0b10011110, 0b10000010, 0b01111100, 0b00000000}
31#define CHR_POUND {0b00101000, 0b11111110, 0b00101000, 0b11111110, 0b00101000, 0b00000000}
32#define CHR_DOLLAR {0b00100100, 0b01010100, 0b11111110, 0b10101010, 0b01001000, 0b00000000}
33#define CHR_PERCENT {0b11000010, 0b11000100, 0b00010000, 0b00100110, 0b01000110, 0b00000000}
34#define CHR_CARET {0b00100000, 0b01000000, 0b10000000, 0b01000000, 0b00100000, 0b00000000}
35#define CHR_AMPERSAND {0b01101100, 0b10010010, 0b10101010, 0b01000100, 0b00001010, 0b00000000}
36#define CHR_ASTERISK {0b00101000, 0b00010000, 0b01111100, 0b00010000, 0b00101000, 0b00000000}
37#define CHR_LPAREN {0b00000000, 0b00111000, 0b01000100, 0b10000010, 0b00000000, 0b00000000}
38#define CHR_RPAREN {0b00000000, 0b10000010, 0b01000100, 0b00111000, 0b00000000, 0b00000000}
39#define CHR_UNDERSCORE {0b00000010, 0b00000010, 0b00000010, 0b00000010, 0b00000010, 0b00000000}
40#define CHR_PLUS {0b00010000, 0b00010000, 0b01111100, 0b00010000, 0b00010000, 0b00000000}
41
42// Top row of keyboard, without shift
43#define CHR_BACKTICK {0b00000000, 0b11000000, 0b01100000, 0b10000000, 0b00000000, 0b00000000}
44#define CHR_1 {0b00100000, 0b01000010, 0b11111110, 0b00000010, 0b00000010, 0b00000000}
45#define CHR_2 {0b01000010, 0b10000110, 0b10001010, 0b10010010, 0b01100010, 0b00000000}
46#define CHR_3 {0b10000100, 0b10000010, 0b10100010, 0b11010010, 0b10001100, 0b00000000}
47#define CHR_4 {0b00011000, 0b00101000, 0b01001000, 0b11111110, 0b00001000, 0b00000000}
48#define CHR_5 {0b11100100, 0b10100010, 0b10100010, 0b10100010, 0b10011100, 0b00000000}
49#define CHR_6 {0b00111100, 0b01010010, 0b10010010, 0b10010010, 0b00001100, 0b00000000}
50#define CHR_7 {0b11000000, 0b10001110, 0b10010000, 0b10100000, 0b11000000, 0b00000000}
51#define CHR_8 {0b01101100, 0b10010010, 0b10010010, 0b10010010, 0b01101100, 0b00000000}
52#define CHR_9 {0b01100000, 0b10010010, 0b10010010, 0b10010010, 0b01111000, 0b00000000}
53#define CHR_0 {0b01111100, 0b10001010, 0b10010010, 0b10100010, 0b01111100, 0b00000000}
54#define CHR_DASH {0b00000000, 0b00010000, 0b00010000, 0b00010000, 0b00000000, 0b00000000}
55#define CHR_EQUAL {0b00000000, 0b00101000, 0b00101000, 0b00101000, 0b00000000, 0b00000000}
56
57// Letters
58#define CHR_A {0b01111110, 0b10001000, 0b10001000, 0b10001000, 0b01111110, 0b00000000}
59#define CHR_B {0b11111110, 0b10010010, 0b10010010, 0b10010010, 0b01101100, 0b00000000}
60#define CHR_C {0b01111100, 0b10000010, 0b10000010, 0b10000010, 0b01000100, 0b00000000}
61#define CHR_D {0b11111110, 0b10000010, 0b10000010, 0b10000010, 0b01111100, 0b00000000}
62#define CHR_E {0b11111110, 0b10010010, 0b10010010, 0b10010010, 0b10000010, 0b00000000}
63#define CHR_F {0b11111110, 0b10010000, 0b10010000, 0b10010000, 0b10000000, 0b00000000}
64#define CHR_G {0b01111100, 0b10000010, 0b10010010, 0b10010010, 0b01011100, 0b00000000}
65#define CHR_H {0b11111110, 0b00010000, 0b00010000, 0b00010000, 0b11111110, 0b00000000}
66#define CHR_I {0b00000000, 0b10000010, 0b11111110, 0b10000010, 0b00000000, 0b00000000}
67#define CHR_J {0b00000100, 0b00000010, 0b10000010, 0b11111100, 0b10000000, 0b00000000}
68#define CHR_K {0b11111110, 0b00010000, 0b00101000, 0b01000100, 0b10000010, 0b00000000}
69#define CHR_L {0b00000000, 0b11111110, 0b00000010, 0b00000010, 0b00000010, 0b00000000}
70#define CHR_M {0b11111110, 0b01000000, 0b00110000, 0b01000000, 0b11111110, 0b00000000}
71#define CHR_N {0b11111110, 0b01100000, 0b00010000, 0b00001100, 0b11111110, 0b00000000}
72#define CHR_O {0b01111100, 0b10000010, 0b10000010, 0b10000010, 0b01111100, 0b00000000}
73#define CHR_P {0b11111110, 0b10010000, 0b10010000, 0b10010000, 0b01100000, 0b00000000}
74#define CHR_Q {0b01111100, 0b10000010, 0b10001010, 0b10000100, 0b01111010, 0b00000000}
75#define CHR_R {0b11111110, 0b10010000, 0b10011000, 0b10010100, 0b01100010, 0b00000000}
76#define CHR_S {0b01100100, 0b10010010, 0b10010010, 0b10010010, 0b01001100, 0b00000000}
77#define CHR_T {0b10000000, 0b10000000, 0b11111110, 0b10000000, 0b10000000, 0b00000000}
78#define CHR_U {0b11111100, 0b00000010, 0b00000010, 0b00000010, 0b11111100, 0b00000000}
79#define CHR_V {0b11111000, 0b00000100, 0b00000010, 0b00000100, 0b11111000, 0b00000000}
80#define CHR_W {0b11111100, 0b00000010, 0b00011100, 0b00000010, 0b11111110, 0b00000000}
81#define CHR_X {0b11000110, 0b00101000, 0b00010000, 0b00101000, 0b11000110, 0b00000000}
82#define CHR_Y {0b11100000, 0b00010000, 0b00001110, 0b00010000, 0b11100000, 0b00000000}
83#define CHR_Z {0b10000110, 0b10001010, 0b10010010, 0b10100010, 0b11000010, 0b00000000}
84
85#define CHR_a {0b00000100, 0b00101010, 0b00101010, 0b00101010, 0b00011110, 0b00000000}
86#define CHR_b {0b11111110, 0b00010010, 0b00100010, 0b00100010, 0b00011100, 0b00000000}
87#define CHR_c {0b00011100, 0b00100010, 0b00100010, 0b00100010, 0b00000100, 0b00000000}
88#define CHR_d {0b00011100, 0b00100010, 0b00100010, 0b00010010, 0b11111110, 0b00000000}
89#define CHR_e {0b00011100, 0b00101010, 0b00101010, 0b00101010, 0b00011000, 0b00000000}
90#define CHR_f {0b00000000, 0b00010000, 0b01111110, 0b10010000, 0b10000000, 0b01000000}
91#define CHR_g {0b00011000, 0b00100101, 0b00100101, 0b00100101, 0b00111110, 0b00000000}
92#define CHR_h {0b11111110, 0b00010000, 0b00100000, 0b00100000, 0b00011110, 0b00000000}
93#define CHR_i {0b00000000, 0b00010010, 0b10111110, 0b00000010, 0b00000000, 0b00000000}
94#define CHR_j {0b00000100, 0b00000010, 0b00100010, 0b10111100, 0b00000000, 0b00000000}
95#define CHR_k {0b11111110, 0b00001000, 0b00010100, 0b00100010, 0b00000000, 0b00000000}
96#define CHR_l {0b00000000, 0b10000010, 0b11111110, 0b00000010, 0b00000000, 0b00000000}
97#define CHR_m {0b00111110, 0b00100000, 0b00111110, 0b00100000, 0b00111110, 0b00000000}
98#define CHR_n {0b00111110, 0b00010000, 0b00100000, 0b00100000, 0b00011110, 0b00000000}
99#define CHR_o {0b00011100, 0b00100010, 0b00100010, 0b00100010, 0b00011100, 0b00000000}
100#define CHR_p {0b00111111, 0b00100100, 0b00100100, 0b00100100, 0b00011000, 0b00000000}
101#define CHR_q {0b00011000, 0b00100100, 0b00100100, 0b00011000, 0b00111111, 0b00000000}
102#define CHR_r {0b00111110, 0b00010000, 0b00100000, 0b00100000, 0b00010000, 0b00000000}
103#define CHR_s {0b00010010, 0b00101010, 0b00101010, 0b00101010, 0b00000100, 0b00000000}
104#define CHR_t {0b00100000, 0b11111100, 0b00100010, 0b00000010, 0b00000100, 0b00000000}
105#define CHR_u {0b00111100, 0b00000010, 0b00000010, 0b00000100, 0b00111110, 0b00000000}
106#define CHR_v {0b00111000, 0b00000100, 0b00000010, 0b00000100, 0b00111000, 0b00000000}
107#define CHR_w {0b00111100, 0b00000010, 0b00111100, 0b00000010, 0b00111100, 0b00000000}
108#define CHR_x {0b00100010, 0b00010100, 0b00001000, 0b00010100, 0b00100010, 0b00000000}
109#define CHR_y {0b00111000, 0b00000101, 0b00000101, 0b00000101, 0b00111110, 0b00000000}
110#define CHR_z {0b00100010, 0b00100110, 0b00101010, 0b00110010, 0b00100010, 0b00000000}
111
112// Punctuation
113#define CHR_LCURLY {0b00000000, 0b00010000, 0b01101100, 0b10000010, 0b00000000, 0b00000000}
114#define CHR_RCURLY {0b00000000, 0b10000010, 0b01101100, 0b00010000, 0b00000000, 0b00000000}
115#define CHR_PIPE {0b00000000, 0b00000000, 0b11101110, 0b00000000, 0b00000000, 0b00000000}
116#define CHR_COLON {0b00000000, 0b00000000, 0b01101100, 0b01101100, 0b00000000, 0b00000000}
117#define CHR_QUOTE {0b00000000, 0b01110000, 0b00000000, 0b01110000, 0b00000000, 0b00000000}
118#define CHR_LESSTHAN {0b00010000, 0b00101000, 0b01000100, 0b10000010, 0b00000000, 0b00000000}
119#define CHR_GREATERTHAN {0b10000010, 0b01000100, 0b00101000, 0b00010000, 0b00000000, 0b00000000}
120#define CHR_QUESTIONMARK {0b01000000, 0b10000000, 0b10001010, 0b10010000, 0b01100000, 0b00000000}
121#define CHR_INTERROBANG {0b01100000, 0b10000000, 0b11101010, 0b10010000, 0b01100000, 0b00000000}
122#define CHR_LBRACKET {0b00000000, 0b11111110, 0b10000010, 0b10000010, 0b00000000, 0b00000000}
123#define CHR_RBRACKET {0b00000000, 0b10000010, 0b10000010, 0b11111110, 0b00000000, 0b00000000}
124#define CHR_BACKSLASH {0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000100, 0b00000000}
125#define CHR_SEMICOLON {0b00000000, 0b00000000, 0b01101010, 0b01101100, 0b00000000, 0b00000000}
126#define CHR_APOSTROPHE {0b00000000, 0b00000000, 0b01110000, 0b00000000, 0b00000000, 0b00000000}
127#define CHR_COMMA {0b00000000, 0b00000000, 0b00001010, 0b00001100, 0b00000000, 0b00000000}
128#define CHR_PERIOD {0b00000000, 0b00000000, 0b00000110, 0b00000110, 0b00000000, 0b00000000}
129#define CHR_SLASH {0b00000100, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b00000000}
130#define CHR_SPACE {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}
131#define CHR_DEGREES {0b11000000, 0b11000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}
132
133// Graphics
134#define CHR_CENT {0b00111000, 0b01000100, 0b11111110, 0b01000100, 0b00101000, 0b00000000}
135#define CHR_DEGREES_C {0b11000000, 0b11001100, 0b00010010, 0b00010010, 0b00000000, 0b00000000}
136#define CHR_DEGREES_F {0b11000000, 0b11011110, 0b00010100, 0b00010000, 0b00000000, 0b00000000}
137#define CHR_DIVISION {0b00010000, 0b00010000, 0b01010100, 0b00010000, 0b00010000, 0b00000000}
138#define CHR_LEFT_ARROW {0b00010000, 0b00111000, 0b01010100, 0b00010000, 0b00010000, 0b00000000}
139#define CHR_RIGHT_ARROW {0b00010000, 0b00010000, 0b01010100, 0b00111000, 0b00010000, 0b00000000}
140#define CHR_UP_ARROW {0b00010000, 0b00100000, 0b01111110, 0b00100000, 0b00010000, 0b00000000}
141#define CHR_DOWN_ARROW {0b00001000, 0b00000100, 0b01111110, 0b00000100, 0b00001000, 0b00000000}
142#define CHR_PI {0b00100010, 0b00111100, 0b00100000, 0b00111110, 0b00100010, 0b00000000}
143#define CHR_PSI {0b01111000, 0b00001000, 0b01111110, 0b00001000, 0b01111000, 0b00000000}
144
145// Predefined messages
146#define MSG_FONTTEST {CHR_TILDE, CHR_BANG, CHR_AT, CHR_POUND, CHR_PERCENT, CHR_CARET, CHR_AMPERSAND, CHR_LPAREN, CHR_RPAREN, CHR_UNDERSCORE, CHR_PLUS, CHR_BACKTICK, CHR_1, CHR_2, CHR_3, CHR_4, CHR_5, CHR_6, CHR_7, CHR_8, CHR_9, CHR_0, CHR_DASH, CHR_EQUAL, CHR_A, CHR_B, CHR_C, CHR_D, CHR_E, CHR_F, CHR_G, CHR_H, CHR_I, CHR_J, CHR_K, CHR_L, CHR_M, CHR_N, CHR_O, CHR_P, CHR_Q, CHR_R, CHR_S, CHR_T, CHR_U, CHR_V, CHR_W, CHR_X, CHR_Y, CHR_Z, CHR_a, CHR_b, CHR_c, CHR_d, CHR_e, CHR_f, CHR_g, CHR_h, CHR_i, CHR_j, CHR_k, CHR_l, CHR_m, CHR_n, CHR_o, CHR_p, CHR_q, CHR_r, CHR_s, CHR_t, CHR_u, CHR_v, CHR_w, CHR_x, CHR_y, CHR_z, CHR_LCURLY, CHR_RCURLY, CHR_PIPE, CHR_COLON, CHR_QUOTE, CHR_LESSTHAN, CHR_GREATERTHAN, CHR_QUESTIONMARK, CHR_INTERROBANG, CHR_LBRACKET, CHR_RBRACKET, CHR_BACKSLASH, CHR_SEMICOLON, CHR_APOSTROPHE, CHR_COMMA, CHR_PERIOD, CHR_SLASH, CHR_CENT, CHR_DEGREES, CHR_DEGREES_C, CHR_DEGREES_F, CHR_DIVISION, CHR_LEFT_ARROW, CHR_RIGHT_ARROW, CHR_UP_ARROW, CHR_DOWN_ARROW, CHR_PI, CHR_PSI}
147#define MSG_FONTTEST_LEN 104
148
149#define MSG_CLUEBOARD {CHR_INTERROBANG, CHR_C, CHR_l, CHR_u, CHR_e, CHR_b, CHR_o, CHR_a, CHR_r, CHR_d}
150#define MSG_CLUEBOARD_LEN 10
151
152#define MSG_KONAMI {CHR_UP_ARROW, CHR_SPACE, CHR_UP_ARROW, CHR_SPACE, CHR_DOWN_ARROW, CHR_SPACE, CHR_DOWN_ARROW, CHR_SPACE, CHR_LEFT_ARROW, CHR_SPACE, CHR_RIGHT_ARROW, CHR_SPACE, CHR_LEFT_ARROW, CHR_SPACE, CHR_RIGHT_ARROW, CHR_SPACE, CHR_B, CHR_SPACE, CHR_A, CHR_SPACE, CHR_LESSTHAN, CHR_S, CHR_E, CHR_L, CHR_E, CHR_C, CHR_T, CHR_GREATERTHAN, CHR_SPACE, CHR_LESSTHAN, CHR_S, CHR_T, CHR_A, CHR_R, CHR_T, CHR_GREATERTHAN}
153#define MSG_KONAMI_LEN 36
154
155#define MSG_QMK_POWERED {CHR_PSI, CHR_P, CHR_o, CHR_w, CHR_e, CHR_r, CHR_e, CHR_d, CHR_SPACE, CHR_b, CHR_y, CHR_SPACE, CHR_Q, CHR_M, CHR_K}
156#define MSG_QMK_POWERED_LEN 15
diff --git a/keyboards/clueboard/2x1800/2021/info.json b/keyboards/clueboard/2x1800/2021/info.json
new file mode 100644
index 000000000..088ce343d
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/info.json
@@ -0,0 +1,419 @@
1{
2 "manufacturer": "Clueboard",
3 "keyboard_name": "Clueboard 2x1800 2021",
4 "maintainer": "skullydazed",
5 "bootloader": "halfkay",
6 "debounce": 5,
7 "diode_direction": "ROW2COL",
8 "features": {
9 "audio": true,
10 "bootmagic": false,
11 "console": true,
12 "encoder": true,
13 "extrakey": true,
14 "mousekey": true,
15 "nkro": true
16 },
17 "indicators": {
18 "caps_lock": "B5",
19 "num_lock": "B4",
20 "scroll_lock": "B6"
21 },
22 "matrix_pins": {
23 "cols": ["D2", "D3", "D4", "D5", "D7", "E0", "E1", "F0", "E6", "A0", "E7"],
24 "rows": ["C0", "C1", "C2", "C3", "C7", "F7", "F1", "F2", "F3", "F4", "F5", "F6"]
25 },
26 "processor": "at90usb1286",
27 "usb": {
28 "pid": "0x23A0"
29 },
30 "layout_aliases": {
31 "LAYOUT": "LAYOUT_all"
32 },
33 "layouts": {
34 "LAYOUT_4u_space": {
35 "layout": [
36 { "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
37 { "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
38 { "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
39 { "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
40 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 0 },
41 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
42 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
43 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
44 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 0 },
45 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 0 },
46 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 0 },
47 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 0 },
48 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 0 },
49 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 0 },
50 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 0 },
51 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 0 },
52 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 0 },
53 { "matrix": [6, 7], "w": 1, "x": 20, "y": 0 },
54 { "matrix": [6, 8], "w": 1, "x": 21, "y": 0 },
55 { "matrix": [6, 9], "w": 1, "x": 22, "y": 0 },
56 { "matrix": [6, 10], "w": 1, "x": 23, "y": 0 },
57 { "matrix": [1, 0], "w": 1, "x": 0, "y": 1.25 },
58 { "matrix": [1, 1], "w": 1, "x": 1, "y": 1.25 },
59 { "matrix": [1, 2], "w": 1, "x": 2, "y": 1.25 },
60 { "matrix": [1, 3], "w": 1, "x": 3, "y": 1.25 },
61 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1.25 },
62 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1.25 },
63 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1.25 },
64 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1.25 },
65 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1.25 },
66 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1.25 },
67 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1.25 },
68 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 1.25 },
69 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 1.25 },
70 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 1.25 },
71 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 1.25 },
72 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 1.25 },
73 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 1.25 },
74 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 1.25 },
75 { "matrix": [7, 7], "w": 1, "x": 20, "y": 1.25 },
76 { "matrix": [7, 8], "w": 1, "x": 21, "y": 1.25 },
77 { "matrix": [7, 9], "w": 1, "x": 22, "y": 1.25 },
78 { "matrix": [7, 10], "w": 1, "x": 23, "y": 1.25 },
79 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 2.25 },
80 { "matrix": [2, 1], "w": 1, "x": 1, "y": 2.25 },
81 { "matrix": [2, 2], "w": 1, "x": 2, "y": 2.25 },
82 { "matrix": [2, 3], "w": 1, "x": 3, "y": 2.25 },
83 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 2.25 },
84 { "matrix": [2, 5], "w": 1, "x": 6, "y": 2.25 },
85 { "matrix": [2, 6], "w": 1, "x": 7, "y": 2.25 },
86 { "matrix": [2, 7], "w": 1, "x": 8, "y": 2.25 },
87 { "matrix": [2, 8], "w": 1, "x": 9, "y": 2.25 },
88 { "matrix": [2, 9], "w": 1, "x": 10, "y": 2.25 },
89 { "matrix": [2, 10], "w": 1, "x": 11, "y": 2.25 },
90 { "matrix": [8, 0], "w": 1, "x": 12, "y": 2.25 },
91 { "matrix": [8, 1], "w": 1, "x": 13, "y": 2.25 },
92 { "matrix": [8, 2], "w": 1, "x": 14, "y": 2.25 },
93 { "matrix": [8, 3], "w": 1, "x": 15, "y": 2.25 },
94 { "matrix": [8, 4], "w": 1, "x": 16, "y": 2.25 },
95 { "matrix": [8, 5], "w": 1, "x": 17, "y": 2.25 },
96 { "matrix": [8, 6], "w": 1.5, "x": 18, "y": 2.25 },
97 { "matrix": [8, 7], "w": 1, "x": 20, "y": 2.25 },
98 { "matrix": [8, 8], "w": 1, "x": 21, "y": 2.25 },
99 { "matrix": [8, 9], "w": 1, "x": 22, "y": 2.25 },
100 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 2.25 },
101 { "matrix": [3, 1], "w": 1, "x": 1, "y": 3.25 },
102 { "matrix": [3, 2], "w": 1, "x": 2, "y": 3.25 },
103 { "matrix": [3, 3], "w": 1, "x": 3, "y": 3.25 },
104 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 3.25 },
105 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3.25 },
106 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3.25 },
107 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3.25 },
108 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3.25 },
109 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3.25 },
110 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3.25 },
111 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 3.25 },
112 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 3.25 },
113 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 3.25 },
114 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 3.25 },
115 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 3.25 },
116 { "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 3.25 },
117 { "matrix": [9, 7], "w": 1, "x": 20, "y": 3.25 },
118 { "matrix": [9, 8], "w": 1, "x": 21, "y": 3.25 },
119 { "matrix": [9, 9], "w": 1, "x": 22, "y": 3.25 },
120 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 4.25 },
121 { "matrix": [4, 1], "w": 1, "x": 1, "y": 4.25 },
122 { "matrix": [4, 2], "w": 1, "x": 2, "y": 4.25 },
123 { "matrix": [4, 3], "w": 1, "x": 3, "y": 4.25 },
124 { "matrix": [4, 4], "w": 1.25, "x": 5.5, "y": 4.25 },
125 { "matrix": [4, 5], "w": 1, "x": 6.75, "y": 4.25 },
126 { "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4.25 },
127 { "matrix": [4, 7], "w": 1, "x": 8.75, "y": 4.25 },
128 { "matrix": [4, 8], "w": 1, "x": 9.75, "y": 4.25 },
129 { "matrix": [4, 9], "w": 1, "x": 10.75, "y": 4.25 },
130 { "matrix": [4, 10], "w": 1, "x": 11.75, "y": 4.25 },
131 { "matrix": [10, 0], "w": 1, "x": 12.75, "y": 4.25 },
132 { "matrix": [10, 1], "w": 1, "x": 13.75, "y": 4.25 },
133 { "matrix": [10, 2], "w": 1, "x": 14.75, "y": 4.25 },
134 { "matrix": [10, 3], "w": 1, "x": 15.75, "y": 4.25 },
135 { "matrix": [10, 4], "w": 1.75, "x": 16.75, "y": 4.25 },
136 { "matrix": [10, 5], "w": 1, "x": 20, "y": 4.25 },
137 { "matrix": [9, 6], "w": 1, "x": 21, "y": 4.25 },
138 { "matrix": [10, 7], "w": 1, "x": 22, "y": 4.25 },
139 { "h": 2, "matrix": [10, 8], "w": 1, "x": 23, "y": 4.25 },
140 { "matrix": [10, 9], "w": 1, "x": 4.25, "y": 4.5 },
141 { "matrix": [10, 10], "w": 1, "x": 18.75, "y": 4.5 },
142 { "matrix": [5, 1], "w": 1, "x": 1, "y": 5.25 },
143 { "matrix": [5, 2], "w": 1, "x": 2, "y": 5.25 },
144 { "matrix": [5, 3], "w": 1, "x": 6.5, "y": 5.25 },
145 { "matrix": [5, 4], "w": 1, "x": 7.5, "y": 5.25 },
146 { "matrix": [5, 5], "w": 1, "x": 8.5, "y": 5.25 },
147 { "matrix": [5, 6], "w": 4, "x": 9.5, "y": 5.25 },
148 { "matrix": [5, 7], "w": 1, "x": 13.5, "y": 5.25 },
149 { "matrix": [5, 8], "w": 1, "x": 14.5, "y": 5.25 },
150 { "matrix": [11, 0], "w": 1, "x": 15.5, "y": 5.25 },
151 { "matrix": [11, 2], "w": 1, "x": 16.5, "y": 5.25 },
152 { "matrix": [11, 3], "w": 1, "x": 21, "y": 5.25 },
153 { "matrix": [11, 4], "w": 1, "x": 22, "y": 5.25 },
154 { "matrix": [11, 5], "w": 1, "x": 3.25, "y": 5.5 },
155 { "matrix": [10, 6], "w": 1, "x": 4.25, "y": 5.5 },
156 { "matrix": [11, 6], "w": 1, "x": 5.25, "y": 5.5 },
157 { "matrix": [11, 7], "w": 1, "x": 17.75, "y": 5.5 },
158 { "matrix": [11, 8], "w": 1, "x": 18.75, "y": 5.5 },
159 { "matrix": [11, 9], "w": 1, "x": 19.75, "y": 5.5 }
160 ]
161 },
162 "LAYOUT_7u_space": {
163 "layout": [
164 { "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
165 { "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
166 { "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
167 { "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
168 { "matrix": [0, 4], "w": 1, "x": 4.75, "y": 0 },
169 { "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
170 { "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
171 { "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
172 { "matrix": [0, 9], "w": 1, "x": 9.25, "y": 0 },
173 { "matrix": [0, 10], "w": 1, "x": 10.75, "y": 0 },
174 { "matrix": [6, 0], "w": 1, "x": 11.75, "y": 0 },
175 { "matrix": [6, 1], "w": 1, "x": 12.75, "y": 0 },
176 { "matrix": [6, 2], "w": 1, "x": 13.75, "y": 0 },
177 { "matrix": [6, 3], "w": 1, "x": 15.25, "y": 0 },
178 { "matrix": [6, 4], "w": 1, "x": 16.25, "y": 0 },
179 { "matrix": [6, 5], "w": 1, "x": 17.25, "y": 0 },
180 { "matrix": [6, 6], "w": 1, "x": 18.25, "y": 0 },
181 { "matrix": [6, 7], "w": 1, "x": 20, "y": 0 },
182 { "matrix": [6, 8], "w": 1, "x": 21, "y": 0 },
183 { "matrix": [6, 9], "w": 1, "x": 22, "y": 0 },
184 { "matrix": [6, 10], "w": 1, "x": 23, "y": 0 },
185 { "matrix": [1, 0], "w": 1, "x": 0, "y": 1.25 },
186 { "matrix": [1, 1], "w": 1, "x": 1, "y": 1.25 },
187 { "matrix": [1, 2], "w": 1, "x": 2, "y": 1.25 },
188 { "matrix": [1, 3], "w": 1, "x": 3, "y": 1.25 },
189 { "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1.25 },
190 { "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1.25 },
191 { "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1.25 },
192 { "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1.25 },
193 { "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1.25 },
194 { "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1.25 },
195 { "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1.25 },
196 { "matrix": [7, 0], "w": 1, "x": 11.5, "y": 1.25 },
197 { "matrix": [7, 1], "w": 1, "x": 12.5, "y": 1.25 },
198 { "matrix": [7, 2], "w": 1, "x": 13.5, "y": 1.25 },
199 { "matrix": [7, 3], "w": 1, "x": 14.5, "y": 1.25 },
200 { "matrix": [7, 4], "w": 1, "x": 15.5, "y": 1.25 },
201 { "matrix": [7, 5], "w": 1, "x": 16.5, "y": 1.25 },
202 { "matrix": [7, 6], "w": 2, "x": 17.5, "y": 1.25 },
203 { "matrix": [7, 7], "w": 1, "x": 20, "y": 1.25 },
204 { "matrix": [7, 8], "w": 1, "x": 21, "y": 1.25 },
205 { "matrix": [7, 9], "w": 1, "x": 22, "y": 1.25 },
206 { "matrix": [7, 10], "w": 1, "x": 23, "y": 1.25 },
207 { "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 2.25 },
208 { "matrix": [2, 1], "w": 1, "x": 1, "y": 2.25 },
209 { "matrix": [2, 2], "w": 1, "x": 2, "y": 2.25 },
210 { "matrix": [2, 3], "w": 1, "x": 3, "y": 2.25 },
211 { "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 2.25 },
212 { "matrix": [2, 5], "w": 1, "x": 6, "y": 2.25 },
213 { "matrix": [2, 6], "w": 1, "x": 7, "y": 2.25 },
214 { "matrix": [2, 7], "w": 1, "x": 8, "y": 2.25 },
215 { "matrix": [2, 8], "w": 1, "x": 9, "y": 2.25 },
216 { "matrix": [2, 9], "w": 1, "x": 10, "y": 2.25 },
217 { "matrix": [2, 10], "w": 1, "x": 11, "y": 2.25 },
218 { "matrix": [8, 0], "w": 1, "x": 12, "y": 2.25 },
219 { "matrix": [8, 1], "w": 1, "x": 13, "y": 2.25 },
220 { "matrix": [8, 2], "w": 1, "x": 14, "y": 2.25 },
221 { "matrix": [8, 3], "w": 1, "x": 15, "y": 2.25 },
222 { "matrix": [8, 4], "w": 1, "x": 16, "y": 2.25 },
223 { "matrix": [8, 5], "w": 1, "x": 17, "y": 2.25 },
224 { "matrix": [8, 6], "w": 1.5, "x": 18, "y": 2.25 },
225 { "matrix": [8, 7], "w": 1, "x": 20, "y": 2.25 },
226 { "matrix": [8, 8], "w": 1, "x": 21, "y": 2.25 },
227 { "matrix": [8, 9], "w": 1, "x": 22, "y": 2.25 },
228 { "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 2.25 },
229 { "matrix": [3, 1], "w": 1, "x": 1, "y": 3.25 },
230 { "matrix": [3, 2], "w": 1, "x": 2, "y": 3.25 },
231 { "matrix": [3, 3], "w": 1, "x": 3, "y": 3.25 },
232 { "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 3.25 },
233 { "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3.25 },
234 { "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3.25 },
235 { "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3.25 },
236 { "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3.25 },
237 { "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3.25 },
238 { "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3.25 },
239 { "matrix": [9, 0], "w": 1, "x": 12.25, "y": 3.25 },
240 { "matrix": [9, 1], "w": 1, "x": 13.25, "y": 3.25 },
241 { "matrix": [9, 2], "w": 1, "x": 14.25, "y": 3.25 },
242 { "matrix": [9, 3], "w": 1, "x": 15.25, "y": 3.25 },
243 { "matrix": [9, 4], "w": 1, "x": 16.25, "y": 3.25 },
244 { "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 3.25 },
245 { "matrix": [9, 7], "w": 1, "x": 20, "y": 3.25 },
246 { "matrix": [9, 8], "w": 1, "x": 21, "y": 3.25 },
247 { "matrix": [9, 9], "w": 1, "x": 22, "y": 3.25 },
248 { "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 4.25 },
249 { "matrix": [4, 1], "w": 1, "x": 1, "y": 4.25 },
250 { "matrix": [4, 2], "w": 1, "x": 2, "y": 4.25 },
251 { "matrix": [4, 3], "w": 1, "x": 3, "y": 4.25 },
252 { "matrix": [4, 4], "w": 1.25, "x": 5.5, "y": 4.25 },
253 { "matrix": [4, 5], "w": 1, "x": 6.75, "y": 4.25 },
254 { "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4.25 },
255 { "matrix": [4, 7], "w": 1, "x": 8.75, "y": 4.25 },
256 { "matrix": [4, 8], "w": 1, "x": 9.75, "y": 4.25 },
257 { "matrix": [4, 9], "w": 1, "x": 10.75, "y": 4.25 },
258 { "matrix": [4, 10], "w": 1, "x": 11.75, "y": 4.25 },
259 { "matrix": [10, 0], "w": 1, "x": 12.75, "y": 4.25 },
260 { "matrix": [10, 1], "w": 1, "x": 13.75, "y": 4.25 },
261 { "matrix": [10, 2], "w": 1, "x": 14.75, "y": 4.25 },
262 { "matrix": [10, 3], "w": 1, "x": 15.75, "y": 4.25 },
263 { "matrix": [10, 4], "w": 1.75, "x": 16.75, "y": 4.25 },
264 { "matrix": [10, 5], "w": 1, "x": 20, "y": 4.25 },
265 { "matrix": [9, 6], "w": 1, "x": 21, "y": 4.25 },
266 { "matrix": [10, 7], "w": 1, "x": 22, "y": 4.25 },
267 { "h": 2, "matrix": [10, 8], "w": 1, "x": 23, "y": 4.25 },
268 { "matrix": [10, 9], "w": 1, "x": 4.25, "y": 4.5 },
269 { "matrix": [10, 10], "w": 1, "x": 18.75, "y": 4.5 },
270 { "matrix": [5, 1], "w": 1, "x": 1, "y": 5.25 },
271 { "matrix": [5, 2], "w": 1, "x": 2, "y": 5.25 },
272 { "matrix": [5, 3], "w": 1, "x": 6.5, "y": 5.25 },
273 { "matrix": [5, 4], "w": 1, "x": 7.5, "y": 5.25 },
274 { "matrix": [5, 5], "w": 7, "x": 8.5, "y": 5.25 },
275 { "matrix": [5, 6], "w": 1, "x": 15.5, "y": 5.25 },
276 { "matrix": [5, 7], "w": 1, "x": 16.5, "y": 5.25 },
277 { "matrix": [11, 0], "w": 1, "x": 21, "y": 5.25 },
278 { "matrix": [11, 4], "w": 1, "x": 22, "y": 5.25 },
279 { "matrix": [11, 5], "w": 1, "x": 3.25, "y": 5.5 },
280 { "matrix": [10, 6], "w": 1, "x": 4.25, "y": 5.5 },
281 { "matrix": [11, 6], "w": 1, "x": 5.25, "y": 5.5 },
282 { "matrix": [11, 7], "w": 1, "x": 17.75, "y": 5.5 },
283 { "matrix": [11, 8], "w": 1, "x": 18.75, "y": 5.5 },
284 { "matrix": [11, 9], "w": 1, "x": 19.75, "y": 5.5 }
285 ]
286 },
287 "LAYOUT_all": {
288 "layout": [
289 { "label": "Home", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
290 { "label": "End", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
291 { "label": "PgUp", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
292 { "label": "PgDn", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
293 { "label": "Esc", "matrix": [0, 4], "w": 1, "x": 4.75, "y": 0 },
294 { "label": "F1", "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
295 { "label": "F2", "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
296 { "label": "F3", "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
297 { "label": "F4", "matrix": [0, 9], "w": 1, "x": 9.25, "y": 0 },
298 { "label": "F5", "matrix": [0, 10], "w": 1, "x": 10.75, "y": 0 },
299 { "label": "F6", "matrix": [6, 0], "w": 1, "x": 11.75, "y": 0 },
300 { "label": "F7", "matrix": [6, 1], "w": 1, "x": 12.75, "y": 0 },
301 { "label": "F8", "matrix": [6, 2], "w": 1, "x": 13.75, "y": 0 },
302 { "label": "F9", "matrix": [6, 3], "w": 1, "x": 15.25, "y": 0 },
303 { "label": "F10", "matrix": [6, 4], "w": 1, "x": 16.25, "y": 0 },
304 { "label": "F11", "matrix": [6, 5], "w": 1, "x": 17.25, "y": 0 },
305 { "label": "F12", "matrix": [6, 6], "w": 1, "x": 18.25, "y": 0 },
306 { "label": "PrtSc", "matrix": [6, 7], "w": 1, "x": 20, "y": 0 },
307 { "label": "Scroll Lock", "matrix": [6, 8], "w": 1, "x": 21, "y": 0 },
308 { "label": "Pause", "matrix": [6, 9], "w": 1, "x": 22, "y": 0 },
309 { "label": "Insert", "matrix": [6, 10], "w": 1, "x": 23, "y": 0 },
310 { "label": "-", "matrix": [1, 0], "w": 1, "x": 0, "y": 1.25 },
311 { "label": "Num Lock", "matrix": [1, 1], "w": 1, "x": 1, "y": 1.25 },
312 { "label": "/", "matrix": [1, 2], "w": 1, "x": 2, "y": 1.25 },
313 { "label": "*", "matrix": [1, 3], "w": 1, "x": 3, "y": 1.25 },
314 { "label": "~", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1.25 },
315 { "label": "!", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1.25 },
316 { "label": "@", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1.25 },
317 { "label": "#", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1.25 },
318 { "label": "$", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1.25 },
319 { "label": "%", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1.25 },
320 { "label": "^", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1.25 },
321 { "label": "&", "matrix": [7, 0], "w": 1, "x": 11.5, "y": 1.25 },
322 { "label": "*", "matrix": [7, 1], "w": 1, "x": 12.5, "y": 1.25 },
323 { "label": "(", "matrix": [7, 2], "w": 1, "x": 13.5, "y": 1.25 },
324 { "label": ")", "matrix": [7, 3], "w": 1, "x": 14.5, "y": 1.25 },
325 { "label": "_", "matrix": [7, 4], "w": 1, "x": 15.5, "y": 1.25 },
326 { "label": "+", "matrix": [7, 5], "w": 1, "x": 16.5, "y": 1.25 },
327 { "label": "Backspace", "matrix": [7, 6], "w": 2, "x": 17.5, "y": 1.25 },
328 { "label": "Num Lock", "matrix": [7, 7], "w": 1, "x": 20, "y": 1.25 },
329 { "label": "/", "matrix": [7, 8], "w": 1, "x": 21, "y": 1.25 },
330 { "label": "*", "matrix": [7, 9], "w": 1, "x": 22, "y": 1.25 },
331 { "label": "-", "matrix": [7, 10], "w": 1, "x": 23, "y": 1.25 },
332 { "h": 2, "label": "+", "matrix": [2, 0], "w": 1, "x": 0, "y": 2.25 },
333 { "label": "7", "matrix": [2, 1], "w": 1, "x": 1, "y": 2.25 },
334 { "label": "8", "matrix": [2, 2], "w": 1, "x": 2, "y": 2.25 },
335 { "label": "9", "matrix": [2, 3], "w": 1, "x": 3, "y": 2.25 },
336 { "label": "Tab", "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 2.25 },
337 { "label": "Q", "matrix": [2, 5], "w": 1, "x": 6, "y": 2.25 },
338 { "label": "W", "matrix": [2, 6], "w": 1, "x": 7, "y": 2.25 },
339 { "label": "E", "matrix": [2, 7], "w": 1, "x": 8, "y": 2.25 },
340 { "label": "R", "matrix": [2, 8], "w": 1, "x": 9, "y": 2.25 },
341 { "label": "T", "matrix": [2, 9], "w": 1, "x": 10, "y": 2.25 },
342 { "label": "Y", "matrix": [2, 10], "w": 1, "x": 11, "y": 2.25 },
343 { "label": "U", "matrix": [8, 0], "w": 1, "x": 12, "y": 2.25 },
344 { "label": "I", "matrix": [8, 1], "w": 1, "x": 13, "y": 2.25 },
345 { "label": "O", "matrix": [8, 2], "w": 1, "x": 14, "y": 2.25 },
346 { "label": "P", "matrix": [8, 3], "w": 1, "x": 15, "y": 2.25 },
347 { "label": "{", "matrix": [8, 4], "w": 1, "x": 16, "y": 2.25 },
348 { "label": "}", "matrix": [8, 5], "w": 1, "x": 17, "y": 2.25 },
349 { "label": "|", "matrix": [8, 6], "w": 1.5, "x": 18, "y": 2.25 },
350 { "label": "7", "matrix": [8, 7], "w": 1, "x": 20, "y": 2.25 },
351 { "label": "8", "matrix": [8, 8], "w": 1, "x": 21, "y": 2.25 },
352 { "label": "9", "matrix": [8, 9], "w": 1, "x": 22, "y": 2.25 },
353 { "h": 2, "label": "+", "matrix": [8, 10], "w": 1, "x": 23, "y": 2.25 },
354 { "label": "4", "matrix": [3, 1], "w": 1, "x": 1, "y": 3.25 },
355 { "label": "5", "matrix": [3, 2], "w": 1, "x": 2, "y": 3.25 },
356 { "label": "6", "matrix": [3, 3], "w": 1, "x": 3, "y": 3.25 },
357 { "label": "Caps Lock", "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 3.25 },
358 { "label": "A", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3.25 },
359 { "label": "S", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3.25 },
360 { "label": "D", "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3.25 },
361 { "label": "F", "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3.25 },
362 { "label": "G", "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3.25 },
363 { "label": "H", "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3.25 },
364 { "label": "J", "matrix": [9, 0], "w": 1, "x": 12.25, "y": 3.25 },
365 { "label": "K", "matrix": [9, 1], "w": 1, "x": 13.25, "y": 3.25 },
366 { "label": "L", "matrix": [9, 2], "w": 1, "x": 14.25, "y": 3.25 },
367 { "label": ":", "matrix": [9, 3], "w": 1, "x": 15.25, "y": 3.25 },
368 { "label": "\"", "matrix": [9, 4], "w": 1, "x": 16.25, "y": 3.25 },
369 { "label": "Enter", "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 3.25 },
370 { "label": "4", "matrix": [9, 7], "w": 1, "x": 20, "y": 3.25 },
371 { "label": "5", "matrix": [9, 8], "w": 1, "x": 21, "y": 3.25 },
372 { "label": "6", "matrix": [9, 9], "w": 1, "x": 22, "y": 3.25 },
373 { "h": 2, "label": "Enter", "matrix": [4, 0], "w": 1, "x": 0, "y": 4.25 },
374 { "label": "1", "matrix": [4, 1], "w": 1, "x": 1, "y": 4.25 },
375 { "label": "2", "matrix": [4, 2], "w": 1, "x": 2, "y": 4.25 },
376 { "label": "3", "matrix": [4, 3], "w": 1, "x": 3, "y": 4.25 },
377 { "label": "\\u2191", "matrix": [4, 4], "w": 1, "x": 4.25, "y": 4.5 },
378 { "label": "Shift", "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 4.25 },
379 { "label": "Z", "matrix": [4, 6], "w": 1, "x": 6.75, "y": 4.25 },
380 { "label": "X", "matrix": [4, 7], "w": 1, "x": 7.75, "y": 4.25 },
381 { "label": "C", "matrix": [4, 8], "w": 1, "x": 8.75, "y": 4.25 },
382 { "label": "V", "matrix": [4, 9], "w": 1, "x": 9.75, "y": 4.25 },
383 { "label": "B", "matrix": [4, 10], "w": 1, "x": 10.75, "y": 4.25 },
384 { "label": "N", "matrix": [10, 0], "w": 1, "x": 11.75, "y": 4.25 },
385 { "label": "M", "matrix": [10, 1], "w": 1, "x": 12.75, "y": 4.25 },
386 { "label": "<", "matrix": [10, 2], "w": 1, "x": 13.75, "y": 4.25 },
387 { "label": ">", "matrix": [10, 3], "w": 1, "x": 14.75, "y": 4.25 },
388 { "label": "?", "matrix": [10, 4], "w": 1, "x": 15.75, "y": 4.25 },
389 { "label": "Shift", "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 4.25 },
390 { "label": "\\u2191", "matrix": [9, 6], "w": 1, "x": 18.75, "y": 4.5 },
391 { "label": "1", "matrix": [10, 7], "w": 1, "x": 20, "y": 4.25 },
392 { "label": "2", "matrix": [10, 8], "w": 1, "x": 21, "y": 4.25 },
393 { "label": "3", "matrix": [10, 9], "w": 1, "x": 22, "y": 4.25 },
394 { "h": 2, "label": "Enter", "matrix": [10, 10], "w": 1, "x": 23, "y": 4.25 },
395 { "label": "0", "matrix": [5, 1], "w": 1, "x": 1, "y": 5.25 },
396 { "label": ".", "matrix": [5, 2], "w": 1, "x": 2, "y": 5.25 },
397 { "label": "\\u2190", "matrix": [5, 3], "w": 1, "x": 3.25, "y": 5.5 },
398 { "label": "\\u2193", "matrix": [5, 4], "w": 1, "x": 4.25, "y": 5.5 },
399 { "label": "\\u2192", "matrix": [5, 5], "w": 1, "x": 5.25, "y": 5.5 },
400 { "label": "Ctrl", "matrix": [5, 6], "w": 1, "x": 6.5, "y": 5.25 },
401 { "label": "Win", "matrix": [5, 7], "w": 1, "x": 7.5, "y": 5.25 },
402 { "label": "Alt", "matrix": [5, 8], "w": 1, "x": 8.5, "y": 5.25 },
403 { "label": "1u", "matrix": [5, 9], "w": 1, "x": 9.5, "y": 5.25 },
404 { "label": "1u", "matrix": [5, 10], "w": 1, "x": 10.5, "y": 5.25 },
405 { "label": "1u", "matrix": [11, 0], "w": 1, "x": 11.5, "y": 5.25 },
406 { "label": "1u", "matrix": [11, 1], "w": 1, "x": 12.5, "y": 5.25 },
407 { "label": "Alt", "matrix": [11, 2], "w": 1, "x": 13.5, "y": 5.25 },
408 { "label": "Win", "matrix": [11, 3], "w": 1, "x": 14.5, "y": 5.25 },
409 { "label": "Menu", "matrix": [11, 4], "w": 1, "x": 15.5, "y": 5.25 },
410 { "label": "Ctrl", "matrix": [11, 5], "w": 1, "x": 16.5, "y": 5.25 },
411 { "label": "\\u2190", "matrix": [10, 6], "w": 1, "x": 17.75, "y": 5.5 },
412 { "label": "\\u2193", "matrix": [11, 6], "w": 1, "x": 18.75, "y": 5.5 },
413 { "label": "\\u2192", "matrix": [11, 7], "w": 1, "x": 19.75, "y": 5.5 },
414 { "label": "0", "matrix": [11, 8], "w": 1, "x": 21, "y": 5.25 },
415 { "label": ".", "matrix": [11, 9], "w": 1, "x": 22, "y": 5.25 }
416 ]
417 }
418 }
419}
diff --git a/keyboards/clueboard/2x1800/2021/keymaps/default/keymap.json b/keyboards/clueboard/2x1800/2021/keymaps/default/keymap.json
new file mode 100644
index 000000000..7122f42d4
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/keymaps/default/keymap.json
@@ -0,0 +1,18 @@
1{
2 "version": 1,
3 "author": "skullydazed",
4 "notes": "",
5 "keyboard": "clueboard/2x1800/2018",
6 "keymap": "default",
7 "layout": "LAYOUT_all",
8 "layers": [
9 [
10 "KC_HOME", "KC_END", "KC_PGUP", "KC_PGDN", "KC_ESC", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_PSCR", "KC_SLCK", "KC_PAUS", "KC_INS",
11 "KC_PMNS", "KC_NLCK", "KC_PSLS", "KC_PAST", "KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC", "KC_NLCK", "KC_PSLS", "KC_PAST", "KC_PMNS",
12 "KC_PPLS", "KC_P7", "KC_P8", "KC_P9", "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS", "KC_P7", "KC_P8", "KC_P9", "KC_PPLS",
13 "KC_P4", "KC_P5", "KC_P6", "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_P4", "KC_P5", "KC_P6",
14 "KC_PENT", "KC_P1", "KC_P2", "KC_P3", "KC_UP", "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "KC_UP", "KC_P1", "KC_P2", "KC_P3", "KC_PENT",
15 "KC_P0", "KC_PDOT", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_SPC", "KC_SPC", "KC_SPC", "KC_RALT", "KC_RGUI", "KC_APP", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_P0", "KC_PDOT"
16 ]
17 ]
18}
diff --git a/keyboards/clueboard/2x1800/2021/keymaps/default_4u/keymap.c b/keyboards/clueboard/2x1800/2021/keymaps/default_4u/keymap.c
new file mode 100644
index 000000000..f29feccc6
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/keymaps/default_4u/keymap.c
@@ -0,0 +1,28 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_4u_space(
20 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
21
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
24 KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
diff --git a/keyboards/clueboard/2x1800/2021/keymaps/default_4u/readme.md b/keyboards/clueboard/2x1800/2021/keymaps/default_4u/readme.md
new file mode 100644
index 000000000..a696972e8
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/keymaps/default_4u/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 4u Spacebar
diff --git a/keyboards/clueboard/2x1800/2021/keymaps/default_7u/keymap.c b/keyboards/clueboard/2x1800/2021/keymaps/default_7u/keymap.c
new file mode 100644
index 000000000..395956cec
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/keymaps/default_7u/keymap.c
@@ -0,0 +1,49 @@
1/* Copyright 2017 Zach White <[email protected]>
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[0] = LAYOUT_7u_space(
20 KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL,
21
22 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
23 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
24 KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6,
25 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
27)
28};
29
30
31#ifdef AUDIO_ENABLE
32 float song_one_up[][2] = SONG(ONE_UP_SOUND);
33#endif
34
35volatile uint8_t runonce = true;
36static uint16_t my_timer;
37
38void matrix_init_user(void) {
39 my_timer = timer_read();
40}
41
42void matrix_scan_user(void) {
43 if (runonce && timer_elapsed(my_timer) > 500) {
44 runonce = false;
45#ifdef AUDIO_ENABLE
46 PLAY_SONG(song_one_up);
47#endif
48 }
49}
diff --git a/keyboards/clueboard/2x1800/2021/keymaps/default_7u/readme.md b/keyboards/clueboard/2x1800/2021/keymaps/default_7u/readme.md
new file mode 100644
index 000000000..f5718e842
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/keymaps/default_7u/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800 with 7u spacebar
diff --git a/keyboards/clueboard/2x1800/2021/keymaps/signboard/config.h b/keyboards/clueboard/2x1800/2021/keymaps/signboard/config.h
new file mode 100644
index 000000000..81995d66f
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/keymaps/signboard/config.h
@@ -0,0 +1,20 @@
1/* Copyright 2017 Zach White <[email protected]>
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#define MAX7219_LED_FONTTEST
19
20// place overrides here
diff --git a/keyboards/clueboard/2x1800/2021/keymaps/signboard/keymap.c b/keyboards/clueboard/2x1800/2021/keymaps/signboard/keymap.c
new file mode 100644
index 000000000..3559455b6
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/keymaps/signboard/keymap.c
@@ -0,0 +1,50 @@
1#include QMK_KEYBOARD_H
2#include "font.h"
3#include "max7219.h"
4
5enum custom_keycodes {
6 MSG_CB = SAFE_RANGE,
7 MSG_CS,
8 MSG_KMI,
9 MSG_QMK,
10};
11
12uint8_t custom_message[5][6] = {CHR_M, CHR_y, CHR_SPACE, CHR_2, CHR_CENT};
13
14const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
15 [0] = LAYOUT_all(
16 MSG_CB, MSG_QMK, MSG_KMI, MSG_CS, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
17 KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
18 KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
19 KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6,
20 KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
21 KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
22 )
23};
24
25bool process_record_user(uint16_t keycode, keyrecord_t *record) {
26 if (record->event.pressed) {
27 switch (keycode) {
28 case MSG_CB:
29 max7219_led_scrolling=true;
30 uint8_t cb_msg[MSG_CLUEBOARD_LEN][6] = MSG_CLUEBOARD;
31 max7219_message_sign(cb_msg, MSG_CLUEBOARD_LEN);
32 return true;
33 case MSG_CS:
34 max7219_led_scrolling=false;
35 max7219_message_sign(custom_message, 5);
36 return true;
37 case MSG_KMI:
38 max7219_led_scrolling=true;
39 uint8_t kmi_msg[MSG_KONAMI_LEN][6] = MSG_KONAMI;
40 max7219_message_sign(kmi_msg, MSG_KONAMI_LEN);
41 return true;
42 case MSG_QMK:
43 max7219_led_scrolling=true;
44 uint8_t qmk_msg[MSG_QMK_POWERED_LEN][6] = MSG_QMK_POWERED;
45 max7219_message_sign(qmk_msg, MSG_QMK_POWERED_LEN);
46 return true;
47 }
48 }
49 return true;
50};
diff --git a/keyboards/clueboard/2x1800/2021/keymaps/signboard/readme.md b/keyboards/clueboard/2x1800/2021/keymaps/signboard/readme.md
new file mode 100644
index 000000000..4e3457efc
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/keymaps/signboard/readme.md
@@ -0,0 +1 @@
# The default keymap for 2x1800
diff --git a/keyboards/clueboard/2x1800/2021/max7219.c b/keyboards/clueboard/2x1800/2021/max7219.c
new file mode 100644
index 000000000..1ba22362f
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/max7219.c
@@ -0,0 +1,318 @@
1/*
2 * Copyright (c) 2021 Zach White <[email protected]>
3 * Copyright (c) 2007 Eberhard Fahle
4 *
5 * max7219.c - A library for controling Leds with a MAX7219/MAX7221
6 *
7 * Permission is hereby granted, free of charge, to any person
8 * obtaining a copy of this software and associated documentation
9 * files (the "Software"), to deal in the Software without
10 * restriction, including without limitation the rights to use,
11 * copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following
14 * conditions:
15 *
16 * This permission notice shall be included in all copies or
17 * substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
21 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
23 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */
28
29/*
30 * This driver started as a port of Arduino's LedControl to QMK. The
31 * original Arduino code can be found here:
32 *
33 * https://github.com/wayoda/LedControl
34 *
35 * Unlike LedControl we are using the native SPI support, you will need to
36 * use the native SPI pins for your MCU. You can set the CS pin with
37 * `#define MAX7219_LOAD <pin>`.
38 *
39 * This has only been tested on AVR, specifically a Teensy 2.0++.
40 */
41
42#include "max7219.h"
43#include "font.h"
44
45// Datastructures
46bool max7219_led_scrolling = true;
47uint16_t max7219_buffer_end = 0;
48uint8_t max7219_spidata[MAX_BYTES];
49uint8_t max7219_led_a[8][MAX7219_BUFFER_SIZE];
50
51/* Write max7219_spidata to all the max7219's
52 */
53void max7219_write_all(void) {
54 dprintf("max7219_write_all()\n");
55 if (spi_start(MAX7219_LOAD, false, 0, 8)) {
56 for(int i = MAX_BYTES; i>0; i--) {
57 dprintf("spi_write(%d)\n", max7219_spidata[i-1]);
58 spi_write(max7219_spidata[i-1]);
59 }
60 spi_stop();
61 } else {
62 xprintf("Could not spi_start!\n");
63 }
64}
65
66/* Write the current frame in max7219_led_a to all the max7219's
67 */
68void max7219_write_frame(void) {
69 dprintf("max7219_write_frame()\n");
70
71 // Set our opcode and data
72 for (int col=0; col<8; col++) {
73 for (int device_num=0; device_num<MAX7219_CONTROLLERS; device_num++) {
74 int offset=device_num*2;
75 max7219_spidata[offset] = max7219_led_a[col][device_num];
76 max7219_spidata[offset+1] = col+1;
77 }
78 max7219_write_all();
79 }
80}
81
82/* Stores a message in the sign buffer.
83 *
84 * message should be a 2d array with the outer array having a length of your
85 * message and the inner array having a length of 6. Use the CHR_<letter>
86 * macros from font.h to populate your array.
87 *
88 * Example:
89 *
90 * uint8_t message[10][6] = {CHR_INTERROBANG, CHR_C, CHR_l, CHR_u, CHR_e, CHR_b, CHR_o, CHR_a, CHR_r, CHR_d};
91 * max7219_message(message, 10);
92 */
93void max7219_message_sign(uint8_t message[][6], size_t message_len) {
94 uint8_t letter_num = 0;
95 uint8_t letter_col = 0;
96 max7219_buffer_end = message_len * 6 + 32;
97
98 for (int device_num=0; device_num<MAX7219_BUFFER_SIZE; device_num++) {
99 for (int col=0; col<8; col++) {
100 if (letter_num >= message_len) {
101 max7219_led_a[col][device_num] = 0b00000000;
102 } else {
103 max7219_led_a[col][device_num] = message[letter_num][letter_col];
104 if (letter_col == 5) {
105 letter_num++;
106 letter_col = 0;
107 } else {
108 letter_col++;
109 }
110 }
111 }
112 }
113
114 max7219_write_frame();
115}
116
117/* Scroll the content on the sign left by 1 column.
118 *
119 * When loop_message is true columns that slide off the left will be added
120 * to the right to be displayed again.
121 */
122void max7219_message_sign_task(bool loop_message) {
123 uint8_t left_col = 0b00000000;
124
125 if (!max7219_led_scrolling) {
126 return;
127 }
128
129 if (loop_message) {
130 left_col = max7219_led_a[0][0];
131 }
132
133 int i=0;
134
135 for (int device_num=0; device_num<MAX7219_BUFFER_SIZE; device_num++) {
136 for (int col=0; col<8; col++) {
137 i++;
138
139 if (i == max7219_buffer_end) {
140 max7219_led_a[col][device_num] = left_col;
141 device_num=MAX7219_BUFFER_SIZE;
142 break;
143 } else if (col < 7) {
144 max7219_led_a[col][device_num] = max7219_led_a[col+1][device_num];
145 } else if (device_num == MAX7219_BUFFER_SIZE-1) {
146 max7219_led_a[col][device_num] = left_col;
147 } else {
148 max7219_led_a[col][device_num] = max7219_led_a[0][device_num+1];
149 }
150 }
151 }
152 max7219_write_frame();
153}
154
155/* Write data to a single max7219
156 */
157void max7219_write(int device_num, volatile uint8_t opcode, volatile uint8_t data) {
158 dprintf("max7219_write(%d, %d, %d)\n", device_num, opcode, data);
159
160 // Clear the data array
161 for(int i = MAX_BYTES; i>0; i--) {
162 max7219_spidata[i-1]=0;
163 }
164
165 // Set our opcode and data
166 uint8_t offset = device_num*2;
167 max7219_spidata[offset] = data;
168 max7219_spidata[offset+1] = opcode;
169
170 // Write the data
171 max7219_write_all();
172}
173
174/* Turn off all the LEDs
175 */
176void max7219_clear_display(void) {
177 dprintf("max7219_clear_display();\n");
178
179 for (int col=0; col<8; col++) {
180 for (int device_num=0; device_num<MAX7219_BUFFER_SIZE; device_num++) {
181 max7219_led_a[col][device_num] = 0b00000000;
182 }
183 }
184 max7219_write_frame();
185}
186
187/* Enable the display test (IE turn on all 64 LEDs)
188 */
189void max7219_display_test(int device_num, bool enabled) {
190 dprintf("max7219_display_test(%d, %d);\n", device_num, enabled);
191
192 if (device_num<0 || device_num >= MAX7219_CONTROLLERS) {
193 return;
194 }
195
196 max7219_write(device_num, OP_DISPLAYTEST, enabled);
197}
198
199/* Initialize the max7219 system and set the controller(s) to a default state.
200 */
201void max7219_init(void) {
202 wait_ms(1500);
203 dprintf("max7219_init()\n");
204
205 setPinOutput(MAX7219_LOAD);
206 writePinHigh(MAX7219_LOAD);
207 spi_init();
208
209 for (int i=0; i<MAX7219_CONTROLLERS; i++) {
210 max7219_shutdown(i, true);
211 }
212
213 for (int i=0; i<MAX7219_CONTROLLERS; i++) {
214 // Reset everything to defaults and enable the display
215 max7219_display_test(i, false);
216 max7219_set_scan_limit(i, 7);
217 max7219_set_decode_mode(i, 0);
218 max7219_set_intensity(i, MAX7219_LED_INTENSITY);
219 }
220
221 max7219_clear_display();
222
223#ifndef MAX7219_NO_STARTUP_TEST
224 for (int i=0; i<MAX7219_CONTROLLERS; i++) {
225 // Test this display
226 max7219_display_test(i, true);
227 wait_ms(75);
228 max7219_display_test(i, false);
229 }
230#endif
231
232 for (int i=0; i<MAX7219_CONTROLLERS; i++) {
233 max7219_shutdown(i, false);
234 }
235}
236
237/* Set the decode mode of the controller. You probably don't want to change this.
238 */
239void max7219_set_decode_mode(int device_num, int mode) {
240 dprintf("max7219_set_decode_mode(%d, %d);\n", device_num, mode);
241
242 if (device_num<0 || device_num >= MAX7219_CONTROLLERS) {
243 return;
244 }
245
246 max7219_write(device_num, OP_DECODEMODE, mode);
247}
248
249/* Set the intensity (brightness) for the LEDs.
250 */
251void max7219_set_intensity(int device_num, int intensity) {
252 dprintf("max7219_set_intensity(%d, %d);\n", device_num, intensity);
253
254 if (device_num<0 || device_num >= MAX7219_CONTROLLERS) {
255 return;
256 }
257
258 if (intensity >= 0 && intensity<16) {
259 max7219_write(device_num, OP_INTENSITY, intensity);
260 }
261}
262
263/* Control a single LED.
264 */
265void max7219_set_led(int row, int column, bool state) {
266 dprintf("max7219_set_led(%d, %d, %d);\n", row, column, state);
267
268 if (column<0 || column>8*MAX7219_CONTROLLERS) {
269 xprintf("max7219_set_led: column (%d) out of bounds\n", column);
270 return;
271 }
272
273 if (row<0 || row>7) {
274 xprintf("max7219_set_led: row (%d) out of bounds\n", row);
275 return;
276 }
277
278 /* At this point we reverse the sense of row and column to match the
279 * physical layout of my LEDs.
280 */
281 uint8_t device_num = column / 8;
282 uint8_t col = column % 8;
283 uint8_t val = 0b10000000 >> row;
284
285 if (state) {
286 max7219_led_a[col][device_num] = max7219_led_a[col][device_num]|val;
287 } else {
288 val = ~val;
289 max7219_led_a[col][device_num] = max7219_led_a[col][device_num]&val;
290 }
291 max7219_write(device_num, col+1, max7219_led_a[col][device_num]);
292}
293
294/* Set the number of digits (rows) to be scanned.
295 */
296void max7219_set_scan_limit(int device_num, int limit) {
297 dprintf("max7219_set_scan_limit(%d, %d);\n", device_num, limit);
298
299 if (device_num<0 || device_num >= MAX7219_CONTROLLERS) {
300 return;
301 }
302
303 if (limit >= 0 && limit < 8) {
304 max7219_write(device_num, OP_SCANLIMIT, limit);
305 }
306}
307
308/* Enable (true) or disable (false) the controller.
309 */
310void max7219_shutdown(int device_num, bool shutdown) {
311 dprintf("max7219_shutdown(%d, %d);\n", device_num, shutdown);
312
313 if (device_num<0 || device_num >= MAX7219_CONTROLLERS) {
314 return;
315 }
316
317 max7219_write(device_num, OP_SHUTDOWN, !shutdown);
318}
diff --git a/keyboards/clueboard/2x1800/2021/max7219.h b/keyboards/clueboard/2x1800/2021/max7219.h
new file mode 100644
index 000000000..95d1d9389
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/max7219.h
@@ -0,0 +1,87 @@
1/*
2 * Copyright (c) 2021 Zach White <[email protected]>
3 * Copyright (c) 2007 Eberhard Fahle
4 *
5 * max7219.h - A library for controling Leds with a MAX7219/MAX7221
6 *
7 * Permission is hereby granted, free of charge, to any person
8 * obtaining a copy of this software and associated documentation
9 * files (the "Software"), to deal in the Software without
10 * restriction, including without limitation the rights to use,
11 * copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following
14 * conditions:
15 *
16 * This permission notice shall be included in all copies or
17 * substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
21 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
23 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */
28#pragma once
29#include "quantum.h"
30#include "spi_master.h"
31
32// Set defaults if they're not set
33#ifndef MAX7219_LOAD
34# define MAX7219_LOAD B0
35#endif
36
37#ifndef MAX7219_CONTROLLERS
38# define MAX7219_CONTROLLERS 4
39#endif
40
41#ifndef MAX7219_LED_INTENSITY
42# define MAX7219_LED_INTENSITY 1
43#endif
44
45#ifndef MAX7219_SCROLL_TIME
46# define MAX7219_SCROLL_TIME 100
47#endif
48
49#ifndef MAX7219_BUFFER_MULTIPLIER
50# define MAX7219_BUFFER_MULTIPLIER 24
51#endif
52
53#if !defined(MAX7219_LED_TEST) && !defined(MAX7219_LED_ITERATE) && !defined(MAX7219_LED_DANCE) && !defined(MAX7219_LED_FONTTEST) && !defined(MAX7219_LED_CLUEBOARD) && !defined(MAX7219_LED_KONAMI) && !defined(MAX7219_LED_QMK_POWERED) && !defined(MAX7219_DRAWING_TOY_MODE) && !defined(MAX7219_LED_CUSTOM)
54# define MAX7219_QMK_POWERED
55#endif
56
57// Configure our MAX7219's
58#define MAX_BYTES MAX7219_CONTROLLERS * 2
59#define LED_COUNT MAX7219_CONTROLLERS * 64
60#define MAX7219_BUFFER_SIZE MAX7219_CONTROLLERS*MAX7219_BUFFER_MULTIPLIER
61
62// Opcodes for the MAX7219
63#define OP_DECODEMODE 9
64#define OP_INTENSITY 10
65#define OP_SCANLIMIT 11
66#define OP_SHUTDOWN 12
67#define OP_DISPLAYTEST 15
68
69// Datastructures
70extern uint8_t max7219_led_a[8][MAX7219_BUFFER_SIZE];
71extern bool max7219_led_scrolling;
72
73// Functions
74void max7219_write(int device_num, volatile uint8_t opcode, volatile uint8_t data);
75void max7219_write_all(void);
76void max7219_write_frame(void);
77void max7219_clear_display(void);
78void max7219_display_test(int device_num, bool enabled);
79void max7219_init(void);
80void max7219_message_sign(uint8_t message[][6], size_t message_len);
81void max7219_message_sign_task(bool loop_message);
82void max7219_set_decode_mode(int device_num, int mode);
83void max7219_set_intensity(int device_num, int intensity);
84void max7219_set_led(int row, int column, bool state);
85void max7219_set_all_leds(uint8_t led_matrix[LED_COUNT]);
86void max7219_set_scan_limit(int device_num, int limit);
87void max7219_shutdown(int device_num, bool is_in_shutdown);
diff --git a/keyboards/clueboard/2x1800/2021/readme.md b/keyboards/clueboard/2x1800/2021/readme.md
new file mode 100644
index 000000000..97d536740
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/readme.md
@@ -0,0 +1,17 @@
1# Clueboard 2x1800
2
3Clueboard 2x1800 LED Sign Edition
4
5* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
6* Hardware Supported: Clueboard 2x1800 PCB
7* Hardware Availability: 2021 Apr 1 Group Buy
8
9Make example for this keyboard:
10
11 make clueboard/2x1800/2021:default
12
13Flashing example for this keyboard:
14
15 make clueboard/2x1800/2021:default:flash
16
17See 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/clueboard/2x1800/2021/rules.mk b/keyboards/clueboard/2x1800/2021/rules.mk
new file mode 100644
index 000000000..e9f44d7bd
--- /dev/null
+++ b/keyboards/clueboard/2x1800/2021/rules.mk
@@ -0,0 +1 @@
QUANTUM_LIB_SRC += max7219.c spi_master.c
diff --git a/keyboards/clueboard/2x1800/info.json b/keyboards/clueboard/2x1800/info.json
new file mode 100644
index 000000000..e3fa1b8b8
--- /dev/null
+++ b/keyboards/clueboard/2x1800/info.json
@@ -0,0 +1,3 @@
1{
2 "diode_direction": "ROW2COL"
3}
diff --git a/keyboards/clueboard/2x1800/readme.md b/keyboards/clueboard/2x1800/readme.md
new file mode 100644
index 000000000..01b975695
--- /dev/null
+++ b/keyboards/clueboard/2x1800/readme.md
@@ -0,0 +1,18 @@
1# Clueboard 2x1800
2
3Clueboard 2x1800
4
5This is a keyboard that Clueboard releases for a 1-day group buy every Apr 1. Each year has a different theme.
6
7* [2018:](2018/) Double 1800 All The Way
8* [2019:](2019/) Mechanical Drawing Toy Edition
9
10* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
11* Hardware Supported: Clueboard 2x1800 PCB
12* Hardware Availability: 2018 Apr 1 Group Buy
13
14Make example for this keyboard:
15
16 make 2x1800:default
17
18See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/clueboard/60/.noci b/keyboards/clueboard/60/.noci
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/clueboard/60/.noci
diff --git a/keyboards/clueboard/60/60.c b/keyboards/clueboard/60/60.c
new file mode 100644
index 000000000..90d166139
--- /dev/null
+++ b/keyboards/clueboard/60/60.c
@@ -0,0 +1,16 @@
1/* Copyright 2017 skully <[email protected]>
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 "60.h"
diff --git a/keyboards/clueboard/60/60.h b/keyboards/clueboard/60/60.h
new file mode 100644
index 000000000..9a019ccf6
--- /dev/null
+++ b/keyboards/clueboard/60/60.h
@@ -0,0 +1,19 @@
1/* Copyright 2017 skully <[email protected]>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
diff --git a/keyboards/clueboard/60/config.h b/keyboards/clueboard/60/config.h
new file mode 100644
index 000000000..9263a8f65
--- /dev/null
+++ b/keyboards/clueboard/60/config.h
@@ -0,0 +1,24 @@
1/*
2 * Copyright 2017 skully <[email protected]>
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#pragma once
19
20#include "config_common.h"
21
22/* Backlight configuration
23 */
24#define BACKLIGHT_LEVELS 1
diff --git a/keyboards/clueboard/60/halconf.h b/keyboards/clueboard/60/halconf.h
new file mode 100644
index 000000000..644c9c516
--- /dev/null
+++ b/keyboards/clueboard/60/halconf.h
@@ -0,0 +1,37 @@
1/* Copyright 2020 QMK
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/*
18 * This file was auto-generated by:
19 * `qmk chibios-confmigrate -i keyboards/clueboard/60/halconf.h -r platforms/chibios/QMK_PROTON_C/configs/halconf.h`
20 */
21
22#pragma once
23
24#define HAL_USE_I2C FALSE
25
26#define HAL_USE_PWM FALSE
27
28#define HAL_USE_SERIAL_USB FALSE
29
30#define HAL_USE_SPI FALSE
31
32#define PAL_USE_CALLBACKS FALSE
33
34#define PAL_USE_WAIT FALSE
35
36#include_next <halconf.h>
37
diff --git a/keyboards/clueboard/60/info.json b/keyboards/clueboard/60/info.json
new file mode 100644
index 000000000..1698d221d
--- /dev/null
+++ b/keyboards/clueboard/60/info.json
@@ -0,0 +1,368 @@
1{
2 "manufacturer": "Clueboard",
3 "keyboard_name": "Clueboard 60%",
4 "maintainer": "skullydazed",
5 "debounce": 6,
6 "processor": "STM32F303",
7 "board": "QMK_PROTON_C",
8 "diode_direction": "COL2ROW",
9 "features": {
10 "audio": true,
11 "backlight": false,
12 "bootmagic": false,
13 "command": false,
14 "console": true,
15 "extrakey": true,
16 "mousekey": true,
17 "nkro": true
18 },
19 "indicators": {
20 "caps_lock": "B7"
21 },
22 "matrix_pins": {
23 "cols": ["A2", "A3", "A6", "B14", "B15", "A8", "A9", "A7", "B3", "B4", "C15", "C14", "C13", "B5", "B6"],
24 "rows": ["B0", "B1", "B2", "A15", "A10"]
25 },
26 "usb": {
27 "device_ver": "0x0001",
28 "pid": "0x2350",
29 "vid": "0xC1ED"
30 },
31 "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_iso"],
32 "layout_aliases": {
33 "LAYOUT": "LAYOUT_all"
34 },
35 "layouts": {
36 "LAYOUT_60_ansi": {
37 "layout": [
38 { "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
39 { "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
40 { "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
41 { "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
42 { "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
43 { "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
44 { "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
45 { "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
46 { "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
47 { "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
48 { "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
49 { "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
50 { "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
51 { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
52 { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
53 { "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
54 { "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
55 { "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
56 { "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
57 { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
58 { "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
59 { "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
60 { "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
61 { "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
62 { "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
63 { "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
64 { "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
65 { "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1 },
66 { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
67 { "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
68 { "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
69 { "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
70 { "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
71 { "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
72 { "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
73 { "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
74 { "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
75 { "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
76 { "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
77 { "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
78 { "label": "Enter", "matrix": [2, 14], "w": 2.25, "x": 12.75, "y": 2 },
79 { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
80 { "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
81 { "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
82 { "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
83 { "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
84 { "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
85 { "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
86 { "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
87 { "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
88 { "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
89 { "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
90 { "label": "Shift", "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
91 { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
92 { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
93 { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
94 { "label": "k47", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
95 { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
96 { "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
97 { "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
98 { "label": "Ctrl", "matrix": [4, 14], "w": 1.25, "x": 13.75, "y": 4 }
99 ]
100 },
101 "LAYOUT_60_ansi_split_bs_rshift": {
102 "layout": [
103 { "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
104 { "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
105 { "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
106 { "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
107 { "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
108 { "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
109 { "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
110 { "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
111 { "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
112 { "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
113 { "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
114 { "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
115 { "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
116 { "label": "k0d", "matrix": [0, 13], "w": 1, "x": 13, "y": 0 },
117 { "label": "Back", "matrix": [0, 14], "w": 1, "x": 14, "y": 0 },
118 { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
119 { "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
120 { "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
121 { "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
122 { "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
123 { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
124 { "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
125 { "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
126 { "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
127 { "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
128 { "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
129 { "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
130 { "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
131 { "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1 },
132 { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
133 { "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
134 { "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
135 { "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
136 { "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
137 { "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
138 { "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
139 { "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
140 { "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
141 { "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
142 { "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
143 { "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
144 { "label": "Enter", "matrix": [2, 14], "w": 2.25, "x": 12.75, "y": 2 },
145 { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
146 { "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
147 { "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
148 { "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
149 { "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
150 { "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
151 { "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
152 { "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
153 { "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
154 { "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
155 { "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
156 { "label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
157 { "label": "k3e", "matrix": [3, 14], "w": 1, "x": 14, "y": 3 },
158 { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
159 { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
160 { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
161 { "label": "k47", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
162 { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
163 { "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
164 { "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
165 { "label": "Ctrl", "matrix": [4, 14], "w": 1.25, "x": 13.75, "y": 4 }
166 ]
167 },
168 "LAYOUT_60_iso": {
169 "layout": [
170 { "label": "\\u00ac", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
171 { "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
172 { "label": "\"", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
173 { "label": "\\u00a3", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
174 { "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
175 { "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
176 { "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
177 { "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
178 { "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
179 { "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
180 { "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
181 { "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
182 { "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
183 { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
184 { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
185 { "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
186 { "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
187 { "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
188 { "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
189 { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
190 { "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
191 { "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
192 { "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
193 { "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
194 { "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
195 { "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
196 { "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
197 { "h": 2, "label": "Enter", "matrix": [2, 0], "w": 1.25, "x": 13.75, "y": 1 },
198 { "label": "Caps Lock", "matrix": [2, 1], "w": 1.75, "x": 0, "y": 2 },
199 { "label": "A", "matrix": [2, 2], "w": 1, "x": 1.75, "y": 2 },
200 { "label": "S", "matrix": [2, 3], "w": 1, "x": 2.75, "y": 2 },
201 { "label": "D", "matrix": [2, 4], "w": 1, "x": 3.75, "y": 2 },
202 { "label": "F", "matrix": [2, 5], "w": 1, "x": 4.75, "y": 2 },
203 { "label": "G", "matrix": [2, 6], "w": 1, "x": 5.75, "y": 2 },
204 { "label": "H", "matrix": [2, 7], "w": 1, "x": 6.75, "y": 2 },
205 { "label": "J", "matrix": [2, 8], "w": 1, "x": 7.75, "y": 2 },
206 { "label": "K", "matrix": [2, 9], "w": 1, "x": 8.75, "y": 2 },
207 { "label": "L", "matrix": [2, 10], "w": 1, "x": 9.75, "y": 2 },
208 { "label": ":", "matrix": [2, 11], "w": 1, "x": 10.75, "y": 2 },
209 { "label": "@", "matrix": [2, 12], "w": 1, "x": 11.75, "y": 2 },
210 { "label": "~", "matrix": [2, 14], "w": 1, "x": 12.75, "y": 2 },
211 { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
212 { "label": "|", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
213 { "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
214 { "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
215 { "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
216 { "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
217 { "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
218 { "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
219 { "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
220 { "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
221 { "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
222 { "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
223 { "label": "Shift", "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
224 { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
225 { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
226 { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
227 { "label": "k47", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
228 { "label": "AltGr", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
229 { "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
230 { "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
231 { "label": "Ctrl", "matrix": [4, 14], "w": 1.25, "x": 13.75, "y": 4 }
232 ]
233 },
234 "LAYOUT_aek": {
235 "layout": [
236 { "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
237 { "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
238 { "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
239 { "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
240 { "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
241 { "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
242 { "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
243 { "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
244 { "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
245 { "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
246 { "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
247 { "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
248 { "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
249 { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
250 { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
251 { "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
252 { "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
253 { "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
254 { "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
255 { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
256 { "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
257 { "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
258 { "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
259 { "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
260 { "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
261 { "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
262 { "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
263 { "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1 },
264 { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
265 { "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
266 { "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
267 { "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
268 { "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
269 { "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
270 { "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
271 { "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
272 { "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
273 { "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
274 { "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
275 { "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
276 { "label": "Enter", "matrix": [2, 14], "w": 2.25, "x": 12.75, "y": 2 },
277 { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
278 { "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
279 { "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
280 { "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
281 { "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
282 { "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
283 { "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
284 { "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
285 { "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
286 { "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
287 { "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
288 { "label": "Shift", "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
289 { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
290 { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.5, "y": 4 },
291 { "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.75, "y": 4 },
292 { "label": "k47", "matrix": [4, 7], "w": 6.5, "x": 4.25, "y": 4 },
293 { "label": "AltGr", "matrix": [4, 11], "w": 1.5, "x": 10.75, "y": 4 },
294 { "label": "Win", "matrix": [4, 12], "w": 1.25, "x": 12.25, "y": 4 },
295 { "label": "Ctrl", "matrix": [4, 14], "w": 1.5, "x": 13.5, "y": 4 }
296 ]
297 },
298 "LAYOUT_all": {
299 "layout": [
300 { "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
301 { "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
302 { "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
303 { "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
304 { "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
305 { "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
306 { "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
307 { "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
308 { "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
309 { "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
310 { "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
311 { "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
312 { "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
313 { "label": "k0d", "matrix": [0, 13], "w": 1, "x": 13, "y": 0 },
314 { "label": "Back", "matrix": [0, 14], "w": 1, "x": 14, "y": 0 },
315 { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
316 { "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
317 { "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
318 { "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
319 { "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
320 { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
321 { "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
322 { "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
323 { "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
324 { "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
325 { "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
326 { "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
327 { "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
328 { "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1 },
329 { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
330 { "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
331 { "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
332 { "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
333 { "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
334 { "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
335 { "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
336 { "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
337 { "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
338 { "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
339 { "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
340 { "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
341 { "label": "k2c", "matrix": [2, 12], "w": 1, "x": 12.75, "y": 2 },
342 { "label": "Enter", "matrix": [2, 14], "w": 1.25, "x": 13.75, "y": 2 },
343 { "label": "k30", "matrix": [3, 0], "w": 1, "x": 0, "y": 3 },
344 { "label": "Shift", "matrix": [3, 1], "w": 1.25, "x": 1, "y": 3 },
345 { "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
346 { "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
347 { "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
348 { "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
349 { "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
350 { "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
351 { "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
352 { "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
353 { "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
354 { "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
355 { "label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
356 { "label": "k3e", "matrix": [3, 14], "w": 1, "x": 14, "y": 3 },
357 { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
358 { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
359 { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
360 { "label": "k47", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
361 { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
362 { "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
363 { "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
364 { "label": "Ctrl", "matrix": [4, 14], "w": 1.25, "x": 13.75, "y": 4 }
365 ]
366 }
367 }
368}
diff --git a/keyboards/clueboard/60/keymaps/default/keymap.c b/keyboards/clueboard/60/keymaps/default/keymap.c
new file mode 100644
index 000000000..b33a22f93
--- /dev/null
+++ b/keyboards/clueboard/60/keymaps/default/keymap.c
@@ -0,0 +1,125 @@
1#include QMK_KEYBOARD_H
2
3enum keyboard_layers {
4 _BL,
5 _FL,
6 _CL
7};
8
9enum custom_keycodes {
10 S_BSKTC = SAFE_RANGE,
11 S_ODEJY,
12 S_RCKBY,
13 S_DOEDR,
14 S_SCALE,
15 S_ONEUP,
16 S_COIN,
17 S_SONIC,
18 S_ZELDA
19};
20
21#ifdef AUDIO_ENABLE
22 float song_basketcase[][2] = SONG(BASKET_CASE);
23 float song_ode_to_joy[][2] = SONG(ODE_TO_JOY);
24 float song_rock_a_bye_baby[][2] = SONG(ROCK_A_BYE_BABY);
25 float song_doe_a_deer[][2] = SONG(DOE_A_DEER);
26 float song_scale[][2] = SONG(MUSIC_SCALE_SOUND);
27 float song_coin[][2] = SONG(COIN_SOUND);
28 float song_one_up[][2] = SONG(ONE_UP_SOUND);
29 float song_sonic_ring[][2] = SONG(SONIC_RING);
30 float song_zelda_puzzle[][2] = SONG(ZELDA_PUZZLE);
31#endif
32
33const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
34 /* Layer 0: Default Layer
35 * ,-----------------------------------------------------------.
36 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
37 * |-----------------------------------------------------------|
38 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
39 * |-----------------------------------------------------------|
40 * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
41 * |-----------------------------------------------------------|
42 * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
43 * |-----------------------------------------------------------'
44 * |Ctrl |Gui|Alt | Space |Alt |Gui|Fn |Ctrl |
45 * `-----------------------------------------------------------'
46 */
47 [_BL] = LAYOUT_all(
48 KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_GRV, KC_BSPC,
49 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,
50 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS, KC_ENT,
51 KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS,
52 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
53 [_FL] = LAYOUT_all(
54 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,_______,
55 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
56 _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
57 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,
58 _______,_______,_______, _______, _______, _______, MO(_FL), _______),
59 [_CL] = LAYOUT_all(
60 BL_STEP,S_BSKTC,S_ODEJY,S_RCKBY,S_DOEDR,S_SCALE,S_ONEUP,S_COIN, S_SONIC,S_ZELDA,_______,_______,_______,_______,_______,
61 _______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______,
62 _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
63 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
64 _______, _______, _______, _______, _______, _______, MO(_FL), _______)
65};
66
67bool process_record_user(uint16_t keycode, keyrecord_t *record) {
68 switch (keycode) {
69 case S_BSKTC:
70 if (record->event.pressed) {
71 stop_all_notes();
72 PLAY_SONG(song_basketcase);
73 }
74 return false;
75 case S_ODEJY:
76 if (record->event.pressed) {
77 stop_all_notes();
78 PLAY_SONG(song_ode_to_joy);
79 }
80 return false;
81 case S_RCKBY:
82 if (record->event.pressed) {
83 stop_all_notes();
84 PLAY_SONG(song_rock_a_bye_baby);
85 }
86 return false;
87 case S_DOEDR:
88 if (record->event.pressed) {
89 stop_all_notes();
90 PLAY_SONG(song_doe_a_deer);
91 }
92 return false;
93 case S_SCALE:
94 if (record->event.pressed) {
95 stop_all_notes();
96 PLAY_SONG(song_scale);
97 }
98 return false;
99 case S_ONEUP:
100 if (record->event.pressed) {
101 stop_all_notes();
102 PLAY_SONG(song_one_up);
103 }
104 return false;
105 case S_COIN:
106 if (record->event.pressed) {
107 stop_all_notes();
108 PLAY_SONG(song_coin);
109 }
110 return false;
111 case S_SONIC:
112 if (record->event.pressed) {
113 stop_all_notes();
114 PLAY_SONG(song_sonic_ring);
115 }
116 return false;
117 case S_ZELDA:
118 if (record->event.pressed) {
119 stop_all_notes();
120 PLAY_SONG(song_zelda_puzzle);
121 }
122 return false;
123 }
124 return true;
125}
diff --git a/keyboards/clueboard/60/keymaps/default/readme.md b/keyboards/clueboard/60/keymaps/default/readme.md
new file mode 100644
index 000000000..32d4bfba6
--- /dev/null
+++ b/keyboards/clueboard/60/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for clueboard 60%
diff --git a/keyboards/clueboard/60/keymaps/default_aek/keymap.c b/keyboards/clueboard/60/keymaps/default_aek/keymap.c
new file mode 100644
index 000000000..413ca822f
--- /dev/null
+++ b/keyboards/clueboard/60/keymaps/default_aek/keymap.c
@@ -0,0 +1,41 @@
1#include QMK_KEYBOARD_H
2
3enum keyboard_layers {
4 _BL,
5 _FL,
6 _CL
7};
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 /* Layer 0: Default Layer
11 * ,-----------------------------------------------------------.
12 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BkSp|
13 * |-----------------------------------------------------------|
14 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
15 * |-----------------------------------------------------------|
16 * |Capslk| A| S| D| F| G| H| J| K| L| ;| '| Enter|
17 * |-----------------------------------------------------------|
18 * |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift|
19 * |-----------------------------------------------------------'
20 * |Ctrl |Gui|Alt | Space |Alt|Fn |Ctrl |
21 * `-----------------------------------------------------------'
22 */
23 [_BL] = LAYOUT_aek(
24 KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC,
25 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,
26 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,
27 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
28 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL),
29 [_FL] = LAYOUT_aek(
30 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
31 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
32 _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
33 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
34 _______, _______, _______, _______, _______, MO(_FL), _______),
35 [_CL] = LAYOUT_aek(
36 BL_STEP,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
37 _______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______,
38 _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
39 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
40 _______, _______, _______, _______, _______, MO(_FL), _______)
41};
diff --git a/keyboards/clueboard/60/keymaps/default_aek/readme.md b/keyboards/clueboard/60/keymaps/default_aek/readme.md
new file mode 100644
index 000000000..cdec24160
--- /dev/null
+++ b/keyboards/clueboard/60/keymaps/default_aek/readme.md
@@ -0,0 +1 @@
# The default keymap for clueboard 60%, optimized for the AEK layout.
diff --git a/keyboards/clueboard/60/led.c b/keyboards/clueboard/60/led.c
new file mode 100644
index 000000000..ad11ad5d4
--- /dev/null
+++ b/keyboards/clueboard/60/led.c
@@ -0,0 +1,41 @@
1/*
2 * Copyright 2017 skully <[email protected]>
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include <hal.h>
19#include "print.h"
20
21#ifdef BACKLIGHT_ENABLE
22#include "backlight.h"
23
24void backlight_init_ports(void) {
25 printf("backlight_init_ports()\n");
26
27 palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL);
28 palSetPad(GPIOB, 8);
29}
30
31void backlight_set(uint8_t level) {
32 printf("backlight_set(%d)\n", level);
33 if (level == 0) {
34 // Turn backlight off
35 palSetPad(GPIOB, 8);
36 } else {
37 // Turn backlight on
38 palClearPad(GPIOB, 8);
39 }
40}
41#endif
diff --git a/keyboards/clueboard/60/mcuconf.h b/keyboards/clueboard/60/mcuconf.h
new file mode 100644
index 000000000..a5baec5cf
--- /dev/null
+++ b/keyboards/clueboard/60/mcuconf.h
@@ -0,0 +1,43 @@
1/* Copyright 2020 QMK
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/*
18 * This file was auto-generated by:
19 * `qmk chibios-confmigrate -i keyboards/clueboard/60/mcuconf.h -r platforms/chibios/QMK_PROTON_C/configs/mcuconf.h`
20 */
21
22#pragma once
23
24#include_next <mcuconf.h>
25
26#undef STM32_GPT_USE_TIM15
27#define STM32_GPT_USE_TIM15 FALSE
28
29#undef STM32_I2C_USE_I2C1
30#define STM32_I2C_USE_I2C1 FALSE
31
32#undef STM32_PWM_USE_TIM3
33#define STM32_PWM_USE_TIM3 FALSE
34
35#undef STM32_PWM_USE_TIM4
36#define STM32_PWM_USE_TIM4 FALSE
37
38#undef STM32_SERIAL_USE_USART2
39#define STM32_SERIAL_USE_USART2 FALSE
40
41#undef STM32_SPI_USE_SPI2
42#define STM32_SPI_USE_SPI2 FALSE
43
diff --git a/keyboards/clueboard/60/readme.md b/keyboards/clueboard/60/readme.md
new file mode 100644
index 000000000..e3255f507
--- /dev/null
+++ b/keyboards/clueboard/60/readme.md
@@ -0,0 +1,14 @@
1# Clueboard 60%
2
3A fully customizable 60% keyboard.
4
5* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
6* Hardware Supported: Clueboard 60% PCB
7 * rev1 (1.0)
8* Hardware Availability: [clueboard.co](https://clueboard.co/)
9
10Make example for this keyboard (after setting up your build environment):
11
12 make clueboard/60:default
13
14See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/clueboard/60/rules.mk b/keyboards/clueboard/60/rules.mk
new file mode 100644
index 000000000..c73b4c473
--- /dev/null
+++ b/keyboards/clueboard/60/rules.mk
@@ -0,0 +1,2 @@
1# project specific files
2SRC = led.c
diff --git a/keyboards/clueboard/66/info.json b/keyboards/clueboard/66/info.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/keyboards/clueboard/66/info.json
@@ -0,0 +1 @@
{}
diff --git a/keyboards/clueboard/66/keymaps/66_ansi/keymap.c b/keyboards/clueboard/66/keymaps/66_ansi/keymap.c
new file mode 100644
index 000000000..73c809ded
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/66_ansi/keymap.c
@@ -0,0 +1,36 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5#define _BL 0
6#define _FL 1
7#define _CL 2
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 /* Keymap _BL: Base Layer (Default Layer)
11 */
12[_BL] = LAYOUT_66_ansi(
13 KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_PGUP,
14 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_PGDN,
15 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,
16 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
17 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
18
19 /* Keymap _FL: Function Layer
20 */
21[_FL] = LAYOUT_66_ansi(
22 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_VOLU,
23 _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE, KC_VOLD,
24 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
25 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_PGUP,
26 _______,_______,_______, _______, _______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
27
28 /* Keymap _CL: Control layer
29 */
30[_CL] = LAYOUT_66_ansi(
31 BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______, RGB_TOG, RGB_VAI,
32 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD,
33 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
34 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, RGB_SAI,
35 _______,_______,_______, RGB_MOD, _______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
36};
diff --git a/keyboards/clueboard/66/keymaps/66_ansi/readme.md b/keyboards/clueboard/66/keymaps/66_ansi/readme.md
new file mode 100644
index 000000000..eee81c0c2
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/66_ansi/readme.md
@@ -0,0 +1,9 @@
1# Basic Clueboard 66% Hotswap ANSI Layout
2
3This is the default layout that comes flashed on every Clueboard. For the most
4part it's a straightforward and easy to follow layout. The only unusual key is
5the key in the upper left, which sends Escape normally, but Grave when any of
6the Ctrl, Alt, or GUI modifiers are held down.
7
8This uses `LAYOUT_66_ansi`, which is compatable with the `66_ansi` community
9layout.
diff --git a/keyboards/clueboard/66/keymaps/66_iso/keymap.c b/keyboards/clueboard/66/keymaps/66_iso/keymap.c
new file mode 100644
index 000000000..ff27acf5c
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/66_iso/keymap.c
@@ -0,0 +1,36 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5#define _BL 0
6#define _FL 1
7#define _CL 2
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 /* Keymap _BL: Base Layer (Default Layer)
11 */
12[_BL] = LAYOUT_66_iso(
13 KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_PGUP,
14 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_PGDN,
15 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT,
16 KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
17 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
18
19 /* Keymap _FL: Function Layer
20 */
21[_FL] = LAYOUT_66_iso(
22 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_VOLU,
23 _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______, KC_VOLD,
24 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
25 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_PGUP,
26 _______,_______,_______, _______, _______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
27
28 /* Keymap _CL: Control layer
29 */
30[_CL] = LAYOUT_66_iso(
31 BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______, RGB_TOG, RGB_VAI,
32 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD,
33 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
34 MO(_FL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, RGB_SAI,
35 _______,_______,_______, RGB_MOD, _______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
36};
diff --git a/keyboards/clueboard/66/keymaps/66_iso/readme.md b/keyboards/clueboard/66/keymaps/66_iso/readme.md
new file mode 100644
index 000000000..6d895b0eb
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/66_iso/readme.md
@@ -0,0 +1,6 @@
1# Default Clueboard 66% ISO Layout
2
3This is the default layout that comes flashed on every Clueboard. For the most
4part it's a straightforward and easy to follow layout. The only unusual key is
5the key in the upper left, which sends Escape normally, but Grave when any of
6the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/66/keymaps/badger/keymap.c b/keyboards/clueboard/66/keymaps/badger/keymap.c
new file mode 100644
index 000000000..74fec0b58
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/badger/keymap.c
@@ -0,0 +1,53 @@
1/*
2Copyright 2020 Dan White <[email protected]>
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.
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12You should have received a copy of the GNU General Public License
13along with this program. If not, see <http://www.gnu.org/licenses/>.
14*/
15#include "badger.h"
16
17const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18 [_QWERTY_LINUX] = LAYOUT_66_ansi(\
19 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, \
20 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, \
21 MOVE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
22 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
23 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, ADJUST, KC_RGUI, KC_LALT, KC_LEFT, KC_DOWN, KC_RGHT),
24
25 [_MOVE_LINUX] = LAYOUT_66_ansi(\
26 KC_ESC, VD_1, VD_2, VD_3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, IJ_UP, IJ_DOWN, KC_DEL, KC_PGUP, \
27 _______, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, IJ_OUT, KC_PGUP, KC_HOME, KC_END, KC_PGDN, IJ_BACK, IJ_FWD, KC_INS, KC_PGDN, \
28 _______, WM_LH, WM_UH, WM_RH, WD_FRWD, MAC_POP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CS_RIGHT, CS_DOWN, _______, \
29 _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, WD_BACK, KC_MNXT, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, KC_BRIU, \
30 _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_BRID, KC_END),
31
32 [_QWERTY_MAC] = LAYOUT_66_ansi(\
33 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, \
34 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, \
35 MOVE_MAC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
36 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
37 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, ADJUST, KC_RGUI, KC_LALT, KC_LEFT, KC_DOWN, KC_RGHT),
38
39 [_MOVE_MAC] = LAYOUT_66_ansi(\
40 KC_ESC, M_VD1, M_VD2, M_VD3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, IJ_UP, IJ_DOWN, KC_DEL, KC_PGUP, \
41 _______, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, IJ_OUT, KC_PGUP, KC_HOME, KC_END, KC_PGDN, IJ_BACK, IJ_FWD, KC_INS, KC_PGDN, \
42 _______, MM_LH, MM_MAX, MM_RH, WD_FRWD, MAC_POP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CM_RIGHT, CM_DOWN, _______, \
43 _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, WD_BACK, KC_MNXT, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, KC_BRIU, \
44 _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_BRID, KC_END),
45
46 [_ADJUST] = LAYOUT_66_ansi(\
47 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_VOLU, \
48 _______, NK_ON, NK_OFF, EEP_RST, RESET, KC_MSTP, KC_MPLY, KC_PGUP, KC_HOME, KC_END, KC_PGDN, AG_SWAP, AG_NORM, KC_INS, KC_VOLD, \
49 _______, GE_SWAP, GE_NORM, DEBUG, AG_SWAP, AG_NORM, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, \
50 _______, DF_1, DF_2, KC_CAPS, _______, KC_MPRV, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, _______, _______, KC_BRIU, \
51 _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_BRID, KC_END)
52};
53
diff --git a/keyboards/clueboard/66/keymaps/bloodlvst/config.h b/keyboards/clueboard/66/keymaps/bloodlvst/config.h
new file mode 100644
index 000000000..60c6ad4a1
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/bloodlvst/config.h
@@ -0,0 +1,3 @@
1#pragma once
2
3#define DISABLE_SPACE_CADET_ROLLOVER
diff --git a/keyboards/clueboard/66/keymaps/bloodlvst/keymap.c b/keyboards/clueboard/66/keymaps/bloodlvst/keymap.c
new file mode 100644
index 000000000..7c7faba9c
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/bloodlvst/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Keymap _BL: Base Layer (Default Layer)
13 */
14[_BL] = LAYOUT(
15 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_INS, KC_DEL, KC_PGUP,
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
17 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
18 KC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSPC, KC_UP,
19 KC_LCTL, KC_LGUI, MO(_FL), KC_LALT, KC_BSPC,KC_SPC, KC_RALT, KC_APP, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
20
21 /* Keymap _FL: Function Layer
22 */
23[_FL] = LAYOUT(
24 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_HOME, KC_END, KC_VOLU,
25 _______, _______, _______,_______,_______,_______,_______,_______,_______,KC_SLCK, KC_PAUS, _______, _______, KC_MUTE, KC_VOLD,
26 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, KC_PSCR,
27 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MPLY,
28 _______, KC_MYCM, MO(_FL), _______, _______,_______, _______, KC_CALC, MO(_FL), _______, KC_MPRV, KC_MSTP, KC_MNXT),
29
30 /* Keymap _CL: Control layer
31 */
32[_CL] = LAYOUT(
33 KC_PWR, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
34 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
35 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, RGB_MOD,
36 _______, _______, _______,_______,_______,_______,_______,_______,_______,RGB_HUD, RGB_HUI, _______, _______, _______, KC_WAKE,
37 _______, _______, MO(_FL), _______, RGB_SAD,RGB_SAI, _______, _______, MO(_FL), _______, _______, KC_SLEP, _______),
38};
diff --git a/keyboards/clueboard/66/keymaps/bloodlvst/readme.md b/keyboards/clueboard/66/keymaps/bloodlvst/readme.md
new file mode 100644
index 000000000..ee287ca47
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/bloodlvst/readme.md
@@ -0,0 +1,17 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](http://i.imgur.com/7Capi8W.png)
11
12# Default Clueboard Layout
13
14This is the default layout that comes flashed on every Clueboard. For the most
15part it's a straightforward and easy to follow layout. The only unusual key is
16the key in the upper left, which sends Escape normally, but Grave when any of
17the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/66/keymaps/bloodlvst/rules.mk b/keyboards/clueboard/66/keymaps/bloodlvst/rules.mk
new file mode 100644
index 000000000..b1c2f32f6
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/bloodlvst/rules.mk
@@ -0,0 +1,2 @@
1EXTRAKEY_ENABLE = yes
2COMMAND_ENABLE = no
diff --git a/keyboards/clueboard/66/keymaps/caps_fn/keymap.c b/keyboards/clueboard/66/keymaps/caps_fn/keymap.c
new file mode 100644
index 000000000..fc0c56d9a
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/caps_fn/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Keymap _BL: Base Layer (Default Layer)
13 */
14[_BL] = LAYOUT(
15 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
17 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
18 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
19 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
20
21 /* Keymap _FL: Function Layer
22 */
23[_FL] = LAYOUT(
24 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP,
25 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______,
26 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
27 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP,
28 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
29
30 /* Keymap _CL: Control layer
31 */
32[_CL] = LAYOUT(
33 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
34 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
35 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
36 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
37 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
38};
diff --git a/keyboards/clueboard/66/keymaps/caps_fn/readme.md b/keyboards/clueboard/66/keymaps/caps_fn/readme.md
new file mode 100644
index 000000000..71d1246c0
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/caps_fn/readme.md
@@ -0,0 +1,4 @@
1# Caps Fn Layout
2
3This is the default layout except that Caps Lock acts like Caps Lock when
4tapped but Fn when held.
diff --git a/keyboards/clueboard/66/keymaps/colemak/keymap.c b/keyboards/clueboard/66/keymaps/colemak/keymap.c
new file mode 100644
index 000000000..4479556b6
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/colemak/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Keymap _BL: Base Layer (Default Layer)
13 */
14[_BL] = LAYOUT(
15 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
16 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
17 KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_NUHS, KC_ENT,
18 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
19 KC_LCTL, KC_LGUI, KC_LALT,KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
20
21 /* Keymap _FL: Function Layer
22 */
23[_FL] = LAYOUT(
24 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_CAPS, KC_VOLU,
25 _______, _______, _______,_______,_______,_______,_______,KC_HOME,KC_PGDN,KC_PGUP, KC_END, _______, _______, _______, KC_VOLD,
26 KC_DEL, _______, MO(_CL),_______,_______,_______,_______,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, _______, _______, _______,
27 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP,
28 _______, _______, _______,_______, _______,_______, _______, _______, MO(_FL), _______, KC_HOME, KC_PGDN, KC_END),
29
30 /* Keymap _CL: Control layer
31 */
32[_CL] = LAYOUT(
33 BL_STEP, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
34 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
35 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
36 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_SAI,
37 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
38};
diff --git a/keyboards/clueboard/66/keymaps/default/keymap.c b/keyboards/clueboard/66/keymaps/default/keymap.c
new file mode 100644
index 000000000..95283db88
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5#define _BL 0
6#define _FL 1
7#define _CL 2
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 /* Keymap _BL: Base Layer (Default Layer)
11 */
12[_BL] = LAYOUT(
13 KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
14 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_PGDN,
15 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT,
16 KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RO, KC_RSFT, KC_UP,
17 KC_LCTL,KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_SPC, KC_HENK,KC_RALT,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
18
19 /* Keymap _FL: Function Layer
20 */
21[_FL] = LAYOUT(
22 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_DEL, KC_VOLU,
23 _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE, KC_VOLD,
24 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
25 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_PGUP,
26 _______,_______,_______,_______, _______,_______, _______,_______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
27
28 /* Keymap _CL: Control layer
29 */
30[_CL] = LAYOUT(
31 BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______,_______,RGB_TOG, RGB_VAI,
32 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD,
33 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
34 MO(_FL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_SAI,
35 _______,_______,_______,_______, RGB_MOD, RGB_MOD, _______,_______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
36};
diff --git a/keyboards/clueboard/66/keymaps/default/readme.md b/keyboards/clueboard/66/keymaps/default/readme.md
new file mode 100644
index 000000000..b1cdcbe4e
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/default/readme.md
@@ -0,0 +1,6 @@
1# Default Clueboard 66% Universal Layout
2
3This is the default layout that comes flashed on every Clueboard. For the most
4part it's a straightforward and easy to follow layout. The only unusual key is
5the key in the upper left, which sends Escape normally, but Grave when any of
6the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/66/keymaps/jokrik/keymap.c b/keyboards/clueboard/66/keymaps/jokrik/keymap.c
new file mode 100644
index 000000000..9c6997c34
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/jokrik/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Keymap _BL: Base Layer (Default Layer)
13 */
14[_BL] = LAYOUT(
15 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PSCR,
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PAUS,
17 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
18 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
19 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC,KC_SPC, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
20
21 /* Keymap _FL: Function Layer
22 */
23[_FL] = LAYOUT(
24 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_INS, KC_DEL, BL_STEP,
25 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______,
26 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
27 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP,
28 _______, _______, _______, _______, _______,_______, _______, _______, MO(_FL), _______, KC_HOME, KC_PGDN, KC_END),
29
30 /* Keymap _CL: Control layer
31 */
32[_CL] = LAYOUT(
33 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
34 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
35 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
36 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_SAI,
37 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, MO(_FL), _______, RGB_HUD, RGB_SAD, RGB_HUI),
38};
diff --git a/keyboards/clueboard/66/keymaps/jokrik/readme.md b/keyboards/clueboard/66/keymaps/jokrik/readme.md
new file mode 100644
index 000000000..a845e65f1
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/jokrik/readme.md
@@ -0,0 +1,2 @@
1# Jokrik's Clueboard Layout
2
diff --git a/keyboards/clueboard/66/keymaps/mac_optimized/keymap.c b/keyboards/clueboard/66/keymaps/mac_optimized/keymap.c
new file mode 100644
index 000000000..30e772900
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/mac_optimized/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Keymap _BL: Base Layer (Default Layer)
13 */
14[_BL] = LAYOUT(
15 KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_PGDN,
17 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT,
18 KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RO, KC_RSFT, KC_UP,
19 KC_LCTL,KC_LALT,KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK,KC_RGUI,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
20
21 /* Keymap _FL: Function Layer
22 */
23[_FL] = LAYOUT(
24 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_DEL, KC_VOLU,
25 _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MRWD,KC_MPLY,KC_MFFD,_______,KC_MUTE, KC_VOLD,
26 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
27 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_PGUP,
28 _______,_______,_______,_______, _______,_______, _______,_______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
29
30 /* Keymap _CL: Control layer
31 */
32[_CL] = LAYOUT(
33 BL_STEP,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RGB_TOG, RGB_VAI,
34 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD,
35 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
36 MO(_FL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_SAI,
37 _______,_______,_______,_______, RGB_MOD, RGB_MOD, _______,_______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
38};
diff --git a/keyboards/clueboard/66/keymaps/mac_optimized/readme.md b/keyboards/clueboard/66/keymaps/mac_optimized/readme.md
new file mode 100644
index 000000000..db7a87d44
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/mac_optimized/readme.md
@@ -0,0 +1,4 @@
1# Default Clueboard Layout for Mac
2
3This is the default Clueboard layout with Alt and GUI switched to match Mac
4conventions.
diff --git a/keyboards/clueboard/66/keymaps/magicmonty/config.h b/keyboards/clueboard/66/keymaps/magicmonty/config.h
new file mode 100644
index 000000000..c38aee5ee
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/magicmonty/config.h
@@ -0,0 +1,32 @@
1#pragma once
2
3/*
4 * MIDI options
5 */
6
7/* enable basic MIDI features:
8 - MIDI notes can be sent when in Music mode is on
9 #define MIDI_BASIC
10*/
11
12/* enable advanced MIDI features:
13 - MIDI notes can be added to the keymap
14 - Octave shift and transpose
15 - Virtual sustain, portamento, and modulation wheel
16 - etc.
17*/
18#define MIDI_ADVANCED
19
20/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
21#define MIDI_TONE_KEYCODE_OCTAVES 2
22
23/*
24 Setting the modified Space Cadet Parens for German layout
25
26 Default is
27 #define LSPO_KEY KC_9
28 #define RSPC_KEY KC_0
29*/
30#define LSPO_KEY KC_8
31#define RSPC_KEY KC_9
32#define PERMISSIVE_HOLD
diff --git a/keyboards/clueboard/66/keymaps/magicmonty/keymap.c b/keyboards/clueboard/66/keymaps/magicmonty/keymap.c
new file mode 100644
index 000000000..56d4c4707
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/magicmonty/keymap.c
@@ -0,0 +1,222 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0 // BASE Layer
8#define _FL 1 // Function Layer
9#define _ME 2 // Media Layer
10#define _CL 3 // Control Layer
11#define _ML 4 // Mouse Layer
12#if defined(MIDI_ENABLE)
13 #define _MI 5 // MIDI Layer
14 #define TO_MIDI TO(_MI)
15#else
16 #define TO_MIDI _______
17#endif
18
19// go back to base layer
20#define TO_BASE TO(_BL)
21
22// switch to function layer while helde
23#define MO_FUNC MO(_FL)
24
25// switch to media layer while held
26#define MEDIA MO(_ME)
27
28// switch to Control layer while helde
29#define MO_CTL MO(_CL)
30
31// switch to mouse layer if held, else space
32#define L_MOUSE LT(_ML, KC_SPC)
33
34// Function key when held, else ESC
35#define ESC_FUN LT(_FL, KC_ESC)
36
37// Hyper (CTRL+ALT+SHIFT+SUPER) when held, TAB when tapped
38#define HPR_TAB ALL_T(KC_TAB)
39
40// CTRL when held, ESC when tapped
41#define CTL_ESC CTL_T(KC_ESC)
42
43enum custom_keycodes {
44 RGB_RST = SAFE_RANGE
45};
46
47const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
48 /* Keymap _BL: Base Layer (Default Layer) */
49 [_BL] = LAYOUT(
50 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, KC_INS,
51 HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
52 ESC_FUN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
53 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, KC_RSFT, KC_UP,
54 KC_LCTL, KC_LGUI, KC_LALT,_______, L_MOUSE, L_MOUSE, _______, KC_RALT, KC_RCTL, MO_FUNC, KC_LEFT, KC_DOWN, KC_RGHT),
55
56 /* Keymap _FL: Function layer */
57 [_FL] = LAYOUT(
58 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, _______, _______, BL_STEP,
59 _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, KC_PAUS, _______, _______, _______, _______,
60 _______, _______, MO_CTL, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
61 KC_LSPO, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, TO_MIDI, _______, KC_RSPC, KC_PGUP,
62 _______, _______, _______, _______, _______, _______, _______, _______, _______, MO_FUNC, KC_HOME, KC_PGDN, KC_END),
63
64 /* Keymap _ME: Media layer */
65 [_ME] = LAYOUT(
66 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU,
67 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD,
68 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
69 _______, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, _______, _______, _______, _______,
70 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT),
71
72 /* Keymap _CL: Control layer */
73 [_CL] = LAYOUT(
74 _______, RGB_RST, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
75 _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD,
76 _______, _______, MO_CTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
77 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI,
78 _______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
79
80 /* Keymap _ML: Mouse layer */
81 [_ML] = LAYOUT(
82 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
83 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
84 _______, _______, KC_BTN2, KC_BTN3, KC_BTN1, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______, _______,
85 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U,
86 _______, _______, _______, _______, L_MOUSE, L_MOUSE, _______, KC_BTN1, KC_BTN3, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R),
87
88#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
89 /* Keymap _MI: MIDI layer (Advanced)*/
90 [_MI] = LAYOUT(
91 TO_BASE,MI_VEL_1,MI_VEL_2,MI_VEL_3,MI_VEL_4,MI_VEL_5,MI_VEL_6,MI_VEL_7,MI_VEL_8,MI_VEL_9,MI_VEL_10, MI_CHD, MI_CHU, XXXXXXX, XXXXXXX, XXXXXXX,
92 XXXXXXX, XXXXXXX, MI_Cs, MI_Ds, XXXXXXX, MI_Fs, MI_Gs, MI_As, XXXXXXX, MI_Cs_1, MI_Ds_1, XXXXXXX, MI_Fs_1, XXXXXXX, XXXXXXX,
93 MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, MI_G_1, XXXXXXX,
94 MI_SUS, XXXXXXX, MI_OCTD, MI_OCTU,MI_MODSD,MI_MODSU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MI_TRNSD,MI_TRNSU,MI_TRNS_0, MI_SUS, XXXXXXX,
95 XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX, MI_ALLOFF, MI_ALLOFF, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
96#elif defined(MIDI_ENABLE) && defined(MIDI_BASIC)
97 /* Keymap _MI: MIDI layer (Basic)*/
98 [_MI] = LAYOUT(
99 TO_BASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
100 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
101 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
102 XXXXXXX, XXXXXXX, MI_ON, MI_OFF, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
103 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
104#endif
105};
106
107bool process_record_user(uint16_t keycode, keyrecord_t *record) {
108 switch (keycode) {
109 case RGB_RST:
110 if (record->event.pressed) {
111 rgblight_mode(1);
112 rgblight_sethsv(206, 255, 255);
113 }
114 return false;
115 }
116 return true;
117}
118
119enum layer_id {
120 LAYER_BASE,
121 LAYER_FUNCTION,
122 LAYER_MEDIA,
123 LAYER_CONTROL,
124 LAYER_MOUSE,
125#if defined(MIDI_ENABLE)
126 LAYER_MIDI
127#endif
128};
129
130void clueboard_set_led(uint8_t id, uint8_t val) {
131 switch (id) {
132 case LAYER_BASE:
133 rgblight_sethsv_noeeprom(135, 255, val);
134 break;
135 case LAYER_FUNCTION:
136 rgblight_sethsv_noeeprom(32, 255, val);
137 break;
138 case LAYER_MEDIA:
139 rgblight_sethsv_noeeprom(60, 255, val);
140 break;
141 case LAYER_CONTROL:
142 rgblight_sethsv_noeeprom(245, 255, val);
143 break;
144 case LAYER_MOUSE:
145 rgblight_sethsv_noeeprom(146, 255, val);
146 break;
147#if defined(MIDI_ENABLE)
148 case LAYER_MIDI:
149 rgblight_sethsv_noeeprom(224, 255, val);
150 break;
151#endif
152 }
153};
154
155const uint16_t oct_hues[10] = {
156 0,
157 20,
158 40,
159 60,
160 80,
161 100,
162 120,
163 140,
164 160,
165 180
166};
167
168#define MAX_OCT 9
169
170void clueboard_set_midi_led(uint8_t base_oct, uint8_t val)
171{
172 uint8_t sat = 255;
173
174 for (uint8_t i = 0; i < RGBLED_NUM; i++) {
175 sethsv(oct_hues[base_oct], sat, val, (LED_TYPE *)&led[i]);
176 }
177
178 uint8_t next_oct = base_oct < MAX_OCT ? base_oct + 1 : base_oct;
179
180 uint16_t next_hue = base_oct < MAX_OCT ? oct_hues[next_oct] : 0;
181 uint8_t next_val = base_oct < MAX_OCT ? val : 0;
182 uint8_t next_sat = base_oct < MAX_OCT ? sat : 0;
183
184
185 for (uint8_t i = 0; i < 3; i++) {
186 sethsv(next_hue, next_sat, next_val, (LED_TYPE *)&led[i]);
187 }
188
189 for (uint8_t i = 11; i < 14; i++) {
190 sethsv(next_hue, next_sat, next_val, (LED_TYPE *)&led[i]);
191 }
192
193 rgblight_set();
194}
195
196void matrix_scan_user(void) {
197 rgblight_config_t rgblight_config;
198 rgblight_config.raw = eeconfig_read_rgblight();
199
200 if (!rgblight_config.enable || rgblight_config.mode != 1) { return; }
201
202 uint32_t layer = layer_state;
203 uint8_t val = rgblight_config.val;
204
205 if (layer & (1<<_FL)) {
206 if (layer & (1<<_ME)) {
207 clueboard_set_led(LAYER_MEDIA, val);
208 } else if (layer & (1<<_CL)) {
209 clueboard_set_led(LAYER_CONTROL, val);
210 } else {
211 clueboard_set_led(LAYER_FUNCTION, val);
212 }
213 } else if (layer & (1<<_ML)) {
214 clueboard_set_led(LAYER_MOUSE, val);
215#if defined(MIDI_ENABLE)
216 } else if (layer & (1<<_MI)) {
217 clueboard_set_midi_led(midi_config.octave, val);
218#endif
219 } else {
220 clueboard_set_led(LAYER_BASE, val);
221 }
222};
diff --git a/keyboards/clueboard/66/keymaps/magicmonty/readme.md b/keyboards/clueboard/66/keymaps/magicmonty/readme.md
new file mode 100644
index 000000000..20d1c6fa3
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/magicmonty/readme.md
@@ -0,0 +1,53 @@
1# Layout of @magicmonty
2
3[Keyboard Layout Editor File]
4
5![Clueboard Layout Image](http://i.imgur.com/eEwjLEj.png)
6My ClueBoard Layout as of 2017/06/30
7
8
9This layout is a combination of the `mouse_keys` and the `win_optimized` layouts.
10This layout is optimized for an ISO layout.
11The CapsLock is disabled and works as ESC when tapped and FN when held.
12The `TAB` key works as `TAB` when tapped, and [HYPER] (`CTRL` + `ALT` + `SHIFT` + `CMD`) when held.
13
14## Mouse Layer
15
16When you hold down the spacebar the arrow keys will move your mouse cursor.
17You can click using the 3 mods to the left of the arrow keys, or the 3 keys under your primary fingers on the home row.
18The Left, Down, Up and Right for the mouse movement are also VIM-Like on the HJKL keys
19
20## MIDI layer
21
22The MIDI layer is permanently enabled by pressing `FN` + `/`.
23It can be exited with the `ESC`-Key
24
25## Space Cadet(ish) Shift Parentheses
26
27If the function layer is active, the `SHIFT`-Keys are configured like the [Space Cadet Shift Parentheses]
28as opened (left `SHIFT`) and closed (right `SHIFT`) parentheses if tapped and `SHIFT` if held.
29
30## Media layer
31
32The media layer with Volume/Play controls, can be accessed via `FN` + `m`
33
34## Control layer
35
36The control layer is accessed via `FN` + `s`.
37Here one can control the behavior of the RGB underlight.
38`FN` + `s` + `1` resets the RGB underlight to the Layer signalling mode
39
40## Layer signalling through underlight
41
42The different layers are signalled throug setting of the underlight:
43
44- Base layer: Light Blue
45- Function layer: Yellow
46- Media layer: Green
47- Mouse layer: Blue
48- Control layer: Red
49- Midi layer: Purple
50
51[HYPER]: http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
52[Space Cadet Shift Parentheses]: http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses
53[Keyboard Layout Editor File]: http://www.keyboard-layout-editor.com/#/gists/f869b8789242a712e0f46eabbd550056
diff --git a/keyboards/clueboard/66/keymaps/magicmonty/rules.mk b/keyboards/clueboard/66/keymaps/magicmonty/rules.mk
new file mode 100644
index 000000000..46222e2d3
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/magicmonty/rules.mk
@@ -0,0 +1,10 @@
1
2MOUSEKEY_ENABLE = yes
3EXTRAKEY_ENABLE = yes
4RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
5
6MIDI_ENABLE = yes
7
8# if MIDI_ENABLE is set to yes, then CONSOLE_ENABLE has to be disabled, because of the firmware size
9CONSOLE_ENABLE = no
10COMMAND_ENABLE = no
diff --git a/keyboards/clueboard/66/keymaps/manofinterests/keymap.c b/keyboards/clueboard/66/keymaps/manofinterests/keymap.c
new file mode 100644
index 000000000..e71419980
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/manofinterests/keymap.c
@@ -0,0 +1,36 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5#define _BL 0
6#define _FL 1
7#define _CL 2
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 /* Keymap _BL: Base Layer (Default Layer)
11 */
12[_BL] = LAYOUT(
13 KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_GRV, KC_BSPC, RGB_VAI,
14 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, RGB_VAD,
15 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT,
16 KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RO, KC_RSFT, KC_UP,
17 KC_LCTL,KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_SPC, KC_HENK,KC_RALT,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
18
19 /* Keymap _FL: Function Layer
20 */
21[_FL] = LAYOUT(
22 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_DEL, KC_VOLU,
23 _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE, KC_VOLD,
24 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
25 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_PGUP,
26 _______,_______,_______,_______, _______,_______, _______,_______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
27
28 /* Keymap _CL: Control layer
29 */
30[_CL] = LAYOUT(
31 BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______,_______,RGB_TOG, RGB_VAI,
32 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD,
33 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
34 MO(_FL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_SAI,
35 _______,_______,_______,_______, RGB_MOD, RGB_MOD, _______,_______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
36};
diff --git a/keyboards/clueboard/66/keymaps/manofinterests/readme.md b/keyboards/clueboard/66/keymaps/manofinterests/readme.md
new file mode 100644
index 000000000..019131aeb
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/manofinterests/readme.md
@@ -0,0 +1,8 @@
1![Clueboard Layout Image](http://i.imgur.com/7Capi8W.png)
2
3# Default Clueboard Layout
4
5This is the default layout that comes flashed on every Clueboard. For the most
6part it's a straightforward and easy to follow layout. The only unusual key is
7the key in the upper left, which sends Escape normally, but Grave when any of
8the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/66/keymaps/maximised/keymap.c b/keyboards/clueboard/66/keymaps/maximised/keymap.c
new file mode 100644
index 000000000..c2e05a5a2
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/maximised/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Keymap _BL: Base Layer (Default Layer)
13 */
14[_BL] = LAYOUT(
15 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_GRV, KC_BSPC, KC_PGUP,
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
17 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
18 MO(_FL), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP,
19 KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
20
21 /* Keymap _FL: Function Layer
22 */
23[_FL] = LAYOUT(
24 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP,
25 _______, _______, _______,_______,_______,_______,_______,_______,_______,KC_SLCK, KC_PAUS, _______, _______, _______, _______,
26 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
27 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), KC_PGUP,
28 _______, _______, _______,_______, _______,_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
29
30 /* Keymap _CL: Reset/Underlight layer
31 */
32[_CL] = LAYOUT(
33 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
34 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
35 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
36 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
37 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
38};
diff --git a/keyboards/clueboard/66/keymaps/maximised/readme.md b/keyboards/clueboard/66/keymaps/maximised/readme.md
new file mode 100644
index 000000000..b8d54a309
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/maximised/readme.md
@@ -0,0 +1,3 @@
1# Maximised Clueboard Layout
2
3This layout is intended for a board with one or both shifts split. The outside key on the split shift is an Fn, while the inside is shift. The bottom row has all the mods on both sides, optimised for a Mac.
diff --git a/keyboards/clueboard/66/keymaps/mouse_keys/keymap.c b/keyboards/clueboard/66/keymaps/mouse_keys/keymap.c
new file mode 100644
index 000000000..be5634f10
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/mouse_keys/keymap.c
@@ -0,0 +1,48 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10#define _ML 3
11
12const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
13 /* Keymap _BL: Base Layer (Default Layer)
14 */
15[_BL] = LAYOUT(
16 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
17 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
18 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
19 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
20 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
21
22 /* Keymap _FL: Function Layer
23 */
24[_FL] = LAYOUT(
25 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP,
26 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______,
27 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
28 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP,
29 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
30
31 /* Keymap _CL: Control layer
32 */
33[_CL] = LAYOUT(
34 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
35 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
36 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
37 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
38 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
39
40 /* Keymap _ML: Mouse layer
41 */
42 [_ML] = LAYOUT(
43 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, _______,
44 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______,
45 _______, _______, KC_BTN3,KC_BTN2,KC_BTN1,_______,_______,_______,_______,_______, _______, _______, _______, _______,
46 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MS_U,
47 _______, _______, _______,_______, LT(_ML, KC_SPC),LT(_ML, KC_SPC), _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_MS_L, KC_MS_D,KC_MS_R),
48};
diff --git a/keyboards/clueboard/66/keymaps/mouse_keys/readme.md b/keyboards/clueboard/66/keymaps/mouse_keys/readme.md
new file mode 100644
index 000000000..de883e894
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/mouse_keys/readme.md
@@ -0,0 +1,5 @@
1# MouseKeys Layout
2
3This layout adds a mouse layer. When you hold down the spacebar the arrow keys
4will move your mouse cursor. You can click using the 3 mods to the left of the
5arrow keys, or the 3 keys under your primary fingers on the home row.
diff --git a/keyboards/clueboard/66/keymaps/mouse_keys/rules.mk b/keyboards/clueboard/66/keymaps/mouse_keys/rules.mk
new file mode 100644
index 000000000..6c605daec
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/mouse_keys/rules.mk
@@ -0,0 +1 @@
MOUSEKEY_ENABLE = yes
diff --git a/keyboards/clueboard/66/keymaps/mrscooty/keymap.c b/keyboards/clueboard/66/keymaps/mrscooty/keymap.c
new file mode 100644
index 000000000..302649c92
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/mrscooty/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9
10const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11 /* Keymap _BL: Base Layer (Default Layer)
12 */
13[_BL] = LAYOUT(
14 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_HOME,
15 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
16 MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
17 KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
18 KC_LCTL, KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
19
20 /* Keymap _FL: Function Layer
21 */
22[_FL] = LAYOUT(
23 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_PGUP,
24 _______, RGB_TOG, KC_MPRV, KC_MPLY, KC_MNXT,_______,_______,KC_HOME,KC_UP, KC_END, _______, _______, _______, KC_PSCR, KC_PGDN,
25 _______, RGB_VAI, KC_MUTE, KC_VOLD, KC_VOLU,_______,_______,KC_LEFT,KC_DOWN,KC_RIGHT, _______, _______, _______, _______,
26 _______, RGB_VAD, _______, _______, _______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_SAI,
27 _______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI)
28};
29
30 /* Keymap _CL: Control layer
31
32[_CL] = LAYOUT(
33 BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______,_______,RGB_TOG, RGB_VAI,
34 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD,
35 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
36 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_SAI,
37 _______,_______,_______,_______, RGB_MOD, RGB_MOD, _______,_______,_______,_______,RGB_HUD,RGB_SAD,RGB_HUI),
38};*/
diff --git a/keyboards/clueboard/66/keymaps/mrscooty/readme.md b/keyboards/clueboard/66/keymaps/mrscooty/readme.md
new file mode 100644
index 000000000..69cdb816c
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/mrscooty/readme.md
@@ -0,0 +1,15 @@
1# Mr Scooty's Clueboard Layout
2
3My personal layout for everyday typing and coding.
4I have a most of my media keys on the function layer as well as a second set of arrows as IJKL which you switch between by holding the normal CAPS key.
5
6
7#### Base Layer
8![Base Layout Image] (https://imgur.com/HWdi36y)
9
10#### Fn Layer
11![Fn Layout Image] (https://imgur.com/IPa8gFg)
12
13
14
15Both layers (https://imgur.com/a/dAwXq)
diff --git a/keyboards/clueboard/66/keymaps/mrscooty/rules.mk b/keyboards/clueboard/66/keymaps/mrscooty/rules.mk
new file mode 100644
index 000000000..ba997f869
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/mrscooty/rules.mk
@@ -0,0 +1,4 @@
1
2MOUSEKEY_ENABLE = yes
3EXTRAKEY_ENABLE = yes
4
diff --git a/keyboards/clueboard/66/keymaps/muzfuz/keymap.c b/keyboards/clueboard/66/keymaps/muzfuz/keymap.c
new file mode 100644
index 000000000..d4af35483
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/muzfuz/keymap.c
@@ -0,0 +1,74 @@
1#include QMK_KEYBOARD_H
2
3// Helpful defines
4#define ESC_CTL CTL_T(KC_ESCAPE) // Tap for Esc, hold for Ctrl
5#define _FL_KCF LT(1,KC_F)
6#define _FL_KCJ LT(1,KC_J)
7#define _AL_KCA LT(2,KC_A)
8#define CMD_ENT LGUI(LSFT(KC_ENT))
9
10// Each layer gets a name for readability, which is then used in the keymap matrix below.
11// The underscores don't mean anything - you can have a layer called STUFF or any other name.
12#define _BL 0
13#define _FL 1
14#define _AL 2
15#define _CL 3
16
17enum custom_keycodes {
18 HASHRKT = SAFE_RANGE,
19 CLNEQLS,
20};
21
22const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
23 /* Keymap _BL: Base Layer (Default Layer)
24 */
25 [_BL] = LAYOUT(
26 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, HASHRKT, LGUI(KC_C),
27 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, LGUI(KC_V),
28 ESC_CTL, _AL_KCA, KC_S, KC_D, _FL_KCF, KC_G, KC_H, _FL_KCJ, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_LGUI,
29 KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SLSH, KC_RSFT, KC_UP,
30 CMD_ENT, KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, MO(_CL), KC_LEFT, KC_DOWN, KC_RGHT),
31
32 /* Keymap _FL: Function Layer
33 */
34 [_FL] = LAYOUT(
35 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_VOLU,
36 _______, HASHRKT, _______, KC_LCBR, KC_RCBR, _______, _______, KC_UNDS, KC_PLUS, KC_PIPE, _______, _______, _______, KC_MUTE, KC_VOLD,
37 _______, CLNEQLS, _______, KC_LBRC, KC_RBRC, _______, _______, KC_MINS, KC_EQL, KC_BSLS, KC_TILD, KC_GRV, _______, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
39 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
40
41 /* Keymap _FL: Function Layer
42 */
43 [_AL] = LAYOUT(
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
46 _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
47 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
48 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
49
50 /* Keymap _CL: Control layer
51 */
52 [_CL] = LAYOUT(
53 BL_STEP, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
54 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_VAD,
55 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
56 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI,
57 _______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
58};
59
60bool process_record_user(uint16_t keycode, keyrecord_t *record) {
61 switch(keycode) {
62 case HASHRKT:
63 if (record->event.pressed) {
64 SEND_STRING("=>");
65 }
66 break;
67 case CLNEQLS:
68 if (record->event.pressed) {
69 SEND_STRING(":=");
70 }
71 break;
72 }
73 return true;
74}
diff --git a/keyboards/clueboard/66/keymaps/muzfuz/readme.md b/keyboards/clueboard/66/keymaps/muzfuz/readme.md
new file mode 100644
index 000000000..ce23a8a99
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/muzfuz/readme.md
@@ -0,0 +1,8 @@
1# muzfuz Clueboard layout
2
3```shell
4make clueboard/66/rev3:muzfuz
5dfu-programmer atmega32u4 erase --force && \
6dfu-programmer atmega32u4 flash .build/clueboard_66_rev3_muzfuz.hex && \
7dfu-programmer atmega32u4 reset
8```
diff --git a/keyboards/clueboard/66/keymaps/serubin/keymap.c b/keyboards/clueboard/66/keymaps/serubin/keymap.c
new file mode 100644
index 000000000..e77417c3c
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/serubin/keymap.c
@@ -0,0 +1,49 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _ME 2
10#define _CL 3
11
12const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
13 /* Keymap _BL: Base Layer (Default Layer)
14 */
15[_BL] = LAYOUT(
16 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
17 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
18 F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
19 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
20 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RGUI, MO(_FL), MO(_ME), KC_LEFT, KC_DOWN, KC_RGHT),
21
22 /* Keymap _FL: Function Layer
23 */
24[_FL] = LAYOUT(
25 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_HOME,
26 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, KC_PSCR, KC_END,
27 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
28 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP,
29 _______, _______, _______, _______, _______,_______, _______, _______, MO(_FL), MO(_ME), KC_HOME, KC_PGDN, KC_END),
30
31/* Keymap _FL: Function Layer
32 */
33[_ME] = LAYOUT(
34 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU,
35 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, KC_VOLD,
36 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
37 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______ , _______, _______,
38 _______, _______, _______, _______, _______,_______, _______, _______, MO(_FL), MO(_ME), KC_MPRV, KC_MPLY, KC_MNXT),
39
40
41 /* Keymap _CL: Control layer
42 */
43[_CL] = LAYOUT(
44 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
45 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
46 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
47 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, MO(_FL), _______, RGB_SAI,
48 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
49};
diff --git a/keyboards/clueboard/66/keymaps/serubin/readme.md b/keyboards/clueboard/66/keymaps/serubin/readme.md
new file mode 100644
index 000000000..78eef5352
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/serubin/readme.md
@@ -0,0 +1,14 @@
1# Serubin's Clueboard Layout
2
3This is the layout based on the clueboard default, modified for development on Mac, PC, and Windows. This layout also handles media and volume keys on all the previously listed platforms. Most importantly, Capslock has been replaced by a dual function Esc/Ctrl key. This is particularly handy for use in Vim.
4
5#### Base Layer
6![Base Layout Image](http://i.imgur.com/qL78n1y.png)
7
8#### Fn Layer
9![Fn Layout Image](http://i.imgur.com/QuwxePw.png)
10
11#### Media Layer
12![Media Layer Image](http://i.imgur.com/oOfWXMf.png)
13
14
diff --git a/keyboards/clueboard/66/keymaps/serubin/rules.mk b/keyboards/clueboard/66/keymaps/serubin/rules.mk
new file mode 100644
index 000000000..ba997f869
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/serubin/rules.mk
@@ -0,0 +1,4 @@
1
2MOUSEKEY_ENABLE = yes
3EXTRAKEY_ENABLE = yes
4
diff --git a/keyboards/clueboard/66/keymaps/shift_fn/keymap.c b/keyboards/clueboard/66/keymaps/shift_fn/keymap.c
new file mode 100644
index 000000000..8556f9080
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/shift_fn/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Keymap _BL: Base Layer (Default Layer)
13 */
14[_BL] = LAYOUT(
15 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
17 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
18 MO(_FL), KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
19 KC_LCTL, KC_LGUI, KC_LALT,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
20
21 /* Keymap _FL: Function Layer
22 */
23[_FL] = LAYOUT(
24 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, S(KC_GRV), KC_DEL, BL_STEP,
25 S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN),
26 S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT),
27 MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP,
28 KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, S(KC_SPC),S(KC_SPC), KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_HOME, KC_PGDN, KC_END),
29
30 /* Keymap _CL: Control layer
31 */
32[_CL] = LAYOUT(
33 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
34 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
35 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
36 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
37 _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD,RGB_SAD,RGB_HUI),
38};
diff --git a/keyboards/clueboard/66/keymaps/shift_fn/readme.md b/keyboards/clueboard/66/keymaps/shift_fn/readme.md
new file mode 100644
index 000000000..d68c5b053
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/shift_fn/readme.md
@@ -0,0 +1,6 @@
1# Shift Fn Clueboard 66% Layout
2
3This is an experimental layout. It makes the left shift key a dual roll key.
4For most keys it acts as a shift key, but for some keys it activates an
5alternate function instead. Primarily I use this to access the F-keys under
6the number rows.
diff --git a/keyboards/clueboard/66/keymaps/smt/keymap.c b/keyboards/clueboard/66/keymaps/smt/keymap.c
new file mode 100644
index 000000000..89fc49591
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/smt/keymap.c
@@ -0,0 +1,132 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _QWERTY 0
8#define _COLEMAK 1
9#define _DVORAK 2
10#define _FL 3
11#define _CL 4
12
13enum planck_keycodes {
14 QWERTY = SAFE_RANGE,
15 COLEMAK,
16 DVORAK
17};
18
19// Custom macros
20#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
21#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt)
22#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
23
24
25const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
26 /* Keymap _QWERTY: Base Layer (Default Layer)
27 * ,-----------------------------------------------------------. ,---.
28 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| |PgU|
29 * |-----------------------------------------------------------| |---|
30 * |HpTab| Q| W| E| R| T| Y| U| I| O| P| [| ]| BS| |PgD|
31 * |-----------------------------------------------------------| `---'
32 * |CtlEsc| A| S| D| F| G| H| J| K| L| ;| '| | Ent|
33 * |--------------------------------------------------------------.
34 * |Shift| | Z| X| C| V| B| N| M| ,| .| /|Shift| Fn| Up|
35 * |------------------------------------------------------------------.
36 * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt|
37 * `------------------------------------------------------------------'
38 */
39[_QWERTY] = LAYOUT(
40 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PGUP,
41 HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN,
42 CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT,
43 KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL), KC_UP,
44 KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
45
46 /* Keymap _COLEMAK: Base Layer
47 * ,-----------------------------------------------------------. ,---.
48 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| |PgU|
49 * |-----------------------------------------------------------| |---|
50 * |HpTab| Q| W| F| P| G| J| L| U| Y| ;| [| ]| BS| |PgD|
51 * |-----------------------------------------------------------| `---'
52 * |CtlEsc| A| R| S| T| D| H| N| E| I| O| '| | Ent|
53 * |--------------------------------------------------------------.
54 * |Shift| | Z| X| C| V| B| K| M| ,| .| /|Shift| Fn| Up|
55 * |------------------------------------------------------------------.
56 * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt|
57 * `------------------------------------------------------------------'
58 */
59[_COLEMAK] = LAYOUT(
60 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PGUP,
61 HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN,
62 CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT,
63 KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL), KC_UP,
64 KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
65
66 /* Keymap _DVORAK: Base Layer
67 * ,-----------------------------------------------------------. ,---.
68 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| `| |PgU|
69 * |-----------------------------------------------------------| |---|
70 * |HpTab| '| ,| .| P| Y| F| G| C| R| L| /| =| BS| |PgD|
71 * |-----------------------------------------------------------| `---'
72 * |CtlEsc| A| O| E| U| I| D| H| T| N| S| -| | Ent|
73 * |--------------------------------------------------------------.
74 * |Shift| | ;| Q| J| K| X| B| M| W| V| Z|Shift| Fn| Up|
75 * |------------------------------------------------------------------.
76 * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt|
77 * `------------------------------------------------------------------'
78 */
79[_DVORAK] = LAYOUT(
80 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, KC_PGUP,
81 HPR_TAB, KC_QUOT, KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC, KC_PGDN,
82 CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT,
83 KC_LSFT, XXXXXXX, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, MO(_FL), KC_UP,
84 KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
85
86 /* Keymap _FL: Function Layer
87 */
88[_FL] = LAYOUT(
89 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, _______, _______, BL_STEP,
90 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, KC_DEL, _______,
91 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
92 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), KC_PGUP,
93 _______, _______, _______, _______, _______,_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
94
95 /* Keymap _CL: Control layer
96 */
97[_CL] = LAYOUT(
98 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
99 _______, _______, _______,_______,RESET, _______,_______,QWERTY, COLEMAK,DVORAK, _______, _______, _______, _______, RGB_VAD,
100 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
101 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
102 _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
103};
104
105void persistent_default_layer_set(uint16_t default_layer) {
106 eeconfig_update_default_layer(default_layer);
107 default_layer_set(default_layer);
108}
109
110bool process_record_user(uint16_t keycode, keyrecord_t *record) {
111 switch (keycode) {
112 case QWERTY:
113 if (record->event.pressed) {
114 persistent_default_layer_set(1UL<<_QWERTY);
115 }
116 return false;
117 break;
118 case COLEMAK:
119 if (record->event.pressed) {
120 persistent_default_layer_set(1UL<<_COLEMAK);
121 }
122 return false;
123 break;
124 case DVORAK:
125 if (record->event.pressed) {
126 persistent_default_layer_set(1UL<<_DVORAK);
127 }
128 return false;
129 break;
130 }
131 return true;
132}
diff --git a/keyboards/clueboard/66/keymaps/smt/readme.md b/keyboards/clueboard/66/keymaps/smt/readme.md
new file mode 100644
index 000000000..7fc0f0248
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/smt/readme.md
@@ -0,0 +1,21 @@
1# smt Clueboard Layout (HHKB variant)
2
3![Clueboard Layout Image](http://i.imgur.com/Ll5gGte.png)
4
5This is smt's HHKB variant layout, based on the default layout that comes
6flashed on every Clueboard. The primary differences from the default are:
7
8- The Backspace key is moved down into the traditional `\` position
9- `\` and `` ` `` are assigned to the "split-backspace" positions
10- The right Shift is split to allow for a Fn key to its right
11- The modifiers on the right side now mirror the left side (`Alt`/`Super`/`Ctrl`)
12
13For the most part, it's a straightforward and easy to follow layout. There
14are a few special keys:
15
16- The Esc key sends `Esc` when tapped, `` ` `` when `Alt`/`Super`/`Ctrl`/`Fn` is held, or `~` when `Shift` is held
17- The Tab key sends `Tab` when tapped, or `Super+Ctrl+Alt+Shift` (a.k.a. [Hyper]) when held
18- The key traditionally in the Caps-Lock position has been re-mapped to send `Esc` when tapped, or `Ctrl` when held
19- The left Shift key sends `Enter` when tapped, or `Shift` when held
20
21[Hyper]: http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
diff --git a/keyboards/clueboard/66/keymaps/tetris/keymap.c b/keyboards/clueboard/66/keymaps/tetris/keymap.c
new file mode 100644
index 000000000..26dd97fee
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/tetris/keymap.c
@@ -0,0 +1,156 @@
1#include QMK_KEYBOARD_H
2#include "tetris_text.h"
3
4// Each layer gets a name for readability, which is then used in the keymap matrix below.
5// The underscores don't mean anything - you can have a layer called STUFF or any other name.
6// Layer names don't all need to be of the same length, obviously, and you can also skip them
7// entirely and just use numbers.
8#define _BL 0
9#define _FL 1
10#define _CL 2
11
12enum custom_keycodes {
13 TETRIS_START = SAFE_RANGE
14};
15
16const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
17 /* Keymap _BL: Base Layer (Default Layer)
18 */
19[_BL] = LAYOUT(
20 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
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_BSLS, KC_PGDN,
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_NUHS, KC_ENT,
23 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
24 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
25
26 /* Keymap _FL: Function Layer
27 */
28[_FL] = LAYOUT(
29 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP,
30 _______, _______, _______,_______,_______,F(1) ,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______,
31 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
32 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP,
33 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
34
35 /* Keymap _CL: Control layer
36 */
37[_CL] = LAYOUT(
38 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
39 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
40 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
41 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
42 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
43};
44
45static uint8_t tetris_key_presses = 0;
46static uint16_t tetris_timer = 0;
47static uint8_t tetris_running = 0;
48static int tetris_keypress = 0;
49
50/*
51 * Set up tetris
52 */
53
54bool process_record_user(uint16_t keycode, keyrecord_t *record) {
55 if (record->event.pressed) {
56 tetris_key_presses++;
57 }
58
59 if (tetris_running && record->event.pressed) {
60 tetris_keypress = 0;
61 switch (keycode) {
62 case KC_UP: tetris_keypress = 1; break;
63 case KC_LEFT: tetris_keypress = 2; break;
64 case KC_DOWN: tetris_keypress = 3; break;
65 case KC_RIGHT: tetris_keypress = 4; break;
66 // Make ESC stop tetris (on keyboards other than clueboard)
67 // case KC_ESC: tetris_running = 0; return false;
68 }
69 if (tetris_keypress != 0) {
70 return false;
71 }
72 }
73
74 switch (keycode) {
75 case KC_GESC:
76 // clueboard specific hook to make escape quite tetris
77 if (tetris_running) {
78 tetris_running = 0;
79 return false;
80 }
81 break;
82 case TETRIS_START:
83 if (record->event.pressed) {
84 tetris_running = 1;
85 tetris_timer = 0;
86 tetris_keypress = 0;
87 // set randomness using total number of key presses
88 tetris_start(tetris_key_presses);
89 }
90 return false;
91 }
92
93 return true;
94}
95
96// Runs constantly in the background, in a loop.
97void matrix_scan_user(void) {
98 if (tetris_running) {
99 tetris_timer++;
100 if (tetris_timer > 1000) {
101 // every 1000 times this is run is about 100 ms.
102 if (!tetris_tick(100)) {
103 // game over
104 tetris_running = 0;
105 }
106 tetris_timer = 0;
107 }
108 }
109}
110
111void tetris_send_up(void) {
112 tap_code(KC_UP);
113}
114void tetris_send_left(void) {
115 tap_code(KC_LEFT);
116}
117void tetris_send_down(void) {
118 tap_code(KC_DOWN);
119}
120void tetris_send_right(void) {
121 tap_code(KC_RGHT);
122}
123void tetris_send_backspace(void) {
124 tap_code(KC_BSPC);
125}
126void tetris_send_delete(void) {
127 tap_code(KC_DEL);
128}
129
130void tetris_send_string(const char *s) {
131 for (int i = 0; s[i] != 0; i++) {
132 if (s[i] >= 'a' && s[i] <= 'z') {
133 tap_code(KC_A + (s[i] - 'a'));
134 } else if (s[i] >= 'A' && s[i] <= 'Z') {
135 tap_code16(S(KC_A + (s[i] - 'A')));
136 } else if (s[i] >= '1' && s[i] <= '9') {
137 tap_code(KC_1 + (s[i] - '1'));
138 } else {
139 switch (s[i]) {
140 case ' ': tap_code(KC_SPACE); break;
141 case '.': tap_code(KC_DOT); break;
142 case '0': tap_code(KC_0); break;
143 }
144 }
145 }
146}
147
148void tetris_send_newline(void) {
149 tap_code(KC_ENT);
150}
151
152int tetris_get_keypress(void) {
153 int out = tetris_keypress;
154 tetris_keypress = 0;
155 return out;
156}
diff --git a/keyboards/clueboard/66/keymaps/tetris/readme.md b/keyboards/clueboard/66/keymaps/tetris/readme.md
new file mode 100644
index 000000000..20e97fb19
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/tetris/readme.md
@@ -0,0 +1,33 @@
1Default layout but with a tetris game
2=====================================
3Tetris works by outputting key-presses to make ascii-art in a regular text editor.
4It reads key presses to rotate and move the bricks like a regular tetris game.
5
6Example
7=======
8![tetris](https://raw.githubusercontent.com/danamlund/meckb_tetris/master/tetris.gif)
9
10Usage
11=====
121) Open a default text editor
132) Press the tetris button (Fn + t)
143) Play tetris
15
16It makes ascii-art by sending keycodes: left, right, up, down, qwerty characters, and numbers.
17
18Problems
19========
20Drawing ascii-art is too slow to make a pleasant playing experience.
21While drawing ascii-art, the keyboard does not record key-presses, so its pretty unresponsive.
22
23Adds 5000 bytes to the hex file.
24
25Implement in other keyboards
26============================
27 - Copy-paste the files tetris_text.c and tetrix_text.h to your keymap folder.
28 - Add/update your-keyboard/your-keymap/Makefile to include ``SRC = tetris_text.c``
29 - Copy-paste the tetris-related code from this keymap.c to yours.
30 - Set a key to trigger F(1) to start tetris mode.
31 - Its also a good idea to set a key to stop tetris, here its escape.
32
33You can find a simple tetris keyboard definition at <https://github.com/danamlund/meckb_tetris/>
diff --git a/keyboards/clueboard/66/keymaps/tetris/rules.mk b/keyboards/clueboard/66/keymaps/tetris/rules.mk
new file mode 100644
index 000000000..464c6e0c8
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/tetris/rules.mk
@@ -0,0 +1,3 @@
1SRC = tetris_text.c
2RGBLIGHT_ENABLE = no
3BACKLIGHT_ENABLE = no
diff --git a/keyboards/clueboard/66/keymaps/tetris/tetris_text.c b/keyboards/clueboard/66/keymaps/tetris/tetris_text.c
new file mode 100644
index 000000000..1376ead00
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/tetris/tetris_text.c
@@ -0,0 +1,505 @@
1/* Copyright 2017 Dan Amlund Thomsen
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 <stdio.h>
17#include <stdlib.h>
18#include <stdarg.h>
19#include <stdint.h>
20
21#include "tetris_text.h"
22
23static char empty_piece[7][7] = { { 0, 0, 0, 0, 0, 0, 0 },
24 { 0, 0, 0, 0, 0, 0, 0 },
25 { 0, 0, 0, 0, 0, 0, 0 },
26 { 0, 0, 0, 0, 0, 0, 0 },
27 { 0, 0, 0, 0, 0, 0, 0 },
28 { 0, 0, 0, 0, 0, 0, 0 },
29 { 0, 0, 0, 0, 0, 0, 0 } };
30
31static char temp_piece[7][7];
32
33static int curx = 0;
34static int cury = 0;
35
36static void clear_piece(char piece[7][7]) {
37 for (int y = 0; y < 7; y++) {
38 for (int x = 0; x < 7; x++) {
39 piece[x][y] = 0;
40 }
41 }
42}
43
44static void copy_piece_from_to(char from[7][7], char to[7][7]) {
45 for (int y = 0; y < 7; y++) {
46 for (int x = 0; x < 7; x++) {
47 to[x][y] = from[x][y];
48 }
49 }
50}
51
52static void rotate_piece(char piece[7][7]) {
53 // transpose
54 for (int y = 0; y < 7; y++) {
55 for (int x = y + 1; x < 7; x++) {
56 char tmp = piece[y][x];
57 piece[y][x] = piece[x][y];
58 piece[x][y] = tmp;
59 }
60 }
61
62 // reverse rows
63 for (int y = 0; y < 7; y++) {
64 for (int x = 0; x < 3; x++) {
65 char tmp = piece[y][6 - x];
66 piece[y][6 - x] = piece[y][x];
67 piece[y][x] = tmp;
68 }
69 }
70}
71
72static char get_shape_char(int shape) {
73 switch (shape) {
74 case 0: return 'I';
75 case 1: return 'J';
76 case 2: return 'L';
77 case 3: return 'O';
78 case 4: return 'S';
79 case 5: return 'T';
80 case 6: return 'Z';
81 }
82 return 'Q';
83}
84
85static void set_piece(char piece[7][7], int shape, int rotation) {
86 clear_piece(piece);
87 switch (shape) {
88 case 0:
89 if (rotation % 2 == 0) {
90 // xxXx
91 piece[3][1] = 1;
92 piece[3][2] = 1;
93 piece[3][3] = 1;
94 piece[3][4] = 1;
95 } else {
96 // x
97 // x
98 // X
99 // x
100 piece[1][3] = 1;
101 piece[2][3] = 1;
102 piece[3][3] = 1;
103 piece[4][3] = 1;
104 }
105 break;
106 case 1:
107 // xXx
108 // x
109 piece[3][2] = 1;
110 piece[3][3] = 1;
111 piece[3][4] = 1;
112 piece[4][4] = 1;
113 for (int i = 0; i < rotation; i++) {
114 rotate_piece(piece);
115 }
116 break;
117 case 2:
118 // xXx
119 // x
120 piece[3][2] = 1;
121 piece[3][3] = 1;
122 piece[3][4] = 1;
123 piece[4][2] = 1;
124 for (int i = 0; i < rotation; i++) {
125 rotate_piece(piece);
126 }
127 break;
128 case 3:
129 // xX
130 // xx
131 piece[3][2] = 1;
132 piece[3][3] = 1;
133 piece[4][2] = 1;
134 piece[4][3] = 1;
135 break;
136 case 4:
137 if (rotation % 2 == 0) {
138 // xX
139 // xx
140 piece[3][2] = 1;
141 piece[3][3] = 1;
142 piece[4][3] = 1;
143 piece[4][4] = 1;
144 } else {
145 // x
146 // xX
147 // x
148 piece[2][3] = 1;
149 piece[3][2] = 1;
150 piece[3][3] = 1;
151 piece[4][2] = 1;
152 }
153 break;
154 case 5:
155 // xXx
156 // x
157 piece[3][2] = 1;
158 piece[3][3] = 1;
159 piece[3][4] = 1;
160 piece[4][3] = 1;
161 for (int i = 0; i < rotation; i++) {
162 rotate_piece(piece);
163 }
164 break;
165 case 6:
166 if (rotation % 2 == 0) {
167 // Xx
168 // xx
169 piece[3][3] = 1;
170 piece[3][4] = 1;
171 piece[4][2] = 1;
172 piece[4][3] = 1;
173 } else {
174 // x
175 // Xx
176 // x
177 piece[2][3] = 1;
178 piece[3][3] = 1;
179 piece[3][4] = 1;
180 piece[4][4] = 1;
181 }
182 break;
183 }
184}
185
186static void send_deletes(int deletes) {
187 for (int i = 0; i < deletes; i++) {
188 tetris_send_delete();
189 }
190}
191
192static void send_backspaces(int backspaces) {
193 for (int i = 0; i < backspaces; i++) {
194 tetris_send_backspace();
195 curx--;
196 }
197}
198
199static void send_goto_xy(int x, int y) {
200 while (curx < x) {
201 tetris_send_right();
202 curx++;
203 }
204 while (curx > x) {
205 tetris_send_left();
206 curx--;
207 }
208 while (cury < y) {
209 tetris_send_down();
210 cury++;
211 }
212 while (cury > y) {
213 tetris_send_up();
214 cury--;
215 }
216}
217
218static void draw_row(char c, const char oldrow[7], const char newrow[7], int x, int y) {
219 char str[2] = { c, 0 };
220 char row_is_del[7] = { 0 };
221 int first = -1;
222 int last = -1;
223 for (int px = 0; px < 7; px++) {
224 if (oldrow[px] && !newrow[px]) {
225 row_is_del[px] = 1;
226 }
227 if (newrow[px] || oldrow[px]) {
228 if (first == -1) first = px;
229 last = px;
230 }
231 }
232
233 if (first >= 0) {
234 if (curx > x + last + 1) {
235 send_goto_xy(x + last + 1, cury);
236 }
237 if (curx < x + first) {
238 send_goto_xy(x + first, cury);
239 }
240 send_goto_xy(curx, y);
241 send_deletes((x + last + 1) - curx);
242 send_backspaces(curx - (x + first));
243 for (int i = first; i <= last; i++) {
244 if (row_is_del[i]) {
245 tetris_send_string(".");
246 } else {
247 tetris_send_string(str);
248 }
249 curx++;
250 }
251 }
252}
253
254static void move_piece_from_to(char from[7][7], char to[7][7], int xadd, int yadd) {
255 for (int y = 0; y < 7; y++) {
256 for (int x = 0; x < 7; x++) {
257 if (x + xadd >= 0 && x + xadd < 7 && y + yadd >= 0 && y + yadd < 7) {
258 to[y][x] = from[y + yadd][x + xadd];
259 } else {
260 to[y][x] = 0;
261 }
262 }
263 }
264}
265
266static void draw_piece(char c, int x, int y, char oldpiece[7][7], char piece[7][7]) {
267 for (int py = 0; py < 7; py++) {
268 draw_row(c, oldpiece[py], piece[py], x, y + py);
269 }
270}
271
272static void draw_piece_moved(char c, int x, int y, char piece[7][7], int oldxadd, int oldyadd) {
273 move_piece_from_to(piece, temp_piece, oldxadd, oldyadd);
274 draw_piece(c, x, y, temp_piece, piece);
275}
276
277static int is_piece_hitting(char board[20][10], char piece[7][7], int x, int y) {
278 for (int py = 0; py < 7; py++) {
279 for (int px = 0; px < 7; px++) {
280 if (piece[py][px] &&
281 (px + x >= 10 || px + x < 0
282 || py + y >= 20 || py + y < 0
283 || board[py + y][px + x])) {
284 return 1;
285 }
286 }
287 }
288 return 0;
289}
290
291static void add_piece_to_board(char piece[7][7], char board[20][10], int x, int y) {
292 for (int py = 0; py < 7; py++) {
293 for (int px = 0; px < 7; px++) {
294 if (piece[py][px]) {
295 board[py + y][px + x] = piece[py][px];
296 }
297 }
298 }
299}
300
301static void draw_board_line(void) {
302 //send_string("l l");
303 tetris_send_string("l..........l");
304 tetris_send_newline();
305}
306static void init(void) {
307 for (int i = 0; i < 20; i++) {
308 draw_board_line();
309 }
310 tetris_send_string("doooooooooob");
311 curx = 12;
312 cury = 20;
313}
314
315static int get_piece_min_y(char piece[7][7]) {
316 for (int y = 0; y < 7; y++) {
317 for (int x = 0; x < 7; x++) {
318 if (piece[y][x])
319 return y;
320 }
321 }
322 return 0;
323}
324
325static int clear_lines(char board[20][10]) {
326 int cleared_lines = 0;
327 for (int y = 19; y >= 0; y--) {
328 char isfull = 1;
329 for (int x = 0; x < 10; x++) {
330 if (!board[y][x]) {
331 isfull = 0;
332 }
333 }
334 if (isfull) {
335 // delete clear line
336 send_goto_xy(12, y);
337 send_backspaces(12); // delete line contents
338 // delete newline
339 tetris_send_backspace();
340 cury--;
341 curx = 12;
342 cleared_lines++;
343 } else {
344 if (cleared_lines > 0) {
345 // move cleared lines down on board
346 for (int x = 0; x < 10; x++) {
347 board[y + cleared_lines][x] = board[y][x];
348 }
349 }
350 }
351 }
352 // clear cleared top lines
353 for (int y = 0; y < cleared_lines; y++) {
354 for (int x = 0; x < 10; x++) {
355 board[y][x] = 0;
356 }
357 }
358 if (cleared_lines > 0) {
359 send_goto_xy(0, 0);
360 for (int i = 0; i < cleared_lines; i++) {
361 draw_board_line();
362 curx = 0;
363 cury++;
364 }
365 }
366 return cleared_lines;
367}
368
369static uint8_t myrandom(uint8_t seed) {
370 uint8_t out = seed >> 1;
371 if (seed & 1) {
372 out = out ^ 0xB8;
373 }
374 return out;
375}
376
377static char piece[7][7];
378static char board[20][10];
379static uint8_t r;
380static int score;
381static int x;
382static int y;
383static int shape;
384static int rotation;
385static int time;
386static int next_down;
387static int down_delay;
388static int first_run;
389static int game_over;
390
391void tetris_start(uint8_t seed) {
392 for (int y = 0; y < 20; y++) {
393 for (int x = 0; x < 10; x++) {
394 board[y][x] = 0;
395 }
396 }
397
398 clear_piece(piece);
399
400 init();
401
402 game_over = 0;
403
404 r = seed;
405 score = 0;
406
407 copy_piece_from_to(empty_piece, piece);
408 x = 0;
409 y = 0;
410 shape = 0;
411 rotation = 0;
412 time = 0;
413 next_down = 0;
414 down_delay = -1;
415 first_run = 1;
416}
417
418int tetris_tick(int ms_since_previous_tick) {
419 if (game_over) {
420 return 0;
421 }
422
423 time += ms_since_previous_tick;
424
425 if (first_run || time > next_down) {
426 if (first_run || is_piece_hitting(board, piece, x, y + 1)) {
427 first_run = 0;
428 add_piece_to_board(piece, board, x, y);
429
430 score += clear_lines(board);
431
432 down_delay = 500 - score * 10;
433 if (down_delay < 100) {
434 down_delay = 100;
435 }
436
437 rotation = 0;
438 shape = r % 7;
439 r = myrandom(r);
440 set_piece(piece, shape, rotation);
441
442 x = 1;
443 y = - get_piece_min_y(piece);
444 draw_piece_moved(get_shape_char(shape), 1 + x, y, piece, 0, 0);
445
446 if (is_piece_hitting(board, piece, x, y)) {
447 game_over = 1;
448 send_goto_xy(12, 10);
449 tetris_send_string(" game over");
450 tetris_send_down();
451 tetris_send_string(" score ");
452 char tmp[10];
453 sprintf(tmp, "%d", score);
454 tetris_send_string(tmp);
455 return 0;
456 }
457 } else {
458 y++;
459 draw_piece_moved(get_shape_char(shape), 1 + x, y, piece, 0, +1);
460 }
461 next_down = time + down_delay;
462 } else {
463
464 switch (tetris_get_keypress()) {
465 case 1: { // up
466 int oldrotation = rotation;
467 rotation = (rotation + 1) % 4;
468 copy_piece_from_to(piece, temp_piece);
469 set_piece(piece, shape, rotation);
470 if (is_piece_hitting(board, piece, x, y)) {
471 rotation = oldrotation;
472 set_piece(piece, shape, rotation);
473 } else {
474 draw_piece(get_shape_char(shape), 1 + x, y, temp_piece, piece);
475 }
476 break;
477 }
478 case 2: // left
479 if (!is_piece_hitting(board, piece, x - 1, y)) {
480 x--;
481 draw_piece_moved(get_shape_char(shape), 1 + x, y, piece, -1, 0);
482 }
483 break;
484 case 3: {// down
485 int starty = y;
486 while (!is_piece_hitting(board, piece, x, y + 1)) {
487 y++;
488 }
489
490 draw_piece(get_shape_char(shape), x + 1, starty, piece, empty_piece);
491 draw_piece(get_shape_char(shape), x + 1, y, empty_piece, piece);
492
493 next_down = time + down_delay;
494 break;
495 }
496 case 4: // right
497 if (!is_piece_hitting(board, piece, x + 1, y)) {
498 x++;
499 draw_piece_moved(get_shape_char(shape), 1 + x, y, piece, 1, 0);
500 }
501 break;
502 }
503 }
504 return 1;
505}
diff --git a/keyboards/clueboard/66/keymaps/tetris/tetris_text.h b/keyboards/clueboard/66/keymaps/tetris/tetris_text.h
new file mode 100644
index 000000000..25b4177e0
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/tetris/tetris_text.h
@@ -0,0 +1,45 @@
1/* Copyright 2017 Dan Amlund Thomsen
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#ifndef TETRIS_TEXT_H
17#define TETRIS_TEXT_H
18
19//// to implement
20void tetris_send_up(void);
21void tetris_send_left(void);
22void tetris_send_down(void);
23void tetris_send_right(void);
24
25void tetris_send_backspace(void);
26void tetris_send_delete(void);
27
28void tetris_send_string(const char *s);
29
30void tetris_send_newline(void);
31
32// return = meaning
33// 0 = no keys pressed
34// 1 = up
35// 2 = left
36// 3 = down
37// 4 = right
38int tetris_get_keypress(void);
39
40//// to call
41void tetris_start(uint8_t seed);
42// returns 0 when game is over
43int tetris_tick(int ms_since_previous_tick);
44
45#endif
diff --git a/keyboards/clueboard/66/keymaps/unix_optimized/keymap.c b/keyboards/clueboard/66/keymaps/unix_optimized/keymap.c
new file mode 100644
index 000000000..823959ee0
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/unix_optimized/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Keymap _BL: Base Layer (Default Layer)
13 */
14[_BL] = LAYOUT(
15 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
17 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
18 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
19 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
20
21 /* Keymap _FL: Function Layer
22 */
23[_FL] = LAYOUT(
24 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_INS,
25 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, KC_DEL,
26 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
27 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP,
28 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
29
30 /* Keymap _CL: Control layer
31 */
32[_CL] = LAYOUT(
33 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
34 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
35 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
36 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
37 _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD,RGB_HUI),
38};
diff --git a/keyboards/clueboard/66/keymaps/unix_optimized/readme.md b/keyboards/clueboard/66/keymaps/unix_optimized/readme.md
new file mode 100644
index 000000000..79c7daef8
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/unix_optimized/readme.md
@@ -0,0 +1,4 @@
1# Default Clueboard 66% Layout
2
3This is the default layout except that Caps Lock has been changed to Control
4and Insert and Delete have been put into the Fn layer.
diff --git a/keyboards/clueboard/66/keymaps/via/keymap.c b/keyboards/clueboard/66/keymaps/via/keymap.c
new file mode 100644
index 000000000..f5c0c4644
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5#define _BL 0
6#define _FL 1
7#define _CL 2
8#define _EL 3
9
10const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11 /* Keymap _BL: Base Layer (Default Layer)
12 */
13[_BL] = LAYOUT_66_ansi(
14 KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_PGUP,
15 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_PGDN,
16 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,
17 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
18 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
19
20 /* Keymap _FL: Function Layer
21 */
22[_FL] = LAYOUT_66_ansi(
23 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_VOLU,
24 _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE, KC_VOLD,
25 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
26 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_PGUP,
27 _______,_______,_______, _______, _______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
28
29 /* Keymap _CL: Control layer
30 */
31[_CL] = LAYOUT_66_ansi(
32 BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______, RGB_TOG, RGB_VAI,
33 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD,
34 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
35 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, RGB_SAI,
36 _______,_______,_______, RGB_MOD, _______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
37
38 /* Keymap _EL: Empty layer
39 */
40[_EL] = LAYOUT_66_ansi(
41 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,
42 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
43 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
44 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,
45 _______,_______,_______, _______, _______,_______,_______,_______,_______,_______)
46}; \ No newline at end of file
diff --git a/keyboards/clueboard/66/keymaps/via/rules.mk b/keyboards/clueboard/66/keymaps/via/rules.mk
new file mode 100644
index 000000000..7a4971950
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
1# rules.mk overrides to enable VIA
2
3VIA_ENABLE = yes
4LTO_ENABLE = yes
diff --git a/keyboards/clueboard/66/keymaps/win_optimized/keymap.c b/keyboards/clueboard/66/keymaps/win_optimized/keymap.c
new file mode 100644
index 000000000..2c5cb8639
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/win_optimized/keymap.c
@@ -0,0 +1,38 @@
1#include QMK_KEYBOARD_H
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _BL 0
8#define _FL 1
9#define _CL 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Keymap _BL: Base Layer (Default Layer)
13 */
14[_BL] = LAYOUT(
15 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_INS,
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
17 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
18 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
19 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
20
21 /* Keymap _FL: Function Layer
22 */
23[_FL] = LAYOUT(
24 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP,
25 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______,
26 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
27 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP,
28 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
29
30 /* Keymap _CL: Control layer
31 */
32[_CL] = LAYOUT(
33 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
34 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
35 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
36 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
37 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
38};
diff --git a/keyboards/clueboard/66/keymaps/win_optimized/readme.md b/keyboards/clueboard/66/keymaps/win_optimized/readme.md
new file mode 100644
index 000000000..d79603268
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/win_optimized/readme.md
@@ -0,0 +1,6 @@
1# Default Clueboard 66% Layout
2
3This is the default layout that comes flashed on every Clueboard. For the most
4part it's a straightforward and easy to follow layout. The only unusual key is
5the key in the upper left, which sends Escape normally, but Grave when any of
6the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/66/readme.md b/keyboards/clueboard/66/readme.md
new file mode 100644
index 000000000..094cc219e
--- /dev/null
+++ b/keyboards/clueboard/66/readme.md
@@ -0,0 +1,18 @@
1# Clueboard 66%
2
3![Clueboard](https://i.imgur.com/hLePwJu.jpg)
4
5A fully customizable 66% keyboard.
6
7* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
8* Hardware Supported: Clueboard 66% PCB
9 * rev1 (PCB Version 1.0)
10 * rev2 (PCB Versions 2.0, 2.0.1, 2.1, 2.5, 2.5.1, 2.6)
11 * rev3 (PCB Versions 2.7, 2.8, 2.9)
12* Hardware Availability: [clueboard.co](https://clueboard.co/)
13
14Make example for this keyboard (after setting up your build environment):
15
16 make clueboard/66/rev3:default
17
18See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/clueboard/66/rev1/.noci b/keyboards/clueboard/66/rev1/.noci
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/clueboard/66/rev1/.noci
diff --git a/keyboards/clueboard/66/rev1/config.h b/keyboards/clueboard/66/rev1/config.h
new file mode 100644
index 000000000..b8c5759db
--- /dev/null
+++ b/keyboards/clueboard/66/rev1/config.h
@@ -0,0 +1,3 @@
1#pragma once
2
3#include "config_common.h"
diff --git a/keyboards/clueboard/66/rev1/info.json b/keyboards/clueboard/66/rev1/info.json
new file mode 100644
index 000000000..6ff733b3d
--- /dev/null
+++ b/keyboards/clueboard/66/rev1/info.json
@@ -0,0 +1,268 @@
1{
2 "manufacturer": "Clueboard",
3 "keyboard_name": "Clueboard 66%",
4 "maintainer": "skullydazed",
5 "processor": "atmega32u4",
6 "debounce": 5,
7 "diode_direction": "COL2ROW",
8 "features": {
9 "audio": false,
10 "backlight": false,
11 "bluetooth": false,
12 "bootmagic": false,
13 "command": false,
14 "console": true,
15 "extrakey": true,
16 "midi": false,
17 "mousekey": true,
18 "nkro": true,
19 "rgblight": false,
20 "unicode": false
21 },
22 "indicators": {
23 "caps_lock": "F0"
24 },
25 "matrix_pins": {
26 "cols": ["B3", "F1", "F4", "F5", "F6", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "F7", "B0", "B1"],
27 "rows": ["D1", "D0", "D2", "D5", "D3"]
28 },
29 "rgblight": {
30 "animations": {
31 "all": true
32 },
33 "brightness_steps": 17,
34 "hue_steps": 10,
35 "led_count": 14,
36 "pin": "B2",
37 "saturation_steps": 17
38 },
39 "usb": {
40 "device_ver": "0x0001",
41 "pid": "0x2301",
42 "vid": "0xC1ED"
43 },
44 "community_layouts": ["66_ansi", "66_iso"],
45 "layout_aliases": {
46 "LAYOUT": "LAYOUT_all"
47 },
48 "layouts": {
49 "LAYOUT_66_ansi": {
50 "layout": [
51 { "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
52 { "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
53 { "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
54 { "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
55 { "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
56 { "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
57 { "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
58 { "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
59 { "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
60 { "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
61 { "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
62 { "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
63 { "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
64 { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
65 { "label": "k0F", "matrix": [0, 15], "w": 1, "x": 15.5, "y": 0 },
66 { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
67 { "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
68 { "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
69 { "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
70 { "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
71 { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
72 { "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
73 { "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
74 { "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
75 { "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
76 { "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
77 { "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
78 { "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
79 { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
80 { "label": "k1F", "matrix": [1, 15], "w": 1, "x": 15.5, "y": 1 },
81 { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
82 { "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
83 { "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
84 { "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
85 { "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
86 { "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
87 { "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
88 { "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
89 { "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
90 { "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
91 { "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
92 { "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
93 { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
94 { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
95 { "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
96 { "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
97 { "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
98 { "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
99 { "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
100 { "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
101 { "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
102 { "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
103 { "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
104 { "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
105 { "label": "Shift", "matrix": [3, 13], "w": 2.25, "x": 12.25, "y": 3 },
106 { "label": "k3E", "matrix": [3, 14], "w": 1, "x": 14.5, "y": 3 },
107 { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
108 { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
109 { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
110 { "label": "k46", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
111 { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 9.75, "y": 4 },
112 { "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11, "y": 4 },
113 { "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.25, "y": 4 },
114 { "label": "k4D", "matrix": [4, 13], "w": 1, "x": 13.5, "y": 4 },
115 { "label": "k4E", "matrix": [4, 14], "w": 1, "x": 14.5, "y": 4 },
116 { "label": "k4F", "matrix": [4, 15], "w": 1, "x": 15.5, "y": 4 }
117 ]
118 },
119 "LAYOUT_66_iso": {
120 "layout": [
121 { "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
122 { "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
123 { "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
124 { "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
125 { "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
126 { "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
127 { "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
128 { "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
129 { "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
130 { "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
131 { "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
132 { "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
133 { "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
134 { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
135 { "label": "Insert", "matrix": [0, 15], "w": 1, "x": 15.5, "y": 0 },
136 { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
137 { "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
138 { "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
139 { "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
140 { "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
141 { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
142 { "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
143 { "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
144 { "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
145 { "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
146 { "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
147 { "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
148 { "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
149 { "label": "Delete", "matrix": [1, 15], "w": 1, "x": 15.5, "y": 1 },
150 { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
151 { "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
152 { "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
153 { "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
154 { "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
155 { "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
156 { "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
157 { "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
158 { "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
159 { "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
160 { "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
161 { "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
162 { "label": "", "matrix": [2, 12], "w": 1, "x": 12.75, "y": 2 },
163 { "h": 2, "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
164 { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
165 { "label": "\\", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
166 { "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
167 { "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
168 { "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
169 { "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
170 { "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
171 { "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
172 { "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
173 { "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
174 { "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
175 { "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
176 { "label": "Shift", "matrix": [3, 13], "w": 2.25, "x": 12.25, "y": 3 },
177 { "label": "\u2191", "matrix": [3, 14], "w": 1, "x": 14.5, "y": 3 },
178 { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
179 { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
180 { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
181 { "label": "k46", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
182 { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 9.75, "y": 4 },
183 { "label": "Ctrl", "matrix": [4, 11], "w": 1.25, "x": 11, "y": 4 },
184 { "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.25, "y": 4 },
185 { "label": "\u2190", "matrix": [4, 13], "w": 1, "x": 13.5, "y": 4 },
186 { "label": "\u2193", "matrix": [4, 14], "w": 1, "x": 14.5, "y": 4 },
187 { "label": "\u2192", "matrix": [4, 15], "w": 1, "x": 15.5, "y": 4 }
188 ]
189 },
190 "LAYOUT_all": {
191 "layout": [
192 { "label": "GRAVE", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
193 { "label": "1", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
194 { "label": "2", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
195 { "label": "3", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
196 { "label": "4", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
197 { "label": "5", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
198