[Keymap] Update personal userspace and keymaps (#6654)
[jackhill/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 switch (keycode) {
35 uint16_t kc;
36 #ifdef LAYER_FN
37 static bool fn_lock = false;
38
39 case FN_FNLK:
40 if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
41 fn_lock = !IS_LAYER_ON(L_FN); // Fn layer will be toggled after this
42 }
43 break;
44 #endif
45
46 case KC_ESC:
47 if (record->event.pressed) {
48 #ifdef LAYER_NUMPAD // Disable Numpad layer before Fn layer
49 if (IS_LAYER_ON(L_NUMPAD)) {
50 layer_off(L_NUMPAD);
51 return false;
52 }
53 #endif
54 #ifdef LAYER_FN
55 if (IS_LAYER_ON(L_FN) && fn_lock) {
56 layer_off(L_FN);
57 return fn_lock = false;
58 }
59 #endif
60 }
61 break;
62
63 case CLEAR:
64 if (record->event.pressed) {
65 CLEAN_MODS(
66 SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
67 )
68 }
69 break;
70
71 case DST_P_R:
72 kc = (get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV;
73 CLEAN_MODS(
74 (record->event.pressed ? register_code16 : unregister_code16)(kc);
75 )
76 break;
77
78 case DST_N_A:
79 kc = (get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT;
80 CLEAN_MODS(
81 (record->event.pressed ? register_code16 : unregister_code16)(kc);
82 )
83 break;
84 }
85
86 return true;
87 }
88
89 __attribute__((weak))
90 uint32_t layer_state_set_keymap(uint32_t state) {
91 return state;
92 }
93
94 uint32_t layer_state_set_user(uint32_t state) {
95 state = layer_state_set_keymap(state);
96
97 #ifdef LAYER_NUMPAD
98 bool numpad = IS_LAYER_ON_STATE(state, L_NUMPAD);
99 bool num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
100 if (numpad != num_lock) {
101 tap_code(KC_NLCK); // Toggle Num Lock to match Numpad layer state
102 }
103 #endif
104
105 return state;
106 }
107
108 __attribute__((weak))
109 void led_set_keymap(uint8_t usb_led) {}
110
111 void led_set_user(uint8_t usb_led) {
112 led_set_keymap(usb_led);
113 }