aboutsummaryrefslogtreecommitdiff
path: root/keyboards/keebio/iris/keymaps/transmogrified/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/keebio/iris/keymaps/transmogrified/keymap.c')
-rw-r--r--keyboards/keebio/iris/keymaps/transmogrified/keymap.c421
1 files changed, 421 insertions, 0 deletions
diff --git a/keyboards/keebio/iris/keymaps/transmogrified/keymap.c b/keyboards/keebio/iris/keymaps/transmogrified/keymap.c
new file mode 100644
index 000000000..67545f08e
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/transmogrified/keymap.c
@@ -0,0 +1,421 @@
1#include "iris.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4
5extern keymap_config_t keymap_config;
6
7#define _QWERTY 0
8#define _COLEMAK 1
9#define _RLAYER 2
10#define _LLAYER 3
11#define _DUAL 4
12#define _CONFIG 5
13
14enum custom_keycodes {
15 QWERTY = SAFE_RANGE, // qwerty base layer
16 COLEMAK, // colemak base layer
17 RLAYER, // right layer
18 LLAYER, // left layer
19 RLOCK, // right layer LOCK
20 LLOCK, // left layer LOCK
21 DUAL, // right and left combo layer
22 CONFIG, // config layer
23 LEDUP, // custom LED brightness increase keycode
24 LEDDOWN, // custom LED brightness decrease keycode
25};
26
27/* Tap Dance */
28enum {
29 TD_LGUIAPP, // LGUI x1, app/menu x2
30 TD_SHIFTCAPS, // LSHIFT x1, CAPS x3
31 TD_CTRLALTDL, // CTRL+ALT+DEL x3
32 TD_SHIFTCLAT, // LSHIFT x1, LCRTL x2, LALT x3, CTRL+ALT x4
33};
34
35/* NOOP Key and Transparent */
36#define KC_ KC_TRNS
37#define KC_XXXX KC_NO
38
39/* LAYERS / CUSTOM KEYS */
40#define KC_LLAY LLAYER
41#define KC_RLAY RLAYER
42#define KC_RLOK RLOCK
43#define KC_LLOK LLOCK
44#define KC_QWER QWERTY
45#define KC_COLE COLEMAK
46#define KC_DUAL DUAL
47#define KC_CONF CONFIG
48#define KC_BLUP LEDUP
49#define KC_BLDN LEDDOWN
50
51/* Custom Shortened Keys (4 digits so they fit in my grid) */
52#define KC_MCTB LCTL(KC_TAB)
53#define KC_MCST LCTL(LSFT(KC_TAB))
54#define KC_CTEC CTL_T(KC_ESC)
55#define KC_SINS LSFT(KC_INS)
56#define KC_LGU1 LGUI(KC_1)
57#define KC_LGU2 LGUI(KC_2)
58#define KC_LGU3 LGUI(KC_3)
59#define KC_LGU4 LGUI(KC_4)
60#define KC_LGU5 LGUI(KC_5)
61#define KC_LGU6 LGUI(KC_6)
62#define KC_LGU7 LGUI(KC_7)
63#define KC_LGU8 LGUI(KC_8)
64#define KC_LGU9 LGUI(KC_9)
65#define KC_LGU0 LGUI(KC_0)
66#define KC_SYSR KC_SYSREQ
67#define KC_REST RESET
68
69/* Tap Dance */
70#define KC_LGUA TD(TD_LGUIAPP)
71#define KC_SHCP TD(TD_SHIFTCAPS)
72#define KC_CADL TD(TD_CTRLALTDL)
73#define KC_SHCA TD(TD_SHIFTCLAT)
74
75
76const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
77
78 [_QWERTY] = LAYOUT_kc(
79 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
80 CADL, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
81 //|----+----+----+----+----+----| |----+----+----+----+----+----|
82 TAB , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
83 //|----+----+----+----+----+----| |----+----+----+----+----+----|
84 CTEC, A , S , D , F , G , H , J , K , L ,SCLN,ENT ,
85 //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
86 SHCP, Z , X , C , V , B ,LLOK, RLOK, N , M ,COMM,DOT ,SLSH,SHCA,
87 //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
88 LALT,LLAY,TAB , SPC ,RLAY,LGUA
89 // `----+----+----' `----+----+----'
90 ),
91
92 [_COLEMAK] = LAYOUT_kc(
93 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
94 CADL, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
95 //|----+----+----+----+----+----| |----+----+----+----+----+----|
96 TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,DEL ,
97 //|----+----+----+----+----+----| |----+----+----+----+----+----|
98 CTEC, A , R , S , T , D , H , N , E , I , O ,ENT ,
99 //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
100 SHCP, Z , X , C , V , B ,LLOK, RLOK, K , M ,COMM,DOT ,SLSH,SHCA,
101 //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
102 LALT,LLAY,TAB , SPC ,RLAY,LGUA
103 // `----+----+----' `----+----+----'
104 ),
105
106 [_RLAYER] = LAYOUT_kc(
107 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
108 ,SLCK,SYSR,PSCR,INS ,PAUS, MUTE,VOLD,VOLU,BLDN,BLUP, ,
109 //|----+----+----+----+----+----| |----+----+----+----+----+----|
110 ,TILD,GRV ,EQL ,LBRC,RBRC, ASTR,HOME, UP ,PGUP,PLUS, ,
111 //|----+----+----+----+----+----| |----+----+----+----+----+----|
112 ,EXLM,PIPE,DLR ,LPRN,RPRN, AMPR,LEFT,DOWN,RGHT,MINS,QUOT,
113 //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
114 , AT ,HASH,PERC,LCBR,RCBR, , ,CIRC,END ,UNDS,PGDN,BSLS, ,
115 //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
116 , , , , ,
117 // `----+----+----' `----+----+----'
118 ),
119
120 [_LLAYER] = LAYOUT_kc(
121 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
122 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 , ,
123 //|----+----+----+----+----+----| |----+----+----+----+----+----|
124 ,XXXX,XXXX, UP , F5 ,XXXX, ASTR, 7 , 8 , 9 ,PLUS, ,
125 //|----+----+----+----+----+----| |----+----+----+----+----+----|
126 ,XXXX,MCST,DOWN,MCTB,ENT , SLSH, 4 , 5 , 6 ,MINS, ,
127 //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
128 ,XXXX,XXXX,BSPC,SINS,SPC ,F11 , F12 ,EQL , 1 , 2 , 3 ,DOT , ,
129 //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
130 , , , 0 , ,
131 // `----+----+----' `----+----+----'
132 ),
133
134 [_DUAL] = LAYOUT_kc(
135 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
136 ,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
137 //|----+----+----+----+----+----| |----+----+----+----+----+----|
138 ,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,MS_U,XXXX,XXXX,XXXX,
139 //|----+----+----+----+----+----| |----+----+----+----+----+----|
140 ,XXXX,XXXX,XXXX,XXXX,XXXX, BTN2,MS_L,MS_D,MS_R,BTN1,XXXX,
141 //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
142 ,LGU1,LGU2,LGU3,LGU4,LGU5,CONF, XXXX,LGU6,LGU7,LGU8,LGU9,LGU0, ,
143 //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
144 , , , , ,
145 // `----+----+----' `----+----+----'
146 ),
147
148 [_CONFIG] = LAYOUT_kc(
149 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
150 REST,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
151 //|----+----+----+----+----+----| |----+----+----+----+----+----|
152 XXXX,QWER,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
153 //|----+----+----+----+----+----| |----+----+----+----+----+----|
154 XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
155 //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
156 XXXX,XXXX,XXXX,COLE,XXXX,XXXX, , ,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
157 //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
158 XXXX, ,XXXX, XXXX, ,XXXX
159 // `----+----+----' `----+----+----'
160 ),
161};
162
163
164/* VARIABLES */
165// Configurable Variables for layer toggled light
166int layerBLStep = 20; // change how much the brightness changes when holding layer key
167int breathPulse = 5; // timing of the breathing
168int breathPulseStall = 3; // time to pause at top and bottom of breath cycle
169int blSteps = 6; // blSteps + 1 is the amount of brightness settings when manually adjusting
170
171// Variables needed for layer locked breathing and layer toggling lighting to work
172int counter = 0;
173bool breathUp = true;
174bool resetBL = false;
175bool rlocked = false;
176bool llocked = false;
177bool configOn = false;
178int lockedBLLevel;
179int momentaryLBLLevel;
180int momentaryRBLLevel;
181int currentBL;
182/* END VARIABLES */
183
184/* TAP DANCE */
185void shift_caps_down (qk_tap_dance_state_t *state, void *user_data) {
186 if (state->count >= 3) {
187 register_code (KC_CAPS);
188 } else {
189 register_code (KC_LSFT);
190 }
191}
192void shift_caps_up (qk_tap_dance_state_t *state, void *user_data) {
193 if (state->count >= 3) {
194 unregister_code (KC_CAPS);
195 } else {
196 unregister_code (KC_LSFT);
197 }
198}
199void shift_ctrlalt_down (qk_tap_dance_state_t *state, void *user_data) {
200 if (state->count >= 4) {
201 register_code (KC_LCTL);
202 register_code (KC_LALT);
203 } else if (state->count == 3) {
204 register_code (KC_LALT);
205 } else if (state->count == 2) {
206 register_code (KC_LCTL);
207 } else {
208 register_code (KC_RSFT);
209 }
210}
211void shift_ctlalt_up (qk_tap_dance_state_t *state, void *user_data) {
212 if (state->count >= 4) {
213 unregister_code (KC_LALT);
214 unregister_code (KC_LCTL);
215 } else if (state->count == 3) {
216 unregister_code (KC_LALT);
217 } else if (state->count == 2) {
218 unregister_code (KC_LCTL);
219 } else {
220 unregister_code (KC_RSFT);
221 }
222}
223void ctrlaltdel_up (qk_tap_dance_state_t *state, void *user_data) {
224 if (state->count >= 3) {
225 unregister_code (KC_DEL);
226 unregister_code (KC_LALT);
227 unregister_code (KC_LCTL);
228 } else {
229 }
230}
231void ctrlaltdel_down (qk_tap_dance_state_t *state, void *user_data) {
232 if (state->count >= 3) {
233 register_code (KC_LCTL);
234 register_code (KC_LALT);
235 register_code (KC_DEL);
236 } else {
237 }
238}
239qk_tap_dance_action_t tap_dance_actions[] = {
240 [TD_LGUIAPP] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_APP),
241 [TD_SHIFTCAPS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, shift_caps_down, shift_caps_up),
242 [TD_SHIFTCLAT] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, shift_ctrlalt_down, shift_ctlalt_up),
243 [TD_CTRLALTDL] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ctrlaltdel_down, ctrlaltdel_up)
244};
245/* END TAP DANCE */
246
247
248
249void persistent_default_layer_set(uint16_t default_layer) {
250 eeconfig_update_default_layer(default_layer);
251 default_layer_set(default_layer);
252}
253
254bool process_record_user(uint16_t keycode, keyrecord_t *record) {
255 switch (keycode) {
256 case QWERTY:
257 if (record->event.pressed) {
258 set_single_persistent_default_layer(_QWERTY);
259 configOn = false;
260 if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
261 backlight_toggle();
262 }
263 }
264 return false;
265 break;
266 case COLEMAK:
267 if (record->event.pressed) {
268 set_single_persistent_default_layer(_COLEMAK);
269 configOn = false;
270 if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
271 backlight_toggle();
272 }
273 }
274 return false;
275 break;
276 case CONFIG:
277 if (record->event.pressed) {
278 set_single_persistent_default_layer(_CONFIG);
279 configOn = true;
280 if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
281 backlight_toggle();
282 }
283 }
284 return false;
285 break;
286 case RLAYER:
287 if (record->event.pressed) {
288 layer_on(_RLAYER);
289 update_tri_layer(_RLAYER, _LLAYER, _DUAL);
290 momentaryRBLLevel = get_backlight_level();
291 if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
292 for (int i = 0; i < layerBLStep ; i++){
293 backlight_increase();
294 }
295 }
296 } else {
297 unregister_code(KC_LGUI);
298 layer_off(_RLAYER);
299 update_tri_layer(_RLAYER, _LLAYER, _DUAL);
300 if ( llocked == false && configOn == false ) {
301 for (int i = 0; i < layerBLStep ; i++){
302 backlight_decrease();
303 }
304 } else {
305 }
306 rlocked = false;
307 }
308 return false;
309 break;
310 case LLAYER:
311 if (record->event.pressed) {
312 layer_on(_LLAYER);
313 update_tri_layer(_RLAYER, _LLAYER, _DUAL);
314 momentaryLBLLevel = get_backlight_level();
315 if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
316 for (int i = 0; i < layerBLStep ; i++){
317 backlight_increase();
318 }
319 }
320 } else {
321 layer_off(_LLAYER);
322 update_tri_layer(_RLAYER, _LLAYER, _DUAL);
323 if ( rlocked == false && configOn == false ) {
324 for (int i = 0; i < layerBLStep ; i++){
325 backlight_decrease();
326 }
327 } else {
328 }
329 llocked = false;
330 }
331 return false;
332 break;
333 case RLOCK:
334 if (record->event.pressed) {
335 layer_on(_RLAYER);
336 /* add logic to toggle backlight change when on a layer */
337 if (rlocked == false && llocked == false){
338 lockedBLLevel = get_backlight_level();
339 }
340 rlocked = true;
341 } else {
342 }
343 return false;
344 break;
345 case LLOCK:
346 if (record->event.pressed) {
347 layer_on(_LLAYER);
348 /* add logic to toggle backlight change when on a layer */
349 if (rlocked == false && llocked == false){
350 lockedBLLevel = get_backlight_level();
351 }
352 llocked = true;
353 } else {
354 }
355 return false;
356 break;
357 case LEDUP:
358 if (record->event.pressed) {
359 for (int i = 0; i < (BACKLIGHT_LEVELS / blSteps ) ; i++ ){
360 backlight_increase();
361 }
362 } else {
363 }
364 return false;
365 break;
366 case LEDDOWN:
367 if (record->event.pressed) {
368 for (int i = 0; i < (BACKLIGHT_LEVELS / blSteps ) ; i++ ){
369 backlight_decrease();
370 }
371 } else {
372 }
373 return false;
374 break;
375 }
376 return true;
377}
378
379
380// LED breathing when a layer is locked
381void matrix_scan_user(void) {
382 // Only breath if layer is locked
383 if (lockedBLLevel != 0 && (rlocked || llocked)){
384 // counter to slow down the breathing
385 if (counter >= breathPulse) {
386 counter = 0;
387 // iterate brightness up or down
388 if (breathUp){
389 backlight_increase();
390 } else {
391 backlight_decrease();
392 }
393 // figure out if we need to change directions
394 currentBL = get_backlight_level();
395 if (currentBL >= BACKLIGHT_LEVELS){
396 breathUp = false;
397 // make counter a big negative number to add some stall time
398 counter = ((BACKLIGHT_LEVELS * breathPulseStall) * (-1));
399 } else if (currentBL == 0){
400 breathUp = true;
401 // make counter a big negative number to add some stall time
402 counter = ((BACKLIGHT_LEVELS * breathPulseStall) * (-1));
403 }
404 // make not that we need to change the brightness back to when we started the breathing
405 resetBL = true;
406 } else {
407 counter++;
408 }
409 } else {
410 // get the brightness back to the level it started at
411 if (resetBL){
412 int i = 0;
413 // i is just there to make sure i don't get stuck in a loop if for some reason get_backlight_level isn't working as expected
414 while (get_backlight_level() != lockedBLLevel && i <= BACKLIGHT_LEVELS ){
415 backlight_step();
416 i++;
417 }
418 resetBL = false;
419 }
420 }
421}