nftable-migration
  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}
 75
 76void leader_end_user(void) {
 77    if (leader_sequence_one_key(KC_F)) {
 78        // Leader, f => Types the below string
 79        SEND_STRING("QMK is awesome.");
 80    }
 81}
 82
 83#define COMBO_REF_DEFAULT QWER
 84
 85uint8_t combo_ref_from_layer(uint8_t layer){
 86  switch (get_highest_layer(layer_state)){
 87  case BEPO: return QWER;
 88  default: return QWER;
 89  }
 90  return layer;  // important if default is not in case.
 91}
 92
 93enum combos {
 94  TO_BEPO, TO_ERGOL, TO_QWERTY,
 95  TOGGLE_MOUSE,
 96  BEPO_ESC, QWERTY_ESC,
 97  // Experiments
 98  PIPE, AROBASE, HASH, DOLLAR, SLASH, BSLASH, AMPR, MINUS, UNDERSCORE, EQUAL,
 99  LEADER,
100  LPRN, RPRN, LCBR, RCBR, LBRC, RBRC, LABK, RABK,
101};
102
103const uint16_t PROGMEM combo_to_bepo[] = {LT(NAVI,KC_BSPC), OS_LSFT, COMBO_END};
104const uint16_t PROGMEM combo_to_ergol[] = {LT(NUMB,KC_SPC), LT(SYMB, KC_ENT), COMBO_END};
105const uint16_t PROGMEM combo_to_qwerty[] = {KC_DEL, KC_RALT, COMBO_END};
106const uint16_t PROGMEM combo_toggle_mouse[] = {KC_Q, KC_R, COMBO_END};
107
108const uint16_t PROGMEM combo_bepo_escape[] = {HM_ALT_R, HM_GUI_N, COMBO_END};
109const uint16_t PROGMEM combo_qwe_escape[] = {HM_ALT_L, HM_GUI_SCLN, COMBO_END};
110
111const uint16_t PROGMEM combo_qwe_pipe[] = {KC_Q, KC_W, COMBO_END};       // |
112const uint16_t PROGMEM combo_qwe_arobase[] = {KC_W, KC_E, COMBO_END};    // @
113const uint16_t PROGMEM combo_qwe_hash[] = {KC_E, KC_R, COMBO_END};       // #
114const uint16_t PROGMEM combo_qwe_ampr[] = {KC_R, KC_T, COMBO_END};       // &
115const uint16_t PROGMEM combo_qwe_dollar[] = {KC_R, HM_CTL_F, COMBO_END}; // $
116const uint16_t PROGMEM combo_qwe_slash[] = {KC_E, HM_SFT_D, COMBO_END};  // /
117const uint16_t PROGMEM combo_qwe_bslash[] = {HM_SFT_D, KC_C, COMBO_END}; // antislash
118const uint16_t PROGMEM combo_qwe_minus[] = {KC_W, HM_ALT_S, COMBO_END};  // -
119const uint16_t PROGMEM combo_qwe_unds[] = {HM_CTL_F, KC_V, COMBO_END};   // _
120const uint16_t PROGMEM combo_qwe_equal[] = {HM_ALT_S, KC_X, COMBO_END};  // = 
121
122const uint16_t PROGMEM combo_qwe_leader[] = {HM_SFT_D, HM_CTL_F, COMBO_END}; // FIXME: change this most likely.
123
124const uint16_t PROGMEM combo_qwe_lprn[] = {KC_I, HM_SFT_K, COMBO_END};    // (
125const uint16_t PROGMEM combo_qwe_rprn[] = {HM_SFT_K, KC_COMM, COMBO_END}; // )
126const uint16_t PROGMEM combo_qwe_lcbr[] = {KC_U, HM_CTL_J, COMBO_END};    // {
127const uint16_t PROGMEM combo_qwe_rcbr[] = {HM_CTL_J, KC_M, COMBO_END};    // }
128const uint16_t PROGMEM combo_qwe_lbrc[] = {KC_O, HM_ALT_L, COMBO_END};    // [
129const uint16_t PROGMEM combo_qwe_rbrc[] = {HM_ALT_L, KC_DOT, COMBO_END};  // ]
130const uint16_t PROGMEM combo_qwe_labk[] = {KC_U, KC_I, COMBO_END};        // <
131const uint16_t PROGMEM combo_qwe_rabk[] = {KC_I, KC_O, COMBO_END};        // >
132
133combo_t key_combos[] = {
134  // Layers
135  [TO_BEPO] = COMBO(combo_to_bepo, TO(BEPO)),
136  [TO_ERGOL] = COMBO(combo_to_ergol, TO(ERGL)),
137  [TO_QWERTY] = COMBO(combo_to_qwerty, TO(QWER)),
138  [TOGGLE_MOUSE] = COMBO(combo_toggle_mouse, TG(MOUS)),
139  // Others
140  [QWERTY_ESC] = COMBO(combo_qwe_escape, KC_ESC),
141  [BEPO_ESC] = COMBO(combo_bepo_escape, KC_ESC),
142  // Experiments
143  [PIPE] = COMBO(combo_qwe_pipe, KC_PIPE),
144  [AROBASE] = COMBO(combo_qwe_arobase, KC_AT),
145  [HASH] = COMBO(combo_qwe_hash, KC_HASH),
146  [DOLLAR] = COMBO(combo_qwe_dollar, KC_DLR),
147  [SLASH] = COMBO(combo_qwe_slash, KC_SLSH),
148  [BSLASH] = COMBO(combo_qwe_bslash, KC_BSLS),
149  [AMPR] = COMBO(combo_qwe_ampr, KC_AMPR),
150  [MINUS] = COMBO(combo_qwe_minus, KC_PMNS),
151  [UNDERSCORE] = COMBO(combo_qwe_unds, KC_UNDS),
152  [EQUAL] = COMBO(combo_qwe_equal, KC_EQL),
153
154  [LEADER] = COMBO(combo_qwe_leader, QK_LEAD),
155  
156  [LPRN] = COMBO(combo_qwe_lprn, KC_LPRN),
157  [RPRN] = COMBO(combo_qwe_rprn, KC_RPRN),
158  [LCBR] = COMBO(combo_qwe_lcbr, KC_LCBR),
159  [RCBR] = COMBO(combo_qwe_rcbr, KC_RCBR),
160  [LBRC] = COMBO(combo_qwe_lbrc, KC_LBRC),
161  [RBRC] = COMBO(combo_qwe_rbrc, KC_RBRC),
162  [LABK] = COMBO(combo_qwe_labk, KC_LABK),
163  [RABK] = COMBO(combo_qwe_rabk, KC_RABK),
164};
165
166bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
167  switch (combo_index) {
168  case BEPO_ESC:
169    if (layer_state_is(BEPO)) {
170      return true;
171    }
172    return false;
173  case QWERTY_ESC:
174    if (layer_state_is(QWER)) {
175      return true;
176    }
177    return false;
178  }
179  return true;
180}
181
182tap_dance_action_t tap_dance_actions[] = {
183};
184
185const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM = LAYOUT(
186  'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
187  'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
188  'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
189  'L', 'L', 'L', 'L', 'L', 'L',           'R', 'R', 'R', 'R', 'R', 'R',
190  'L', 'L', 'L', 'L', 'L', 'L',           'R', 'R', 'R', 'R', 'R', 'R',
191                 'L', 'L', 'L',           'R', 'R', 'R'
192);
193
194// clang-format off
195const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
196  // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐             ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
197  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │             │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
198  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
199  // │   TAB   │    B    │    É    │    P    │    O    │    È    │ XXXXXXX │             │ XXXXXXX │    ^    │    V    │    D    │    L    │    J    │    Z    │
200  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
201  // │ NUMWORD │  GUI/A  │  ALT/U  │  SFT/I  │  CTL/E  │  HYP/,  │ XXXXXXX │             │ XXXXXXX │  HYP/C  │  CTL/T  │  SFT/S  │  ALT/R  │  GUI/N  │ SYMB/M  │
202  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘             └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
203  // │   GRV   │    À    │    Y    │    X    │    .    │    K    │                                 │    '    │    Q    │    G    │    H    │    F    │    W    │
204  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐     ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
205  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ MODS/DEL│         │     REPEAT    │     │  ALT-REP  │         │  RALT   │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
206  // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤     ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
207  //                                                   │ NUMB/SPC│ NAVI/BSP│ XXX │     │ XXX │SHIFT│ SYMB/ENT│
208  //                                                   └─────────┴─────────┴─────┘     └─────┴─────┴─────────┘
209  [BEPO] = LAYOUT(
210    XXXXXXX,  XXXXXXX,     XXXXXXX,     XXXXXXX,      XXXXXXX,         XXXXXXX,         XXXXXXX,    XXXXXXX,  XXXXXXX,         XXXXXXX,     XXXXXXX,     XXXXXXX,      XXXXXXX,         XXXXXXX,
211    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,
212    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),
213    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,
214    XXXXXXX,  XXXXXXX,     XXXXXXX,     XXXXXXX,      LT(MODS,KC_DEL),                  QK_REP,     QK_AREP,                   KC_RALT,     XXXXXXX,     XXXXXXX,      XXXXXXX,         XXXXXXX,
215                                                      LT(NUMB,KC_SPC), LT(NAVI,KC_BSPC), XXXXXXX,    XXXXXXX,  OS_LSFT,         LT(SYMB,KC_ENT)
216  ),
217
218  // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐             ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
219  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │             │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
220  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
221  // │   TAB   │    Q    │    W    │    E    │    R    │    T    │ XXXXXXX │             │ XXXXXXX │    Y    │    U    │    I    │    O    │    P    │    [    │
222  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
223  // │ NUMWORD │  GUI/A  │  ALT/S  │  SFT/D  │  CTL/F  │  HYP/G  │ XXXXXXX │             │ XXXXXXX │  HYP/H  │  CTL/J  │  SFT/K  │  ALT/L  │  GUI/;  │    "    │
224  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘             └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
225  // │   GRV   │    Z    │    X    │    C    │    V    │    B    │                                 │    N    │    M    │    ,    │    .    │    /    │    ]    │
226  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐     ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
227  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │   DEL   │         │     REPEAT    │     │  ALT-REP  │         │  RALT   │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
228  // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤     ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
229  //                                                   │ NUMB/SPC│ NAVI/BSP│ XXX │     │ XXX │SHIFT│ SYMB/ENT│
230  //                                                   └─────────┴─────────┴─────┘     └─────┴─────┴─────────┘
231  [ERGL] = LAYOUT(
232    XXXXXXX,  XXXXXXX,     XXXXXXX,   XXXXXXX,   XXXXXXX,     XXXXXXX,         XXXXXXX,    XXXXXXX,  XXXXXXX,      XXXXXXX,     XXXXXXX,   XXXXXXX,      XXXXXXX,      XXXXXXX,
233    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,
234    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,
235    KC_GRV,   KC_Z,        KC_X,      KC_C,      KC_V,        KC_B,                                  KC_N,         KC_M,        KC_COMM,   KC_DOT,       KC_SLSH,      KC_RBRC,
236    XXXXXXX,  XXXXXXX,     XXXXXXX,   XXXXXXX,   KC_DEL,                       QK_REP,     QK_AREP,                KC_RALT,     XXXXXXX,   XXXXXXX,      XXXXXXX,      XXXXXXX,
237                                                 LT(NUMB,KC_SPC), LT(NAVI,KC_BSPC), XXXXXXX,    XXXXXXX,  OS_LSFT,      LT(SYMB,KC_ENT)
238  ),
239
240  // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐             ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
241  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │             │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
242  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
243  // │   TAB   │    Q    │    W    │    E    │    R    │    T    │ XXXXXXX │             │ XXXXXXX │    Y    │    U    │    I    │    O    │    P    │    [    │
244  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
245  // │ NUMWORD │  GUI/A  │  ALT/S  │  SFT/D  │  CTL/F  │  HYP/G  │ XXXXXXX │             │ XXXXXXX │  HYP/H  │  CTL/J  │  SFT/K  │  ALT/L  │  GUI/;  │    "    │
246  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘             └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
247  // │   GRV   │    Z    │    X    │    C    │    V    │    B    │                                 │    N    │    M    │    ,    │    .    │    /    │    ]    │
248  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐     ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
249  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │   DEL   │         │     REPEAT    │     │  ALT-REP  │         │  RALT   │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
250  // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤     ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
251  //                                                   │ NUMB/SPC│ NAVI/BSP│ XXX │     │ XXX │SHIFT│ SYMB/ENT│
252  //                                                   └─────────┴─────────┴─────┘     └─────┴─────┴─────────┘
253  [QWER] = LAYOUT(
254    XXXXXXX,  XXXXXXX,     XXXXXXX,   XXXXXXX,   XXXXXXX,     XXXXXXX,         XXXXXXX,    XXXXXXX,  XXXXXXX,      XXXXXXX,     XXXXXXX,   XXXXXXX,      XXXXXXX,      XXXXXXX,
255    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,
256    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,
257    KC_GRV,   KC_Z,        KC_X,      KC_C,      KC_V,        KC_B,                                  KC_N,         KC_M,        KC_COMM,   KC_DOT,       KC_SLSH,      KC_RBRC,
258    XXXXXXX,  XXXXXXX,     XXXXXXX,   XXXXXXX,   KC_DEL,                       QK_REP,     QK_AREP,                KC_RALT,     XXXXXXX,   XXXXXXX,      XXXXXXX,      XXXXXXX,
259                                                 LT(NUMB,KC_SPC), LT(NAVI,KC_BSPC), XXXXXXX,    XXXXXXX,  OS_LSFT,      LT(SYMB,KC_ENT)
260  ),
261
262  // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐             ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
263  // │  VRSN   │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │             │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
264  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
265  // │    \    │    `    │    <    │    >    │    -    │    |    │ XXXXXXX │             │ XXXXXXX │    ^    │    {    │    }    │    $    │    ^    │ XXXXXXX │
266  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
267  // │ XXXXXXX │    !    │    *    │    /    │    =    │    &    │ XXXXXXX │             │ XXXXXXX │    #    │    (    │    )    │    ;    │    "    │ XXXXXXX │
268  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘             └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
269  // │ XXXXXXX │    ~    │    [    │    ]    │    +    │    %    │                                 │    @    │    :    │    ,    │    .    │    '    │ XXXXXXX │
270  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐     ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
271  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │  _____  │         │   RGB VAL+    │     │  RGB TOG  │         │  _____  │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
272  // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤     ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
273  //                                                   │ XXXXXXX │ XXXXXXX │ XXX │     │ XXX │_____│  _____  │
274  //                                                   └─────────┴─────────┴─────┘     └─────┴─────┴─────────┘
275  [SYMB] = LAYOUT(
276    VRSN,     XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,   XXXXXXX,    XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,
277    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,
278    XXXXXXX,  KC_EXLM,   KC_PAST,  KC_PSLS,  KC_EQL,   KC_AMPR,   XXXXXXX,    XXXXXXX,  KC_HASH,   KC_LPRN,  KC_RPRN,  KC_SCLN,   FR_DQUO,  XXXXXXX,
279    XXXXXXX,  KC_TILD,   KC_LBRC,  KC_RBRC,  KC_PLUS,  KC_PERC,                         KC_AT,     KC_COLN,  KC_COMM,  KC_DOT,    FR_QUOT,  XXXXXXX,
280    XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  _______,             RM_VALU,    RM_TOGG,             _______,  XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,
281                                              XXXXXXX,  XXXXXXX,   XXXXXXX,    XXXXXXX,  _______,   _______
282  ),
283
284  // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐             ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
285  // │  VRSN   │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │             │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
286  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
287  // │  _____  │   F1    │   F2    │   F3    │   F4    │   F5    │  _____  │             │  _____  │  _____  │    7    │    8    │    9    │    *    │    /    │
288  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
289  // │  _____  │   F6    │   F7    │   F8    │   F9    │   F10   │  _____  │             │  _____  │  _____  │    4    │    5    │    6    │    -    │    +    │
290  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘             └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
291  // │  _____  │   F11   │   F12   │   F13   │   F14   │   F15   │                                 │  _____  │    1    │    2    │    3    │    .    │    ,    │
292  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐     ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
293  // │ EE CLR  │  _____  │  _____  │  _____  │  _____  │         │     _____     │     │   _____   │         │    0    │  _____  │  _____  │  _____  │  _____  │
294  // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤     ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
295  //                                                   │  _____  │  _____  │ ___ │     │ ___ │_____│  _____  │
296  //                                                   └─────────┴─────────┴─────┘     └─────┴─────┴─────────┘
297  [NUMB] = LAYOUT(
298    VRSN,     XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
299    _______,  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    _______,    _______,  _______,  KC_7,     KC_8,     KC_9,     KC_PAST,  KC_PSLS,
300    _______,  KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   _______,    _______,  _______,  KC_4,     KC_5,     KC_6,     KC_PMNS,  KC_PPLS,
301    _______,  KC_F11,   KC_F12,   KC_F13,   KC_F14,   KC_F15,                         _______,  KC_1,     KC_2,     KC_3,     KC_PDOT,  KC_PCMM,
302    EE_CLR,   _______,  _______,  _______,  _______,            _______,    _______,            KC_0,     _______,  _______,  _______,  _______,
303                                            _______,  _______,  _______,    _______,  _______,  _______
304  ),
305
306  // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐             ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
307  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │             │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │
308  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
309  // │  VRSN   │  _____  │    @    │    {    │    }    │    |    │  _____  │             │  _____  │  PRTSCR │  HOME   │   UP    │   END   │  PG UP  │  BOOT   │
310  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
311  // │  _____  │  _____  │ MED PRV │ MED PLY │ MED NXT │  _____  │  _____  │             │  _____  │  _____  │  LEFT   │  DOWN   │  RIGHT  │  PG DN  │  _____  │
312  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘             └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
313  // │  _____  │  _____  │  _____  │  _____  │  _____  │  _____  │                                 │  MUTE   │  _____  │  _____  │  _____  │  _____  │  _____  │
314  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐     ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
315  // │ EE CLR  │  _____  │  _____  │  _____  │  _____  │         │    VOL DN     │     │   VOL UP  │         │  _____  │  _____  │  _____  │  _____  │  _____  │
316  // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤     ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
317  //                                                   │  _____  │  _____  │ ___ │     │ ___ │_____│  _____  │
318  //                                                   └─────────┴─────────┴─────┘     └─────┴─────┴─────────┘
319  [NAVI] = LAYOUT(
320    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
321    VRSN,     _______,  KC_AT,    KC_LCBR,  KC_RCBR,  KC_PIPE,  _______,    _______,  KC_PSCR,  KC_HOME,  KC_UP,    KC_END,   KC_PGUP,  QK_BOOT,
322    _______,  _______,  KC_MPRV,  KC_MPLY,  KC_MNXT,  _______,  _______,    _______,  _______,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_PGDN,  _______,
323    _______,  _______,  _______,  _______,  _______,  _______,                        KC_MUTE,  _______,  _______,  _______,  _______,  _______,
324    EE_CLR,   _______,  _______,  _______,  _______,            KC_VOLD,    KC_VOLU,            _______,  _______,  _______,  _______,  _______,
325                                            _______,  _______,  _______,    _______,  _______,  _______
326  ),
327  
328
329  // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐             ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
330  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │             │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │  BOOT   │
331  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
332  // │  _____  │  _____  │  _____  │  _____  │  _____  │  _____  │  _____  │             │  _____  │  _____  │  _____  │  MS UP  │  _____  │  _____  │  _____  │
333  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
334  // │  _____  │  WHL L  │  WHL U  │  WHL D  │  WHL R  │  _____  │  _____  │             │  _____  │  _____  │  MS LFT │  MS DN  │  MS RGT │  _____  │  _____  │
335  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘             └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
336  // │  _____  │  _____  │  _____  │  _____  │  _____  │  _____  │                                 │  _____  │  _____  │  _____  │  _____  │  _____  │  _____  │
337  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐     ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
338  // │ EE CLR  │  _____  │  _____  │  _____  │  _____  │         │    VOL DN     │     │   VOL UP  │         │  _____  │  _____  │  _____  │  _____  │  _____  │
339  // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤     ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
340  //                                                   │  BTN 1  │  BTN 3  │ ___ │     │ ___ │BTN 3│  BTN 2  │
341  //                                                   └─────────┴─────────┴─────┘     └─────┴─────┴─────────┘
342  [MOUS] = LAYOUT(
343    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  QK_BOOT,
344    _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,  _______,  MS_UP,    _______,  _______,  _______,
345    _______,  MS_WHLL,  MS_WHLU,  MS_WHLD,  MS_WHLR,  _______,  _______,    _______,  _______,  MS_LEFT,  MS_DOWN,  MS_RGHT,  _______,  _______,
346    _______,  _______,  _______,  _______,  _______,  _______,                        _______,  _______,  _______,  _______,  _______,  _______,
347    EE_CLR,   _______,  _______,  _______,  _______,            KC_VOLD,    KC_VOLU,            _______,  _______,  _______,  _______,  _______,
348                                            MS_BTN1,  MS_BTN3,  _______,    _______,  MS_BTN3,  MS_BTN2
349  ),
350
351  // ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐             ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
352  // │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │             │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │ XXXXXXX │  BOOT   │
353  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
354  // │  _____  │  _____  │  _____  │  _____  │  _____  │  _____  │  _____  │             │  _____  │  _____  │  _____  │  MS UP  │  _____  │  _____  │  _____  │
355  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤             ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
356  // │  _____  │   GUI   │   ALT   │  SHIFT  │   CTL   │  HYPER  │  _____  │             │  _____  │  _____  │   CTL   │  SHIFT  │   ALT   │   GUI   │  _____  │
357  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┘             └─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
358  // │  _____  │  _____  │  _____  │  _____  │  _____  │  _____  │                                 │  _____  │  _____  │  _____  │  _____  │  _____  │  _____  │
359  // ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────────┐     ┌───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
360  // │ EE CLR  │  _____  │  _____  │  _____  │  _____  │         │    VOL DN     │     │   VOL UP  │         │  _____  │  _____  │  _____  │  _____  │  _____  │
361  // └─────────┴─────────┴─────────┴─────────┴─────────┼─────────┼─────────┬─────┤     ├─────┬─────┼─────────┼─────────┴─────────┴─────────┴─────────┴─────────┘
362  //                                                   │  BTN 1  │  BTN 3  │ ___ │     │ ___ │BTN 3│  BTN 2  │
363  //                                                   └─────────┴─────────┴─────┘     └─────┴─────┴─────────┘
364  [MODS] = LAYOUT(
365    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  QK_BOOT,
366    _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,  _______,  MS_UP,    _______,  _______,  _______,
367    _______,  OS_LGUI,  OS_LALT,  OS_LSFT,  OS_LCTL,  OS_HYPR,  _______,    _______,  _______,  OS_LCTL,  OS_LSFT,  OS_LALT,  OS_LGUI,  _______,
368    _______,  _______,  _______,  _______,  _______,  _______,                        _______,  _______,  _______,  _______,  _______,  _______,
369    EE_CLR,   _______,  _______,  _______,  _______,            KC_VOLD,    KC_VOLU,            _______,  _______,  _______,  _______,  _______,
370                                            MS_BTN1,  MS_BTN3,  _______,    _______,  MS_BTN3,  MS_BTN2
371  ),
372};
373
374bool process_record_user(uint16_t keycode, keyrecord_t *record) {
375  uint8_t current_layer = get_highest_layer(layer_state);
376  uint8_t mod_state = get_mods();
377
378  // Process numword before other logic
379  if (!process_num_word(keycode, record)) {
380    return false;
381  }
382
383  // Handle NUMWORD separately since it needs both press and release
384  if (keycode == NUMWORD) {
385    process_num_word_activation(NUMB, record);
386    return false;
387  }
388
389  if (record->event.pressed) {
390    switch (keycode) {
391    case VRSN:
392      SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
393      return false;
394    case SFTLLCK:
395      if (record->tap.count) {
396	if (record->event.pressed) {
397	  // Toggle the lock on the highest layer.
398	  layer_lock_invert(get_highest_layer(layer_state));
399	}
400	return false;
401      }
402      break;
403    case FR_DQUO:
404      if (record->event.pressed) {
405	// if layer is bepo, and shift is on, send ?
406	if (IS_LAYER_ON_STATE(current_layer, BEPO) && (get_mods() & MOD_MASK_SHIFT)) {
407	  del_mods(MOD_MASK_SHIFT);
408	  SEND_STRING(SS_TAP(X_1));
409	  set_mods(mod_state);
410	} else {
411	  SEND_STRING(FR_DQUO_M);
412	}
413      }
414      break;
415    case FR_QUOT:
416      // if layer is bepo, and shift is on, send ?
417      if (IS_LAYER_ON_STATE(current_layer, BEPO) && (get_mods() & MOD_MASK_SHIFT)) {
418	del_mods(MOD_MASK_SHIFT);
419	SEND_STRING(SS_LSFT(SS_TAP(X_SLASH)));
420	set_mods(mod_state);
421      } else {
422	SEND_STRING(FR_QUOT_M);
423      }
424      break;
425    case FR_GRAVE:
426      if (record->event.pressed) {
427	SEND_STRING(FR_GRAVE_M);
428      }
429      break;
430    case FR_CIRC:
431      if (record->event.pressed) {
432	SEND_STRING(FR_CIRC_M);
433      }
434      break;
435    case FR_E_AIGU:
436      if (record->event.pressed) {
437	if (get_mods() & MOD_MASK_SHIFT) {
438	  // É
439	  del_mods(MOD_MASK_SHIFT);
440	  SEND_STRING(FR_E_AIGU_CAPS_M);
441	  set_mods(mod_state);
442	} else {
443	  // é
444	  SEND_STRING(FR_E_AIGU_M);
445	}
446      }
447      break;
448    case FR_E_AIGU_CAPS:
449      if (record->event.pressed) {
450	SEND_STRING(FR_E_AIGU_CAPS_M);
451      }
452      break;
453    case FR_E_GRAVE:
454      if (record->event.pressed) {
455	if (get_mods() & MOD_MASK_SHIFT) {
456	  // 
457	  del_mods(MOD_MASK_SHIFT);
458	  SEND_STRING(FR_E_GRAVE_CAPS_M);
459	  set_mods(mod_state);
460	} else {
461	  // è
462	  SEND_STRING(FR_E_GRAVE_M); 
463	}
464      }
465      break;
466    case FR_E_GRAVE_CAPS:
467      if (record->event.pressed) {
468	SEND_STRING(FR_E_GRAVE_CAPS_M);
469      }
470      break;
471    case FR_A_GRAVE:
472      if (record->event.pressed) {
473	if (get_mods() & MOD_MASK_SHIFT) {
474	  del_mods(MOD_MASK_SHIFT);
475	  SEND_STRING(FR_A_GRAVE_CAPS_M);
476	  set_mods(mod_state);
477	} else {
478	  // à
479	  SEND_STRING(FR_A_GRAVE_M); 
480	}
481      }
482      break;
483    case FR_A_GRAVE_CAPS:
484      if (record->event.pressed) {
485	SEND_STRING(FR_A_GRAVE_CAPS_M);
486      }
487      break;
488    }
489  }
490  return true;
491}
492
493extern rgb_config_t rgb_matrix_config;
494
495// Line 2 home-row (7 12 17 22 [27] and [63] 58 53 48 43)
496void my_set_rgb_matrix_color_homerow(uint8_t red, uint8_t green, uint8_t blue) {
497  rgb_matrix_set_color(7, red, green, blue);
498  rgb_matrix_set_color(12, red, green, blue);
499  rgb_matrix_set_color(17, red, green, blue);
500  rgb_matrix_set_color(22, red, green, blue);
501    
502  rgb_matrix_set_color(58, red, green, blue);
503  rgb_matrix_set_color(53, red, green, blue);
504  rgb_matrix_set_color(48, red, green, blue);
505  rgb_matrix_set_color(43, red, green, blue);
506}
507
508void my_set_rgb_matrix_color_line(int line,  uint8_t red, uint8_t green, uint8_t blue) {
509  if (line == 0 || line == 1 || line == 2) {
510    // Left
511    rgb_matrix_set_color(line, red, green, blue);
512    rgb_matrix_set_color(line+5, red, green, blue);
513    rgb_matrix_set_color(line+10, red, green, blue);
514    rgb_matrix_set_color(line+15, red, green, blue);
515    rgb_matrix_set_color(line+20, red, green, blue);
516    rgb_matrix_set_color(line+25, red, green, blue);
517    /* rgb_matrix_set_color(line+29, red, green, blue); */
518    // Right
519    /* rgb_matrix_set_color(line+65, red, green, blue); */
520    rgb_matrix_set_color(line+61, red, green, blue);
521    rgb_matrix_set_color(line+56, red, green, blue);
522    rgb_matrix_set_color(line+51, red, green, blue);
523    rgb_matrix_set_color(line+46, red, green, blue);
524    rgb_matrix_set_color(line+41, red, green, blue);
525    rgb_matrix_set_color(line+36, red, green, blue);
526  } else if (line == 3) {
527    // Left
528    rgb_matrix_set_color(3, red, green, blue);
529    rgb_matrix_set_color(8, red, green, blue);
530    rgb_matrix_set_color(13, red, green, blue);
531    rgb_matrix_set_color(18, red, green, blue);
532    rgb_matrix_set_color(23, red, green, blue);
533    rgb_matrix_set_color(28, red, green, blue);
534    // Right
535    rgb_matrix_set_color(64, red, green, blue);
536    rgb_matrix_set_color(59, red, green, blue);
537    rgb_matrix_set_color(54, red, green, blue);
538    rgb_matrix_set_color(49, red, green, blue);
539    rgb_matrix_set_color(44, red, green, blue);
540    rgb_matrix_set_color(39, red, green, blue);
541  } else if (line == 4) {
542    // Left
543    /* rgb_matrix_set_color(4, red, green, blue); */
544    /* rgb_matrix_set_color(9, red, green, blue); */
545    /* rgb_matrix_set_color(14, red, green, blue); */
546    /* rgb_matrix_set_color(19, red, green, blue); */
547    rgb_matrix_set_color(24, red, green, blue);
548    rgb_matrix_set_color(32, red, green, blue);
549    rgb_matrix_set_color(33, red, green, blue);
550    /* rgb_matrix_set_color(34, red, green, blue); */
551    rgb_matrix_set_color(35, red, green, blue);
552    // Right
553    rgb_matrix_set_color(60, red, green, blue);
554    /* rgb_matrix_set_color(55, red, green, blue); */
555    /* rgb_matrix_set_color(50, red, green, blue); */
556    /* rgb_matrix_set_color(45, red, green, blue); */
557    /* rgb_matrix_set_color(40, red, green, blue); */
558    rgb_matrix_set_color(68, red, green, blue);
559    rgb_matrix_set_color(69, red, green, blue);
560    /* rgb_matrix_set_color(70, red, green, blue); */
561    rgb_matrix_set_color(71, red, green, blue);
562  }
563}
564
565// matrix, to set key with. maybe there is a better way but used ascii generator so i can easily set those visually
566//    ┌────┬────┬────┬────┬────┬────┬────┐             ┌────┬────┬────┬────┬────┬────┬────┐
567//    │ 0  │ 5  │ 10 │ 15 │ 20 │ 25 │ 29 │             │ 65 │ 61 │ 56 │ 51 │ 46 │ 41 │ 36 │
568//    ├────┼────┼────┼────┼────┼────┼────┤             ├────┼────┼────┼────┼────┼────┼────┤
569//    │ 1  │ 6  │ 11 │ 16 │ 21 │ 26 │ 30 │             │ 66 │ 62 │ 57 │ 52 │ 47 │ 42 │ 37 │
570//    ├────┼────┼────┼────┼────┼────┼────┤             ├────┼────┼────┼────┼────┼────┼────┤
571//    │ 2  │ 7  │ 12 │ 17 │[22]│ 27 │ 31 │             │ 67 │ 63 │[58]│ 53 │ 48 │ 43 │ 38 │
572//    ├────┼────┼────┼────┼────┼────┼────┘             └────┼────┼────┼────┼────┼────┼────┤
573//    │ 3  │ 8  │ 13 │ 18 │ 23 │ 28 │                       │ 64 │ 59 │ 54 │ 49 │ 44 │ 39 │
574//    ├────┼────┼────┼────┼────┼────┼─────────┐   ┌─────────┼────┼────┼────┼────┼────┼────┤
575//    │ 4  │ 9  │ 14 │ 19 │ 24 │    │   35    │   │   71    │    │ 60 │ 55 │ 50 │ 45 │ 40 │
576//    └────┴────┴────┴────┴────┼────┼────┬────┤   ├────┬────┼────┼────┴────┴────┴────┴────┘
577//                             │ 32 │ 33 │ 34 │   │ 70 │ 69 │ 68 │
578//                             └────┴────┴────┘   └────┴────┴────┘
579// Runs constantly in the background, in a loop.
580bool rgb_matrix_indicators_user(void) {
581  if (rgb_matrix_get_flags() & (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER)) {
582    switch (get_highest_layer(layer_state)) {
583    case BEPO:
584      rgb_matrix_set_color_all(RGB_OFF);
585      // Line 1
586      my_set_rgb_matrix_color_line(1,213,144,0);
587      // Line 2
588      my_set_rgb_matrix_color_line(2,27,213,0);
589      my_set_rgb_matrix_color_homerow(206,255,206);
590      // Line 3
591      my_set_rgb_matrix_color_line(3,0,255,167);
592      // Line 4
593      my_set_rgb_matrix_color_line(4,0,113,255);
594      break;
595    case ERGL:
596      rgb_matrix_set_color_all(RGB_OFF);
597      // ERGOL layer
598      rgb_matrix_set_color(34, 0, 113, 255);
599      rgb_matrix_set_color(70, 0, 113, 255);
600      // Line 1
601      my_set_rgb_matrix_color_line(1,213,144,0);
602      // Line 2
603      my_set_rgb_matrix_color_line(2,27,213,0);
604      my_set_rgb_matrix_color_homerow(206,255,206);
605      // Line 3
606      my_set_rgb_matrix_color_line(3,0,255,167);
607      // Line 4
608      my_set_rgb_matrix_color_line(4,0,113,255);
609      break;
610    case QWER:
611      rgb_matrix_set_color_all(RGB_OFF);
612      // QWERTY layer
613      rgb_matrix_set_color(34, 27,213,0);
614      rgb_matrix_set_color(70, 27,213,0);
615      // Line 1
616      my_set_rgb_matrix_color_line(1,213,144,0);
617      // Line 2
618      my_set_rgb_matrix_color_line(2,27,213,0);
619      my_set_rgb_matrix_color_homerow(206,255,206);
620      // Line 3
621      my_set_rgb_matrix_color_line(3,0,255,167);
622      // Line 4
623      my_set_rgb_matrix_color_line(4,0,113,255);
624      break;
625    case NUMB:
626      rgb_matrix_set_color_all(RGB_OFF);
627      
628      rgb_matrix_set_color(0, RGB_RED);
629
630      rgb_matrix_set_color(6, 0, 55, 255); // FX
631      rgb_matrix_set_color(11, 0, 55, 255); // FX
632      rgb_matrix_set_color(16, 0, 55, 255); // FX
633      rgb_matrix_set_color(21, 0, 55, 255); // FX
634      rgb_matrix_set_color(26, 0, 55, 255); // FX
635      rgb_matrix_set_color(7, 0, 55, 255); // FX
636      rgb_matrix_set_color(12, 0, 55, 255); // FX
637      rgb_matrix_set_color(17, 0, 55, 255); // FX
638      rgb_matrix_set_color(22, 0, 55, 255); // FX
639      rgb_matrix_set_color(27, 0, 55, 255); // FX
640      rgb_matrix_set_color(8, 0, 55, 255); // FX
641      rgb_matrix_set_color(13, 0, 55, 255); // FX
642
643    
644      rgb_matrix_set_color(18, 0, 183, 255); // FX
645      rgb_matrix_set_color(23, 0, 183, 255); // FX
646      rgb_matrix_set_color(28, 0, 183, 255); // FX
647      
648      rgb_matrix_set_color(60, 255, 255, 255); // 0
649      rgb_matrix_set_color(47, 255, 199, 0);     // number
650      rgb_matrix_set_color(48, 255, 199, 0);     // number
651      rgb_matrix_set_color(49, 255, 199, 0);     // number
652      rgb_matrix_set_color(52, 255, 199, 0);     // number
653      rgb_matrix_set_color(53, 255, 199, 0);     // number
654      rgb_matrix_set_color(54, 255, 199, 0);     // number
655      rgb_matrix_set_color(57, 255, 199, 0);     // number
656      rgb_matrix_set_color(58, 255, 199, 0);     // number
657      rgb_matrix_set_color(59, 255, 199, 0);     // number
658
659      rgb_matrix_set_color(42, 183, 255, 0);     // calc
660      rgb_matrix_set_color(43, 183, 255, 0);     // calc
661      rgb_matrix_set_color(44, 183, 255, 0);     // calc
662      rgb_matrix_set_color(37, 183, 255, 0);     // calc
663      rgb_matrix_set_color(38, 183, 255, 0);     // calc
664      rgb_matrix_set_color(39, 183, 255, 0);     // calc
665      break;
666    case SYMB:
667      rgb_matrix_set_color_all(RGB_OFF);
668      // () {} [] <>
669      rgb_matrix_set_color(11, 27, 213, 0);
670      rgb_matrix_set_color(16, 27, 213, 0);
671      rgb_matrix_set_color(13, 27, 213, 0);
672      rgb_matrix_set_color(18, 27, 213, 0);
673      rgb_matrix_set_color(57, 27, 213, 0);
674      rgb_matrix_set_color(58, 27, 213, 0);
675      rgb_matrix_set_color(52, 27, 213, 0);
676      rgb_matrix_set_color(53, 27, 213, 0);
677
678      // +-=/*
679      rgb_matrix_set_color(23, 29, 204, 67);
680      rgb_matrix_set_color(12, 29, 204, 67);
681      rgb_matrix_set_color(17, 29, 204, 67);
682      rgb_matrix_set_color(22, 29, 204, 67);
683      rgb_matrix_set_color(21, 29, 204, 67);
684      rgb_matrix_set_color(1, 29, 204, 67); // anti-slash
685
686      // `!~|&%^#
687      rgb_matrix_set_color(6, 255, 199, 0);
688      rgb_matrix_set_color(7, 255, 199, 0);
689      rgb_matrix_set_color(8, 255, 199, 0);
690      rgb_matrix_set_color(26, 255, 199, 0);
691      rgb_matrix_set_color(27, 255, 199, 0);
692      rgb_matrix_set_color(28, 255, 199, 0);
693      rgb_matrix_set_color(62, 255, 199, 0);
694      rgb_matrix_set_color(42, 255, 199, 0);
695      rgb_matrix_set_color(63, 255, 199, 0);
696      
697      // "'
698      rgb_matrix_set_color(43, 204, 202, 29);
699      rgb_matrix_set_color(44, 204, 202, 29);
700
701      // :;,.
702      rgb_matrix_set_color(59, 29, 120, 204);
703      rgb_matrix_set_color(54, 29, 120, 204);
704      rgb_matrix_set_color(48, 29, 120, 204);
705      rgb_matrix_set_color(49, 29, 120, 204);
706
707      // @ $
708      rgb_matrix_set_color(47, 174, 29, 204);
709      rgb_matrix_set_color(64, 174, 29, 204);
710      
711      break;
712    case NAVI:
713      rgb_matrix_set_color_all(RGB_OFF);
714
715      rgb_matrix_set_color(1, RGB_RED);
716      rgb_matrix_set_color(37, RGB_RED);
717
718      // Arrows
719      rgb_matrix_set_color(52, 0, 113, 255);
720      rgb_matrix_set_color(53, 0, 113, 255);
721      rgb_matrix_set_color(58, 0, 113, 255);
722      rgb_matrix_set_color(48, 0, 113, 255);
723      // Home, End, PgUp, PgDown 
724      rgb_matrix_set_color(57, 13, 0, 255);
725      rgb_matrix_set_color(47, 13, 0, 255);
726      rgb_matrix_set_color(42, 13, 0, 255);
727      rgb_matrix_set_color(43, 13, 0, 255);
728
729      // Media
730      rgb_matrix_set_color(12, 27, 213, 0);
731      rgb_matrix_set_color(17, 27, 213, 0);
732      rgb_matrix_set_color(22, 27, 213, 0);
733
734      // Volume
735      rgb_matrix_set_color(35, 170, 0, 255);
736      rgb_matrix_set_color(71, 170, 0, 255);
737      rgb_matrix_set_color(64, 170, 0, 255);
738
739      // PrintScreen
740      rgb_matrix_set_color(62, 255, 255, 255);
741      break;
742    case MOUS:
743      rgb_matrix_set_color_all(RGB_OFF);
744      // mouse movements
745      rgb_matrix_set_color(52, 0, 113, 255);
746      rgb_matrix_set_color(53, 0, 113, 255);
747      rgb_matrix_set_color(58, 0, 113, 255);
748      rgb_matrix_set_color(48, 0, 113, 255);
749      // wheel
750
751      rgb_matrix_set_color(7, 13, 0, 255);
752      rgb_matrix_set_color(12, 13, 0, 255);
753      rgb_matrix_set_color(17, 13, 0, 255);
754      rgb_matrix_set_color(22, 13, 0, 255);
755      // clicks
756      rgb_matrix_set_color(32, 170, 0, 255);
757      rgb_matrix_set_color(33, 170, 0, 255);
758      rgb_matrix_set_color(68, 170, 0, 255);
759      rgb_matrix_set_color(69, 170, 0, 255);
760      break;
761    default:
762      rgb_matrix_set_color_all(RGB_OFF);
763      break;
764    }
765  }
766  return false;
767}
768
769void caps_word_set_user(bool active) {
770  if (active) {
771    rgb_matrix_set_color(40, 255, 255, 255);
772  } else {
773    rgb_matrix_set_color(40, RGB_OFF);
774  }
775}