/* █ █ █ ▄▄▄▀▀▀▀▀▀▄▄▄ █▀▀▀▀▀▀▀▀▀▀█ █ █ █ ▄▀ ▀▄ █ █ █ █ █ ▄▀ ▀▄ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █▄▄▄▄▄▄▄▄▄▄█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ▀▄ ▄▀ █ █ ██ █ █ ▀▄ ▄▀ █ █ █ █ █▄▄▄▄▄▄▄▄ ▀▀▀▄▄▄▄▄▄▀▀▀ █ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ┌─┐┌─╴╷┌──┬─ │ ┐├─╴│└─┐│ └─┘└─╴╵╶─┘╵ */ #include QMK_KEYBOARD_H #include #include #include "klor.h" #ifdef HAPTIC_ENABLE #include "drivers/haptic/DRV2605L.h" #endif //HAPTIC ENABLE // ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ // │ D E F I N I T I O N S │ // └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ // ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ // ┌───────────────────────────────────────────────────────────┐ // │ d e f i n e l a y e r s │ // └───────────────────────────────────────────────────────────┘ enum klor_layers { /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */ _COLEMAK, _QWERTY, _LOWER, _RAISE, _ADJUST, }; // ┌───────────────────────────────────────────────────────────┐ // │ d e f i n e k e y c o d e s │ // └───────────────────────────────────────────────────────────┘ enum custom_keycodes { COLEMAK = SAFE_RANGE, QWERTY, LOWER, RAISE, ADJUST, OS_SWAP, WMAIL, GMAIL, GIPHY, MAKE_H, SNAP1, SNAP2 }; // ┌───────────────────────────────────────────────────────────┐ // │ d e f i n e m a c r o n a m e s │ // └───────────────────────────────────────────────────────────┘ // LEFT HAND HOME ROW MODS ├───────────────────────────────────┐ #define GUI_A MT(MOD_LGUI, KC_A) #define ALT_R MT(MOD_LALT, KC_R) #define CTL_S MT(MOD_LCTL, KC_S) #define SHT_T MT(MOD_LSFT, KC_T) // RIGHT HAND HOME ROW MODS ├───────────────────────────────────┐ #define SHT_N MT(MOD_RSFT, KC_N) #define CTL_E MT(MOD_LCTL, KC_E) #define ALT_I MT(MOD_LALT, KC_I) #define GUI_O MT(MOD_LGUI, KC_O) // ┌───────────────────────────────────────────────────────────┐ // │ d e f i n e c o m b o s │ // └───────────────────────────────────────────────────────────┘ const uint16_t PROGMEM esc_combo[] = {KC_TAB, KC_Q, COMBO_END}; //const uint16_t PROGMEM save_combo[] = {KC_D, KC_S, COMBO_END}; combo_t key_combos[COMBO_COUNT] = { COMBO(esc_combo, KC_ESC) //COMBO(save_combo, C(KC_S)) }; // ┌───────────────────────────────────────────────────────────┐ // │ d e f i n e k e y o v e r r i d e s │ // └───────────────────────────────────────────────────────────┘ const key_override_t sve_key_override = ko_make_basic(MOD_MASK_GUI, KC_S, C(KC_S)); // This globally defines all key overrides to be used ├───────────┐ const key_override_t **key_overrides = (const key_override_t *[]){ &sve_key_override, NULL // Null terminate the array of overrides! }; // ┌───────────────────────────────────────────────────────────┐ // │ d e f i n e s o u n d s │ // └───────────────────────────────────────────────────────────┘ #ifdef AUDIO_ENABLE #define WINXP_SOUND W__NOTE(_DS6), Q__NOTE(_DS5), H__NOTE(_AS5), H__NOTE(_GS5), H__NOTE(_DS5), H__NOTE(_DS6), H__NOTE(_AS5) #define MAC_SOUND S__NOTE(_CS5), B__NOTE(_C5) float winxp_song[][2] = SONG(WINXP_SOUND); float mac_song[][2] = SONG(MAC_SOUND); #endif // AUDIO_ENABLE // ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ // │ K E Y M A P S │ // └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ // ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* ┌───────────────────────────────────────────────────────────┐ │ c o l e m a k │ └───────────────────────────────────────────────────────────┘ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │ Q │ W │ F │ P │ G │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ J │ L │ U │ Y │ ; │ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ │ TAB │ A │ R │ S │ T │ D ├─╯ ╰─┤ H │ N │ E │ I │ O │ " │ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ DEL │ Z │ X │ C │ V │ B ││ SHIFT ││PLY/PSE ││ K │ M │ , │ . │ / │ SHIFT │ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ │ CTRL │ LOWER │ SPACE │ ALT ││ CMD/WIN │ ENTER │ RAISE │ BSPCE │ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ [_COLEMAK] = LAYOUT_polydactyl( //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB, GUI_A, ALT_R, CTL_S, SHT_T, KC_D, KC_H, SHT_N, CTL_E, ALT_I, GUI_O, KC_QUOT, KC_Q, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LSFT, KC_MPLY, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS, KC_DEL, LOWER, KC_SPC, KC_ESC, KC_LGUI, KC_ENT, RAISE, KC_BSPC ), /* ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ ┌───────────────────────────────────────────────────────────┐ │ q w e r t y │ └───────────────────────────────────────────────────────────┘ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │ Q │ W │ E │ R │ T │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ Y │ U │ I │ O │ P │ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ │ TAB │ A │ S │ D │ F │ G ├─╯ ╰─┤ H │ J │ K │ L │ ; │ " │ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ DEL │ Z │ X │ C │ V │ B ││ SHIFT ││PLY/PSE ││ N │ M │ , │ . │ / │ SHIFT │ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ │ CTRL │ LOWER │ SPACE │ ALT ││ CMD/WIN │ ENTER │ RAISE │ BSPACE │ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ [_QWERTY] = LAYOUT_polydactyl( //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_DEL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LSFT, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LCTL, LOWER, KC_SPC, KC_LALT, KC_LGUI, KC_ENT, RAISE, KC_BSPC ), /* ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ ┌───────────────────────────────────────────────────────────┐ │ l o w e r │ └───────────────────────────────────────────────────────────┘ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │ CAPSLCK │ NUMLCK │ ↑ │ = │ { │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ } │ 7 │ 8 │ 9 │ + │ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ │ ESC │ HOME │ ← │ ↓ │ → │ [ ├─╯ ╰─┤ ] │ 4 │ 5 │ 6 │ - │ ' │ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ SCRNSHT │ END │ PG↑ │ SAVE │ PG↓ │ ( ││ MUTE ││PLY/PSE ││ ) │ 1 │ 2 │ 3 │ * │ ▼ │ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ │ ▼ │ ▼ │ ▼ │ ▼ ││ ▼ │ ▼ │ ADJUST │ 0 │ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ [_LOWER] = LAYOUT_polydactyl( //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ KC_CAPS, KC_NUM, KC_UP, KC_EQL, KC_LCBR, KC_RCBR, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_ESC, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_MINS, KC_DQT, SNAP2, KC_END, KC_PGUP, C(KC_S), KC_PGDN, KC_LPRN, KC_MUTE, KC_MPLY, KC_RPRN, KC_P1, KC_P2, KC_P3, KC_PAST, _______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, KC_P0 ), /* ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ ┌───────────────────────────────────────────────────────────┐ │ r a i s e │ └───────────────────────────────────────────────────────────┘ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │ ! │ @ │ # │ $ │ % │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ ^ │ & │ Ü │ ° │ / │ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ │ GMX │ Ä │ è │ SZ │ é │ ├─╯ ╰─┤ │ ¥ │ € │ £ │ Ö │ │ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ WEB │ ` │ ~ │ CUE │ │ ││ MUTE ││PLY/PSE ││ │ │ │ DM REC1 │ DM STOP │ DM PLY1 │ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ │ GIPHY │ ADJUST │ ▼ │ ▼ ││ ▼ │ ▼ │ ▼ │ ▼ │ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ [_RAISE] = LAYOUT_polydactyl( //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, RALT(KC_U),RALT(KC_3),KC_BSLS, GMAIL, RALT(KC_A),RALT(KC_F),RALT(KC_S),RALT(KC_G),XXXXXXX, XXXXXXX,LSFT(RALT(KC_4)),RALT(KC_5), RALT(KC_4), RALT(KC_O), XXXXXXX, WMAIL, KC_GRV, LSFT(KC_GRV),RALT(KC_C),XXXXXXX,XXXXXXX, KC_MUTE, KC_MPLY, XXXXXXX, XXXXXXX, XXXXXXX, DM_REC1, DM_RSTP, DM_PLY1, GIPHY, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______ ), /* ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ ┌───────────────────────────────────────────────────────────┐ │ a d j u s t │ └───────────────────────────────────────────────────────────┘ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │ AUDIO │ HAPTIC │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ F7 │ F8 │ F9 │ F14 │ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ │ RESET │ DEBUG │ QWERTY │ │ │ ├─╯ ╰─┤ │ F4 │ F5 │ F6 │ F12 │ F13 │ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ MAKE │ OS SWAP │ COLEMAK │ │ │ ││ MUTE ││PLY/PSE ││ │ F1 │ F2 │ F3 │ F10 │ F11 │ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ │ ▼ │ ▼ │ ▼ │ ▼ ││ ▼ │ ▼ │ ▼ │ ▼ │ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ [_ADJUST] = LAYOUT_polydactyl( //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ AU_TOG, HPT_TOG, RGB_HUI, RGB_MOD, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F14, QK_BOOT, DB_TOGG, QWERTY, RGB_SAI, XXXXXXX, XXXXXXX, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F12, KC_F13, MAKE_H, OS_SWAP, COLEMAK, RGB_VAI, XXXXXXX, XXXXXXX, KC_MUTE, KC_MPLY, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F10, KC_F11, _______, _______, _______, _______, _______, _______, _______, _______ ) /* ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ ┌───────────────────────────────────────────────────────────┐ │ t e m p l a t e │ └───────────────────────────────────────────────────────────┘ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ │ │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │ │ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ │ │ │ │ │ ││ ││ ││ │ │ │ │ │ │ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ │ │ │ │ ││ │ │ │ │ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ [_TEMPLATE] = LAYOUT_polydactyl( //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )*/ }; // ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ // │ T R A C K B A L L │ // └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ // ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ #ifdef POINTING_DEVICE_ENABLE void pointing_device_init_user(void) { set_auto_mouse_layer(_MOUSE); // only required if AUTO_MOUSE_DEFAULT_LAYER is not set to index of set_auto_mouse_enable(true); // always required before the auto mouse feature will work } report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { if (scrolling_mode) { mouse_report.h = mouse_report.x; mouse_report.v = mouse_report.y; mouse_report.x = 0; mouse_report.y = 0; } return mouse_report; } #endif //POINTING_DEVICE_ENABLE // ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ // │ H A P T I C F E E D B A C K │ // └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ // ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ void keyboard_post_init_user(void) { // Call the post init code. #if HAPTIC_ENABLE haptic_disable(); // disables per key haptic feedback by default #endif //HAPTIC ENABLE #if RGB_MATRIX_ENABLE rgblight_enable_noeeprom(); //rgblight_sethsv_noeeprom(35, 255, 255); // set default RGB color to yellow #endif //RGB_MATRIX_ENABLE } // ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ // │ O L E D │ // └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ // ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ #ifdef OLED_ENABLE // ┌───────────────────────────────────────────────────────────┐ // │ d y n a m i c m a c r o │ // └───────────────────────────────────────────────────────────┘ char layer_state_str[24]; char o_text[24] = ""; int dmacro_num = 0; #ifdef DYNAMIC_MACRO_ENABLE char dmacro_text[4][24] = { "", "RECORDING", "STOP RECORDING", "PLAY RECORDING"}; static uint16_t dmacro_timer; const char PROGMEM rec_ico[] = {0xD1, 0xE1, 0}; const char PROGMEM stop_ico[] = {0xD3, 0xE1, 0}; const char PROGMEM play_ico[] = {0xD2, 0xE1, 0}; // DYNMACRO RECORD ├─────────────────────────────────────────────────────────────┐ void dynamic_macro_record_start_user(void) { dmacro_num = 1; return; } // DYNMACRO STOP RECORDING ├─────────────────────────────────────────────────────┐ void dynamic_macro_record_end_user(int8_t direction) { dmacro_num = 2; dmacro_timer = timer_read(); return; } // DYNMACRO PLAY RECORDING ├─────────────────────────────────────────────────────┐ void dynamic_macro_play_user(int8_t direction) { dmacro_num = 3; dmacro_timer = timer_read(); return; } #endif //DYNAMIC_MACRO_ENABLE void matrix_scan_user(void) { #ifdef DYNAMIC_MACRO_ENABLE // DynMacroTimer if(dmacro_num > 0){ if (timer_elapsed(dmacro_timer) < 3000) { strcpy ( o_text, dmacro_text[dmacro_num] ); } else { if (dmacro_num == 1) { strcpy ( o_text, dmacro_text[1] ); } else { strcpy ( o_text, layer_state_str ); dmacro_num = 0; } } } #endif //DYNAMIC_MACRO_ENABLE } // ┌───────────────────────────────────────────────────────────┐ // │ o l e d g r a p h i c s │ // └───────────────────────────────────────────────────────────┘ void render_os_lock_status(void) { static const char PROGMEM sep_v[] = {0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0}; static const char PROGMEM sep_h1[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0}; static const char PROGMEM sep_h2[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0}; static const char PROGMEM face_1[] = {0x80, 0x81, 0x82, 0x83, 0x84, 0xE1, 0}; static const char PROGMEM face_2[] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xE1, 0}; static const char PROGMEM os_m_1[] = {0x95, 0x96, 0}; static const char PROGMEM os_m_2[] = {0xB5, 0xB6, 0}; static const char PROGMEM os_w_1[] = {0x97, 0x98, 0}; static const char PROGMEM os_w_2[] = {0xB7, 0xB8, 0}; static const char PROGMEM s_lock[] = {0x8F, 0x90, 0}; static const char PROGMEM n_lock[] = {0x91, 0x92, 0}; static const char PROGMEM c_lock[] = {0x93, 0x94, 0}; static const char PROGMEM b_lock[] = {0xE1, 0xE1, 0}; #ifdef AUDIO_ENABLE static const char PROGMEM aud_en[] = {0xAF, 0xB0, 0}; static const char PROGMEM aud_di[] = {0xCF, 0xD0, 0}; #endif #ifdef HAPTIC_ENABLE static const char PROGMEM hap_en[] = {0xB1, 0xB2, 0}; #endif // os mode status ────────────────────────────────────────┐ oled_write_ln_P(sep_v, false); if (keymap_config.swap_lctl_lgui) { oled_write_P(os_m_1, false); // ──── MAC } else { oled_write_P(os_w_1, false); // ──── WIN } oled_write_P(sep_h1, false); oled_write_P(face_1, false); if (keymap_config.swap_lctl_lgui) { oled_write_P(os_m_2, false); // ──── MAC } else { oled_write_P(os_w_2, false); // ──── WIN } oled_write_P(sep_h1, false); oled_write_P(face_2, false); oled_write_ln_P(sep_v, false); // lock key layer status ─────────────────────────────────┐ led_t led_usb_state = host_keyboard_led_state(); if (led_usb_state.num_lock) { oled_write_P(n_lock, false); // ──── NUMLOCK } else { oled_write_P(b_lock, false); } if (led_usb_state.caps_lock) { oled_write_P(c_lock, false); // ─── CAPSLOCK } else { oled_write_P(b_lock, false); } if (led_usb_state.scroll_lock) { // ─ SCROLLLOCK oled_write_P(s_lock, false); } else { oled_write_P(b_lock, false); } // hardware feature status ──────────────────────────────┐ oled_write_P(sep_h2, false); #ifndef AUDIO_ENABLE oled_write_P(b_lock, false); #endif #ifndef HAPTIC_ENABLE oled_write_P(b_lock, false); #endif #ifdef AUDIO_ENABLE // ────────────────── AUDIO if (is_audio_on()) { oled_write_P(aud_en, false); } else { oled_write_P(aud_di, false); } #endif // AUDIO ENABLE #ifdef HAPTIC_ENABLE // ─────────────── HAPTIC oled_write_P(hap_en, false); #endif // HAPTIC ENABLE } // layer status ──────────────────────────────────────────┐ int layerstate = 0; layer_state_t layer_state_set_kb(layer_state_t state) { switch (get_highest_layer(layer_state | default_layer_state)) { case 0: strcpy ( layer_state_str, "BASE COLEMAK"); break; case 1: strcpy ( layer_state_str, "BASE QWERTY"); break; case 2: strcpy ( layer_state_str, "LOWER"); break; case 3: strcpy ( layer_state_str, "RAISE"); break; case 4: strcpy ( layer_state_str, "ADJUST"); break; default: strcpy ( layer_state_str, "XXXXXX"); } if (dmacro_num < 1) { strcpy ( o_text, layer_state_str ); } //return state; return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); } // ┌───────────────────────────────────────────────────────────┐ // │ w r i t e t o o l e d │ // └───────────────────────────────────────────────────────────┘ bool oled_task_kb(void) { if (!oled_task_user()) { return false; } if (is_keyboard_master()) { // ────────────────────────── PRIMARY SIDE // layer status ──────────────────────────────────────────────────┐ #ifdef DYNAMIC_MACRO_ENABLE if(dmacro_num == 1){ oled_write_P(rec_ico, false); } if(dmacro_num == 2){ oled_write_P(stop_ico, false); } if(dmacro_num == 3){ oled_write_P(play_ico, false); } #endif //DYNAMIC_MACRO_ENABLE oled_write_ln(o_text, false); render_os_lock_status(); } else { // ─────────────────────────────────────────── SECONDARY SIDE // KLOR face ─────────────────────────────────────────────────────┐ static const char PROGMEM klor_face[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; oled_write_raw_P(klor_face, sizeof(klor_face)); } return false; } #endif // OLED_ENABLE uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case SHT_T: return TAPPING_TERM - 150; case SHT_N: return TAPPING_TERM - 150; default: return TAPPING_TERM; } } // ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ // │ M A C R O S │ // └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ // ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case OS_SWAP: if (record->event.pressed) { if (!keymap_config.swap_lctl_lgui) { keymap_config.swap_lctl_lgui = true; // ─── MAC #ifdef AUDIO_ENABLE PLAY_SONG(mac_song); #endif // AUDIO_ENABLE } else { keymap_config.swap_lctl_lgui = false; // ─── WIN #ifdef AUDIO_ENABLE PLAY_SONG(winxp_song); #endif // AUDIO_ENABLE } #ifdef HAPTIC_ENABLE DRV_pulse(pulsing_strong); #endif // HAPTIC_ENABLE eeconfig_update_keymap(keymap_config.raw); clear_keyboard(); // ──── clear to prevent stuck keys return false; } // ┌───────────────────────────────────────────────────────────┐ // │ l a y e r │ // └───────────────────────────────────────────────────────────┘ case COLEMAK: if (record->event.pressed) { set_single_persistent_default_layer(_COLEMAK); #ifdef HAPTIC_ENABLE DRV_pulse(transition_hum); #endif // HAPTIC_ENABLE } return false; case QWERTY: if (record->event.pressed) { set_single_persistent_default_layer(_QWERTY); #ifdef HAPTIC_ENABLE DRV_pulse(transition_hum); #endif // HAPTIC_ENABLE } return false; case LOWER: if (record->event.pressed) { layer_on(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } return false; case RAISE: if (record->event.pressed) { layer_on(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { layer_off(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } return false; case ADJUST: if (record->event.pressed) { layer_on(_ADJUST); } else { layer_off(_ADJUST); } return false; // ┌───────────────────────────────────────────────────────────┐ // │ q m k │ // └───────────────────────────────────────────────────────────┘ case MAKE_H: if (record->event.pressed) { #ifdef KEYBOARD_klor_2040 SEND_STRING ("qmk compile -kb klor/2040 -km geist"); #else SEND_STRING ("qmk compile -kb klor -km geist"); #endif tap_code(KC_ENTER); } break; // ┌───────────────────────────────────────────────────────────┐ // │ p r o d u c t i v i t y │ // └───────────────────────────────────────────────────────────┘ case WMAIL: if (record->event.pressed) { SEND_STRING ("igit.igit@web.de"); } break; case GMAIL: if (record->event.pressed) { SEND_STRING ("igit@gmx.de"); } break; case GIPHY: if (record->event.pressed) { SEND_STRING ("@gif "); } break; case SNAP1: if (record->event.pressed) { if (keymap_config.swap_lctl_lgui) { SEND_STRING(SS_LSFT(SS_LCMD("4"))); //MAC } else { SEND_STRING(SS_LWIN(SS_TAP(X_PSCR))); //WIN } } break; case SNAP2: if (record->event.pressed) { if (keymap_config.swap_lctl_lgui) { SEND_STRING(SS_LSFT(SS_LCMD(SS_LCTL("4")))); //MAC } else { SEND_STRING(SS_LSFT(SS_LWIN("S"))); //WIN } } break; case KC_MPLY: if (record->event.pressed) { #ifdef HAPTIC_ENABLE DRV_pulse(sharp_click); #endif // HAPTIC_ENABL } break; } return true; } // ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ // │ E N C O D E R │ // └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ // ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ #ifdef ENCODER_ENABLE // ┌───────────────────────────────────────────────────────────┐ // │ e n c o d e r L │ // └───────────────────────────────────────────────────────────┘ bool encoder_update_user(uint8_t index, bool clockwise) { if (index == 0) { if (clockwise) { tap_code(KC_PGDN); } else { tap_code(KC_PGUP); } // ┌───────────────────────────────────────────────────────────┐ // │ e n c o d e r R │ // └───────────────────────────────────────────────────────────┘ } else if (index == 1) { if(IS_LAYER_ON(_LOWER)){ if (clockwise) { tap_code(KC_MNXT); } else { tap_code(KC_MPRV); } }else { if (clockwise) { tap_code(KC_VOLU); } else { tap_code(KC_VOLD); } } } return true; } #endif // ENCODER_ENABLE /* ▐█ ▟▛ ▐█ ▄▆▀▀▀▀▀▀▆▄ ▐█▀▀▀▀▀█▌ ▐█ ▟▛ ▐█ ▟▛ ▜▙ ▐█ █▌ ▐█ ▟▛ ▐█ ▐█ █▋▐█ █▌ ▐█ ▟█▙ ▐█ ▐█ █▋▐█▀▀▜█▀▀▘ ▐█▟▛ ▜▙ ▐█ ▜▙ ▟▛ ▐█ ▜▙ ▐█▛ ▜▙ ▐█▄▄▄▄ ▀▜▆▄▄▄▄▆▛▀ ▐█ ▜▙ ▄██████████████▄ ████████████████ ▄██████▀ ▀████▀ ▀██████▄ ███████▄ ▄████▄ ▄███████ ███████████▀▀▀▀███████████ ▀█████████▀ ▄▄ ▀█████████▀ ████▀ ▄██▄ ▀████ ████▄▄████▄▄████ */