1 #include QMK_KEYBOARD_H
2 #include "no_keycodes.h"
4 #if __has_include("secrets.h")
22 float gamesong[][2] = SONG(MARIO_MUSHROOM);
23 float defsong[][2] = SONG(PLOVER_GOODBYE_SOUND);
24 float failed[][2] = SONG(TERMINAL_SOUND);
29 bool leader_layer_game;
30 bool leader_layer_def;
33 void matrix_scan_user(void) {
35 leader_succeed = leading = false;
36 leader_layer_game = false;
37 leader_layer_def = false;
39 SEQ_TWO_KEYS(KC_P, KC_P) {
41 leader_succeed = true;
43 SEQ_TWO_KEYS(KC_P, KC_M) {
44 SEND_STRING(mail_str);
45 leader_succeed = true;
47 SEQ_TWO_KEYS(KC_B, KC_B) {
48 SEND_STRING("build"SS_TAP(X_ENTER));
49 leader_succeed = true;
51 SEQ_TWO_KEYS(KC_B, KC_F) {
52 SEND_STRING("flash"SS_TAP(X_ENTER));
54 leader_succeed = true;
56 SEQ_TWO_KEYS(KC_L, KC_G) {
58 leader_layer_game = true;
60 SEQ_TWO_KEYS(KC_L, KC_D) {
62 leader_layer_def = true;
68 void leader_end(void) {
71 } else if (leader_layer_game) {
75 } else if (leader_layer_def) {
86 // tap dance definitions
97 DOUBLE_SINGLE_TAP = 5,
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);
119 // layer declarations
120 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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 * `-----------------------------------------------------------------------------------'
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)
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 * `-----------------------------------------------------------------------------------'
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
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 * `-----------------------------------------------------------------------------------'
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
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 * `-----------------------------------------------------------------------------------'
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
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 * `-----------------------------------------------------------------------------------'
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
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;
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;
219 if (state->count == 3) {
220 if (state->interrupted || !state->pressed) return TRIPLE_TAP;
221 else return TRIPLE_HOLD;
226 static tap xtap_state = {
227 .is_press_action = true,
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) {
235 register_code16(LSFT(KC_8));
238 register_code(KC_LSFT);
241 register_code(KC_NUBS);
243 case DOUBLE_SINGLE_TAP:
244 register_code(KC_NUBS);
249 void lsft_reset (qk_tap_dance_state_t *state, void *user_data) {
250 switch (xtap_state.state) {
252 unregister_code16(LSFT(KC_8));
255 unregister_code(KC_LSFT);
258 unregister_code(KC_NUBS);
260 case DOUBLE_SINGLE_TAP:
261 unregister_code(KC_NUBS);
264 xtap_state.state = 0;
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) {
271 register_code16(LSFT(KC_9));
274 register_code(KC_RSFT);
277 register_code16(LSFT(KC_NUBS));
279 case DOUBLE_SINGLE_TAP:
280 register_code16(LSFT(KC_NUBS));
285 void rsft_reset (qk_tap_dance_state_t *state, void *user_data) {
286 switch (xtap_state.state) {
288 unregister_code16(LSFT(KC_9));
291 unregister_code(KC_RSFT);
294 unregister_code16(LSFT(KC_NUBS));
296 case DOUBLE_SINGLE_TAP:
297 unregister_code16(LSFT(KC_NUBS));
300 xtap_state.state = 0;
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) {
307 register_mods(MOD_BIT(KC_ALGR));
311 register_code(KC_LCTL);
314 register_mods(MOD_BIT(KC_ALGR));
317 case DOUBLE_SINGLE_TAP:
318 register_mods(MOD_BIT(KC_ALGR));
324 void lctl_reset (qk_tap_dance_state_t *state, void *user_data) {
325 switch (xtap_state.state) {
327 unregister_code(KC_7);
328 unregister_mods(MOD_BIT(KC_ALGR));
331 unregister_code(KC_LCTL);
334 unregister_code(KC_8);
335 unregister_mods(MOD_BIT(KC_ALGR));
337 case DOUBLE_SINGLE_TAP:
338 unregister_code(KC_8);
339 unregister_mods(MOD_BIT(KC_ALGR));
342 xtap_state.state = 0;
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) {
349 register_mods(MOD_BIT(KC_ALGR));
353 register_code(KC_RCTL);
356 register_mods(MOD_BIT(KC_ALGR));
359 case DOUBLE_SINGLE_TAP:
360 register_mods(MOD_BIT(KC_ALGR));
366 void rctl_reset (qk_tap_dance_state_t *state, void *user_data) {
367 switch (xtap_state.state) {
369 unregister_code(KC_0);
370 unregister_mods(MOD_BIT(KC_ALGR));
373 unregister_code(KC_RCTL);
376 unregister_code(KC_9);
377 unregister_mods(MOD_BIT(KC_ALGR));
379 case DOUBLE_SINGLE_TAP:
380 unregister_code(KC_9);
381 unregister_mods(MOD_BIT(KC_ALGR));
384 xtap_state.state = 0;
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),