aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQMK Bot <hello@qmk.fm>2021-11-04 04:21:04 +0000
committerQMK Bot <hello@qmk.fm>2021-11-04 04:21:04 +0000
commitb06d9d822cfb72e0728b11711a333f2f5d3c631e (patch)
treef0e2f88bf9670ced1a54188f296df5d9dc951389
parent4fc961464c03af531d4296d7903d27665c9ed717 (diff)
parent3f33362740ff8cc8f0d96e99ace71fe82e62c30d (diff)
downloadqmk_firmware-b06d9d822cfb72e0728b11711a333f2f5d3c631e.tar.gz
qmk_firmware-b06d9d822cfb72e0728b11711a333f2f5d3c631e.zip
Merge remote-tracking branch 'origin/master' into develop
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/mkillewald/config.h23
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap.c175
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap_user.h33
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/mkillewald/readme.md54
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.c83
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.h26
-rw-r--r--keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rules.mk6
-rw-r--r--keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/config.h23
-rw-r--r--keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap.c175
-rw-r--r--keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap_user.h33
-rw-r--r--keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/readme.md54
-rw-r--r--keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.c83
-rw-r--r--keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.h26
-rw-r--r--keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rules.mk6
14 files changed, 800 insertions, 0 deletions
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/config.h b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/config.h
new file mode 100644
index 000000000..bc9fe405c
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/config.h
@@ -0,0 +1,23 @@
1/* Copyright 2021 @ Mike Killewald
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#ifdef RGB_MATRIX_ENABLE
20# define RGB_DISABLE_WHEN_USB_SUSPENDED
21# define CAPS_LOCK_INDICATOR_COLOR RGB_RED
22# define FN_LAYER_COLOR RGB_ORANGE
23#endif \ No newline at end of file
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap.c b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap.c
new file mode 100644
index 000000000..937b20ee1
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap.c
@@ -0,0 +1,175 @@
1/* Copyright 2021 @ Mike Killewald
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#include "keymap_user.h"
19#ifdef RGB_MATRIX_ENABLE
20# include "rgb_matrix_user.h"
21#endif
22
23// clang-format off
24
25typedef union {
26 uint32_t raw;
27 struct {
28 bool caps_lock_light_tab :1;
29 bool caps_lock_light_alphas :1;
30 bool fn_layer_transparent_keys_off :1;
31 bool fn_layer_color_enable :1;
32 };
33} user_config_t;
34
35user_config_t user_config;
36
37enum custom_keycodes {
38#ifdef VIA_ENABLE
39 KC_MISSION_CONTROL = USER00,
40#else
41 KC_MISSION_CONTROL = SAFE_RANGE,
42#endif
43 KC_LAUNCHPAD,
44 KC_LIGHT_TAB_TOGGLE,
45 KC_LIGHT_ALPHAS_TOGGLE,
46 KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE,
47 KC_FN_LAYER_COLOR_TOGGLE
48};
49
50#define KC_MCTL KC_MISSION_CONTROL
51#define KC_LPAD KC_LAUNCHPAD
52#define KC_LTTOG KC_LIGHT_TAB_TOGGLE
53#define KC_LATOG KC_LIGHT_ALPHAS_TOGGLE
54#define KC_TKTOG KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE
55#define KC_FCTOG KC_FN_LAYER_COLOR_TOGGLE
56#define KC_TASK LGUI(KC_TAB)
57#define KC_FLXP LGUI(KC_E)
58
59const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
60
61[MAC_BASE] = LAYOUT_ansi_82(
62 KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS,
63 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,
64 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,
65 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,
66 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,
67 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
68
69[MAC_FN] = LAYOUT_ansi_82(
70 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,
71 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
72 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,
73 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,
74 KC_TRNS, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
75 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
76
77[WIN_BASE] = LAYOUT_ansi_82(
78 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,
79 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,
80 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,
81 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,
82 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,
83 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
84
85[WIN_FN] = LAYOUT_ansi_82(
86 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,
87 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
88 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,
89 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,
90 KC_TRNS, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
91 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
92
93};
94
95// clang-format on
96
97void matrix_init_user(void) {
98#ifdef RGB_MATRIX_ENABLE
99 rgb_matrix_init_user();
100#endif
101}
102
103void keyboard_post_init_user(void) {
104 user_config.raw = eeconfig_read_user();
105}
106
107void eeconfig_init_user(void) {
108 user_config.raw = 0;
109 user_config.caps_lock_light_tab = false;
110 user_config.caps_lock_light_alphas = false;
111 user_config.fn_layer_transparent_keys_off = true;
112 user_config.fn_layer_color_enable = false;
113 eeconfig_update_user(user_config.raw);
114}
115
116bool process_record_user(uint16_t keycode, keyrecord_t *record) {
117 switch (keycode) {
118 case KC_MISSION_CONTROL:
119 if (record->event.pressed) {
120 host_consumer_send(0x29F);
121 } else {
122 host_consumer_send(0);
123 }
124 return false; // Skip all further processing of this key
125 case KC_LAUNCHPAD:
126 if (record->event.pressed) {
127 host_consumer_send(0x2A0);
128 } else {
129 host_consumer_send(0);
130 }
131 return false; // Skip all further processing of this key
132 case KC_LIGHT_TAB_TOGGLE:
133 if (record->event.pressed) {
134 user_config.caps_lock_light_tab ^= 1; // bitwise xor to toggle status bit
135 eeconfig_update_user(user_config.raw);
136 }
137 return false; // Skip all further processing of this key
138 case KC_LIGHT_ALPHAS_TOGGLE:
139 if (record->event.pressed) {
140 user_config.caps_lock_light_alphas ^= 1;
141 eeconfig_update_user(user_config.raw);
142 }
143 return false; // Skip all further processing of this key
144 case KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE:
145 if (record->event.pressed) {
146 user_config.fn_layer_transparent_keys_off ^= 1;
147 eeconfig_update_user(user_config.raw);
148 }
149 return false; // Skip all further processing of this key
150 case KC_FN_LAYER_COLOR_TOGGLE:
151 if (record->event.pressed) {
152 user_config.fn_layer_color_enable ^= 1;
153 eeconfig_update_user(user_config.raw);
154 }
155 return false; // Skip all further processing of this key
156 default:
157 return true; // Process all other keycodes normally
158 }
159}
160
161bool get_caps_lock_light_tab(void) {
162 return user_config.caps_lock_light_tab;
163}
164
165bool get_caps_lock_light_alphas(void) {
166 return user_config.caps_lock_light_alphas;
167}
168
169bool get_fn_layer_transparent_keys_off(void) {
170 return user_config.fn_layer_transparent_keys_off;
171}
172
173bool get_fn_layer_color_enable(void) {
174 return user_config.fn_layer_color_enable;
175} \ No newline at end of file
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap_user.h b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap_user.h
new file mode 100644
index 000000000..87b1baf47
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap_user.h
@@ -0,0 +1,33 @@
1/* Copyright 2021 @ Mike Killewald
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// clang-format off
20
21enum layers {
22 MAC_BASE,
23 MAC_FN,
24 WIN_BASE,
25 WIN_FN
26};
27
28// clang-format on
29
30bool get_caps_lock_light_tab(void);
31bool get_caps_lock_light_alphas(void);
32bool get_fn_layer_transparent_keys_off(void);
33bool get_fn_layer_color_enable(void); \ No newline at end of file
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/readme.md b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/readme.md
new file mode 100644
index 000000000..f8d5de012
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/readme.md
@@ -0,0 +1,54 @@
1## mkillewald's Keychron Q1 keymap (ANSI rev_0100) v1.0.4
2
3This keymap builds on the keymap by Grayson Carr (gtg465x) but adds a couple options.
4
5## Features:
6- On macOS, F3 opens Mission Control and F4 opens Launchpad without needing to configure shortcuts in System Preferences
7- RGB lighting turns off when the computer sleeps
8- Caps Lock RGB indicator
9 - the Caps Lock key will light when Caps Lock is enabled with the following options:
10 - #define CAPS_LOCK_INDICATOR_COLOR [color] in config.h to set the backlight color used for the indicator when Caps Lock is enabled (default: red)
11 - Fn+Z will toggle lighting the TAB key when Caps Lock is enabled. This is useful with non backlit keycaps/legends. (default: off)
12 - Fn+X will toggle lighting all the alpha keys when Caps Lock is enabled. (default: off)
13
14- Dynamic Fn layer RGB indicator
15 - When the Fn key is held down, any keys defined on the Fn layer in this firmware or in VIA will be highlighted with the following options:
16 - #define FN_LAYER_COLOR [color] in config.h to set a static color for defined keys (default: orange)
17 - Fn+C will toggle turning off RGB for keys with no definition (default: RGB off)
18 - Fn+V will toggle lighting the defined Fn layer keys with the static color set with FN_LAYER_COLOR (default: static color off)
19
20- All custom keycodes can be moved to different keys in VIA by using the ANY key with the following keycodes:
21 - USER00 (default: F3) macOS Mission Control
22 - USER01 (default: F4) macOS Launchpad
23 - USER02 (default: Fn+Z) Caps Lock light Tab toggle
24 - USER03 (default: Fn+X) Caps Lock light alphas toggle
25 - USER04 (default: Fn+C) Fn layer non-defined keys RGB toggle
26 - USER05 (default: Fn+V) Fn layer defined keys static color toggle
27
28RGB must be toggled on for all indicators to function. If you do not want an RGB mode active but still want the indicators, toggle RGB on and turn the brightness all the way off. The indicators will remain at full brightness.
29
30Please make sure to save any customizations you have made in VIA to a .json file before flashing the firmware. Sometimes it has been necessary to re-apply those changes in VIA after flashing the firmware. If that is the case, you will most likely need to manually add the USER00 through USER05 custom keycodes after loading your customizations from the saved .json file. Then re-save a new .json file which will have your previous customizations and the custom keycodes for future use as needed.
31
32#### USE AT YOUR OWN RISK
33
34## Changelog:
35
36v1.0.4 October 9, 2021
37- Caps Lock and Fn layer toggles are now stored in eeprom so settings will remain when Q1 is unplugged
38
39v1.0.3 October 8, 2021
40- now using keycode toggles instead of preprocessor directive to set the various Caps Lock and Fn Layer RGB lighting options. This allows for setting the options from user space without having to recompile.
41
42v1.0.2 October 7, 2021
43- adapted Grayson Carr's (gtg465x) Caps Lock alphas and dynamic Fn layer RGB routines
44- added CAPS_LOCK_INDICATOR_LIGHT_TAB config option to enable/disable lighting Tab with Caps Lock indicator
45- added FN_LAYER_COLOR config option to set FN layer static color
46
47v1.0.1 October 7, 2021
48- Mission Control and Launchpad custom keycodes are now defined using the VIA user keycodes range so thay can be labeled properly in VIA (adopted change from gtg465x)
49
50v1.0.0 September 30, 2021
51- Initial release built upon keymap by Grayson Carr (gtg465x)
52- defined Mission Control (F3) and Launchpad (F4) keycodes for macOs
53- RGB backlight turns off when computer sleeps
54- added Caps Lock indicator lighting both the Caps Lock and Tab LEDs for better effect on non-backlit keycaps
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.c b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.c
new file mode 100644
index 000000000..f06039af0
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.c
@@ -0,0 +1,83 @@
1/* Copyright 2021 @ Mike Killewald
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#include "rgb_matrix_user.h"
19#include "keymap_user.h"
20
21keypos_t led_index_key_position[DRIVER_LED_TOTAL];
22
23void rgb_matrix_init_user(void) {
24 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
25 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
26 uint8_t led_index = g_led_config.matrix_co[row][col];
27 if (led_index != NO_LED) {
28 led_index_key_position[led_index] = (keypos_t){.row = row, .col = col};
29 }
30 }
31 }
32}
33
34void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
35 uint8_t current_layer = get_highest_layer(layer_state);
36 switch (current_layer) {
37 case MAC_BASE:
38 case WIN_BASE:
39#ifdef CAPS_LOCK_INDICATOR_COLOR
40 if (host_keyboard_led_state().caps_lock) {
41 rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_caps_lock_indicator, CAPS_LOCK_INDICATOR_COLOR);
42 }
43#endif
44 break;
45 case MAC_FN:
46 case WIN_FN:
47#ifdef FN_LAYER_COLOR
48 if (get_fn_layer_color_enable()) {
49 rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_not_transparent, FN_LAYER_COLOR);
50 }
51#endif
52 if (get_fn_layer_transparent_keys_off()) {
53 rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_transparent, RGB_OFF);
54 }
55 break;
56 }
57}
58
59void rgb_matrix_set_color_by_keycode(uint8_t led_min, uint8_t led_max, uint8_t layer, bool (*is_keycode)(uint16_t), uint8_t red, uint8_t green, uint8_t blue) {
60 for (uint8_t i = led_min; i < led_max; i++) {
61 uint16_t keycode = keymap_key_to_keycode(layer, led_index_key_position[i]);
62 if ((*is_keycode)(keycode)) {
63 rgb_matrix_set_color(i, red, green, blue);
64 }
65 }
66}
67
68bool is_caps_lock_indicator(uint16_t keycode) {
69 bool indicator = keycode == KC_CAPS;
70
71 if (get_caps_lock_light_tab()) {
72 indicator = keycode == KC_TAB || keycode == KC_CAPS;
73 }
74
75 if (get_caps_lock_light_alphas()) {
76 return (KC_A <= keycode && keycode <= KC_Z) || indicator;
77 } else {
78 return indicator;
79 }
80}
81
82bool is_transparent(uint16_t keycode) { return keycode == KC_TRNS; }
83bool is_not_transparent(uint16_t keycode) { return keycode != KC_TRNS; } \ No newline at end of file
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.h b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.h
new file mode 100644
index 000000000..1fb79c0b2
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.h
@@ -0,0 +1,26 @@
1/* Copyright 2021 @ Mike Killewald
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
19void rgb_matrix_init_user(void);
20
21void rgb_matrix_set_color_by_keycode(uint8_t led_min, uint8_t led_max, uint8_t layer, bool (*is_keycode)(uint16_t), uint8_t red, uint8_t green, uint8_t blue);
22
23bool is_caps_lock_indicator(uint16_t keycode);
24bool is_transparent(uint16_t keycode);
25bool is_not_transparent(uint16_t keycode);
26
diff --git a/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rules.mk b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rules.mk
new file mode 100644
index 000000000..af720e37e
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rules.mk
@@ -0,0 +1,6 @@
1VIA_ENABLE = yes
2MOUSEKEY_ENABLE = no
3
4ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
5 SRC += rgb_matrix_user.c
6endif \ No newline at end of file
diff --git a/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/config.h b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/config.h
new file mode 100644
index 000000000..bc9fe405c
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/config.h
@@ -0,0 +1,23 @@
1/* Copyright 2021 @ Mike Killewald
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#ifdef RGB_MATRIX_ENABLE
20# define RGB_DISABLE_WHEN_USB_SUSPENDED
21# define CAPS_LOCK_INDICATOR_COLOR RGB_RED
22# define FN_LAYER_COLOR RGB_ORANGE
23#endif \ No newline at end of file
diff --git a/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap.c b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap.c
new file mode 100644
index 000000000..c62d065ef
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap.c
@@ -0,0 +1,175 @@
1/* Copyright 2021 @ Mike Killewald
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#include "keymap_user.h"
19#ifdef RGB_MATRIX_ENABLE
20# include "rgb_matrix_user.h"
21#endif
22
23// clang-format off
24
25typedef union {
26 uint32_t raw;
27 struct {
28 bool caps_lock_light_tab :1;
29 bool caps_lock_light_alphas :1;
30 bool fn_layer_transparent_keys_off :1;
31 bool fn_layer_color_enable :1;
32 };
33} user_config_t;
34
35user_config_t user_config;
36
37enum custom_keycodes {
38#ifdef VIA_ENABLE
39 KC_MISSION_CONTROL = USER00,
40#else
41 KC_MISSION_CONTROL = SAFE_RANGE,
42#endif
43 KC_LAUNCHPAD,
44 KC_LIGHT_TAB_TOGGLE,
45 KC_LIGHT_ALPHAS_TOGGLE,
46 KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE,
47 KC_FN_LAYER_COLOR_TOGGLE
48};
49
50#define KC_MCTL KC_MISSION_CONTROL
51#define KC_LPAD KC_LAUNCHPAD
52#define KC_LTTOG KC_LIGHT_TAB_TOGGLE
53#define KC_LATOG KC_LIGHT_ALPHAS_TOGGLE
54#define KC_TKTOG KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE
55#define KC_FCTOG KC_FN_LAYER_COLOR_TOGGLE
56#define KC_TASK LGUI(KC_TAB)
57#define KC_FLXP LGUI(KC_E)
58
59const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
60
61[MAC_BASE] = LAYOUT_iso_83(
62 KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS,
63 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,
64 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,
65 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_HOME,
66 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,
67 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
68
69[MAC_FN] = LAYOUT_iso_83(
70 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,
71 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
72 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,
73 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, KC_TRNS,
74 KC_TRNS, KC_TRNS, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
75 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
76
77[WIN_BASE] = LAYOUT_iso_83(
78 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,
79 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,
80 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,
81 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_HOME,
82 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,
83 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
84
85[WIN_FN] = LAYOUT_iso_83(
86 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,
87 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
88 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,
89 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, KC_TRNS,
90 KC_TRNS, KC_TRNS, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
91 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
92
93};
94
95// clang-format on
96
97void matrix_init_user(void) {
98#ifdef RGB_MATRIX_ENABLE
99 rgb_matrix_init_user();
100#endif
101}
102
103void keyboard_post_init_user(void) {
104 user_config.raw = eeconfig_read_user();
105}
106
107void eeconfig_init_user(void) {
108 user_config.raw = 0;
109 user_config.caps_lock_light_tab = false;
110 user_config.caps_lock_light_alphas = false;
111 user_config.fn_layer_transparent_keys_off = true;
112 user_config.fn_layer_color_enable = false;
113 eeconfig_update_user(user_config.raw);
114}
115
116bool process_record_user(uint16_t keycode, keyrecord_t *record) {
117 switch (keycode) {
118 case KC_MISSION_CONTROL:
119 if (record->event.pressed) {
120 host_consumer_send(0x29F);
121 } else {
122 host_consumer_send(0);
123 }
124 return false; // Skip all further processing of this key
125 case KC_LAUNCHPAD:
126 if (record->event.pressed) {
127 host_consumer_send(0x2A0);
128 } else {
129 host_consumer_send(0);
130 }
131 return false; // Skip all further processing of this key
132 case KC_LIGHT_TAB_TOGGLE:
133 if (record->event.pressed) {
134 user_config.caps_lock_light_tab ^= 1; // bitwise xor to toggle status bit
135 eeconfig_update_user(user_config.raw);
136 }
137 return false; // Skip all further processing of this key
138 case KC_LIGHT_ALPHAS_TOGGLE:
139 if (record->event.pressed) {
140 user_config.caps_lock_light_alphas ^= 1;
141 eeconfig_update_user(user_config.raw);
142 }
143 return false; // Skip all further processing of this key
144 case KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE:
145 if (record->event.pressed) {
146 user_config.fn_layer_transparent_keys_off ^= 1;
147 eeconfig_update_user(user_config.raw);
148 }
149 return false; // Skip all further processing of this key
150 case KC_FN_LAYER_COLOR_TOGGLE:
151 if (record->event.pressed) {
152 user_config.fn_layer_color_enable ^= 1;
153 eeconfig_update_user(user_config.raw);
154 }
155 return false; // Skip all further processing of this key
156 default:
157 return true; // Process all other keycodes normally
158 }
159}
160
161bool get_caps_lock_light_tab(void) {
162 return user_config.caps_lock_light_tab;
163}
164
165bool get_caps_lock_light_alphas(void) {
166 return user_config.caps_lock_light_alphas;
167}
168
169bool get_fn_layer_transparent_keys_off(void) {
170 return user_config.fn_layer_transparent_keys_off;
171}
172
173bool get_fn_layer_color_enable(void) {
174 return user_config.fn_layer_color_enable;
175} \ No newline at end of file
diff --git a/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap_user.h b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap_user.h
new file mode 100644
index 000000000..87b1baf47
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap_user.h
@@ -0,0 +1,33 @@
1/* Copyright 2021 @ Mike Killewald
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// clang-format off
20
21enum layers {
22 MAC_BASE,
23 MAC_FN,
24 WIN_BASE,
25 WIN_FN
26};
27
28// clang-format on
29
30bool get_caps_lock_light_tab(void);
31bool get_caps_lock_light_alphas(void);
32bool get_fn_layer_transparent_keys_off(void);
33bool get_fn_layer_color_enable(void); \ No newline at end of file
diff --git a/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/readme.md b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/readme.md
new file mode 100644
index 000000000..a6da9b346
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/readme.md
@@ -0,0 +1,54 @@
1## mkillewald's Keychron Q1 keymap (ISO rev_0102) v1.0.4
2
3This keymap builds on the keymap by Grayson Carr (gtg465x) but adds a couple options.
4
5## Features:
6- On macOS, F3 opens Mission Control and F4 opens Launchpad without needing to configure shortcuts in System Preferences
7- RGB lighting turns off when the computer sleeps
8- Caps Lock RGB indicator
9 - the Caps Lock key will light when Caps Lock is enabled with the following options:
10 - #define CAPS_LOCK_INDICATOR_COLOR [color] in config.h to set the backlight color used for the indicator when Caps Lock is enabled (default: red)
11 - Fn+Z will toggle lighting the TAB key when Caps Lock is enabled. This is useful with non backlit keycaps/legends. (default: off)
12 - Fn+X will toggle lighting all the alpha keys when Caps Lock is enabled. (default: off)
13
14- Dynamic Fn layer RGB indicator
15 - When the Fn key is held down, any keys defined on the Fn layer in this firmware or in VIA will be highlighted with the following options:
16 - #define FN_LAYER_COLOR [color] in config.h to set a static color for defined keys (default: orange)
17 - Fn+C will toggle turning off RGB for keys with no definition (default: RGB off)
18 - Fn+V will toggle lighting the defined Fn layer keys with the static color set with FN_LAYER_COLOR (default: static color off)
19
20- All custom keycodes can be moved to different keys in VIA by using the ANY key with the following keycodes:
21 - USER00 (default: F3) macOS Mission Control
22 - USER01 (default: F4) macOS Launchpad
23 - USER02 (default: Fn+Z) Caps Lock light Tab toggle
24 - USER03 (default: Fn+X) Caps Lock light alphas toggle
25 - USER04 (default: Fn+C) Fn layer non-defined keys RGB toggle
26 - USER05 (default: Fn+V) Fn layer defined keys static color toggle
27
28RGB must be toggled on for all indicators to function. If you do not want an RGB mode active but still want the indicators, toggle RGB on and turn the brightness all the way off. The indicators will remain at full brightness.
29
30Please make sure to save any customizations you have made in VIA to a .json file before flashing the firmware. Sometimes it has been necessary to re-apply those changes in VIA after flashing the firmware. If that is the case, you will most likely need to manually add the USER00 through USER05 custom keycodes after loading your customizations from the saved .json file. Then re-save a new .json file which will have your previous customizations and the custom keycodes for future use as needed.
31
32#### USE AT YOUR OWN RISK
33
34## Changelog:
35
36v1.0.4 October 9, 2021
37- Caps Lock and Fn layer toggles are now stored in eeprom so settings will remain when Q1 is unplugged
38
39v1.0.3 October 8, 2021
40- now using keycode toggles instead of preprocessor directives to set the various Caps Lock and Fn Layer RGB lighting options. This allows for setting the options from user space without having to recompile.
41
42v1.0.2 October 7, 2021
43- adapted Grayson Carr's (gtg465x) Caps Lock alphas and dynamic Fn layer RGB routines
44- added CAPS_LOCK_INDICATOR_LIGHT_TAB config option to enable/disable lighting Tab with Caps Lock indicator
45- added FN_LAYER_COLOR config option to set FN layer static color
46
47v1.0.1 October 7, 2021
48- Mission Control and Launchpad custom keycodes are now defined using the VIA user keycodes range so thay can be labeled properly in VIA (adopted change from gtg465x)
49
50v1.0.0 September 30, 2021
51- Initial release built upon keymap by Grayson Carr (gtg465x)
52- defined Mission Control (F3) and Launchpad (F4) keycodes for macOs
53- RGB backlight turns off when computer sleeps
54- added Caps Lock indicator lighting both the Caps Lock and Tab LEDs for better effect on non-backlit keycaps
diff --git a/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.c b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.c
new file mode 100644
index 000000000..f06039af0
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.c
@@ -0,0 +1,83 @@
1/* Copyright 2021 @ Mike Killewald
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#include "rgb_matrix_user.h"
19#include "keymap_user.h"
20
21keypos_t led_index_key_position[DRIVER_LED_TOTAL];
22
23void rgb_matrix_init_user(void) {
24 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
25 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
26 uint8_t led_index = g_led_config.matrix_co[row][col];
27 if (led_index != NO_LED) {
28 led_index_key_position[led_index] = (keypos_t){.row = row, .col = col};
29 }
30 }
31 }
32}
33
34void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
35 uint8_t current_layer = get_highest_layer(layer_state);
36 switch (current_layer) {
37 case MAC_BASE:
38 case WIN_BASE:
39#ifdef CAPS_LOCK_INDICATOR_COLOR
40 if (host_keyboard_led_state().caps_lock) {
41 rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_caps_lock_indicator, CAPS_LOCK_INDICATOR_COLOR);
42 }
43#endif
44 break;
45 case MAC_FN:
46 case WIN_FN:
47#ifdef FN_LAYER_COLOR
48 if (get_fn_layer_color_enable()) {
49 rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_not_transparent, FN_LAYER_COLOR);
50 }
51#endif
52 if (get_fn_layer_transparent_keys_off()) {
53 rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_transparent, RGB_OFF);
54 }
55 break;
56 }
57}
58
59void rgb_matrix_set_color_by_keycode(uint8_t led_min, uint8_t led_max, uint8_t layer, bool (*is_keycode)(uint16_t), uint8_t red, uint8_t green, uint8_t blue) {
60 for (uint8_t i = led_min; i < led_max; i++) {
61 uint16_t keycode = keymap_key_to_keycode(layer, led_index_key_position[i]);
62 if ((*is_keycode)(keycode)) {
63 rgb_matrix_set_color(i, red, green, blue);
64 }
65 }
66}
67
68bool is_caps_lock_indicator(uint16_t keycode) {
69 bool indicator = keycode == KC_CAPS;
70
71 if (get_caps_lock_light_tab()) {
72 indicator = keycode == KC_TAB || keycode == KC_CAPS;
73 }
74
75 if (get_caps_lock_light_alphas()) {
76 return (KC_A <= keycode && keycode <= KC_Z) || indicator;
77 } else {
78 return indicator;
79 }
80}
81
82bool is_transparent(uint16_t keycode) { return keycode == KC_TRNS; }
83bool is_not_transparent(uint16_t keycode) { return keycode != KC_TRNS; } \ No newline at end of file
diff --git a/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.h b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.h
new file mode 100644
index 000000000..1fb79c0b2
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.h
@@ -0,0 +1,26 @@
1/* Copyright 2021 @ Mike Killewald
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
19void rgb_matrix_init_user(void);
20
21void rgb_matrix_set_color_by_keycode(uint8_t led_min, uint8_t led_max, uint8_t layer, bool (*is_keycode)(uint16_t), uint8_t red, uint8_t green, uint8_t blue);
22
23bool is_caps_lock_indicator(uint16_t keycode);
24bool is_transparent(uint16_t keycode);
25bool is_not_transparent(uint16_t keycode);
26
diff --git a/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rules.mk b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rules.mk
new file mode 100644
index 000000000..af720e37e
--- /dev/null
+++ b/keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rules.mk
@@ -0,0 +1,6 @@
1VIA_ENABLE = yes
2MOUSEKEY_ENABLE = no
3
4ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
5 SRC += rgb_matrix_user.c
6endif \ No newline at end of file