]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/oeywil/keymap.c
[Keymap] Update to oeywil's keymap (#5614)
[qmk_firmware.git] / keyboards / planck / keymaps / oeywil / keymap.c
1 #include QMK_KEYBOARD_H
2 #include "no_keycodes.h"
3
4 #if __has_include("secrets.h")
5 #  include "secrets.h"
6 #else
7 #  define mail_str ""
8 #  define pwd_str ""
9 #endif
10
11 // layer definitions
12 enum planck_layers {
13   _DEFAULT,
14   _LOWER,
15   _RAISE,
16   _GAME,
17   _GLOW
18 };
19
20 // sounds
21 #ifdef AUDIO_ENABLE
22   float gamesong[][2] = SONG(MARIO_MUSHROOM);
23   float defsong[][2] = SONG(PLOVER_GOODBYE_SOUND);
24   float failed[][2] = SONG(TERMINAL_SOUND);
25 #endif
26
27 // leader key
28 bool leader_succeed;
29 bool leader_layer_game;
30 bool leader_layer_def;
31 LEADER_EXTERNS();
32
33 void matrix_scan_user(void) {
34   LEADER_DICTIONARY() {
35     leader_succeed = leading = false;
36     leader_layer_game = false;
37     leader_layer_def = false;
38
39     SEQ_TWO_KEYS(KC_P, KC_P) {
40       SEND_STRING(pwd_str);
41       leader_succeed = true;
42     }
43     SEQ_TWO_KEYS(KC_P, KC_M) {
44       SEND_STRING(mail_str);
45       leader_succeed = true;
46     }
47     SEQ_TWO_KEYS(KC_B, KC_B) {
48       SEND_STRING("build"SS_TAP(X_ENTER));
49       leader_succeed = true;
50     }
51     SEQ_TWO_KEYS(KC_B, KC_F) {
52       SEND_STRING("flash"SS_TAP(X_ENTER));
53       reset_keyboard();
54       leader_succeed = true;
55     }
56     SEQ_TWO_KEYS(KC_L, KC_G) {
57       layer_on(_GAME);
58       leader_layer_game = true;
59     }
60     SEQ_TWO_KEYS(KC_L, KC_D) {
61       layer_off(_GAME);
62       leader_layer_def = true;
63     }
64     leader_end();
65   }
66 }
67
68 void leader_end(void) {
69   if (leader_succeed) {
70     // do nothing
71   } else if (leader_layer_game) {
72     #ifdef AUDIO_ENABLE
73       PLAY_SONG(gamesong);
74     #endif
75   } else if (leader_layer_def) {
76     #ifdef AUDIO_ENABLE
77       PLAY_SONG(defsong);
78     #endif
79   } else {
80     #ifdef AUDIO_ENABLE
81       PLAY_SONG(failed);
82     #endif
83   }
84 }
85
86 // tap dance definitions
87 typedef struct {
88   bool is_press_action;
89   int state;
90 } tap;
91
92 enum {
93   SINGLE_TAP = 1,
94   SINGLE_HOLD = 2,
95   DOUBLE_TAP = 3,
96   DOUBLE_HOLD = 4,
97   DOUBLE_SINGLE_TAP = 5,
98   TRIPLE_TAP = 6,
99   TRIPLE_HOLD = 7
100 };
101
102 enum {
103   TD_LSFT = 0,
104   TD_LCTL,
105   TD_RSFT,
106   TD_RCTL
107 };
108
109 int cur_dance (qk_tap_dance_state_t *state);
110 void lsft_finished (qk_tap_dance_state_t *state, void *user_data);
111 void lsft_reset (qk_tap_dance_state_t *state, void *user_data);
112 void rsft_finished (qk_tap_dance_state_t *state, void *user_data);
113 void rsft_reset (qk_tap_dance_state_t *state, void *user_data);
114 void lctl_finished (qk_tap_dance_state_t *state, void *user_data);
115 void lctl_reset (qk_tap_dance_state_t *state, void *user_data);
116 void rctl_finished (qk_tap_dance_state_t *state, void *user_data);
117 void rctl_reset (qk_tap_dance_state_t *state, void *user_data);
118
119 // layer declarations
120 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
121   /* Default
122    * ,-----------------------------------------------------------------------------------.
123    * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   Å  | BkSp |
124    * |------+------+------+------+------+-------------+------+------+------+------+------|
125    * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   Ø  |   Æ  |
126    * |------+------+------+------+------+------+------+------+------+------+------+------|
127    * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   P  |   ,  |   .  | Shift|
128    * |------+------+------+------+------+------+------+------+------+------+------+------|
129    * | Ctrl | Lead | Win  | Alt  | Lower| Space| Enter| Raise| AltGr| App  | Lead | Ctrl |
130    * `-----------------------------------------------------------------------------------'
131    */
132   [_DEFAULT] = LAYOUT_planck_grid(
133     KC_TAB,      KC_Q,    KC_W,    KC_E,    KC_R,       KC_T,   KC_Y,   KC_U,       KC_I,    KC_O,    NO_AA,   KC_BSPC,
134     KC_ESC,      KC_A,    KC_S,    KC_D,    KC_F,       KC_G,   KC_H,   KC_J,       KC_K,    KC_L,    NO_OE,   NO_AE,
135     TD(TD_LSFT), KC_Z,    KC_X,    KC_C,    KC_V,       KC_B,   KC_N,   KC_M,       KC_P,    KC_COMM, KC_DOT,  TD(TD_RSFT),
136     TD(TD_LCTL), KC_LEAD, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_ENT, MO(_RAISE), KC_ALGR, KC_APP,  KC_LEAD, TD(TD_RCTL)
137   ),
138   /* Lower
139    * ,-----------------------------------------------------------------------------------.
140    * | Tab  | <Word| Up   | Word>| PgUp |      |      |      |  F7  |  F8  |  F9  |  Del |
141    * |------+------+------+------+------+-------------+------+------+------+------+------|
142    * | BkSp | Left | Down | Right| PgDn |      |      |      |  F4  |  F5  |  F6  |      |
143    * |------+------+------+------+------+------|------+------+------+------+------+------|
144    * | Shift| Home |      | End  |      |      |      |      |  F1  |  F2  |  F3  | Shift|
145    * |------+------+------+------+------+------+------+------+------+------+------+------|
146    * | Ctrl |      | Win  | Alt  | Lower| M_PP |M_Next|      |      | Mute | VolD | VolUp|
147    * `-----------------------------------------------------------------------------------'
148    */
149   [_LOWER] = LAYOUT_planck_grid(
150     KC_TRNS, LCTL(KC_LEFT), KC_UP,   LCTL(KC_RIGHT), KC_PGUP, KC_NO,   KC_NO,   KC_NO, KC_F7, KC_F8,   KC_F9, KC_DEL,
151     KC_BSPC, KC_LEFT,       KC_DOWN, KC_RIGHT,       KC_PGDN, KC_NO,   KC_NO,   KC_NO, KC_F4, KC_F5,   KC_F6, KC_NO,
152     KC_TRNS, KC_HOME,       KC_NO,   KC_END,         KC_NO,   KC_NO,   KC_NO,   KC_NO, KC_F1, KC_F2,   KC_F3, KC_TRNS,
153     KC_TRNS, KC_NO,         KC_TRNS, KC_TRNS,        KC_TRNS, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU
154   ),
155   /* Raise
156    * ,-----------------------------------------------------------------------------------.
157    * | Tab  |   !  |   ?  |   #  |   *  |   |  |   =  |   /  |   7  |   8  |   9  | Ins  |
158    * |------+------+------+------+------+-------------+------+------+------+------+------|
159    * | BkSp |   @  |   &  |   $  |   %  |   ~  |   +  |   \  |   4  |   5  |   6  |      |
160    * |------+------+------+------+------+------+------+------+------+------+------+------|
161    * | Shift|   '  |   "  |   ¨  |      |      |   -  |   0  |   1  |   2  |   3  | Shift|
162    * |------+------+------+------+------+------+------+------+------+------+------+------|
163    * | Ctrl |      | Win  | Alt  |      | Space| Enter| Raise| AltGr|      |      |      |
164    * `-----------------------------------------------------------------------------------'
165    */
166   [_RAISE] = LAYOUT_planck_grid(
167     KC_TRNS, NO_EXCL, NO_QEST, NO_HASH, NO_ASTE, NO_PIPE, NO_EQUA, NO_FSLS, KC_7,    KC_8,  KC_9,  KC_INS,
168     KC_BSPC, NO_ALFA, NO_AMPE, NO_USDO, NO_PERC, NO_TILD, NO_PLUS, NO_BSLS, KC_4,    KC_5,  KC_6,  KC_NO,
169     KC_TRNS, NO_APOS, NO_QUOT, NO_UMLA, KC_NO,   KC_NO,   NO_DASH, KC_0,    KC_1,    KC_2,  KC_3,  KC_TRNS,
170     KC_TRNS, KC_NO,   KC_TRNS, KC_TRNS, KC_NO,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO
171   ),
172   /* Game
173    * ,-----------------------------------------------------------------------------------.
174    * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |      | BkSp |
175    * |------+------+------+------+------+-------------+------+------+------+------+------|
176    * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |      |      |
177    * |------+------+------+------+------+------+------+------+------+------+------+------|
178    * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   P  |   ,  |   .  |      |
179    * |------+------+------+------+------+------+------+------+------+------+------+------|
180    * | Ctrl | Lead |      | Alt  | Lower| Space| Enter| Lower|      |      | Lead |      |
181    * `-----------------------------------------------------------------------------------'
182    */
183   [_GAME] = LAYOUT_planck_grid(
184     KC_TAB,  KC_Q,    KC_W,  KC_E,    KC_R,      KC_T,   KC_Y,   KC_U,      KC_I, KC_O,    KC_NO,   KC_BSPC,
185     KC_ESC,  KC_A,    KC_S,  KC_D,    KC_F,      KC_G,   KC_H,   KC_J,      KC_K, KC_L,    KC_NO,   KC_NO,
186     KC_LSFT, KC_Z,    KC_X,  KC_C,    KC_V,      KC_B,   KC_N,   KC_M,      KC_P, KC_COMM, KC_DOT,  KC_NO,
187     KC_LCTL, KC_LEAD, KC_NO, KC_LALT, MO(_GLOW), KC_SPC, KC_ENT, MO(_GLOW), KC_NO, KC_NO,  KC_LEAD, KC_NO
188   ),
189   /* Game lower
190    * ,-----------------------------------------------------------------------------------.
191    * |  Tab |   1  |   2  |   3  |      |      |      |      |      |      |      | Steam|
192    * |------+------+------+------+------+-------------+------+------+------+------+------|
193    * |  Esc |   4  |   5  |   6  |      |      |      |      |      |      |      | F12  |
194    * |------+------+------+------+------+------+------+------+------+------+------+------|
195    * | Shift|   7  |   8  |   9  |   0  |      |      |      |      |      |      |      |
196    * |------+------+------+------+------+------+------+------+------+------+------+------|
197    * | Ctrl |      |      |  Alt |      | PlyPa| Next |      |      | Mute | VolD | VolUp|
198    * `-----------------------------------------------------------------------------------'
199    */
200   [_GLOW] = LAYOUT_planck_grid(
201     KC_TRNS, KC_1,    KC_2,    KC_3,    KC_PPLS, KC_NO,   KC_NO,   KC_NO, KC_NO,   KC_NO,   KC_NO,   LSFT(KC_F7),
202     KC_TRNS, KC_4,    KC_5,    KC_6,    KC_PMNS, KC_NO,   KC_NO,   KC_NO, KC_NO,   KC_NO,   KC_NO,   KC_F12,
203     KC_TRNS, KC_7,    KC_8,    KC_9,    KC_0,    KC_NO,   KC_NO,   KC_NO, KC_NO,   KC_NO,   KC_NO,   KC_MUTE,
204     KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_NO, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU
205   )
206 };
207
208 // tap dance declarations
209 int cur_dance (qk_tap_dance_state_t *state) {
210   if (state->count == 1) {
211     if (state->interrupted || !state->pressed)  return SINGLE_TAP;
212     else return SINGLE_HOLD;
213   }
214   else if (state->count == 2) {
215     if (state->interrupted) return DOUBLE_SINGLE_TAP;
216     else if (state->pressed) return DOUBLE_HOLD;
217     else return DOUBLE_TAP;
218   }
219   if (state->count == 3) {
220     if (state->interrupted || !state->pressed)  return TRIPLE_TAP;
221     else return TRIPLE_HOLD;
222   }
223   else return 8;
224 }
225
226 static tap xtap_state = {
227   .is_press_action = true,
228   .state = 0
229 };
230
231 void lsft_finished (qk_tap_dance_state_t *state, void *user_data) {
232   xtap_state.state = cur_dance(state);
233   switch (xtap_state.state) {
234     case SINGLE_TAP:
235       register_code16(LSFT(KC_8));
236       break;
237     case SINGLE_HOLD:
238       register_code(KC_LSFT);
239       break;
240     case DOUBLE_TAP:
241       register_code(KC_NUBS);
242       break;
243     case DOUBLE_SINGLE_TAP:
244       register_code(KC_NUBS);
245       break;
246   }
247 }
248
249 void lsft_reset (qk_tap_dance_state_t *state, void *user_data) {
250   switch (xtap_state.state) {
251     case SINGLE_TAP:
252       unregister_code16(LSFT(KC_8));
253       break;
254     case SINGLE_HOLD:
255       unregister_code(KC_LSFT);
256       break;
257     case DOUBLE_TAP:
258       unregister_code(KC_NUBS);
259       break;
260     case DOUBLE_SINGLE_TAP:
261       unregister_code(KC_NUBS);
262       break;
263   }
264   xtap_state.state = 0;
265 }
266
267 void rsft_finished (qk_tap_dance_state_t *state, void *user_data) {
268   xtap_state.state = cur_dance(state);
269   switch (xtap_state.state) {
270     case SINGLE_TAP:
271       register_code16(LSFT(KC_9));
272       break;
273     case SINGLE_HOLD:
274       register_code(KC_RSFT);
275       break;
276     case DOUBLE_TAP:
277       register_code16(LSFT(KC_NUBS));
278       break;
279     case DOUBLE_SINGLE_TAP:
280       register_code16(LSFT(KC_NUBS));
281       break;
282   }
283 }
284
285 void rsft_reset (qk_tap_dance_state_t *state, void *user_data) {
286   switch (xtap_state.state) {
287     case SINGLE_TAP:
288       unregister_code16(LSFT(KC_9));
289       break;
290     case SINGLE_HOLD:
291       unregister_code(KC_RSFT);
292       break;
293     case DOUBLE_TAP:
294       unregister_code16(LSFT(KC_NUBS));
295       break;
296     case DOUBLE_SINGLE_TAP:
297       unregister_code16(LSFT(KC_NUBS));
298       break;
299   }
300   xtap_state.state = 0;
301 }
302
303 void lctl_finished (qk_tap_dance_state_t *state, void *user_data) {
304   xtap_state.state = cur_dance(state);
305   switch (xtap_state.state) {
306     case SINGLE_TAP:
307       register_mods(MOD_BIT(KC_ALGR));
308       register_code(KC_7);
309       break;
310     case SINGLE_HOLD:
311       register_code(KC_LCTL);
312       break;
313     case DOUBLE_TAP:
314       register_mods(MOD_BIT(KC_ALGR));
315       register_code(KC_8);
316       break;
317     case DOUBLE_SINGLE_TAP:
318       register_mods(MOD_BIT(KC_ALGR));
319       register_code(KC_8);
320 break;
321   }
322 }
323
324 void lctl_reset (qk_tap_dance_state_t *state, void *user_data) {
325   switch (xtap_state.state) {
326     case SINGLE_TAP:
327       unregister_code(KC_7);
328       unregister_mods(MOD_BIT(KC_ALGR));
329       break;
330     case SINGLE_HOLD:
331       unregister_code(KC_LCTL);
332       break;
333     case DOUBLE_TAP:
334       unregister_code(KC_8);
335       unregister_mods(MOD_BIT(KC_ALGR));
336       break;
337     case DOUBLE_SINGLE_TAP:
338       unregister_code(KC_8);
339       unregister_mods(MOD_BIT(KC_ALGR));
340 break;
341   }
342   xtap_state.state = 0;
343 }
344
345 void rctl_finished (qk_tap_dance_state_t *state, void *user_data) {
346   xtap_state.state = cur_dance(state);
347   switch (xtap_state.state) {
348     case SINGLE_TAP:
349       register_mods(MOD_BIT(KC_ALGR));
350       register_code(KC_0);
351       break;
352     case SINGLE_HOLD:
353       register_code(KC_RCTL);
354       break;
355     case DOUBLE_TAP:
356       register_mods(MOD_BIT(KC_ALGR));
357       register_code(KC_9);
358       break;
359     case DOUBLE_SINGLE_TAP:
360       register_mods(MOD_BIT(KC_ALGR));
361       register_code(KC_9);
362       break;
363   }
364 }
365
366 void rctl_reset (qk_tap_dance_state_t *state, void *user_data) {
367   switch (xtap_state.state) {
368     case SINGLE_TAP:
369       unregister_code(KC_0);
370       unregister_mods(MOD_BIT(KC_ALGR));
371       break;
372     case SINGLE_HOLD:
373       unregister_code(KC_RCTL);
374       break;
375     case DOUBLE_TAP:
376       unregister_code(KC_9);
377       unregister_mods(MOD_BIT(KC_ALGR));
378       break;
379     case DOUBLE_SINGLE_TAP:
380       unregister_code(KC_9);
381       unregister_mods(MOD_BIT(KC_ALGR));
382       break;
383   }
384   xtap_state.state = 0;
385 }
386
387 qk_tap_dance_action_t tap_dance_actions[] = {
388   [TD_LSFT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lsft_finished, lsft_reset),
389   [TD_RSFT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rsft_finished, rsft_reset),
390   [TD_LCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lctl_finished, lctl_reset),
391   [TD_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rctl_finished, rctl_reset),
392 };