auto-update-daily-20260202
1/* Copyright 2020 ZSA Technology Labs, Inc <@zsa>
2 * Copyright 2020 Jack Humbert <jack.humb@gmail.com>
3 * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19
20
21#include QMK_KEYBOARD_H
22#include "version.h"
23#include "keymap_us.h"
24#include "keymap_us_international_linux.h"
25#include "layermodes.h"
26
27enum layers {
28 BEPO,
29 ERGL,
30 QWER,
31 SYMB,
32 NUMB,
33 NAVI,
34 MOUS,
35 MODS,
36};
37
38enum custom_keycodes {
39 VRSN = SAFE_RANGE,
40 FR_DQUO,
41 FR_QUOT,
42 FR_GRAVE,
43 FR_CIRC,
44 FR_E_AIGU,
45 FR_E_AIGU_CAPS,
46 FR_E_GRAVE,
47 FR_E_GRAVE_CAPS,
48 FR_A_GRAVE,
49 FR_A_GRAVE_CAPS,
50 NUMWORD, // Numword layer activation
51};
52
53const key_override_t circ_exclamation_override = ko_make_with_layers(MOD_MASK_SHIFT, KC_CIRC, KC_EXLM, 1 << BEPO);
54const key_override_t dot_colon_override = ko_make_with_layers(MOD_MASK_SHIFT, KC_DOT, KC_COLN, 1 << BEPO);
55const key_override_t comma_semicolon_override = ko_make_with_layers(MOD_MASK_SHIFT, HM_HYP_COMM, KC_SCLN, 1 << BEPO);
56
57// row 1
58const key_override_t b_pipe_override = ko_make_with_layers_and_negmods(MOD_BIT_RALT, KC_B, KC_PIPE, 1 << BEPO, MOD_MASK_SHIFT);
59const key_override_t b_brkp_override = ko_make_with_layers(MOD_BIT_LSHIFT | MOD_BIT_RALT, KC_B, US_BRKP, 1 << BEPO);
60
61const key_override_t space_underscore_override = ko_make_with_layers_and_negmods(MOD_BIT_RALT, LT(NUMB, KC_SPC), KC_UNDS, 1 << BEPO, MOD_MASK_SHIFT);
62
63const key_override_t *key_overrides[] = {
64 &circ_exclamation_override,
65 &dot_colon_override,
66 &comma_semicolon_override,
67
68 &b_pipe_override,
69 &b_brkp_override,
70 &space_underscore_override,
71};
72
73void leader_start_user(void) {
74 // Visual feedback when leader mode activates (optional)
75}
76
77void leader_end_user(void) {
78 // ====== LAYOUT SWITCHING ======
79 // Leader + l + <key> for layout changes
80 if (leader_sequence_two_keys(KC_L, KC_B)) {
81 layer_move(BEPO);
82 } else if (leader_sequence_two_keys(KC_L, KC_E)) {
83 layer_move(ERGL);
84 } else if (leader_sequence_two_keys(KC_L, KC_Q)) {
85 layer_move(QWER);
86 }
87
88 // ====== DEVELOPMENT PATTERNS ======
89 // Leader + c + <key> for code snippets
90 else if (leader_sequence_two_keys(KC_C, KC_N)) {
91 SEND_STRING("nil");
92 } else if (leader_sequence_two_keys(KC_C, KC_E)) {
93 SEND_STRING("if err != nil {" SS_TAP(X_ENT) SS_TAP(X_TAB));
94 } else if (leader_sequence_two_keys(KC_C, KC_L)) {
95 SEND_STRING("console.log()");
96 SEND_STRING(SS_TAP(X_LEFT));
97 } else if (leader_sequence_two_keys(KC_C, KC_P)) {
98 SEND_STRING("fmt.Println()");
99 SEND_STRING(SS_TAP(X_LEFT));
100 } else if (leader_sequence_two_keys(KC_C, KC_F)) {
101 SEND_STRING("function() {}");
102 SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT));
103 } else if (leader_sequence_two_keys(KC_C, KC_A)) {
104 SEND_STRING("() => {}");
105 SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT));
106 }
107
108 // ====== PERSONAL MACROS ======
109 // Leader + m + <key> for personal macros
110 else if (leader_sequence_two_keys(KC_M, KC_E)) {
111 SEND_STRING("vincent@sbr.pm"); // TODO: Update with your email
112 } else if (leader_sequence_two_keys(KC_M, KC_G)) {
113 SEND_STRING("Vincent Demeester <vincent@sbr.pm>"); // Git signature
114 } else if (leader_sequence_two_keys(KC_M, KC_S)) {
115 SEND_STRING("--" SS_TAP(X_ENT) "Vincent Demeester" SS_TAP(X_ENT) "vincent@sbr.pm");
116 } else if (leader_sequence_two_keys(KC_M, KC_T)) {
117 // ISO 8601 timestamp - you might want to use a more dynamic approach
118 SEND_STRING(SS_LCTL("u")); // This is a placeholder - QMK can't generate current date
119 }
120
121 // ====== PYTHON PATTERNS ======
122 // Leader + p + <key> for Python code snippets
123 else if (leader_sequence_two_keys(KC_P, KC_I)) {
124 SEND_STRING("if __name__ == \"__main__\":" SS_TAP(X_ENT) SS_TAP(X_TAB));
125 } else if (leader_sequence_two_keys(KC_P, KC_D)) {
126 SEND_STRING("def ():" SS_TAP(X_ENT) SS_TAP(X_TAB));
127 SEND_STRING(SS_TAP(X_UP) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT));
128 } else if (leader_sequence_two_keys(KC_P, KC_C)) {
129 SEND_STRING("class :" SS_TAP(X_ENT) SS_TAP(X_TAB));
130 SEND_STRING(SS_TAP(X_UP) SS_TAP(X_LEFT) SS_TAP(X_LEFT));
131 } else if (leader_sequence_two_keys(KC_P, KC_P)) {
132 SEND_STRING("print(f\"\")");
133 SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT));
134 } else if (leader_sequence_two_keys(KC_P, KC_T)) {
135 SEND_STRING("try:" SS_TAP(X_ENT) SS_TAP(X_TAB));
136 SEND_STRING(SS_TAP(X_ENT) SS_LSFT(SS_TAP(X_TAB)) "except Exception as e:" SS_TAP(X_ENT) SS_TAP(X_TAB));
137 } else if (leader_sequence_two_keys(KC_P, KC_W)) {
138 SEND_STRING("with open(\"\", \"r\") as f:" SS_TAP(X_ENT) SS_TAP(X_TAB));
139 SEND_STRING(SS_TAP(X_UP) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT));
140 }
141
142 // ====== EMACS LISP PATTERNS ======
143 // Leader + e + <key> for Emacs Lisp snippets
144 else if (leader_sequence_two_keys(KC_E, KC_D)) {
145 SEND_STRING("(defun ()" SS_TAP(X_ENT));
146 SEND_STRING(SS_TAP(X_UP) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT));
147 } else if (leader_sequence_two_keys(KC_E, KC_I)) {
148 SEND_STRING("(interactive)");
149 } else if (leader_sequence_two_keys(KC_E, KC_L)) {
150 SEND_STRING("(let ((");
151 } else if (leader_sequence_two_keys(KC_E, KC_S)) {
152 SEND_STRING("(setq )");
153 SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT));
154 } else if (leader_sequence_two_keys(KC_E, KC_M)) {
155 SEND_STRING("(message \"\")");
156 SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT));
157 } else if (leader_sequence_two_keys(KC_E, KC_R)) {
158 SEND_STRING("(require ')");
159 SEND_STRING(SS_TAP(X_LEFT));
160 }
161
162 // ====== NIX PATTERNS ======
163 // Leader + n + <key> for Nix snippets
164 else if (leader_sequence_two_keys(KC_N, KC_F)) {
165 SEND_STRING("{ pkgs, ... }:");
166 } else if (leader_sequence_two_keys(KC_N, KC_L)) {
167 SEND_STRING("let" SS_TAP(X_ENT) SS_TAP(X_TAB) SS_TAP(X_ENT) "in" SS_TAP(X_ENT));
168 SEND_STRING(SS_TAP(X_UP) SS_TAP(X_UP));
169 } else if (leader_sequence_two_keys(KC_N, KC_W)) {
170 SEND_STRING("with pkgs; [" SS_TAP(X_ENT) SS_TAP(X_TAB) SS_TAP(X_ENT) "]");
171 SEND_STRING(SS_TAP(X_UP));
172 } else if (leader_sequence_two_keys(KC_N, KC_I)) {
173 SEND_STRING("inherit ;");
174 SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT));
175 } else if (leader_sequence_two_keys(KC_N, KC_B)) {
176 SEND_STRING("buildInputs = [ ];");
177 SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT));
178 } else if (leader_sequence_two_keys(KC_N, KC_P)) {
179 SEND_STRING("pkgs.writeShellScriptBin \"\" ''");
180 SEND_STRING(SS_TAP(X_ENT) SS_TAP(X_TAB) SS_TAP(X_ENT) "''");
181 SEND_STRING(SS_TAP(X_UP) SS_TAP(X_UP) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT));
182 }
183
184 // ====== IMPORT PATTERNS ======
185 // Leader + i + <key> for common imports
186 else if (leader_sequence_two_keys(KC_I, KC_P)) {
187 SEND_STRING("import ");
188 } else if (leader_sequence_two_keys(KC_I, KC_F)) {
189 SEND_STRING("from import ");
190 SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT));
191 } else if (leader_sequence_two_keys(KC_I, KC_N)) {
192 SEND_STRING("{ pkgs }: {" SS_TAP(X_ENT) SS_TAP(X_TAB) SS_TAP(X_ENT) "}");
193 SEND_STRING(SS_TAP(X_UP));
194 } else if (leader_sequence_two_keys(KC_I, KC_E)) {
195 SEND_STRING("(use-package " SS_TAP(X_ENT) SS_TAP(X_TAB));
196 SEND_STRING(SS_TAP(X_UP) SS_TAP(X_END));
197 }
198
199 // ====== APPLICATION SHORTCUTS ======
200 // Leader + a + <key> for application launches
201 // These use the configured niri keybindings
202 else if (leader_sequence_two_keys(KC_A, KC_D)) {
203 SEND_STRING(SS_LGUI("d")); // Mod+D for fuzzel (app launcher)
204 } else if (leader_sequence_two_keys(KC_A, KC_E)) {
205 SEND_STRING(SS_LGUI(SS_LSFT(SS_TAP(X_ENT)))); // Mod+Shift+Enter for Emacs client
206 } else if (leader_sequence_two_keys(KC_A, KC_T)) {
207 SEND_STRING(SS_LGUI(SS_TAP(X_ENT))); // Mod+Enter for Terminal (kitty)
208 } else if (leader_sequence_two_keys(KC_A, KC_J)) {
209 SEND_STRING(SS_LGUI(SS_LCTL("d"))); // Mod+Control+D for emoji picker (rofimoji)
210 } else if (leader_sequence_two_keys(KC_A, KC_V)) {
211 SEND_STRING(SS_LGUI(SS_LCTL("v"))); // Mod+Control+V for clipboard history (cliphist)
212 } else if (leader_sequence_two_keys(KC_A, KC_R)) {
213 SEND_STRING(SS_LGUI(SS_LSFT("d"))); // Mod+Shift+D for raffi launcher
214 }
215}
216
217#define COMBO_REF_DEFAULT QWER
218
219uint8_t combo_ref_from_layer(uint8_t layer){
220 switch (get_highest_layer(layer_state)){
221 case BEPO: return QWER;
222 default: return QWER;
223 }
224 return layer; // important if default is not in case.
225}
226
227enum combos {
228 TO_BEPO, TO_ERGOL, TO_QWERTY,
229 TOGGLE_MOUSE,
230 BEPO_ESC, QWERTY_ESC,
231 // Experiments
232 PIPE, AROBASE, HASH, DOLLAR, SLASH, BSLASH, AMPR, MINUS, UNDERSCORE, EQUAL,
233 LEADER,
234 LPRN, RPRN, LCBR, RCBR, LBRC, RBRC, LABK, RABK,
235};
236
237const uint16_t PROGMEM combo_to_bepo[] = {LT(NAVI,KC_BSPC), OS_LSFT, COMBO_END};
238const uint16_t PROGMEM combo_to_ergol[] = {KC_Q, KC_P, COMBO_END}; // Q+P opposite corners
239const uint16_t PROGMEM combo_to_qwerty[] = {LT(NUMB,KC_SPC), LT(SYMB, KC_ENT), COMBO_END}; // Numb+Symb
240const uint16_t PROGMEM combo_toggle_mouse[] = {KC_Q, KC_R, COMBO_END};
241
242const uint16_t PROGMEM combo_bepo_escape[] = {HM_ALT_R, HM_GUI_N, COMBO_END};
243const uint16_t PROGMEM combo_qwe_escape[] = {HM_ALT_L, HM_GUI_SCLN, COMBO_END};
244
245const uint16_t PROGMEM combo_qwe_pipe[] = {KC_Q, KC_W, COMBO_END}; // |
246const uint16_t PROGMEM combo_qwe_arobase[] = {KC_W, KC_E, COMBO_END}; // @
247const uint16_t PROGMEM combo_qwe_hash[] = {KC_E, KC_R, COMBO_END}; // #
248const uint16_t PROGMEM combo_qwe_ampr[] = {KC_R, KC_T, COMBO_END}; // &
249const uint16_t PROGMEM combo_qwe_dollar[] = {KC_R, HM_CTL_F, COMBO_END}; // $
250const uint16_t PROGMEM combo_qwe_slash[] = {KC_E, HM_SFT_D, COMBO_END}; // /
251const uint16_t PROGMEM combo_qwe_bslash[] = {HM_SFT_D, KC_C, COMBO_END}; // antislash
252const uint16_t PROGMEM combo_qwe_minus[] = {KC_W, HM_ALT_S, COMBO_END}; // -
253const uint16_t PROGMEM combo_qwe_unds[] = {HM_CTL_F, KC_V, COMBO_END}; // _
254const uint16_t PROGMEM combo_qwe_equal[] = {HM_ALT_S, KC_X, COMBO_END}; // =
255
256const uint16_t PROGMEM combo_qwe_leader[] = {KC_DEL, KC_RALT, COMBO_END}; // Del+RAlt - right side thumb cluster, very deliberate
257
258const uint16_t PROGMEM combo_qwe_lprn[] = {KC_I, HM_SFT_K, COMBO_END}; // (
259const uint16_t PROGMEM combo_qwe_rprn[] = {HM_SFT_K, KC_COMM, COMBO_END}; // )
260const uint16_t PROGMEM combo_qwe_lcbr[] = {KC_U, HM_CTL_J, COMBO_END}; // {
261const uint16_t PROGMEM combo_qwe_rcbr[] = {HM_CTL_J, KC_M, COMBO_END}; // }
262const uint16_t PROGMEM combo_qwe_lbrc[] = {KC_O, HM_ALT_L, COMBO_END}; // [
263const uint16_t PROGMEM combo_qwe_rbrc[] = {HM_ALT_L, KC_DOT, COMBO_END}; // ]
264const uint16_t PROGMEM combo_qwe_labk[] = {KC_U, KC_I, COMBO_END}; // <
265const uint16_t PROGMEM combo_qwe_rabk[] = {KC_I, KC_O, COMBO_END}; // >
266
267combo_t key_combos[] = {
268 // Layers
269 [TO_BEPO] = COMBO(combo_to_bepo, TO(BEPO)),
270 [TO_ERGOL] = COMBO(combo_to_ergol, TO(ERGL)),
271 [TO_QWERTY] = COMBO(combo_to_qwerty, TO(QWER)),
272 [TOGGLE_MOUSE] = COMBO(combo_toggle_mouse, TG(MOUS)),
273 // Others
274 [QWERTY_ESC] = COMBO(combo_qwe_escape, KC_ESC),
275 [BEPO_ESC] = COMBO(combo_bepo_escape, KC_ESC),
276 // Experiments
277 [PIPE] = COMBO(combo_qwe_pipe, KC_PIPE),
278 [AROBASE] = COMBO(combo_qwe_arobase, KC_AT),
279 [HASH] = COMBO(combo_qwe_hash, KC_HASH),
280 [DOLLAR] = COMBO(combo_qwe_dollar, KC_DLR),
281 [SLASH] = COMBO(combo_qwe_slash, KC_SLSH),
282 [BSLASH] = COMBO(combo_qwe_bslash, KC_BSLS),
283 [AMPR] = COMBO(combo_qwe_ampr, KC_AMPR),
284 [MINUS] = COMBO(combo_qwe_minus, KC_PMNS),
285 [UNDERSCORE] = COMBO(combo_qwe_unds, KC_UNDS),
286 [EQUAL] = COMBO(combo_qwe_equal, KC_EQL),
287
288 [LEADER] = COMBO(combo_qwe_leader, QK_LEAD),
289
290 [LPRN] = COMBO(combo_qwe_lprn, KC_LPRN),
291 [RPRN] = COMBO(combo_qwe_rprn, KC_RPRN),
292 [LCBR] = COMBO(combo_qwe_lcbr, KC_LCBR),
293 [RCBR] = COMBO(combo_qwe_rcbr, KC_RCBR),
294 [LBRC] = COMBO(combo_qwe_lbrc, KC_LBRC),
295 [RBRC] = COMBO(combo_qwe_rbrc, KC_RBRC),
296 [LABK] = COMBO(combo_qwe_labk, KC_LABK),
297 [RABK] = COMBO(combo_qwe_rabk, KC_RABK),
298};
299
300bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
301 switch (combo_index) {
302 case BEPO_ESC:
303 if (layer_state_is(BEPO)) {
304 return true;
305 }
306 return false;
307 case QWERTY_ESC:
308 if (layer_state_is(QWER)) {
309 return true;
310 }
311 return false;
312 }
313 return true;
314}
315
316tap_dance_action_t tap_dance_actions[] = {
317};
318
319const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM = LAYOUT(
320 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
321 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
322 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
323 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R',
324 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R',
325 'L', 'L', 'L', 'R', 'R', 'R'
326);
327
328// clang-format off
329const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
330 // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
331 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
332 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
333 // │ TAB │ B │ É │ P │ O │ È │ XXXXXXX │ │ XXXXXXX │ ^ │ V │ D │ L │ J │ Z │
334 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
335 // │ NUMWORD │ GUI/A │ ALT/U │ SFT/I │ CTL/E │ HYP/, │ XXXXXXX │ │ XXXXXXX │ HYP/C │ CTL/T │ SFT/S │ ALT/R │ GUI/N │ SYMB/M │
336 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘ └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
337 // │ GRV │ À │ Y │ X │ . │ K │ │ ' │ Q │ G │ H │ F │ W │
338 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐ ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
339 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ MODS/DEL│ │ REPEAT │ │ ALT-REP │ │ RALT │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
340 // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤ ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
341 // │ NUMB/SPC│ NAVI/BSP│ XXX │ │ XXX │SHIFT│ SYMB/ENT│
342 // └─────────┴─────────┴─────┘ └─────┴─────┴─────────┘
343 [BEPO] = LAYOUT(
344 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
345 KC_TAB, KC_B, FR_E_AIGU, KC_P, KC_O, FR_E_GRAVE, XXXXXXX, XXXXXXX, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z,
346 NUMWORD, HM_GUI_A, HM_ALT_U, HM_SFT_I, HM_CTL_E, HM_HYP_COMM, XXXXXXX, XXXXXXX, HM_HYP_C, HM_CTL_T, HM_SFT_S, HM_ALT_R, HM_GUI_N, LT(SYMB,KC_M),
347 KC_GRV, FR_A_GRAVE, KC_Y, KC_X, KC_DOT, KC_K, FR_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_W,
348 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LT(MODS,KC_DEL), QK_REP, QK_AREP, KC_RALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
349 LT(NUMB,KC_SPC), LT(NAVI,KC_BSPC), XXXXXXX, XXXXXXX, OS_LSFT, LT(SYMB,KC_ENT)
350 ),
351
352 // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
353 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
354 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
355 // │ TAB │ Q │ W │ E │ R │ T │ XXXXXXX │ │ XXXXXXX │ Y │ U │ I │ O │ P │ [ │
356 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
357 // │ NUMWORD │ GUI/A │ ALT/S │ SFT/D │ CTL/F │ HYP/G │ XXXXXXX │ │ XXXXXXX │ HYP/H │ CTL/J │ SFT/K │ ALT/L │ GUI/; │ " │
358 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘ └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
359 // │ GRV │ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │ ] │
360 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐ ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
361 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ DEL │ │ REPEAT │ │ ALT-REP │ │ RALT │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
362 // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤ ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
363 // │ NUMB/SPC│ NAVI/BSP│ XXX │ │ XXX │SHIFT│ SYMB/ENT│
364 // └─────────┴─────────┴─────┘ └─────┴─────┴─────────┘
365 [ERGL] = LAYOUT(
366 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
367 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
368 NUMWORD, HM_GUI_A, HM_ALT_S, HM_SFT_D, HM_CTL_F, HM_HYP_G, XXXXXXX, XXXXXXX, HM_HYP_H, HM_CTL_J, HM_SFT_K, HM_ALT_L, HM_GUI_SCLN, KC_QUOT,
369 KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RBRC,
370 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, QK_REP, QK_AREP, KC_RALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
371 LT(NUMB,KC_SPC), LT(NAVI,KC_BSPC), XXXXXXX, XXXXXXX, OS_LSFT, LT(SYMB,KC_ENT)
372 ),
373
374 // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
375 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
376 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
377 // │ TAB │ Q │ W │ E │ R │ T │ XXXXXXX │ │ XXXXXXX │ Y │ U │ I │ O │ P │ [ │
378 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
379 // │ NUMWORD │ GUI/A │ ALT/S │ SFT/D │ CTL/F │ HYP/G │ XXXXXXX │ │ XXXXXXX │ HYP/H │ CTL/J │ SFT/K │ ALT/L │ GUI/; │ " │
380 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘ └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
381 // │ GRV │ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │ ] │
382 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐ ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
383 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ DEL │ │ REPEAT │ │ ALT-REP │ │ RALT │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
384 // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤ ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
385 // │ NUMB/SPC│ NAVI/BSP│ XXX │ │ XXX │SHIFT│ SYMB/ENT│
386 // └─────────┴─────────┴─────┘ └─────┴─────┴─────────┘
387 [QWER] = LAYOUT(
388 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
389 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
390 NUMWORD, HM_GUI_A, HM_ALT_S, HM_SFT_D, HM_CTL_F, HM_HYP_G, XXXXXXX, XXXXXXX, HM_HYP_H, HM_CTL_J, HM_SFT_K, HM_ALT_L, HM_GUI_SCLN, KC_QUOT,
391 KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RBRC,
392 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, QK_REP, QK_AREP, KC_RALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
393 LT(NUMB,KC_SPC), LT(NAVI,KC_BSPC), XXXXXXX, XXXXXXX, OS_LSFT, LT(SYMB,KC_ENT)
394 ),
395
396 // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
397 // │ VRSN │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
398 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
399 // │ \ │ ` │ < │ > │ - │ | │ XXXXXXX │ │ XXXXXXX │ ^ │ { │ } │ $ │ ^ │ XXXXXXX │
400 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
401 // │ XXXXXXX │ ! │ * │ / │ = │ & │ XXXXXXX │ │ XXXXXXX │ # │ ( │ ) │ ; │ " │ XXXXXXX │
402 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘ └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
403 // │ XXXXXXX │ ~ │ [ │ ] │ + │ % │ │ @ │ : │ , │ . │ ' │ XXXXXXX │
404 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐ ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
405 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ _____ │ │ RGB VAL+ │ │ RGB TOG │ │ _____ │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
406 // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤ ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
407 // │ XXXXXXX │ XXXXXXX │ XXX │ │ XXX │_____│ _____ │
408 // └─────────┴─────────┴─────┘ └─────┴─────┴─────────┘
409 [SYMB] = LAYOUT(
410 VRSN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
411 KC_BSLS, FR_GRAVE, KC_LABK, KC_RABK, KC_PMNS, KC_PIPE, XXXXXXX, XXXXXXX, KC_CIRC, KC_LCBR, KC_RCBR, KC_DLR, FR_CIRC, XXXXXXX,
412 XXXXXXX, KC_EXLM, KC_PAST, KC_PSLS, KC_EQL, KC_AMPR, XXXXXXX, XXXXXXX, KC_HASH, KC_LPRN, KC_RPRN, KC_SCLN, FR_DQUO, XXXXXXX,
413 XXXXXXX, KC_TILD, KC_LBRC, KC_RBRC, KC_PLUS, KC_PERC, KC_AT, KC_COLN, KC_COMM, KC_DOT, FR_QUOT, XXXXXXX,
414 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RM_VALU, RM_TOGG, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
415 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______
416 ),
417
418 // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
419 // │ VRSN │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
420 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
421 // │ _____ │ F1 │ F2 │ F3 │ F4 │ F5 │ _____ │ │ _____ │ _____ │ 7 │ 8 │ 9 │ * │ / │
422 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
423 // │ _____ │ F6 │ F7 │ F8 │ F9 │ F10 │ _____ │ │ _____ │ _____ │ 4 │ 5 │ 6 │ - │ + │
424 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘ └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
425 // │ _____ │ F11 │ F12 │ F13 │ F14 │ F15 │ │ _____ │ 1 │ 2 │ 3 │ . │ , │
426 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐ ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
427 // │ EE CLR │ _____ │ _____ │ _____ │ _____ │ │ _____ │ │ _____ │ │ 0 │ _____ │ _____ │ _____ │ _____ │
428 // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤ ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
429 // │ _____ │ _____ │ ___ │ │ ___ │_____│ _____ │
430 // └─────────┴─────────┴─────┘ └─────┴─────┴─────────┘
431 [NUMB] = LAYOUT(
432 VRSN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
433 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_7, KC_8, KC_9, KC_PAST, KC_PSLS,
434 _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, KC_4, KC_5, KC_6, KC_PMNS, KC_PPLS,
435 _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, KC_1, KC_2, KC_3, KC_PDOT, KC_PCMM,
436 EE_CLR, _______, _______, _______, _______, _______, _______, KC_0, _______, _______, _______, _______,
437 _______, _______, _______, _______, _______, _______
438 ),
439
440 // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
441 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
442 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
443 // │ VRSN │ _____ │ @ │ { │ } │ | │ _____ │ │ _____ │ PRTSCR │ HOME │ UP │ END │ PG UP │ BOOT │
444 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
445 // │ _____ │ _____ │ MED PRV │ MED PLY │ MED NXT │ _____ │ _____ │ │ _____ │ _____ │ LEFT │ DOWN │ RIGHT │ PG DN │ _____ │
446 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘ └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
447 // │ _____ │ _____ │ _____ │ _____ │ _____ │ _____ │ │ MUTE │ _____ │ _____ │ _____ │ _____ │ _____ │
448 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐ ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
449 // │ EE CLR │ _____ │ _____ │ _____ │ _____ │ │ VOL DN │ │ VOL UP │ │ _____ │ _____ │ _____ │ _____ │ _____ │
450 // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤ ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
451 // │ _____ │ _____ │ ___ │ │ ___ │_____│ _____ │
452 // └─────────┴─────────┴─────┘ └─────┴─────┴─────────┘
453 [NAVI] = LAYOUT(
454 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
455 VRSN, _______, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, KC_PSCR, KC_HOME, KC_UP, KC_END, KC_PGUP, QK_BOOT,
456 _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______,
457 _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______,
458 EE_CLR, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______,
459 _______, _______, _______, _______, _______, _______
460 ),
461
462
463 // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
464 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ BOOT │
465 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
466 // │ _____ │ _____ │ _____ │ _____ │ _____ │ _____ │ _____ │ │ _____ │ _____ │ _____ │ MS UP │ _____ │ _____ │ _____ │
467 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
468 // │ _____ │ WHL L │ WHL U │ WHL D │ WHL R │ _____ │ _____ │ │ _____ │ _____ │ MS LFT │ MS DN │ MS RGT │ _____ │ _____ │
469 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘ └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
470 // │ _____ │ _____ │ _____ │ _____ │ _____ │ _____ │ │ _____ │ _____ │ _____ │ _____ │ _____ │ _____ │
471 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐ ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
472 // │ EE CLR │ _____ │ _____ │ _____ │ _____ │ │ VOL DN │ │ VOL UP │ │ _____ │ _____ │ _____ │ _____ │ _____ │
473 // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤ ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
474 // │ BTN 1 │ BTN 3 │ ___ │ │ ___ │BTN 3│ BTN 2 │
475 // └─────────┴─────────┴─────┘ └─────┴─────┴─────────┘
476 [MOUS] = LAYOUT(
477 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT,
478 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MS_UP, _______, _______, _______,
479 _______, MS_WHLL, MS_WHLU, MS_WHLD, MS_WHLR, _______, _______, _______, _______, MS_LEFT, MS_DOWN, MS_RGHT, _______, _______,
480 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
481 EE_CLR, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______,
482 MS_BTN1, MS_BTN3, _______, _______, MS_BTN3, MS_BTN2
483 ),
484
485 // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
486 // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ BOOT │
487 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
488 // │ _____ │ _____ │ _____ │ _____ │ _____ │ _____ │ _____ │ │ _____ │ _____ │ _____ │ MS UP │ _____ │ _____ │ _____ │
489 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
490 // │ _____ │ GUI │ ALT │ SHIFT │ CTL │ HYPER │ _____ │ │ _____ │ _____ │ CTL │ SHIFT │ ALT │ GUI │ _____ │
491 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘ └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
492 // │ _____ │ _____ │ _____ │ _____ │ _____ │ _____ │ │ _____ │ _____ │ _____ │ _____ │ _____ │ _____ │
493 // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐ ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
494 // │ EE CLR │ _____ │ _____ │ _____ │ _____ │ │ VOL DN │ │ VOL UP │ │ _____ │ _____ │ _____ │ _____ │ _____ │
495 // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤ ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
496 // │ BTN 1 │ BTN 3 │ ___ │ │ ___ │BTN 3│ BTN 2 │
497 // └─────────┴─────────┴─────┘ └─────┴─────┴─────────┘
498 [MODS] = LAYOUT(
499 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT,
500 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MS_UP, _______, _______, _______,
501 _______, OS_LGUI, OS_LALT, OS_LSFT, OS_LCTL, OS_HYPR, _______, _______, _______, OS_LCTL, OS_LSFT, OS_LALT, OS_LGUI, _______,
502 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
503 EE_CLR, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______,
504 MS_BTN1, MS_BTN3, _______, _______, MS_BTN3, MS_BTN2
505 ),
506};
507
508bool process_record_user(uint16_t keycode, keyrecord_t *record) {
509 uint8_t current_layer = get_highest_layer(layer_state);
510 uint8_t mod_state = get_mods();
511
512 // Process numword before other logic
513 if (!process_num_word(keycode, record)) {
514 return false;
515 }
516
517 // Handle NUMWORD separately since it needs both press and release
518 if (keycode == NUMWORD) {
519 process_num_word_activation(NUMB, record);
520 return false;
521 }
522
523 if (record->event.pressed) {
524 switch (keycode) {
525 case VRSN:
526 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
527 return false;
528 case SFTLLCK:
529 if (record->tap.count) {
530 if (record->event.pressed) {
531 // Toggle the lock on the highest layer.
532 layer_lock_invert(get_highest_layer(layer_state));
533 }
534 return false;
535 }
536 break;
537 case FR_DQUO:
538 if (record->event.pressed) {
539 // if layer is bepo, and shift is on, send ?
540 if (IS_LAYER_ON_STATE(current_layer, BEPO) && (get_mods() & MOD_MASK_SHIFT)) {
541 del_mods(MOD_MASK_SHIFT);
542 SEND_STRING(SS_TAP(X_1));
543 set_mods(mod_state);
544 } else {
545 SEND_STRING(FR_DQUO_M);
546 }
547 }
548 break;
549 case FR_QUOT:
550 // if layer is bepo, and shift is on, send ?
551 if (IS_LAYER_ON_STATE(current_layer, BEPO) && (get_mods() & MOD_MASK_SHIFT)) {
552 del_mods(MOD_MASK_SHIFT);
553 SEND_STRING(SS_LSFT(SS_TAP(X_SLASH)));
554 set_mods(mod_state);
555 } else {
556 SEND_STRING(FR_QUOT_M);
557 }
558 break;
559 case FR_GRAVE:
560 if (record->event.pressed) {
561 SEND_STRING(FR_GRAVE_M);
562 }
563 break;
564 case FR_CIRC:
565 if (record->event.pressed) {
566 SEND_STRING(FR_CIRC_M);
567 }
568 break;
569 case FR_E_AIGU:
570 if (record->event.pressed) {
571 if (get_mods() & MOD_MASK_SHIFT) {
572 // É
573 del_mods(MOD_MASK_SHIFT);
574 SEND_STRING(FR_E_AIGU_CAPS_M);
575 set_mods(mod_state);
576 } else {
577 // é
578 SEND_STRING(FR_E_AIGU_M);
579 }
580 }
581 break;
582 case FR_E_AIGU_CAPS:
583 if (record->event.pressed) {
584 SEND_STRING(FR_E_AIGU_CAPS_M);
585 }
586 break;
587 case FR_E_GRAVE:
588 if (record->event.pressed) {
589 if (get_mods() & MOD_MASK_SHIFT) {
590 //
591 del_mods(MOD_MASK_SHIFT);
592 SEND_STRING(FR_E_GRAVE_CAPS_M);
593 set_mods(mod_state);
594 } else {
595 // è
596 SEND_STRING(FR_E_GRAVE_M);
597 }
598 }
599 break;
600 case FR_E_GRAVE_CAPS:
601 if (record->event.pressed) {
602 SEND_STRING(FR_E_GRAVE_CAPS_M);
603 }
604 break;
605 case FR_A_GRAVE:
606 if (record->event.pressed) {
607 if (get_mods() & MOD_MASK_SHIFT) {
608 del_mods(MOD_MASK_SHIFT);
609 SEND_STRING(FR_A_GRAVE_CAPS_M);
610 set_mods(mod_state);
611 } else {
612 // à
613 SEND_STRING(FR_A_GRAVE_M);
614 }
615 }
616 break;
617 case FR_A_GRAVE_CAPS:
618 if (record->event.pressed) {
619 SEND_STRING(FR_A_GRAVE_CAPS_M);
620 }
621 break;
622 }
623 }
624 return true;
625}
626
627extern rgb_config_t rgb_matrix_config;
628
629// Line 2 home-row (7 12 17 22 [27] and [63] 58 53 48 43)
630void my_set_rgb_matrix_color_homerow(uint8_t red, uint8_t green, uint8_t blue) {
631 rgb_matrix_set_color(7, red, green, blue);
632 rgb_matrix_set_color(12, red, green, blue);
633 rgb_matrix_set_color(17, red, green, blue);
634 rgb_matrix_set_color(22, red, green, blue);
635
636 rgb_matrix_set_color(58, red, green, blue);
637 rgb_matrix_set_color(53, red, green, blue);
638 rgb_matrix_set_color(48, red, green, blue);
639 rgb_matrix_set_color(43, red, green, blue);
640}
641
642void my_set_rgb_matrix_color_line(int line, uint8_t red, uint8_t green, uint8_t blue) {
643 if (line == 0 || line == 1 || line == 2) {
644 // Left
645 rgb_matrix_set_color(line, red, green, blue);
646 rgb_matrix_set_color(line+5, red, green, blue);
647 rgb_matrix_set_color(line+10, red, green, blue);
648 rgb_matrix_set_color(line+15, red, green, blue);
649 rgb_matrix_set_color(line+20, red, green, blue);
650 rgb_matrix_set_color(line+25, red, green, blue);
651 /* rgb_matrix_set_color(line+29, red, green, blue); */
652 // Right
653 /* rgb_matrix_set_color(line+65, red, green, blue); */
654 rgb_matrix_set_color(line+61, red, green, blue);
655 rgb_matrix_set_color(line+56, red, green, blue);
656 rgb_matrix_set_color(line+51, red, green, blue);
657 rgb_matrix_set_color(line+46, red, green, blue);
658 rgb_matrix_set_color(line+41, red, green, blue);
659 rgb_matrix_set_color(line+36, red, green, blue);
660 } else if (line == 3) {
661 // Left
662 rgb_matrix_set_color(3, red, green, blue);
663 rgb_matrix_set_color(8, red, green, blue);
664 rgb_matrix_set_color(13, red, green, blue);
665 rgb_matrix_set_color(18, red, green, blue);
666 rgb_matrix_set_color(23, red, green, blue);
667 rgb_matrix_set_color(28, red, green, blue);
668 // Right
669 rgb_matrix_set_color(64, red, green, blue);
670 rgb_matrix_set_color(59, red, green, blue);
671 rgb_matrix_set_color(54, red, green, blue);
672 rgb_matrix_set_color(49, red, green, blue);
673 rgb_matrix_set_color(44, red, green, blue);
674 rgb_matrix_set_color(39, red, green, blue);
675 } else if (line == 4) {
676 // Left
677 /* rgb_matrix_set_color(4, red, green, blue); */
678 /* rgb_matrix_set_color(9, red, green, blue); */
679 /* rgb_matrix_set_color(14, red, green, blue); */
680 /* rgb_matrix_set_color(19, red, green, blue); */
681 rgb_matrix_set_color(24, red, green, blue);
682 rgb_matrix_set_color(32, red, green, blue);
683 rgb_matrix_set_color(33, red, green, blue);
684 /* rgb_matrix_set_color(34, red, green, blue); */
685 rgb_matrix_set_color(35, red, green, blue);
686 // Right
687 rgb_matrix_set_color(60, red, green, blue);
688 /* rgb_matrix_set_color(55, red, green, blue); */
689 /* rgb_matrix_set_color(50, red, green, blue); */
690 /* rgb_matrix_set_color(45, red, green, blue); */
691 /* rgb_matrix_set_color(40, red, green, blue); */
692 rgb_matrix_set_color(68, red, green, blue);
693 rgb_matrix_set_color(69, red, green, blue);
694 /* rgb_matrix_set_color(70, red, green, blue); */
695 rgb_matrix_set_color(71, red, green, blue);
696 }
697}
698
699// matrix, to set key with. maybe there is a better way but used ascii generator so i can easily set those visually
700// ┌────┬────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┬────┐
701// │ 0 │ 5 │ 10 │ 15 │ 20 │ 25 │ 29 │ │ 65 │ 61 │ 56 │ 51 │ 46 │ 41 │ 36 │
702// ├────┼────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┼────┤
703// │ 1 │ 6 │ 11 │ 16 │ 21 │ 26 │ 30 │ │ 66 │ 62 │ 57 │ 52 │ 47 │ 42 │ 37 │
704// ├────┼────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┼────┤
705// │ 2 │ 7 │ 12 │ 17 │[22]│ 27 │ 31 │ │ 67 │ 63 │[58]│ 53 │ 48 │ 43 │ 38 │
706// ├────┼────┼────┼────┼────┼────┼────┘ └────┼────┼────┼────┼────┼────┼────┤
707// │ 3 │ 8 │ 13 │ 18 │ 23 │ 28 │ │ 64 │ 59 │ 54 │ 49 │ 44 │ 39 │
708// ├────┼────┼────┼────┼────┼────┼─────────┐ ┌─────────┼────┼────┼────┼────┼────┼────┤
709// │ 4 │ 9 │ 14 │ 19 │ 24 │ │ 35 │ │ 71 │ │ 60 │ 55 │ 50 │ 45 │ 40 │
710// └────┴────┴────┴────┴────┼────┼────┬────┤ ├────┬────┼────┼────┴────┴────┴────┴────┘
711// │ 32 │ 33 │ 34 │ │ 70 │ 69 │ 68 │
712// └────┴────┴────┘ └────┴────┴────┘
713// Runs constantly in the background, in a loop.
714bool rgb_matrix_indicators_user(void) {
715 if (rgb_matrix_get_flags() & (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER)) {
716 switch (get_highest_layer(layer_state)) {
717 case BEPO:
718 rgb_matrix_set_color_all(RGB_OFF);
719 // Line 1
720 my_set_rgb_matrix_color_line(1,213,144,0);
721 // Line 2
722 my_set_rgb_matrix_color_line(2,27,213,0);
723 my_set_rgb_matrix_color_homerow(206,255,206);
724 // Line 3
725 my_set_rgb_matrix_color_line(3,0,255,167);
726 // Line 4
727 my_set_rgb_matrix_color_line(4,0,113,255);
728 break;
729 case ERGL:
730 rgb_matrix_set_color_all(RGB_OFF);
731 // ERGOL layer
732 rgb_matrix_set_color(34, 0, 113, 255);
733 rgb_matrix_set_color(70, 0, 113, 255);
734 // Line 1
735 my_set_rgb_matrix_color_line(1,213,144,0);
736 // Line 2
737 my_set_rgb_matrix_color_line(2,27,213,0);
738 my_set_rgb_matrix_color_homerow(206,255,206);
739 // Line 3
740 my_set_rgb_matrix_color_line(3,0,255,167);
741 // Line 4
742 my_set_rgb_matrix_color_line(4,0,113,255);
743 break;
744 case QWER:
745 rgb_matrix_set_color_all(RGB_OFF);
746 // QWERTY layer
747 rgb_matrix_set_color(34, 27,213,0);
748 rgb_matrix_set_color(70, 27,213,0);
749 // Line 1
750 my_set_rgb_matrix_color_line(1,213,144,0);
751 // Line 2
752 my_set_rgb_matrix_color_line(2,27,213,0);
753 my_set_rgb_matrix_color_homerow(206,255,206);
754 // Line 3
755 my_set_rgb_matrix_color_line(3,0,255,167);
756 // Line 4
757 my_set_rgb_matrix_color_line(4,0,113,255);
758 break;
759 case NUMB:
760 rgb_matrix_set_color_all(RGB_OFF);
761
762 rgb_matrix_set_color(0, RGB_RED);
763
764 rgb_matrix_set_color(6, 0, 55, 255); // FX
765 rgb_matrix_set_color(11, 0, 55, 255); // FX
766 rgb_matrix_set_color(16, 0, 55, 255); // FX
767 rgb_matrix_set_color(21, 0, 55, 255); // FX
768 rgb_matrix_set_color(26, 0, 55, 255); // FX
769 rgb_matrix_set_color(7, 0, 55, 255); // FX
770 rgb_matrix_set_color(12, 0, 55, 255); // FX
771 rgb_matrix_set_color(17, 0, 55, 255); // FX
772 rgb_matrix_set_color(22, 0, 55, 255); // FX
773 rgb_matrix_set_color(27, 0, 55, 255); // FX
774 rgb_matrix_set_color(8, 0, 55, 255); // FX
775 rgb_matrix_set_color(13, 0, 55, 255); // FX
776
777
778 rgb_matrix_set_color(18, 0, 183, 255); // FX
779 rgb_matrix_set_color(23, 0, 183, 255); // FX
780 rgb_matrix_set_color(28, 0, 183, 255); // FX
781
782 rgb_matrix_set_color(60, 255, 255, 255); // 0
783 rgb_matrix_set_color(47, 255, 199, 0); // number
784 rgb_matrix_set_color(48, 255, 199, 0); // number
785 rgb_matrix_set_color(49, 255, 199, 0); // number
786 rgb_matrix_set_color(52, 255, 199, 0); // number
787 rgb_matrix_set_color(53, 255, 199, 0); // number
788 rgb_matrix_set_color(54, 255, 199, 0); // number
789 rgb_matrix_set_color(57, 255, 199, 0); // number
790 rgb_matrix_set_color(58, 255, 199, 0); // number
791 rgb_matrix_set_color(59, 255, 199, 0); // number
792
793 rgb_matrix_set_color(42, 183, 255, 0); // calc
794 rgb_matrix_set_color(43, 183, 255, 0); // calc
795 rgb_matrix_set_color(44, 183, 255, 0); // calc
796 rgb_matrix_set_color(37, 183, 255, 0); // calc
797 rgb_matrix_set_color(38, 183, 255, 0); // calc
798 rgb_matrix_set_color(39, 183, 255, 0); // calc
799 break;
800 case SYMB:
801 rgb_matrix_set_color_all(RGB_OFF);
802 // () {} [] <>
803 rgb_matrix_set_color(11, 27, 213, 0);
804 rgb_matrix_set_color(16, 27, 213, 0);
805 rgb_matrix_set_color(13, 27, 213, 0);
806 rgb_matrix_set_color(18, 27, 213, 0);
807 rgb_matrix_set_color(57, 27, 213, 0);
808 rgb_matrix_set_color(58, 27, 213, 0);
809 rgb_matrix_set_color(52, 27, 213, 0);
810 rgb_matrix_set_color(53, 27, 213, 0);
811
812 // +-=/*
813 rgb_matrix_set_color(23, 29, 204, 67);
814 rgb_matrix_set_color(12, 29, 204, 67);
815 rgb_matrix_set_color(17, 29, 204, 67);
816 rgb_matrix_set_color(22, 29, 204, 67);
817 rgb_matrix_set_color(21, 29, 204, 67);
818 rgb_matrix_set_color(1, 29, 204, 67); // anti-slash
819
820 // `!~|&%^#
821 rgb_matrix_set_color(6, 255, 199, 0);
822 rgb_matrix_set_color(7, 255, 199, 0);
823 rgb_matrix_set_color(8, 255, 199, 0);
824 rgb_matrix_set_color(26, 255, 199, 0);
825 rgb_matrix_set_color(27, 255, 199, 0);
826 rgb_matrix_set_color(28, 255, 199, 0);
827 rgb_matrix_set_color(62, 255, 199, 0);
828 rgb_matrix_set_color(42, 255, 199, 0);
829 rgb_matrix_set_color(63, 255, 199, 0);
830
831 // "'
832 rgb_matrix_set_color(43, 204, 202, 29);
833 rgb_matrix_set_color(44, 204, 202, 29);
834
835 // :;,.
836 rgb_matrix_set_color(59, 29, 120, 204);
837 rgb_matrix_set_color(54, 29, 120, 204);
838 rgb_matrix_set_color(48, 29, 120, 204);
839 rgb_matrix_set_color(49, 29, 120, 204);
840
841 // @ $
842 rgb_matrix_set_color(47, 174, 29, 204);
843 rgb_matrix_set_color(64, 174, 29, 204);
844
845 break;
846 case NAVI:
847 rgb_matrix_set_color_all(RGB_OFF);
848
849 rgb_matrix_set_color(1, RGB_RED);
850 rgb_matrix_set_color(37, RGB_RED);
851
852 // Arrows
853 rgb_matrix_set_color(52, 0, 113, 255);
854 rgb_matrix_set_color(53, 0, 113, 255);
855 rgb_matrix_set_color(58, 0, 113, 255);
856 rgb_matrix_set_color(48, 0, 113, 255);
857 // Home, End, PgUp, PgDown
858 rgb_matrix_set_color(57, 13, 0, 255);
859 rgb_matrix_set_color(47, 13, 0, 255);
860 rgb_matrix_set_color(42, 13, 0, 255);
861 rgb_matrix_set_color(43, 13, 0, 255);
862
863 // Media
864 rgb_matrix_set_color(12, 27, 213, 0);
865 rgb_matrix_set_color(17, 27, 213, 0);
866 rgb_matrix_set_color(22, 27, 213, 0);
867
868 // Volume
869 rgb_matrix_set_color(35, 170, 0, 255);
870 rgb_matrix_set_color(71, 170, 0, 255);
871 rgb_matrix_set_color(64, 170, 0, 255);
872
873 // PrintScreen
874 rgb_matrix_set_color(62, 255, 255, 255);
875 break;
876 case MOUS:
877 rgb_matrix_set_color_all(RGB_OFF);
878 // mouse movements
879 rgb_matrix_set_color(52, 0, 113, 255);
880 rgb_matrix_set_color(53, 0, 113, 255);
881 rgb_matrix_set_color(58, 0, 113, 255);
882 rgb_matrix_set_color(48, 0, 113, 255);
883 // wheel
884
885 rgb_matrix_set_color(7, 13, 0, 255);
886 rgb_matrix_set_color(12, 13, 0, 255);
887 rgb_matrix_set_color(17, 13, 0, 255);
888 rgb_matrix_set_color(22, 13, 0, 255);
889 // clicks
890 rgb_matrix_set_color(32, 170, 0, 255);
891 rgb_matrix_set_color(33, 170, 0, 255);
892 rgb_matrix_set_color(68, 170, 0, 255);
893 rgb_matrix_set_color(69, 170, 0, 255);
894 break;
895 default:
896 rgb_matrix_set_color_all(RGB_OFF);
897 break;
898 }
899 }
900 return false;
901}
902
903void caps_word_set_user(bool active) {
904 if (active) {
905 rgb_matrix_set_color(40, 255, 255, 255);
906 } else {
907 rgb_matrix_set_color(40, RGB_OFF);
908 }
909}