]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/chimera_ortho/keymaps/gordon/keymap.c
721f8207ae8731260bd88815b28ab68e4aa6fe52
[qmk_firmware.git] / keyboards / chimera_ortho / keymaps / gordon / keymap.c
1 // this is the style you want to emulate.
2 // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
3
4 #include "chimera_ortho.h"
5 #include "action_layer.h"
6 #include "version.h"
7 #include "process_keycode/process_tap_dance.h"
8 #include "gordon.h"
9
10 // Each layer gets a name for readability, which is then used in the keymap matrix below.
11 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
12 // Layer names don't all need to be of the same length, obviously, and you can also skip them
13 // entirely and just use numbers.
14
15 #define CALTDEL LCTL(LALT(KC_DEL))
16 #define TSKMGR LCTL(LSFT(KC_ESC))
17
18 #define KC_SNAPLEFT LGUI(KC_LEFT)
19 #define KC_SNAPRIGHT LGUI(KC_RIGHT)
20 #define KC_SNAPUP LGUI(KC_UP)
21 #define KC_SNAPDOWN LGUI(KC_DOWN)
22 #define KC_PREVTAB LCTL(LSFT(KC_TAB))
23 #define KC_NEXTTAB LCTL(KC_TAB)
24 #define KC_WORKRIGHT LCTL(LGUI(KC_RIGHT))
25 #define KC_WORKLEFT LCTL(LGUI(KC_LEFT))
26
27 #define KC_NMPD TG(_NUMPAD)
28 #define KC_SYMB TG(_SYMBOLS)
29
30 #define KC_SCTL MT(MOD_LCTL, KC_LBRC)
31 #define KC_SCTR MT(MOD_LCTL, KC_RBRC)
32 #define KC_SPLT MT(MOD_LALT, KC_MINS)
33 #define KC_SPRT MT(MOD_LALT, KC_1)
34 #define KC_GBRC MT(MOD_RGUI, KC_8)
35 #define KC_GQOT MT(MOD_LGUI, KC_QUOT)
36 #define KC_CSHW MT(MOD_LCTL|MOD_LSFT,KC_W)
37
38 #define KC_CDEL LCTL(KC_DEL)
39 #define KC_AUDUP KC_AUDIO_VOL_UP
40 #define KC_AUDOWN KC_AUDIO_VOL_DOWN
41
42
43 #define KC_MEHS MEH_T(KC_S)
44 #define KC_MEHL MEH_T(KC_L)
45 #define KC_GWIN GUI_T(KC_G)
46 #define KC_FCTL CTL_T(KC_F)
47 #define KC_JCTL CTL_T(KC_J)
48 #define KC_ZCTL CTL_T(KC_Z)
49 #define KC_ALTV ALT_T(KC_V)
50 #define KC_ALTN ALT_T(KC_N)
51 #define KC_MEHX ALL_T(KC_X)
52 #define KC_RESET RESET
53
54 //LTs
55 #define KC_MESC LT(_MACROS, KC_ESC)
56 #define KC_DNUM LT(_NUMPAD, KC_D)
57 #define KC_SPFN LT(_NAV,KC_EQL)
58 #define KC_EMAUS LT(_MOUSE,KC_E)
59 #define KC_ENAV LT(_NAV,KC_E)
60 #define KC_INAV LT(_TEXTNAV,KC_I)
61 #define KC_BSPSYM LT(_SYMBOLS,KC_BSPACE)
62 #define KC_ENTSYM LT(_SYMBOLS,KC_ENTER)
63 #define KC_CLNMAUS LT(_MOUSE,KC_SCOLON)
64
65 #define KC_FUNC TT(_FUNCTION)
66
67 //TAP DANCE
68 #define KC_F6F7 TD(F6F7)
69 #define KC_ALF4 TD(ALTF4)
70 #define KC_TTT TD(TTT)
71 #define KC_ENHM TD(HOME_END)
72 #define KC_CLPS TD(CALC_PRINTSCREEN)
73
74
75 #define KC_INCL M(0)
76 #define KC_PULL M(1)
77 #define KC_PUSH M(2)
78 #define KC_SCAP M(3)
79 #define KC_SCOF M(4)
80 #define KC_CAD LALT(LCTL(KC_DEL))
81
82 #define LONGPRESS_DELAY 150
83 //#define LAYER_TOGGLE_DELAY 300
84
85 // Fillers to make layering more clear
86 #define _______ KC_TRNS
87 #define XXXXXXX KC_NO
88 #define KC_ KC_TRNS 
89
90 /* TODO: 
91  *
92  * DONE: RESET and CAD into macro layer.
93  * DONE: WINUP AND WINDOWN in NAV layer
94  * DONE: Get rid of caps layer. not sure what it is even for.
95  * DONE: LMEH
96  * DONE: plus, divide, multiply on left hand for num layer
97  * DONE: F1 - F12 on a layer toggle (not a temp toggle but a one shot or something)
98  * DONE: Volume, page up and down for mouse layer.
99  * DONE: Add full user files - without using anything.
100  * DONE: Insert, ctrl delete
101  * DONE: Home and End
102  * DONE: Printscreen
103
104  * Easier way to open new terminal (instead of alt + F2)
105  * Intellij/text navigation layer (ctrl delete could be here).
106  * Macro for "System.exit(0)" probably macro layer and "c"
107  * Some sort of tap dance for comma, H, right pinky, and possibly other corners.
108  * Something more with the right hand. not sure what.
109  * Mouse: Left scroll, right scroll
110  * Passwords and any other macros.
111  * LED for control
112  * All modifiers reset
113  * Russain layer
114  * Hebrew layer
115  * Get rid of stupid git pull and push macros.
116  * 
117 */
118
119 //Tap dance enums
120 enum {
121   F12ETAPS = 0,
122   CALCCOMP,
123   ALTF4,
124   F6F7,
125   TTT,
126   HOME_END,
127   CALC_PRINTSCREEN
128 };
129
130 static xtap ttt_state = { 
131   .is_press_action = true,
132   .state = 0
133 };
134
135
136 //Already exists in gordon.c, shouldn't need this anymore
137 /*// To activate SINGLE_HOLD, you will need to hold for 200ms first. 
138 // This tap dance favors keys that are used frequently in typing like 'f'
139 int cur_dance (qk_tap_dance_state_t *state) {
140   if (state->count == 1) {
141     if (state->interrupted) {
142       return SINGLE_TAP;
143     }
144     else {
145       if (!state->pressed) return SINGLE_TAP;
146       else return SINGLE_HOLD;
147     }
148   }
149   //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
150   //with single tap.
151   else if (state->count == 2) {
152     if (state->interrupted) return DOUBLE_SINGLE_TAP;
153     else if (state->pressed) return DOUBLE_HOLD;
154     else return DOUBLE_TAP; 
155   } 
156   else if ((state->count == 3) && ((state->interrupted) || (!state->pressed))) return TRIPLE_TAP;
157   else if (state->count == 3) return TRIPLE_HOLD;
158   else return 8; //magic number. At some point this method will expand to work for more presses
159 }*/
160
161 /* "Super tap toggle"
162  * Basically, TT but for two or more layers for a single key.
163  * This particular dance:
164  * Single tap/hold - TT for Function layer
165  * Double tap/hold - TT for Numpad layer
166  * Triple tap/hold - TT for Mouse layer
167  *
168 */
169 void TTT_finished (qk_tap_dance_state_t *state, void *user_data) {
170   ttt_state.state = cur_dance(state);
171   switch (ttt_state.state) {
172     case SINGLE_TAP: layer_invert(_FUNCTION); break;
173     case SINGLE_HOLD: layer_on(_FUNCTION); break;
174     case DOUBLE_TAP: layer_invert(_NUMPAD); break;
175     case DOUBLE_HOLD: layer_on(_NUMPAD); break;
176     case DOUBLE_SINGLE_TAP: layer_invert(_NUMPAD); break;
177     case TRIPLE_TAP: layer_invert(_MOUSE); break;
178     case TRIPLE_HOLD: layer_on(_MOUSE); break;
179   }
180 }
181
182 void TTT_reset (qk_tap_dance_state_t *state, void *user_data) {
183   switch (ttt_state.state) {
184     case SINGLE_TAP: break;
185     case SINGLE_HOLD: layer_off(_FUNCTION); break;
186     case DOUBLE_TAP:  break;
187     case DOUBLE_HOLD: layer_off(_NUMPAD); break;
188     case DOUBLE_SINGLE_TAP:  break;
189     case TRIPLE_TAP:  break;
190     case TRIPLE_HOLD: layer_off(_MOUSE); break;
191   }
192   ttt_state.state = 0;
193 }
194
195 qk_tap_dance_action_t tap_dance_actions[] = {
196   // simple tap dance
197   [F12ETAPS] = ACTION_TAP_DANCE_DOUBLE(KC_F12,LSFT(LCTL(KC_F10))),  
198   [CALCCOMP] = ACTION_TAP_DANCE_DOUBLE(KC_CALCULATOR, KC_MY_COMPUTER),
199   [CALC_PRINTSCREEN] = ACTION_TAP_DANCE_DOUBLE(KC_CALCULATOR, KC_PSCR),
200   [ALTF4] = ACTION_TAP_DANCE_DOUBLE(KC_F4,LALT(KC_F4)),
201   [F6F7] = ACTION_TAP_DANCE_DOUBLE(LSFT(KC_F6), LALT(KC_F7)),
202   [HOME_END] = ACTION_TAP_DANCE_DOUBLE(KC_END, KC_HOME),
203   [TTT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,TTT_finished, TTT_reset),
204 };
205
206
207 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
208
209   [_QWERTY] = KEYMAP(
210   //,----+----+----+----+----+----+----.      ,----+----+----+----+----+----+----.
211      MESC, Q  ,CSHW,ENAV, R  , T  ,SPC ,       CLPS, Y  , U  ,INAV, O  , P  ,TTT,
212   //|----+----+----+----+----+----+----|      |----+----+----+----+----+----+----|
213      TAB , A , MEHS,DNUM,FCTL,GWIN,GRAVE,      TILD, H  ,JCTL, K ,MEHL,CLNMAUS,ENHM,
214   //|----+----+----+----+----+----+----|      |----+----+----+----+----+----+----|
215     MINUS,ZCTL,MEHX, C  ,ALTV, B  ,DELETE,     INS ,ALTN, M  ,COMM,DOT ,SLSH,UNDS,
216   //|----+----+----+----+----+----+----|      |----+----+----+----+----+----+----|
217                          LSHIFT,BSPSYM,                SPC ,ENTSYM
218   // \------------------+----+----+---/       \---+----+----+-------------------/
219   ),
220
221   [_NUMPAD] = KEYMAP(  
222   //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
223          ,    ,    ,    ,ASTR,    ,    ,          ,    , 7  , 8  , 9  ,ASTR,/**/,
224   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
225          ,MINS,PLUS,/**/,EQUAL,    ,   ,          ,    , 4  , 5  , 6  ,PLUS,    ,
226   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
227          ,    ,    ,    ,SLSH,    ,    ,          ,    , 1  , 2  , 3  ,SLSH,    ,
228   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
229                              ,    ,                     , 0  
230   // \------------------+----+----+---/       \---+----+----+-------------------/
231   ),
232
233   [_SYMBOLS] = KEYMAP(  
234   //,----+----+-----+----+----+----+----.     ,----+----+----+----+----+----+----.
235          ,EXLM, AT  ,LCBR,RCBR,HASH,    ,          ,CIRC,AMPR,ASTR,LPRN,RPRN,/**/,
236   //|----+----+-----+----+----+----+----|     |----+----+----+----+----+----+----|
237          ,EXLM,EXLM,LPRN,RPRN ,    ,    ,          ,    ,DQUO,EQUAL,QUOTE,RCBR,    ,
238   //|----+----+----+----+----+----+----|      |----+----+----+----+----+----+----|
239       ,DOLLAR, PERC,LBRACKET,RBRACKET, ,      ,    ,PIPE,BSLASH,PLUS,  ,  ,  ,
240   //|----+----+-----+----+----+----+----|     |----+----+----+----+----+----+----|
241                           UNDS,/**/,                    ,/**/
242   // \-------------------+----+----+---/       \---+----+----+-------------------/
243   ),
244
245   [_FUNCTION] = KEYMAP(  
246   //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
247     F6F7 ,F1  ,F2  ,F3  ,ALF4,F5  ,F6  ,      F7  ,F8  ,F9  ,F10 ,F11 ,F12 ,/**/,
248   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
249          ,    ,    ,    ,    ,    ,    ,          ,    ,    ,    ,    ,    ,    ,
250   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
251          ,    ,    ,    ,    ,    ,    ,          ,    ,    ,    ,    ,    ,    ,
252   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
253                              ,    ,                    ,    
254   // \------------------+----+----+---/       \---+----+----+-------------------/
255   ),
256
257   [_NAV] = KEYMAP(  
258   //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
259       ,   ,SNAPLEFT,/**/,SNAPRIGHT,,  ,           ,    ,    , UP ,    ,    ,    ,
260   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
261      ,SNAPUP,PREVTAB, ,NEXTTAB,SNAPDOWN,,   ,    ,LEFT,DOWN,RGHT,    ,    ,
262   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
263     ,    ,WORKLEFT,    ,WORKRIGHT,,    ,          ,    ,PGUP,PGDN,    ,    ,    ,
264   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
265                             CDEL ,DEL,                 ,    
266   // \------------------+----+----+---/       \---+----+----+-------------------/
267   ),
268
269   [_TEXTNAV] = KEYMAP(  
270   //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
271          ,   ,    ,    ,    ,    ,  ,             ,    ,    ,/**/,    ,    ,    ,
272   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
273          ,    ,    ,    ,    ,    ,    ,          ,    ,    ,    ,    ,    ,    ,
274   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
275          ,    ,    ,    ,    ,    ,    ,          ,    ,    ,    ,    ,    ,    ,
276   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
277                                  ,    ,                 ,    
278   // \------------------+----+----+---/       \---+----+----+-------------------/
279   ),
280
281    [_MOUSE] = KEYMAP(  
282   //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
283          ,    ,    ,MS_UP,   ,   ,    ,      ,    ,    , UP ,    ,    ,    ,/**/
284   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
285       ,   ,MS_LEFT,MS_DOWN,MS_RIGHT,   ,    ,     ,    ,LEFT,DOWN,RGHT,/**/,    ,
286   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
287          ,    ,    ,    ,    ,    ,    ,          ,    ,    ,    ,    ,    ,    ,
288   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
289                       ,MS_BTN1 ,MS_BTN2              ,    
290   // \------------------+----+----+---/       \---+----+----+-------------------/
291   ), 
292
293
294   [_MACROS] = KEYMAP(  
295   //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
296     /**/,RESET,SECRET_2,SECRET_3,   ,   ,   ,SYSTEM_SLEEP,    ,    ,INCL,    ,    ,    ,
297   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
298      CAD ,SECRET_1,    ,   ,   ,   ,   ,      ,    ,    ,    ,    ,    ,    ,
299   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
300      SCAP,    ,    ,    ,    ,    ,    ,          ,    ,    ,    ,    ,    ,SCAP,
301   //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
302                              ,    ,                    ,    
303   // \------------------+----+----+---/       \---+----+----+-------------------/
304   )
305
306 };
307
308
309 const uint16_t PROGMEM fn_actions[] = {
310
311 };
312
313 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
314 {
315   switch(id) {
316     /* include some kind of library or header */
317     case 0:
318       if (record->event.pressed) {
319         SEND_STRING("#include <>");
320         return MACRO( T(LEFT), END);
321       }
322       break;
323     case 1:
324       if (record->event.pressed) {
325         SEND_STRING("git pull");
326         return MACRO( T(ENT), END );
327       }
328       break;
329     case 2:
330       if (record->event.pressed){
331         SEND_STRING("git push");
332         return MACRO( T(ENT), END );
333       }
334       break;
335     case 3:
336       if (record->event.pressed){
337         // layer_on(_CAPS);
338         // register_code(KC_CAPSLOCK);
339         // unregister_code(KC_CAPSLOCK);
340       }
341       break;
342     case 4:
343       if (record->event.pressed){
344         // layer_off(_CAPS);
345         // register_code(KC_CAPSLOCK);
346         // unregister_code(KC_CAPSLOCK);
347       }
348       break;
349   }
350   return MACRO_NONE;
351 };
352  
353
354 void matrix_scan_user(void) {
355     uint8_t layer = biton32(layer_state);
356     
357     switch (layer) {
358       case _QWERTY:
359         set_led_green;
360         break;
361       case _MOUSE:
362         set_led_yellow;
363         break;
364       case _NUMPAD:
365         set_led_blue;
366         break;
367       case _SYMBOLS:
368         set_led_red;
369         break;
370       case _NAV:
371         set_led_magenta;
372         break;
373       case _MACROS:
374         set_led_green;
375         _delay_ms(45);
376         set_led_red;
377         _delay_ms(45);
378         break;
379       case _FUNCTION:
380         set_led_green;
381         _delay_ms(45);
382         set_led_blue;
383         _delay_ms(45);
384         break;  
385       default:
386         set_led_green;
387         break;
388     }
389 };