Commit | Line | Data |
---|---|---|
9105bf24 KĐ |
1 | #include QMK_KEYBOARD_H |
2 | #include "konstantin.h" | |
3 | ||
4 | enum keycodes_keymap { | |
cb1935aa | 5 | RCTRL = RANGE_KEYMAP, |
9105bf24 KĐ |
6 | }; |
7 | ||
8 | enum layers_keymap { | |
cb1935aa | 9 | L_RCTRL = L_RANGE_KEYMAP, |
9105bf24 KĐ |
10 | }; |
11 | ||
cb1935aa | 12 | void eeconfig_init_keymap(void) { |
36d39025 | 13 | rgblight_sethsv(MODERN_DOLCH_RED); |
cb1935aa KĐ |
14 | rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL); |
15 | } | |
16 | ||
9105bf24 | 17 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { |
cb1935aa KĐ |
18 | switch (keycode) { |
19 | case RCTRL: | |
20 | if (record->event.pressed) { | |
21 | register_code(KC_RCTRL); | |
22 | layer_on(L_RCTRL); | |
23 | } else { | |
24 | unregister_code(KC_RCTRL); | |
25 | layer_off(L_RCTRL); | |
26 | } | |
d633cf3c | 27 | break; |
cb1935aa | 28 | } |
d633cf3c KĐ |
29 | |
30 | return true; | |
31 | } | |
32 | ||
6d191635 | 33 | static inline void fn_light(void) { |
d633cf3c KĐ |
34 | rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); |
35 | rgblight_sethsv_noeeprom(modern_dolch_red.h, modern_dolch_red.s, rgblight_get_val()); | |
36 | } | |
37 | ||
6d191635 | 38 | static inline void caps_light(void) { |
d633cf3c KĐ |
39 | rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); |
40 | rgblight_sethsv_noeeprom(modern_dolch_cyan.h, modern_dolch_cyan.s, rgblight_get_val()); | |
9105bf24 KĐ |
41 | } |
42 | ||
6d191635 | 43 | static inline void restore_light(void) { |
d633cf3c KĐ |
44 | rgblight_config_t saved = { .raw = eeconfig_read_rgblight() }; |
45 | rgblight_sethsv_noeeprom(saved.hue, saved.sat, saved.val); | |
46 | rgblight_mode_noeeprom(saved.mode); | |
47 | } | |
36d39025 | 48 | |
d633cf3c | 49 | static void check_light_layer(uint32_t state) { |
36d39025 | 50 | if (IS_LAYER_ON_STATE(state, L_FN)) { |
d633cf3c KĐ |
51 | fn_light(); |
52 | } else if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { | |
53 | caps_light(); | |
36d39025 | 54 | } else { |
d633cf3c | 55 | restore_light(); |
36d39025 | 56 | } |
36d39025 KĐ |
57 | } |
58 | ||
d633cf3c | 59 | static void check_light_led(uint8_t usb_led) { |
36d39025 | 60 | if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) { |
d633cf3c KĐ |
61 | caps_light(); |
62 | } else if (IS_LAYER_ON(L_FN)) { | |
63 | fn_light(); | |
36d39025 | 64 | } else { |
d633cf3c | 65 | restore_light(); |
36d39025 KĐ |
66 | } |
67 | } | |
68 | ||
d633cf3c KĐ |
69 | static bool skip_led = false; |
70 | ||
36d39025 KĐ |
71 | uint32_t layer_state_set_keymap(uint32_t state) { |
72 | static uint32_t prev_state = L_BASE; | |
73 | if (IS_LAYER_ON_STATE(state, L_FN) != IS_LAYER_ON_STATE(prev_state, L_FN)) { | |
d633cf3c KĐ |
74 | check_light_layer(state); // Fn state changed since last time |
75 | skip_led = IS_LAYER_ON_STATE(state, L_FN); | |
76 | // led_set_keymap will be called automatically after this | |
36d39025 KĐ |
77 | } |
78 | return prev_state = state; | |
79 | } | |
80 | ||
81 | void led_set_keymap(uint8_t usb_led) { | |
d633cf3c KĐ |
82 | if (skip_led) { |
83 | skip_led = false; | |
84 | return; // Skip calls triggered by the Fn layer turning on | |
85 | } | |
86 | check_light_led(usb_led); | |
36d39025 KĐ |
87 | } |
88 | ||
9105bf24 | 89 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
cb1935aa KĐ |
90 | /* Base layer |
91 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ | |
92 | * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │ | |
93 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ | |
94 | * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │ | |
95 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | |
96 | * │LCtCps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ | |
97 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ | |
d633cf3c | 98 | * │LShiftFn│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RShift│FnF│ |
cb1935aa KĐ |
99 | * └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘ |
100 | * │LGu│LAlt │ Space │RAlGu│RCt│ | |
101 | * └───┴─────┴───────────────────────────┴─────┴───┘ | |
102 | */ | |
103 | [L_BASE] = LAYOUT( | |
104 | KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, | |
105 | 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_BSPC, | |
106 | LCT_CPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, | |
107 | LSFT_FN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_FNLK, | |
d633cf3c | 108 | XXXXXXX, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, RCTRL, XXXXXXX |
cb1935aa | 109 | ), |
9105bf24 | 110 | |
6d191635 | 111 | /* Fn layer |
cb1935aa KĐ |
112 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ |
113 | * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│Ins│ | |
114 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ | |
d633cf3c | 115 | * │ │Hom│ ↑ │End│PgU│ │ │ │ │M1 │M↑ │М2 │M3 │ Del │ |
cb1935aa | 116 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ |
d633cf3c | 117 | * │ │ ← │ ↓ │ → │PgD│ │ │ │ │M← │M↓ │M→ │ │ |
cb1935aa | 118 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ |
d633cf3c | 119 | * │ │Mut│Vo-│Vo+│Ply│Prv│Nxt│App│MW↑│M4 │М5 │ │ │ |
cb1935aa KĐ |
120 | * └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘ |
121 | * │ │ │ MW↓ │MAcl2│ │ | |
122 | * └───┴─────┴───────────────────────────┴─────┴───┘ | |
123 | */ | |
124 | [L_FN] = LAYOUT( | |
125 | _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_INS, | |
d633cf3c KĐ |
126 | _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_DEL, |
127 | _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, | |
128 | _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_APP, KC_WH_U, KC_BTN4, KC_BTN5, _______, _______, | |
129 | XXXXXXX, _______, _______, KC_WH_D, KC_ACL2, _______, XXXXXXX | |
cb1935aa | 130 | ), |
9105bf24 | 131 | |
cb1935aa KĐ |
132 | /* RCtrl layer |
133 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ | |
134 | * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │Clr│ | |
135 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ | |
136 | * │ │Top│Mv↑│Btm│TPr│ │ │ │ │ │ │ │ │DelNx│ | |
137 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | |
138 | * │ │Mv←│Mv↓│Mv→│TNx│ │ │ │ │ │ │ │ │ | |
139 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ | |
d633cf3c | 140 | * │ │RTg│RV-│RV+│RMd│ │ │ │ │ │ │ │ │ |
cb1935aa KĐ |
141 | * └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘ |
142 | * │DPR│DstNA│ │ │ │ | |
143 | * └───┴─────┴───────────────────────────┴─────┴───┘ | |
144 | */ | |
145 | [L_RCTRL] = LAYOUT( | |
146 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLEAR, | |
147 | _______, TOP, MV_UP, BOTTOM, TAB_PRV, _______, _______, _______, _______, _______, _______, _______, _______, DEL_NXT, | |
148 | _______, MV_LEFT, MV_DOWN, MV_RGHT, TAB_NXT, _______, _______, _______, _______, _______, _______, _______, _______, | |
d633cf3c KĐ |
149 | _______, RGB_TOG, RGB_VAD, RGB_VAI, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, |
150 | XXXXXXX, DST_P_R, DST_N_A, _______, _______, _______, XXXXXXX | |
cb1935aa | 151 | ), |
9105bf24 | 152 | }; |