aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/keychron/q1/config.h51
-rw-r--r--keyboards/keychron/q1/q1.c159
-rw-r--r--keyboards/keychron/q1/q1.h23
-rw-r--r--keyboards/keychron/q1/readme.md21
-rw-r--r--keyboards/keychron/q1/rev_0100/config.h26
-rw-r--r--keyboards/keychron/q1/rev_0100/info.json93
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/default/keymap.c66
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c66
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/via/rules.mk2
-rw-r--r--keyboards/keychron/q1/rev_0100/readme.md21
-rw-r--r--keyboards/keychron/q1/rev_0100/rev_0100.h37
-rw-r--r--keyboards/keychron/q1/rev_0100/rules.mk25
12 files changed, 590 insertions, 0 deletions
diff --git a/keyboards/keychron/q1/config.h b/keyboards/keychron/q1/config.h
new file mode 100644
index 000000000..fb6a70c86
--- /dev/null
+++ b/keyboards/keychron/q1/config.h
@@ -0,0 +1,51 @@
1/* Copyright 2021 @ Keychron(https://www.keychron.com)
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
20/* USB Device descriptor parameter */
21#define VENDOR_ID 0x3434
22#define MANUFACTURER Keychron
23#define PRODUCT Keychron Q1
24
25/* key matrix size */
26#define MATRIX_ROWS 6
27#define MATRIX_COLS 15
28
29/* COL2ROW or ROW2COL */
30#define DIODE_DIRECTION ROW2COL
31
32/* Set 0 if debouncing isn't needed */
33#define DEBOUNCE 5
34
35/* RGB LED Matrix Configuration */
36#define DRIVER_COUNT 2
37#define DRIVER_ADDR_1 0b1010000
38#define DRIVER_ADDR_2 0b1011111
39
40#define DRIVER_1_LED_TOTAL 59
41#define DRIVER_2_LED_TOTAL 23
42#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
43
44/* DIP switch */
45#define DIP_SWITCH_MATRIX_GRID { {0,1} }
46
47/* Disable DIP switch in matrix data */
48#define MATRIX_MASKED
49
50/* NKRO */
51#define FORCE_NKRO
diff --git a/keyboards/keychron/q1/q1.c b/keyboards/keychron/q1/q1.c
new file mode 100644
index 000000000..943cf26ce
--- /dev/null
+++ b/keyboards/keychron/q1/q1.c
@@ -0,0 +1,159 @@
1/* Copyright 2021 @ Keychron (https://www.keychron.com)
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 "q1.h"
18
19const matrix_row_t matrix_mask[] = {
20 0b0111111111111101,
21 0b0111111111111111,
22 0b0111111111111111,
23 0b0111111111111111,
24 0b0111111111111111,
25 0b0111111111111111,
26};
27
28void dip_switch_update_kb(uint8_t index, bool active) {
29 if (index == 0) {
30 default_layer_set(1UL << (active ? 2 : 0));
31 }
32 dip_switch_update_user(index, active);
33}
34
35const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
36/* Refer to IS31 manual for these locations
37 * driver
38 * | R location
39 * | | G location
40 * | | | B location
41 * | | | | */
42
43 {0, A_1, C_1, B_1},
44 {0, A_3, C_3, B_3},
45 {0, A_4, C_4, B_4},
46 {0, A_5, C_5, B_5},
47 {0, A_6, C_6, B_6},
48 {0, A_7, C_7, B_7},
49 {0, A_8, C_8, B_8},
50 {0, A_9, C_9, B_9},
51 {0, A_10, C_10, B_10},
52 {0, A_11, C_11, B_11},
53 {0, A_12, C_12, B_12},
54 {0, A_13, C_13, B_13},
55 {0, A_14, C_14, B_14},
56 {0, A_15, C_15, B_15},
57 {0, A_16, C_16, B_16},
58
59 {0, D_1, F_1, E_1},
60 {0, D_2, F_2, E_2},
61 {0, D_3, F_3, E_3},
62 {0, D_4, F_4, E_4},
63 {0, D_5, F_5, E_5},
64 {0, D_6, F_6, E_6},
65 {0, D_7, F_7, E_7},
66 {0, D_8, F_8, E_8},
67 {0, D_9, F_9, E_9},
68 {0, D_10, F_10, E_10},
69 {0, D_11, F_11, E_11},
70 {0, D_12, F_12, E_12},
71 {0, D_13, F_13, E_13},
72 {0, D_14, F_14, E_14},
73 {0, D_16, F_16, E_16},
74
75 {0, G_1, I_1, H_1},
76 {0, G_2, I_2, H_2},
77 {0, G_3, I_3, H_3},
78 {0, G_4, I_4, H_4},
79 {0, G_5, I_5, H_5},
80 {0, G_6, I_6, H_6},
81 {0, G_7, I_7, H_7},
82 {0, G_8, I_8, H_8},
83 {0, G_9, I_9, H_9},
84 {0, G_10, I_10, H_10},
85 {0, G_11, I_11, H_11},
86 {0, G_12, I_12, H_12},
87 {0, G_13, I_13, H_13},
88 {0, G_14, I_14, H_14},
89 {0, G_16, I_16, H_16},
90
91 {0, J_1, L_1, K_1},
92 {0, J_2, L_2, K_2},
93 {0, J_3, L_3, K_3},
94 {0, J_4, L_4, K_4},
95 {0, J_5, L_5, K_5},
96 {0, J_6, L_6, K_6},
97 {0, J_7, L_7, K_7},
98 {0, J_8, L_8, K_8},
99 {0, J_9, L_9, K_9},
100 {0, J_10, L_10, K_10},
101 {0, J_11, L_11, K_11},
102 {0, J_12, L_12, K_12},
103 {0, J_14, L_14, K_14},
104 {0, J_16, L_16, K_16},
105 {1, A_1, C_1, B_1},
106
107 {1, A_3, C_3, B_3},
108 {1, A_4, C_4, B_4},
109 {1, A_5, C_5, B_5},
110 {1, A_6, C_6, B_6},
111 {1, A_7, C_7, B_7},
112 {1, A_8, C_8, B_8},
113 {1, A_9, C_9, B_9},
114 {1, A_10, C_10, B_10},
115 {1, A_11, C_11, B_11},
116 {1, A_12, C_12, B_12},
117 {1, A_14, C_14, B_14},
118 {1, A_15, C_15, B_15},
119
120 {1, D_1, F_1, E_1},
121 {1, D_2, F_2, E_2},
122 {1, D_3, F_3, E_3},
123 {1, D_7, F_7, E_7},
124 {1, D_11, F_11, E_11},
125 {1, D_12, F_12, E_12},
126 {1, D_13, F_13, E_13},
127 {1, D_14, F_14, E_14},
128 {1, D_15, F_15, E_15},
129 {1, D_16, F_16, E_16}
130
131};
132
133led_config_t g_led_config = {
134 {
135 { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 },
136 { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
137 { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 },
138 { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 71, 57, 58 },
139 { 59, NO_LED, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 80, 70, 13 },
140 { 72, 73, 74, NO_LED, NO_LED, NO_LED,75, NO_LED, NO_LED, NO_LED, 76, 77, 78, 79, 81 }
141 },
142 {
143 {0,0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {210, 0}, {224, 0},
144 {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {120,13}, {135,13}, {150,13}, {165,13}, {180,13}, {195,13}, {224,13},
145 {0,26}, {15,26}, {30,26}, {45,26}, {60,26}, {75,26}, {90,26}, {105,26}, {120,26}, {135,26}, {150,26}, {165,26}, {180,26}, {195,26}, {224,26},
146 {0,39}, {15,39}, {30,39}, {45,39}, {60,39}, {75,39}, {90,39}, {105,39}, {120,39}, {135,39}, {150,39}, {165,39}, {195,39}, {224,39},
147 {0,52}, {30,52}, {45,52}, {60,52}, {75,52}, {90,52}, {105,52}, {120,52}, {135,52}, {150,52}, {165,52}, {195,52}, {210,52},
148 {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64},
149 },
150 {
151 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
152 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
153 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
154 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
155 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
156 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
157
158 }
159};
diff --git a/keyboards/keychron/q1/q1.h b/keyboards/keychron/q1/q1.h
new file mode 100644
index 000000000..1e92a062a
--- /dev/null
+++ b/keyboards/keychron/q1/q1.h
@@ -0,0 +1,23 @@
1/* Copyright 2021 @ Keychron (https://www.keychron.com)
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#if defined(KEYBOARD_keychron_q1_rev_0100)
22# include "rev_0100.h"
23#endif
diff --git a/keyboards/keychron/q1/readme.md b/keyboards/keychron/q1/readme.md
new file mode 100644
index 000000000..d7b6af3b3
--- /dev/null
+++ b/keyboards/keychron/q1/readme.md
@@ -0,0 +1,21 @@
1# Keychron Q1
2
3![Keychron Q1](https://cdn.shopify.com/s/files/1/0059/0630/1017/t/5/assets/pf-823ebdc7--1073.jpg)
4
5A customizable 75% keyboard.
6
7* Keyboard Maintainer: [Keychron](https://github.com/keychron)
8* Hardware Supported: Keychron Q1
9* Hardware Availability: [Keychron](https://www.keychron.com)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make keychron/q1/rev_0100:default
14
15Flashing example for this keyboard:
16
17 make keychron/q1/rev_0100:default:flash
18
19**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
20
21See 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/keychron/q1/rev_0100/config.h b/keyboards/keychron/q1/rev_0100/config.h
new file mode 100644
index 000000000..5b910f738
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/config.h
@@ -0,0 +1,26 @@
1/* Copyright 2021 @ Keychron (https://www.keychron.com)
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
20/* USB Device descriptor parameter */
21#define PRODUCT_ID 0x0100
22#define DEVICE_VER 0x0001
23
24/* key matrix pins */
25#define MATRIX_ROW_PINS { D3, D2, B3, B2, B1, B0 }
26#define MATRIX_COL_PINS { D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6, F5, F4, F1, F0 }
diff --git a/keyboards/keychron/q1/rev_0100/info.json b/keyboards/keychron/q1/rev_0100/info.json
new file mode 100644
index 000000000..4d101eac7
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/info.json
@@ -0,0 +1,93 @@
1{
2 "keyboard_name": "Keychron Q1",
3 "url": "https://github.com/Keychron",
4 "maintainer": "lokher",
5 "width": 16.25,
6 "height": 6.25,
7 "layouts": {
8 "LAYOUT_ansi_82": {
9 "layout": [{"label":"Esc", "x":0, "y":0},
10 {"label":"F1", "x":1.25, "y":0},
11 {"label":"F2", "x":2.25, "y":0},
12 {"label":"F3", "x":3.25, "y":0},
13 {"label":"F4", "x":4.25, "y":0},
14 {"label":"F5", "x":5.5, "y":0},
15 {"label":"F6", "x":6.5, "y":0},
16 {"label":"F7", "x":7.5, "y":0},
17 {"label":"F8", "x":8.5, "y":0},
18 {"label":"F9", "x":9.75, "y":0},
19 {"label":"F10", "x":10.75, "y":0},
20 {"label":"F11", "x":11.75, "y":0},
21 {"label":"F12", "x":12.75, "y":0},
22 {"label":"Delete", "x":14, "y":0},
23 {"label":"Insert", "x":15.25, "y":0},
24 {"label":"~", "x":0, "y":1},
25 {"label":"!", "x":1, "y":1},
26 {"label":"@", "x":2, "y":1},
27 {"label":"#", "x":3, "y":1},
28 {"label":"$", "x":4, "y":1},
29 {"label":"%", "x":5, "y":1},
30 {"label":"^", "x":6, "y":1},
31 {"label":"&", "x":7, "y":1},
32 {"label":"*", "x":8, "y":1},
33 {"label":"(", "x":9, "y":1},
34 {"label":")", "x":10, "y":1},
35 {"label":"_", "x":11, "y":1},
36 {"label":"+", "x":12, "y":1},
37 {"label":"Backspace", "x":13, "y":1, "w":2},
38 {"label":"Page Up", "x":15.25, "y":1},
39 {"label":"Tab", "x":0, "y":2, "w":1.5},
40 {"label":"Q", "x":1.5, "y":2},
41 {"label":"W", "x":2.5, "y":2},
42 {"label":"E", "x":3.5, "y":2},
43 {"label":"R", "x":4.5, "y":2},
44 {"label":"T", "x":5.5, "y":2},
45 {"label":"Y", "x":6.5, "y":2},
46 {"label":"U", "x":7.5, "y":2},
47 {"label":"I", "x":8.5, "y":2},
48 {"label":"O", "x":9.5, "y":2},
49 {"label":"P", "x":10.5, "y":2},
50 {"label":"{", "x":11.5, "y":2},
51 {"label":"}", "x":12.5, "y":2},
52 {"label":"|", "x":13.5, "y":2, "w":1.5},
53 {"label":"Page Down", "x":15.25, "y":2},
54 {"label":"Caps Lock", "x":0, "y":3, "w":1.75},
55 {"label":"A", "x":1.75, "y":3},
56 {"label":"S", "x":2.75, "y":3},
57 {"label":"D", "x":3.75, "y":3},
58 {"label":"F", "x":4.75, "y":3},
59 {"label":"G", "x":5.75, "y":3},
60 {"label":"H", "x":6.75, "y":3},
61 {"label":"J", "x":7.75, "y":3},
62 {"label":"K", "x":8.75, "y":3},
63 {"label":"L", "x":9.75, "y":3},
64 {"label":":", "x":10.75, "y":3},
65 {"label":"\"", "x":11.75, "y":3},
66 {"label":"Enter", "x":12.75, "y":3, "w":2.25},
67 {"label":"Home", "x":15.25, "y":3},
68 {"label":"Shift", "x":0, "y":4, "w":2.25},
69 {"label":"Z", "x":2.25, "y":4},
70 {"label":"X", "x":3.25, "y":4},
71 {"label":"C", "x":4.25, "y":4},
72 {"label":"V", "x":5.25, "y":4},
73 {"label":"B", "x":6.25, "y":4},
74 {"label":"N", "x":7.25, "y":4},
75 {"label":"M", "x":8.25, "y":4},
76 {"label":"<", "x":9.25, "y":4},
77 {"label":">", "x":10.25, "y":4},
78 {"label":"?", "x":11.25, "y":4},
79 {"label":"Shift", "x":12.25, "y":4, "w":1.75},
80 {"label":"\u2191", "x":14.25, "y":4.25},
81 {"label":"Ctrl", "x":0, "y":5, "w":1.25},
82 {"label":"Win", "x":1.25, "y":5, "w":1.25},
83 {"label":"Alt", "x":2.5, "y":5, "w":1.25},
84 {"x":3.75, "y":5, "w":6.25},
85 {"label":"Alt", "x":10, "y":5},
86 {"label":"Fn", "x":11, "y":5},
87 {"label":"Ctrl", "x":12, "y":5},
88 {"label":"\u2190", "x":13.25, "y":5.25},
89 {"label":"\u2193", "x":14.25, "y":5.25},
90 {"label":"\u2192", "x":15.25, "y":5.25}]
91 }
92 }
93}
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0100/keymaps/default/keymap.c
new file mode 100644
index 000000000..fa6f79175
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/default/keymap.c
@@ -0,0 +1,66 @@
1/* Copyright 2021 @ Keychron (https://www.keychron.com)
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19
20enum layers{
21 MAC_BASE,
22 MAC_FN,
23 WIN_BASE,
24 WIN_FN
25};
26
27
28#define KC_TASK LGUI(KC_TAB)
29#define KC_FLXP LGUI(KC_E)
30
31
32const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33
34[MAC_BASE] = LAYOUT_ansi_82(
35 KC_ESC, KC_BRID, KC_BRIU, KC_F3, KC_F4, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS,
36 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_PGUP,
37 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,
38 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_HOME,
39 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,
40 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
41
42[MAC_FN] = LAYOUT_ansi_82(
43 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
44 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
45 RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
46 KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
47 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
48 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
49
50[WIN_BASE] = LAYOUT_ansi_82(
51 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_INS,
52 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_PGUP,
53 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,
54 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_HOME,
55 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,
56 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
57
58[WIN_FN] = LAYOUT_ansi_82(
59 KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,
60 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
61 RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
62 KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
63 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
64 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
65
66};
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c
new file mode 100644
index 000000000..4108ade04
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c
@@ -0,0 +1,66 @@
1/* Copyright 2021 @ Keychron (https://www.keychron.com)
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19
20enum layers{
21 MAC_BASE,
22 MAC_FN,
23 WIN_BASE,
24 WIN_FN
25};
26
27
28#define KC_TASK LGUI(KC_TAB)
29#define KC_FLXP LGUI(KC_E)
30
31
32const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33
34[MAC_BASE] = LAYOUT_ansi_82(
35 KC_ESC, KC_BRID, KC_BRIU, KC_F3, KC_F4, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS,
36 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_PGUP,
37 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,
38 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_HOME,
39 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,
40 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
41
42[MAC_FN] = LAYOUT_ansi_82(
43 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
44 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
45 RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
46 KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
47 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
48 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
49
50[WIN_BASE] = LAYOUT_ansi_82(
51 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_INS,
52 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_PGUP,
53 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,
54 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_HOME,
55 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,
56 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
57
58[WIN_FN] = LAYOUT_ansi_82(
59 KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,
60 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
61 RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
62 KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
63 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
64 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
65
66};
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/via/rules.mk b/keyboards/keychron/q1/rev_0100/keymaps/via/rules.mk
new file mode 100644
index 000000000..96d2d189b
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2MOUSEKEY_ENABLE = no
diff --git a/keyboards/keychron/q1/rev_0100/readme.md b/keyboards/keychron/q1/rev_0100/readme.md
new file mode 100644
index 000000000..0131794c1
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/readme.md
@@ -0,0 +1,21 @@
1# Keychron Q1
2
3![Keychron Q1](https://cdn.shopify.com/s/files/1/0059/0630/1017/t/5/assets/pf-823ebdc7--1073.jpg)
4
5A customizable 75% keyboard.
6
7* Keyboard Maintainer: [Keychron](https://github.com/keychron)
8* Hardware Supported: Keychron Q1, Atmega32u4
9* Hardware Availability: [Keychron](https://www.keychron.com)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make keychron/q1/rev_0100:default
14
15Flashing example for this keyboard:
16
17 make keychron/q1/rev_0100:default:flash
18
19**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
20
21See 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/keychron/q1/rev_0100/rev_0100.h b/keyboards/keychron/q1/rev_0100/rev_0100.h
new file mode 100644
index 000000000..2a1edac64
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/rev_0100.h
@@ -0,0 +1,37 @@
1/* Copyright 2021 @ Keychron (https://www.keychron.com)
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#define xxx KC_NO
22
23#define LAYOUT_ansi_82( \
24 K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E, K0E, \
25 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
26 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \
27 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
28 K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K3C, \
29 K50, K51, K52, K56, K5A, K5B, K5C, K5D, K4C, K5E \
30) { \
31 { K00, xxx, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
32 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
33 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
34 { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
35 { K40, xxx, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \
36 { K50, K51, K52, xxx, xxx, xxx, K56, xxx, xxx, xxx, K5A, K5B, K5C, K5D, K5E } \
37}
diff --git a/keyboards/keychron/q1/rev_0100/rules.mk b/keyboards/keychron/q1/rev_0100/rules.mk
new file mode 100644
index 000000000..5080a4638
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/rules.mk
@@ -0,0 +1,25 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = no # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = yes # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
23DIP_SWITCH_ENABLE = yes
24RGB_MATRIX_ENABLE = yes
25RGB_MATRIX_DRIVER = IS31FL3733