#include QMK_KEYBOARD_H enum layer_number { _BASE, _NAV, _NUM, _SYM, _FUN }; enum custom_keycodes { M_PASS1 = SAFE_RANGE, M_PASS2 }; // Tap Dance declarations enum { TD_Q_ESC, TD_W_GRV, }; // Tap Dance definitions tap_dance_action_t tap_dance_actions[] = { // Tap once for Q, twice for Escape [TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC), [TD_W_GRV] = ACTION_TAP_DANCE_DOUBLE(KC_W, KC_GRAVE), }; enum combos { FA_GUI, FS_ALT, FD_CTL, JQUOT_GUI, JL_ALT, JK_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}; combo_t key_combos[] = { [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), }; // LEFT THUMB KEYS #define NAV_BKSP LT(_NAV, KC_BSPC) #define FUN_TAB LT(_FUN, KC_TAB) // RIGHT THUMB KEYS #define SYM_ENTER LT(_SYM, KC_ENTER) #define NUM_SPC LT(_NUM, KC_SPC) // TAP DANCE #define Q_ESC TD(TD_Q_ESC) #define W_GRV TD(TD_W_GRV) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT( // ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐ __________________BASE_L1____________________, __________________BASE_R1____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________BASE_L2____________________, __________________BASE_R2____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________BASE_L3____________________, __________________BASE_R3____________________, // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘ ____THUMB_L2____, ____THUMB_R2____ // └────────┴───────┘ └────────┴────────┘ ), [_NAV] = LAYOUT( // ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐ __________________NAV_L1____________________, __________________NAV_R1____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________EMPTY_____________________, __________________NAV_R2____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________NAV_L3____________________, __________________NAV_R3____________________, // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘ ____THUMB2BLANK_, ____THUMB2BLANK_ // └────────┴───────┘ └────────┴────────┘ ), [_NUM] = LAYOUT( // ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐ __________________NUM_L1____________________, __________________NUM_R1____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________NUM_L2____________________ __________________EMPTY_____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________NUM_L3____________________, __________________EMPTY_____________________, // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘ _____NUM_TH_L2___, ____THUMB2BLANK_ // └────────┴───────┘ └────────┴────────┘ ), [_SYM] = LAYOUT( // ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐ __________________SYM_L1____________________, __________________EMPTY_____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________SYM_L2____________________, __________________EMPTY_____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________SYM_L3____________________, __________________EMPTY_____________________, // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘ _____SYM_TH_L2___, ____THUMB2BLANK_ // └────────┴───────┘ └────────┴────────┘ ), [_FUN] = LAYOUT( // ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐ __________________EMPTY_____________________, KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________EMPTY_____________________, KC_F11, KC_F4, KC_F5, KC_F6, _______, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________EMPTY_____________________, KC_F10, KC_F1, KC_F2, KC_F3, _______, // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘ ____THUMB2BLANK_, ____THUMB2BLANK_ // └────────┴───────┘ └────────┴────────┘ ) }; bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case M_PASS1: if (record->event.pressed) { SEND_STRING("T3lg3Ranch!2023"); } return false; case M_PASS2: if (record->event.pressed) { SEND_STRING("P0plarLake!2023"); } return false; } return true; }