#include QMK_KEYBOARD_H #include #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) enum layer_names { _QWERTY, // 0 _COLEMAKDH, _NAV, // 2 _NUM, //3 _SYM, // 4 _FUN, // 5 _MUS, // 6 _MOUSE // 7 }; enum { CUSTOM_KEYCODE_START = SAFE_RANGE, QWERTY, COLDH, LINUX, COPY, PASTE, CUT, UNDO, REDO, SALL, SPOTLI, M_PASS1, M_PASS2, M_PASS3, M_PASS4, CUSTOM_KEYCODE_END }; enum combos { FA_GUI, FS_ALT, FD_CTL, JQUOT_GUI, JL_ALT, JK_CTL, TA_GUI, TR_ALT, TS_CTL, NO_GUI, NI_ALT, NE_CTL }; const uint16_t PROGMEM fa_combo[] = {KC_F, KC_A, COMBO_END}; const uint16_t PROGMEM fs_combo[] = {KC_F, KC_S, COMBO_END}; const uint16_t PROGMEM fd_combo[] = {KC_F, KC_D, COMBO_END}; const uint16_t PROGMEM jquote_combo[] = {KC_J, KC_QUOT, COMBO_END}; const uint16_t PROGMEM jl_combo[] = {KC_J, KC_L, COMBO_END}; const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; const uint16_t PROGMEM ta_combo[] = {KC_T, KC_A, COMBO_END}; const uint16_t PROGMEM tr_combo[] = {KC_T, KC_R, COMBO_END}; const uint16_t PROGMEM ts_combo[] = {KC_T, KC_S, COMBO_END}; const uint16_t PROGMEM no_combo[] = {KC_N, KC_O, COMBO_END}; const uint16_t PROGMEM ni_combo[] = {KC_N, KC_I, COMBO_END}; const uint16_t PROGMEM ne_combo[] = {KC_N, KC_E, COMBO_END}; combo_t key_combos[] = { // QWERTY [FA_GUI] = COMBO(fa_combo, KC_LGUI), [FS_ALT] = COMBO(fs_combo, KC_LALT), [FD_CTL] = COMBO(fd_combo, KC_LCTL), [JQUOT_GUI] = COMBO(jquote_combo, KC_RGUI), [JL_ALT] = COMBO(jl_combo, KC_RALT), [JK_CTL] = COMBO(jk_combo, KC_RCTL), // COLEMAK-DH [TA_GUI] = COMBO(ta_combo, KC_LGUI), [TR_ALT] = COMBO(tr_combo, KC_LALT), [TS_CTL] = COMBO(ts_combo, KC_LCTL), [NO_GUI] = COMBO(no_combo, KC_RGUI), [NI_ALT] = COMBO(ni_combo, KC_RALT), [NE_CTL] = COMBO(ne_combo, KC_RCTL), }; // Layer tap definitions #define MUS_ESC LT(_MUS, KC_ESC) #define NAV_BKSP LT(_NAV, KC_BSPC) #define MOUSE_TAB LT(_MOUSE, KC_TAB) #define SYM_ENTER LT(_SYM, KC_ENTER) #define NUM_SPC LT(_NUM, KC_SPC) #define FUN_DEL LT(_FUN, KC_DEL) // Simple keycode for now (can be enhanced to tap dance later) #define Q_ESC KC_Q // Default layer change #define QWERT DF(_QWERTY) #define COLDH DF(_COLEMAKDH) // Tap dance actions array (required by QMK) - add at least one dummy action tap_dance_action_t tap_dance_actions[] = { [0] = ACTION_TAP_DANCE_DOUBLE(KC_NO, KC_NO), // Dummy action to satisfy the array requirement }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MUTE, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ KC_TAB, Q_ESC, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_GRV, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_RCTL, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, SPOTLI, _______, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ MUS_ESC, NAV_BKSP,MOUSE_TAB, SYM_ENTER,NUM_SPC,FUN_DEL // └────────┴────────┴────────┘ └────────┴────────┴────────┘ ), [_COLEMAKDH] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MUTE, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ KC_TAB, Q_ESC, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_GRV, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_RCTL, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V , SPOTLI, _______, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ MUS_ESC, NAV_BKSP,MOUSE_TAB, SYM_ENTER,NUM_SPC,FUN_DEL // └────────┴────────┴────────┘ └────────┴────────┴────────┘ ), [_NAV] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______, _______, _______, _______, _______, RGB_MODE_SWIRL, SPOTLI, _______, _______, _______, _______, RGB_TOG, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, _______, _______, KC_CAPS, PASTE, COPY, CUT, UNDO, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, M_PASS3, M_PASS4, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, M_PASS2, M_PASS1, LINUX, _______, SALL, KC_HOME, KC_PGUP, KC_PGDN, KC_END, _______, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ MUS_ESC, NAV_BKSP,MOUSE_TAB, SYM_ENTER,NUM_SPC,FUN_DEL // └────────┴────────┴────────┘ └────────┴────────┴────────┘ ), [_NUM] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______, _______, _______, _______, _______, RGB_MODE_SWIRL, SPOTLI, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, COLDH, _______, _______, _______, QWERT, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, _______, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ _______, KC_DOT, KC_1, KC_2, KC_3, KC_BSLS, KC_LPRN, _______, _______, _______, _______, _______, _______, _______, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ KC_DOT, KC_0, KC_MINUS, _______, _______, _______ // └────────┴────────┴────────┘ └────────┴────────┴────────┘ ), [_SYM] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______, _______, _______, _______, _______, RGB_MODE_SWIRL, SPOTLI, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, _______, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, _______, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ _______, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, _______, _______, _______, _______, _______, _______, _______, _______, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ KC_LPRN, KC_RPRN, KC_UNDS, _______, _______, _______ // └────────┴────────┴────────┘ └────────┴────────┴────────┘ ), [_FUN] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______, _______, _______, _______, _______, RGB_M_SW, SPOTLI, _______, _______, _______, _______, QK_BOOT, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, RM_NEXT,RM_PREV,_______,_______,QWERT, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, KC_F11, KC_F4, KC_F5, KC_F6, _______, RGB_M_X, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ _______, KC_F10, KC_F1, KC_F2, KC_F3, _______, _______, _______, _______, _______, _______, _______, _______, _______, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ _______, _______, _______, _______, _______, _______ // └────────┴────────┴────────┘ └────────┴────────┴────────┘ ), [_MUS] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ QK_BOOT, _______, _______, _______, _______, RGB_MODE_SWIRL, SPOTLI, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______,_______,_______,_______,QWERT, _______, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MUTE, _______, _______, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ _______, _______, _______, _______, _______, _______ // └────────┴────────┴────────┘ └────────┴────────┴────────┘ ), [_MOUSE] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______, _______, _______, _______, _______, RGB_MODE_SWIRL, SPOTLI, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, _______, _______, _______, KC_PSTE, KC_COPY, KC_CUT, KC_UNDO, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN1, KC_WH_D, KC_WH_U, KC_BTN2, _______, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ _______, _______, _______, _______, _______, _______ // └────────┴────────┴────────┘ └────────┴────────┴────────┘ ) }; uint8_t mod_state; bool process_record_user(uint16_t keycode, keyrecord_t *record) { static bool isLinux = false; mod_state = get_mods(); switch (keycode) { case LINUX: if (record->event.pressed) { isLinux = !isLinux; } return false; case COPY: if (record->event.pressed) { if (isLinux) { tap_code16(LCTL(KC_C)); } else { tap_code16(LGUI(KC_C)); } return false; } case PASTE: if (record->event.pressed) { if (isLinux) { tap_code16(LCTL(KC_V)); } else { tap_code16(LGUI(KC_V)); } return false; } case CUT: if (record->event.pressed) { if (isLinux) { tap_code16(LCTL(KC_X)); } else { tap_code16(LGUI(KC_X)); } return false; } case UNDO: if (record->event.pressed) { if (isLinux) { tap_code16(LCTL(KC_Z)); } else { tap_code16(LGUI(KC_Z)); } return false; } case REDO: if (record->event.pressed) { if (isLinux) { tap_code16(LCTL(KC_Y)); } else { tap_code16(LSG(KC_Z)); } return false; } case SALL: if (record->event.pressed) { if (isLinux) { tap_code16(LCTL(KC_A)); } else { tap_code16(LGUI(KC_A)); } return false; } case M_PASS1: if (record->event.pressed) { SEND_STRING("P0plarLake!2023"); } return false; case M_PASS2: if (record->event.pressed) { SEND_STRING("CindieOtono!2024"); } return false; case M_PASS3: if (record->event.pressed) { SEND_STRING("1290"); } return false; case M_PASS4: if (record->event.pressed) { SEND_STRING("Thel0ve0fchrist!"); } return false; case SPOTLI: if (record->event.pressed) { tap_code16(LGUI(KC_SPACE)); } return false; } return true; } #if defined(ENCODER_MAP_ENABLE) const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, [_COLEMAKDH] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, [_NAV] = { ENCODER_CCW_CW(C(KC_TAB), S(C(KC_TAB))), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, [_NUM] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, [_SYM] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, [_MOUSE] = { ENCODER_CCW_CW(A(KC_TAB), S(A(KC_TAB))), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, [_FUN] = { ENCODER_CCW_CW(RGB_VAI, RGB_VAD), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, [_MUS] = { ENCODER_CCW_CW(RM_NEXT, RM_PREV), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, }; #endif