]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/tada68/keymaps/maartenwut/keymap.c
Merge pull request #1491 from fredizzimo/msys2
[qmk_firmware.git] / keyboards / tada68 / keymaps / maartenwut / keymap.c
1 #include "tada68.h"
2 #include "action_layer.h"
3 #include "timer.h"
4 #include "bootloader.h"
5 #include "command.h"
6
7 #define _MA 0
8 #define _GA 1
9 #define _FL 2
10 #define _AR 3
11 #define _LO 4
12 #define _UL 5
13
14 #define TRNS KC_TRNS
15 #define trigger_time 400
16
17 #define T1 M(1)
18 #define T2 M(2)
19 #define T3 M(3)
20 #define T4 M(4)
21 #define T5 M(5)
22 #define T6 M(6)
23 #define T7 M(7)
24 #define T8 M(8)
25 #define T9 M(9)
26 #define T10 M(10)
27 #define T11 M(11)
28 #define T12 M(12)
29 #define END_HOME M(0)
30 #define LSHIFT OSM(MOD_LSFT)
31 #define SPACE LT(_AR, KC_SPC)
32
33 #define MACRO_BREATH_TOGGLE             13
34 #define MACRO_BREATH_SPEED_INC          14
35 #define MACRO_BREATH_SPEED_DEC          15
36 #define MACRO_BREATH_DEFAULT            16
37 #define M_BRTOG             M(MACRO_BREATH_TOGGLE)
38 #define M_BSPDU             M(MACRO_BREATH_SPEED_INC)
39 #define M_BSPDD             M(MACRO_BREATH_SPEED_DEC)
40 #define M_BDFLT             M(MACRO_BREATH_DEFAULT)
41
42 static uint16_t key_timer;
43
44 enum emoticons {
45         LENNY = SAFE_RANGE,
46         DWNHRT,
47         SHRUG
48 };
49
50 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
51   /* Keymap _MA: Main Layer, Default
52    * ,----------------------------------------------------------------.
53    * |Esc | 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |P/P |
54    * |----------------------------------------------------------------| 
55    * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  |Del |
56    * |----------------------------------------------------------------|
57    * |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |PgUp|
58    * |----------------------------------------------------------------|
59    * |Shft|End|  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift | Up|PgDn|
60    * |----------------------------------------------------------------|
61    * |Ctrl|Win |Alt |        Space          |Alt|Ctrl| FN|Lef|Dow|Rig |
62    * `----------------------------------------------------------------'
63    */
64 [_MA] = KEYMAP_ANSI(
65   KC_ESC,       T1,             T2,             T3,             T4,             T5,             T6,             T7,             T8,             T9,             T10,            T11,            T12,            KC_BSPC,        KC_MPLY, \
66   KC_TAB,       KC_Q,           KC_W,           KC_E,           KC_R,           KC_T,           KC_Y,           KC_U,           KC_I,           KC_O,           KC_P,           KC_LBRC,        KC_RBRC,        KC_BSLS,        KC_DEL, \
67   KC_CAPS,      KC_A,           KC_S,           KC_D,           KC_F,           KC_G,           KC_H,           KC_J,           KC_K,           KC_L,           KC_SCLN,        KC_QUOT,                                KC_ENT,         KC_PGUP, \
68   LSHIFT,       END_HOME,       KC_Z,           KC_X,           KC_C,           KC_V,           KC_B,           KC_N,           KC_M,           KC_COMM,        KC_DOT,         KC_SLSH,        KC_RSFT,    KC_UP,              KC_PGDN, \
69   KC_LCTL,      KC_LGUI,        KC_LALT,                                                        SPACE,                                                                                  KC_RALT,        KC_RCTRL,       MO(_FL),        KC_LEFT,        KC_DOWN,        KC_RGHT),
70   
71   /* Keymap _FL: Function Layer
72    * ,----------------------------------------------------------------.
73    * |~` | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Reset  |Prsc|
74    * |----------------------------------------------------------------|
75    * |     |MbL|MsU|MbR|   |   |   |   |   |   |   |   |   |     |_LO |
76    * |----------------------------------------------------------------|
77    * |      |MsL|MsD|MsR|   |_GA|   |   |   |   |   |   |        |Hme |
78    * |----------------------------------------------------------------|
79    * |    |   |BL-|BL+|BL |BR-|BR+|BR |   |VoU|VoD|Mut|      |MwU|End |
80    * |----------------------------------------------------------------|
81    * |    |    |    |                       |   |   |    |MwL|MwD|MwR |  
82    * `----------------------------------------------------------------'
83    */
84 [_FL] = KEYMAP_ANSI(
85   KC_GRV,       KC_F1,          KC_F2,          KC_F3,          KC_F4,          KC_F5,          KC_F6,          KC_F7,          KC_F8,          KC_F9,          KC_F10,         KC_F11,         KC_F12,         RESET,          KC_PSCR, \
86   TRNS,         KC_BTN1,        KC_MS_U,        KC_BTN2,        TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TO(_LO), \
87   TRNS,         KC_MS_L,        KC_MS_D,        KC_MS_R,        TRNS,           TG(_GA),                TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,                                   TRNS,           KC_HOME, \
88   TRNS,         TRNS,           BL_DEC,         BL_INC,         BL_TOGG,        M_BSPDD,        M_BSPDU,        M_BRTOG,        TRNS,           KC_VOLD,        KC_VOLU,        KC_MUTE,        TRNS,           KC_WH_U,        KC_END, \
89   TRNS,         TRNS,           TRNS,                                                           TRNS,                                                                                   TRNS,           TRNS,           TRNS,           KC_WH_L,        KC_WH_D,        KC_WH_R),
90
91   /* Keymap _AR: Arrow layer
92    * ,----------------------------------------------------------------.
93    * |   |   |   |   |   |   |   |   |   |   |   |   |   |       |    |
94    * |----------------------------------------------------------------|
95    * |Lenny|   |   |   |   |   |   |   |   |   |   |   |   |     |    |
96    * |----------------------------------------------------------------|
97    * |Dwnhrt|   |   |   |   |   |Lft|Dwn| Up|Rgt|   |   |        |    |
98    * |----------------------------------------------------------------|
99    * |Shrg|   |   |   |   |   |   |   |   |   |   |   |      |   |    |
100    * |----------------------------------------------------------------|
101    * |    |    |    |                       |   |   |    |   |   |    |
102    * `----------------------------------------------------------------'
103    */
104 [_AR] = KEYMAP_ANSI(
105   TRNS,         TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS, \
106   LENNY,        TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS, \
107   DWNHRT,       TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           KC_LEFT,        KC_DOWN,        KC_UP,          KC_RGHT,        TRNS,           TRNS,                                   TRNS,           TRNS, \
108   SHRUG,        TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS, \
109   TRNS,         TRNS,           TRNS,                                                           TRNS,                                                                                   TRNS,           TRNS,           TRNS,           TRNS,           TRNS,           TRNS),
110
111   /* Keymap _GA: Game layer
112    * ,----------------------------------------------------------------.
113    * |Esc | 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |P/P |
114    * |----------------------------------------------------------------| 
115    * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  |Del |
116    * |----------------------------------------------------------------|
117    * |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |PgUp|
118    * |----------------------------------------------------------------|
119    * |Shft|End|  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift | Up|PgDn|
120    * |----------------------------------------------------------------|
121    * |Ctrl|Win |Alt |        Space          |Alt|Ctrl| FN|Lef|Dow|Rig |
122    * `----------------------------------------------------------------'
123    */
124 [_GA] = KEYMAP_ANSI(
125   KC_ESC,       T1,             T2,             T3,             T4,             T5,             T6,             T7,             T8,             T9,             T10,            T11,            T12,            KC_BSPC,        KC_MPLY, \
126   KC_TAB,       KC_Q,           KC_W,           KC_E,           KC_R,           KC_T,           KC_Y,           KC_U,           KC_I,           KC_O,           KC_P,           KC_LBRC,        KC_RBRC,        KC_BSLS,        KC_DEL, \
127   KC_CAPS,      KC_A,           KC_S,           KC_D,           KC_F,           KC_G,           KC_H,           KC_J,           KC_K,           KC_L,           KC_SCLN,        KC_QUOT,                                KC_ENT,         KC_PGUP, \
128   KC_LSFT,      END_HOME,       KC_Z,           KC_X,           KC_C,           KC_V,           KC_B,           KC_N,           KC_M,           KC_COMM,        KC_DOT,         KC_SLSH,        KC_RSFT,    KC_UP,              KC_PGDN, \
129   KC_LCTL,      KC_LGUI,        KC_LALT,                                                        KC_SPC,                                                                                 KC_RALT,        KC_RCTRL,       MO(_FL),        KC_LEFT,        KC_DOWN,        KC_RGHT),
130
131   /* Keymap _UL: Unlock layer
132    * ,----------------------------------------------------------------.
133    * |   |   |   |   |   |   |   |   |   |   |   |   |   |       |    |
134    * |----------------------------------------------------------------|
135    * |     |   |   |   |   |   |   |   |   |   |   |   |   |     |_MA |
136    * |----------------------------------------------------------------|
137    * |      |   |   |   |   |   |   |   |   |   |   |   |        |    |
138    * |----------------------------------------------------------------|
139    * |    |   |   |   |   |   |   |   |   |   |   |   |      |   |    |
140    * |----------------------------------------------------------------|
141    * |    |    |    |                       |   |   |    |   |   |    |
142    * `----------------------------------------------------------------'
143    */
144 [_UL] = KEYMAP_ANSI(
145   KC_NO,        KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO, \
146   KC_NO,        KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          TO(_MA), \
147   KC_NO,        KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,                                  KC_NO,          KC_NO, \
148   KC_NO,        KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO, \
149   KC_NO,        KC_NO,          KC_NO,                                                          KC_NO,                                                                                  KC_NO,          KC_NO,          TRNS,           KC_NO,          KC_NO,          KC_NO),
150
151   /* Keymap _LO: Lock layer
152    * ,----------------------------------------------------------------.
153    * |   |   |   |   |   |   |   |   |   |   |   |   |   |       |    |
154    * |----------------------------------------------------------------|
155    * |     |   |   |   |   |   |   |   |   |   |   |   |   |     |    |
156    * |----------------------------------------------------------------|
157    * |      |   |   |   |   |   |   |   |   |   |   |   |        |    |
158    * |----------------------------------------------------------------|
159    * |    |   |   |   |   |   |   |   |   |   |   |   |      |   |    |
160    * |----------------------------------------------------------------|
161    * |    |    |    |                      |   |   | _UL |   |   |    |
162    * `----------------------------------------------------------------'
163    */
164 [_LO] = KEYMAP_ANSI(
165   KC_NO,        KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO, \
166   KC_NO,        KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO, \
167   KC_NO,        KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,                                  KC_NO,          KC_NO, \
168   KC_NO,        KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO, \
169   KC_NO,        KC_NO,          KC_NO,                                                          KC_NO,                                                                                  KC_NO,          KC_NO,          MO(_UL),        KC_NO,          KC_NO,          KC_NO),
170 };
171
172 void tap(uint16_t keycode){
173     register_code(keycode);
174     unregister_code(keycode);
175 };
176
177 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
178         switch (keycode) {
179                 case LENNY:                     // ( Í¡Â° ÍœÊ– Í¡Â°)
180                         if(record->event.pressed){
181                                 set_unicode_input_mode(UC_WIN);
182                                 register_code(KC_LSFT);
183                                 tap(KC_9);                                                                              // Head
184                                 unregister_code(KC_LSFT);
185                                 tap(KC_SPC);                                                                    // Space
186                                 process_unicode((0x0361|QK_UNICODE), record);   // Eyebrow
187                                 process_unicode((0x00B0|QK_UNICODE), record);   // Eye
188                                 tap(KC_SPC);
189                                 process_unicode((0x035C|QK_UNICODE), record);   // Mouth
190                                 process_unicode((0x0296|QK_UNICODE), record);   // Nose
191                                 tap(KC_SPC);
192                                 process_unicode((0x0361|QK_UNICODE), record);   // Eyebrow
193                                 process_unicode((0x00B0|QK_UNICODE), record);   // Eye
194                                 register_code(KC_LSFT);
195                                 tap(KC_0);                                                                              // Head
196                                 unregister_code(KC_LSFT);
197                         }
198                         return false;
199                         break;
200                 case DWNHRT:            // (´・ω・`)
201                         if(record->event.pressed){
202                                 set_unicode_input_mode(UC_WIN);
203                                 register_code(KC_LSFT);
204                                 tap(KC_9);                                                                              // Head
205                                 unregister_code(KC_LSFT);
206                                 process_unicode((0x00B4|QK_UNICODE), record);   // Eyebrow
207                                 process_unicode((0x30FB|QK_UNICODE), record);   // Eye
208                                 process_unicode((0x03C9|QK_UNICODE), record);   // Mouth
209                                 process_unicode((0x30FB|QK_UNICODE), record);   // Eye
210                                 process_unicode((0x0060|QK_UNICODE), record);   // Eyebrow
211                                 register_code(KC_LSFT);
212                                 tap(KC_0);                                                                              // Head
213                                 unregister_code(KC_LSFT);
214                         }
215                         return false;
216                         break;
217                 case SHRUG:                     // Â¯\_(ツ)_/¯
218                         if(record->event.pressed){
219                                 set_unicode_input_mode(UC_WIN);
220                                 process_unicode((0x00AF|QK_UNICODE), record);   // Hand
221                                 tap(KC_BSLS);                                                                   // Arm
222                                 register_code(KC_LSFT);
223                                 tap(KC_UNDS);                                                                   // Arm
224                                 tap(KC_LPRN);                                                                   // Head
225                                 unregister_code(KC_LSFT);
226                                 process_unicode((0x30C4|QK_UNICODE), record);   // Face
227                                 register_code(KC_LSFT);
228                                 tap(KC_RPRN);                                                                   // Head
229                                 tap(KC_UNDS);                                                                   // Arm
230                                 unregister_code(KC_LSFT);
231                                 tap(KC_SLSH);                                                                   // Arm
232                                 process_unicode((0x00AF|QK_UNICODE), record);   // Hand
233                         }
234                         return false;
235                         break;
236         }
237         return true;
238 };
239
240 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
241     switch (id) {
242                 case 0:
243                         if (record->event.pressed) {
244                                 key_timer = timer_read();
245                         }
246                         else {
247                                 if (timer_elapsed(key_timer) > trigger_time) {
248                                         return MACRO( T(END), END );
249                                 }
250                                 else {
251                                         return MACRO( T(HOME), END );
252                                 }
253                         }
254                         break;
255                 case 1:
256                         if (record->event.pressed) {
257                                 key_timer = timer_read();
258                         }
259                         else { 
260                                 if (timer_elapsed(key_timer) > trigger_time) {
261                                         return MACRO( T(F1), END );
262                                 }
263                                 else {
264                                         return MACRO( T(1), END );
265                                 }
266                         }
267                         break;
268                 case 2:
269                         if (record->event.pressed) {
270                                 key_timer = timer_read();
271                         }
272                         else { 
273                                 if (timer_elapsed(key_timer) > trigger_time) {
274                                         return MACRO( T(F2), END );
275                                 }
276                                 else {
277                                         return MACRO( T(2), END );
278                                 }
279                         }
280                         break;
281                 case 3:
282                         if (record->event.pressed) {
283                                 key_timer = timer_read();
284                         }
285                         else { 
286                                 if (timer_elapsed(key_timer) > trigger_time) {
287                                         return MACRO( T(F3), END );
288                                 }
289                                 else {
290                                         return MACRO( T(3), END );
291                                 }
292                         }
293                         break;
294                 case 4:
295                         if (record->event.pressed) {
296                                 key_timer = timer_read();
297                         }
298                         else { 
299                                 if (timer_elapsed(key_timer) > trigger_time) {
300                                         return MACRO( T(F4), END );
301                                 }
302                                 else {
303                                         return MACRO( T(4), END );
304                                 }
305                         }
306                         break;
307                 case 5:
308                         if (record->event.pressed) {
309                                 key_timer = timer_read();
310                         }
311                         else { 
312                                 if (timer_elapsed(key_timer) > trigger_time) {
313                                         return MACRO( T(F5), END );
314                                 }
315                                 else {
316                                         return MACRO( T(5), END );
317                                 }
318                         }
319                         break;
320                 case 6:
321                         if (record->event.pressed) {
322                                 key_timer = timer_read();
323                         }
324                         else { 
325                                 if (timer_elapsed(key_timer) > trigger_time) {
326                                         return MACRO( T(F6), END );
327                                 }
328                                 else {
329                                         return MACRO( T(6), END );
330                                 }
331                         }
332                         break;
333                 case 7:
334                         if (record->event.pressed) {
335                                 key_timer = timer_read();
336                         }
337                         else { 
338                                 if (timer_elapsed(key_timer) > trigger_time) {
339                                         return MACRO( T(F7), END );
340                                 }
341                                 else {
342                                         return MACRO( T(7), END );
343                                 }
344                         }
345                         break;
346                 case 8:
347                         if (record->event.pressed) {
348                                 key_timer = timer_read();
349                         }
350                         else { 
351                                 if (timer_elapsed(key_timer) > trigger_time) {
352                                         return MACRO( T(F8), END );
353                                 }
354                                 else {
355                                         return MACRO( T(8), END );
356                                 }
357                         }
358                         break;
359                 case 9:
360                         if (record->event.pressed) {
361                                 key_timer = timer_read();
362                         }
363                         else { 
364                                 if (timer_elapsed(key_timer) > trigger_time) {
365                                         return MACRO( T(F9), END );
366                                 }
367                                 else {
368                                         return MACRO( T(9), END );
369                                 }
370                         }
371                         break;
372                 case 10:
373                         if (record->event.pressed) {
374                                 key_timer = timer_read();
375                         }
376                         else { 
377                                 if (timer_elapsed(key_timer) > trigger_time) {
378                                         return MACRO( T(F10), END );
379                                 }
380                                 else {
381                                         return MACRO( T(0), END );
382                                 }
383                         }
384                         break;
385                 case 11:
386                         if (record->event.pressed) {
387                                 key_timer = timer_read();
388                         }
389                         else { 
390                                 if (timer_elapsed(key_timer) > trigger_time) {
391                                         return MACRO( T(F11), END );
392                                 }
393                                 else {
394                                         return MACRO( T(MINS), END );
395                                 }
396                         }
397                         break;
398                 case 12:
399                         if (record->event.pressed) {
400                                 key_timer = timer_read();
401                         }
402                         else { 
403                                 if (timer_elapsed(key_timer) > trigger_time) {
404                                         return MACRO( T(F12), END );
405                                 }
406                                 else {
407                                         return MACRO( T(EQL), END );
408                                 }
409                         }
410                         break;
411                 case MACRO_BREATH_TOGGLE:
412                         if (record->event.pressed) {
413                                 breathing_toggle();
414                         }
415                         break;
416
417                 case MACRO_BREATH_SPEED_INC:
418                         if (record->event.pressed) {
419                                 breathing_speed_inc(1);
420                         }
421                         break;
422
423                 case MACRO_BREATH_SPEED_DEC:
424                         if (record->event.pressed) {
425                                 breathing_speed_dec(1);
426                         }
427                         break;
428
429                 case MACRO_BREATH_DEFAULT:
430                         if (record->event.pressed) {
431                                 breathing_defaults();
432                         }
433                         break;
434         }
435     return MACRO_NONE;
436 };