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