]> git.donarmstrong.com Git - qmk_firmware.git/blob - users/konstantin/konstantin.c
Add GODSPEED_YELLOW color
[qmk_firmware.git] / users / konstantin / konstantin.c
1 #include "konstantin.h"
2
3 __attribute__((weak))
4 void keyboard_pre_init_keymap(void) {}
5
6 void keyboard_pre_init_user(void) {
7   keyboard_pre_init_keymap();
8 }
9
10 __attribute__((weak))
11 void eeconfig_init_keymap(void) {}
12
13 void eeconfig_init_user(void) {
14   eeconfig_init_keymap();
15 }
16
17 __attribute__((weak))
18 void keyboard_post_init_keymap(void) {}
19
20 void keyboard_post_init_user(void) {
21   keyboard_post_init_keymap();
22 }
23
24 __attribute__((weak))
25 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
26   return true;
27 }
28
29 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
30   if (!process_record_keymap(keycode, record)) {
31     return false;
32   }
33
34 #ifdef LAYER_NUMPAD
35   void toggle_numpad(void) {
36     layer_invert(L_NUMPAD);
37     bool numpad = IS_LAYER_ON(L_NUMPAD), num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
38     if (num_lock != numpad) {
39       tap_code(KC_NLCK);  // Toggle Num Lock to match layer state
40     }
41   }
42 #endif
43
44   switch (keycode) {
45   case CLEAR:
46     if (record->event.pressed) {
47       SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
48     }
49     return false;
50
51   case DST_P_R:
52     (record->event.pressed ? register_code16 : unregister_code16)(
53       (get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV
54     );
55     return false;
56
57   case DST_N_A:
58     (record->event.pressed ? register_code16 : unregister_code16)(
59       (get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT
60     );
61     return false;
62
63 #ifdef LAYER_FN
64     static bool fn_lock;
65
66   case FN_FNLK:
67     if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
68       fn_lock = !IS_LAYER_ON(L_FN);  // Fn layer will be toggled after this
69     }
70     return true;
71 #endif
72
73 #ifdef LAYER_NUMPAD
74   case NUMPAD:
75     if (record->event.pressed) {
76       toggle_numpad();
77     }
78     return false;
79 #endif
80
81   case KC_ESC:
82     if (record->event.pressed) {
83 #ifdef LAYER_NUMPAD
84       if (IS_LAYER_ON(L_NUMPAD)) {
85         toggle_numpad();
86         return false;
87       }
88 #endif
89 #ifdef LAYER_FN
90       if (IS_LAYER_ON(L_FN) && fn_lock) {
91         layer_off(L_FN);
92         return fn_lock = false;
93       }
94 #endif
95     }
96     return true;
97
98   default:
99     return true;
100   }
101 }
102
103 __attribute__((weak))
104 uint32_t layer_state_set_keymap(uint32_t state) {
105   return state;
106 }
107
108 uint32_t layer_state_set_user(uint32_t state) {
109   return layer_state_set_keymap(state);
110 }