summaryrefslogtreecommitdiffstats
path: root/keyboards/ergodox_ez/keymaps/danielo515/keymap.c
blob: 538eab01634d7dff4ff386f8c9203c9f8c96c08f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
#include QMK_KEYBOARD_H
#include "version.h"
#include "danielo515.h"

/* STUPID JS code to split by ergodox rows. Call the format function with the unformatted array
sliceBy = groups => items => groups.reduce(({start, acc},size) => ({
    acc: (acc.push(items.slice(start,start+size)),acc ),
    start: start + size
}), {acc:[],start:0}).acc
findMaxLen = items => items.reduce((max,curr) => max < curr.length ? curr.length : max,0)
setLen = len => strings => strings.map(str => str.padEnd(len, " "));
const format = string => {
  const items = string.split(/,\s*(?![^()]*\))/)
  const group = sliceBy([7,7,6,7,5,2,1,3])
  const resize = setLen(findMaxLen(items));
  const joinstr = ',\n'
  const leftItems = group(items.slice(0,items.length/2))
  const rightItems = group(items.slice(items.length/2))
  const [left,right] = [leftItems.map(resize).join(joinstr),rightItems.map(resize).join(joinstr)]
  return `\n${left},\n\n${right}\n`
}
*/

#define OSM_SF_CMD  OSM(MOD_LGUI | MOD_LSFT)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [0] = LAYOUT_ergodox(
    KC_EQL              ,KC_1                ,KC_2                ,KC_3                ,KC_4                ,KC_5                ,OSM(MOD_HYPR)    ,
    KC_TAB              ,KC_Q                ,KC_W                ,KC_E                ,KC_R                ,KC_T                ,TD(PASTE_DANCE) ,
    KC_DELETE           ,KC_A                ,LT(3,KC_S)          ,LT(2,KC_D)          ,LT(4,KC_F)          ,KC_G                ,
    KC_GRAVE            ,KC_Z                ,KC_X                ,KC_C                ,KC_V                ,KC_B                ,TD(COPY_CUT) ,
    KC_BSLASH           ,OSM(MOD_LCTL)       ,OSM(MOD_LALT)       ,KC_LEFT             ,KC_RIGHT            ,
    OSM_SF_CMD          ,KC_PLUS             ,
    KC_INSERT           ,
    OSM(MOD_LSFT)       ,LT(2,KC_BSPACE)     ,OSM(MOD_LGUI)              ,


    TO(1)               ,KC_6                ,KC_7                ,KC_8                ,TD_F9               ,LT(3,KC_0)          ,KC_DQUO             ,
    KC_UNDS             ,KC_Y                ,KC_U                ,KC_I                ,KC_O                ,KC_P                ,RSFT_T(KC_MINUS)            ,
    HYPR_T(KC_H)        ,ALT_T(KC_J)         ,RCTL_T(KC_K)        ,LT(6,KC_L)          ,TD_CLN              ,GUI_T(KC_QUOTE)     ,
    ALT_TAB             ,KC_N                ,MEH_T(KC_M)         ,KC_COMMA            ,KC_DOT              ,KC_SLASH            ,LT(4,KC_KP_ASTERISK),
    LT(4,KC_ENTER)      ,KC_DOWN             ,KC_LBRACKET         ,KC_RBRACKET         ,OSL(2)              ,
    KC_AUDIO_MUTE       ,KC_ESCAPE           ,
    KC_END              ,
    KC_COLN             ,KC_LEAD             ,LT(4,KC_SPACE)
    ),

  [1] = LAYOUT_ergodox(
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,AC_E            ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    LT(5, KC_DELETE),AC_A            ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,FIND            ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,
    OSM(MOD_LSFT)   ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    TO(8)           ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_ENTER        ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,
    KC_TRANSPARENT  ,KC_TRANSPARENT  ,KC_TRANSPARENT),

  [2] = LAYOUT_ergodox(
    KC_TRANSPARENT,KC_F1         ,KC_F2         ,KC_F3         ,KC_F4         ,KC_F5         ,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_EXLM       ,KC_AT         ,KC_LCBR       ,KC_RCBR       ,KC_PIPE       ,KC_CALCULATOR ,
    KC_TRANSPARENT,KC_HASH       ,KC_DLR        ,KC_TRANSPARENT,KC_RPRN       ,KC_GRAVE      ,
    KC_TRANSPARENT,KC_PERC       ,KC_CIRC       ,KC_LBRACKET   ,KC_RBRACKET   ,KC_TILD       ,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,
                                  RGB_HUI       ,
    KC_TRANSPARENT,KC_TRANSPARENT,RGB_HUD       ,
    KC_DELETE     ,KC_A          ,KC_B          ,KC_C          ,KC_D          ,KC_E          ,KC_BSPACE     ,
    KC_ENTER      ,KC_F          ,KC_7          ,KC_8          ,KC_9          ,KC_PERC       ,KC_TRANSPARENT,
                   KC_HASH       ,KC_4          ,KC_5          ,KC_6          ,KC_PLUS       ,KC_KP_ASTERISK,
    KC_KP_ENTER   ,KC_COLON      ,KC_1          ,KC_2          ,KC_3          ,KC_SLASH      ,KC_BSLASH     ,
                                  KC_0          ,KC_COMMA      ,KC_DOT        ,KC_EQUAL      ,KC_TRANSPARENT,
    RGB_TOG       ,RGB_SLD       ,
    RGB_VAI       ,
    RGB_VAD       ,KC_BSPACE     ,KC_SPACE
  ),

  [3] = LAYOUT_ergodox(
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_LABK            ,KC_RABK            ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,KC_AT              ,KC_TRANSPARENT     ,KC_EQL             ,F_ARROW            ,KC_GRAVE           ,
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_LBRACKET        ,KC_RBRACKET        ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,
    // Right hand
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    LALT(LSFT(KC_UP))  ,KC_HASH            ,KC_LCBR            ,KC_RCBR            ,KC_KP_ASTERISK     ,KC_PERC            ,KC_DLR             ,
                        KC_AMPR            ,KC_LPRN            ,KC_RPRN            ,KC_CIRC            ,KC_KP_PLUS         ,KC_PIPE            ,
    LALT(LSFT(KC_DOWN)),KC_EXLM            ,KC_TILD            ,KC_CIRC            ,ARROW              ,KC_BSLASH          ,KC_BSLASH          ,
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    RESET              ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_SPACE
),

  [4] = LAYOUT_ergodox(
    KC_TRANSPARENT     ,KC_F1              ,KC_F2              ,KC_F3              ,KC_F4              ,KC_F5              ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,LCTL(KC_Q)         ,LCTL(KC_DOWN)      ,LGUI(KC_DOWN)      ,WIN_LEFT_HALF      ,WIN_RIGHT_HALF     ,LALT(LSFT(KC_UP))  ,
    LCTL(LSFT(KC_P))   ,LCTL(KC_A)         ,SAVE               ,LCTL(KC_D)         ,KC_TRANSPARENT     ,RGUI(KC_R)         ,
    LCTL(LSFT(KC_F))   ,UNDO               ,CUT                ,KC_PSCREEN         ,KC_TRANSPARENT     ,LGUI(KC_RIGHT)     ,LALT(LSFT(KC_DOWN)),
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,

    LALT(KC_F4)        ,KC_F6              ,KC_F7              ,KC_F8              ,KC_F9              ,KC_F10             ,KC_F11             ,
    LALT(KC_UP)        ,LSFT(KC_HOME)      ,LSFT(KC_LEFT)      ,KC_UP              ,LSFT(KC_RIGHT)     ,LSFT(KC_END)       ,KC_F13             ,
                        KC_HOME            ,KC_LEFT            ,KC_DOWN            ,KC_RIGHT           ,KC_END             ,KC_F12             ,
    LALT(KC_DOWN)      ,LSFT(KC_INSERT)    ,LCTL(LSFT(KC_J))   ,LSFT(KC_UP)        ,KC_PGUP            ,KC_TRANSPARENT     ,KC_TRANSPARENT     ,
    KC_TRANSPARENT                                             ,LSFT(KC_DOWN)      ,KC_PGDOWN          ,WIN_TO_LEFT        ,WIN_TO_RIGHT     ,
    KC_TRANSPARENT     ,KC_SYSTEM_SLEEP    ,
    KC_TRANSPARENT     ,
    KC_TRANSPARENT     ,KC_BSPACE          ,KC_TRANSPARENT
  ),

  [5] = LAYOUT_ergodox(
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,LCTL(KC_TAB)        ,LCTL(LSFT(KC_TAB))  ,LGUI(KC_D)          ,LCTL(KC_F)          ,KC_TRANSPARENT      ,
    LGUI(KC_L)          ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,

    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,LSFT(KC_F9)         ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,LCTL(LGUI(KC_LEFT)) ,LCTL(LGUI(KC_RIGHT)),KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,LCTL(KC_T)          ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT
),

  [6] = LAYOUT_ergodox(
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_MS_ACCEL2        ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_MS_WH_DOWN       ,KC_MS_UP            ,KC_MS_WH_UP         ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_MS_LEFT          ,KC_MS_DOWN          ,KC_MS_RIGHT         ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_MS_BTN3          ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,
    KC_MS_BTN1          ,KC_MS_BTN2          ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_PGUP             ,LCTL(LGUI(KC_RIGHT)),KC_MS_WH_UP         ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    LGUI(RCTL(KC_LEFT)) ,KC_MS_WH_DOWN       ,LCTL(KC_C)          ,KC_TRANSPARENT      ,KC_MEDIA_STOP       ,KC_MEDIA_PLAY_PAUSE ,
    KC_PGDOWN           ,LCTL(LSFT(KC_N))    ,LCTL(LSFT(KC_J))    ,KC_MEDIA_PREV_TRACK ,KC_MEDIA_NEXT_TRACK ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_AUDIO_VOL_UP     ,KC_AUDIO_VOL_DOWN   ,KC_AUDIO_MUTE       ,KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,
    KC_TRANSPARENT      ,KC_TRANSPARENT      ,KC_TRANSPARENT
  ),

  [7] = LAYOUT_ergodox(
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,

    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_UP         ,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_LEFT       ,KC_DOWN       ,KC_RIGHT      ,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT
  ),

  [8] = LAYOUT_ergodox(
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_Q          ,KC_W          ,KC_E          ,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_ENTER      ,KC_A          ,KC_S          ,KC_D          ,KC_F          ,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_Z          ,KC_X          ,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,
    KC_SPACE      ,KC_LSHIFT     ,KC_TRANSPARENT,

    TO(0)         ,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_PGDOWN     ,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_ENTER      ,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,
    KC_TRANSPARENT,
    KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT
  ),
};
// Used for blinking leds on layers higher than 7
uint16_t blink_timer = 0;
uint16_t blink_elapsed = 0;
bool blink_led_1 = false;
bool blink_led_2 = false;
bool blink_led_3 = false;

void matrix_scan_kb(void){
    // first 7 layers do not need to blink
    if(blink_led_1 || blink_led_2 || blink_led_3){
        ergodox_board_led_off();
        ergodox_right_led_1_off();
        ergodox_right_led_2_off();
        ergodox_right_led_3_off();
        blink_elapsed = timer_elapsed(blink_timer);
        if(blink_elapsed > 2000) { blink_timer = timer_read();}
        if(blink_elapsed < 1000) {
            if(blink_led_1) ergodox_right_led_1_on();
            if(blink_led_2) ergodox_right_led_2_on();
            if(blink_led_3) ergodox_right_led_3_on();
        }
    }
    matrix_scan_user();
};

layer_state_t layer_state_set_user(layer_state_t state)
{

  uint8_t layer = get_highest_layer(state);

  ergodox_board_led_off();
  ergodox_right_led_1_off();
  ergodox_right_led_2_off();
  ergodox_right_led_3_off();
  blink_led_1=false;
  blink_led_2=false;
  blink_led_3=false;

  switch (layer)
  {
  case 0:
    rgblight_setrgb(0, 200, 200);
    break;
  case 1:
    ergodox_right_led_1_on();
    rgblight_setrgb(0, 200, 0); // green
    break;
  case 2:
    ergodox_right_led_2_on();
    rgblight_setrgb(0, 0, 255);
    break;
  case 3:
    ergodox_right_led_3_on();
    rgblight_setrgb(255, 0, 0);
    break;
  case 4:
    ergodox_right_led_1_on();
    ergodox_right_led_2_on();
    rgblight_setrgb(200, 65, 0);
    break;
  case 5:
    ergodox_right_led_1_on();
    ergodox_right_led_3_on();
    rgblight_setrgb(0, 80, 33);
    break;
  case 6:
    ergodox_right_led_2_on();
    ergodox_right_led_3_on();
    rgblight_setrgb(0, 10, 200);
    break;
  case 7:
    ergodox_right_led_1_on();
    ergodox_right_led_2_on();
    ergodox_right_led_3_on();
    rgblight_setrgb(90, 150, 90);
    break;
  case 8:
    blink_led_1=true;
    rgblight_setrgb(100, 0, 100);
    break;
  case 9:
    rgblight_setrgb(200, 150, 90);
    break;
//   default:
//     rgblight_setrgb(0, 200, 200);
//     break;
  }
  return state;
};

// use leds to indicate when a one shot mod is on
void oneshot_mods_changed_user(uint8_t mods) {
  ergodox_board_led_off();
  ergodox_right_led_1_off();
  ergodox_right_led_2_off();
  ergodox_right_led_3_off();
  // One shot checks
  if (mods & MOD_MASK_SHIFT) {
    ergodox_right_led_1_on();
  }
  if (mods & MOD_MASK_CTRL) {
    ergodox_right_led_2_on();
  }
  if (mods & MOD_MASK_ALT) {
    ergodox_right_led_3_on();
  }
  // if (mods & MOD_MASK_GUI) {
  //   println("Oneshot mods GUI");
  // }
  }

void oneshot_locked_mods_changed_user(uint8_t mods) {
    oneshot_mods_changed_user(mods);
}