// Copyright 2023 ZSA Technology Labs, Inc <@zsa> // Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna) // SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H #define HR_A KC_A #define HR_S MT(MOD_LALT, KC_S) #define HR_D MT(MOD_LSFT, KC_D) #define HR_F MT(MOD_LCTL, KC_F) #define HR_J MT(MOD_RCTL, KC_J) #define HR_K MT(MOD_RSFT, KC_K) #define HR_L MT(MOD_RALT, KC_L) #define HR_SCLN KC_SCLN #define KC_EUNDO LCTL(LSFT(KC_MINUS)) #define KC_AENTER LCTL(LALT(KC_ENT)) #define WAYFULL LGUI(LSFT(KC_F)) #define WAYHALF LGUI(LSFT(KC_D)) #define KC_CAD LCTL(LALT(KC_DEL)) enum { TD_UNDO, }; tap_dance_action_t tap_dance_actions[] = { [TD_UNDO] = ACTION_TAP_DANCE_DOUBLE(KC_U, KC_EUNDO), }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, TD(TD_UNDO), KC_I, KC_O, KC_P, KC_BSLS, KC_ESCAPE,HR_A, HR_S, HR_D, HR_F, KC_G, KC_H, HR_J, HR_K, HR_L, HR_SCLN, RSFT_T(KC_QUOT), MO(3), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA,KC_DOT, KC_SLSH, TG(1), LT(2, KC_BSPC), KC_LGUI, MT(MOD_RGUI, KC_ENT), LT(2, KC_SPC) ), [1] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), [2] = LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_GRV, KC_GRV, KC_TILDE,KC_HASH, KC_AMPR, KC_PIPE, KC_CIRC, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12, KC_EUNDO,KC_EXLM, KC_UNDS, KC_COLN, KC_EQL, KC_DLR, KC_AT, KC_LPRN, KC_RPRN, KC_UNDS, KC_SCLN, KC_BSPC, _______, KC_PERC, KC_QUES, KC_ASTR, KC_PLUS, KC_BSLS, KC_SLSH, KC_MINUS,KC_LT, KC_GT, KC_DQT, KC_ENT, MO(3), _______, _______, _______ ), [3] = LAYOUT( RM_TOGG, QK_KB, RM_NEXT, RGB_M_P, RM_VALD, RM_VALU, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, _______, WAYHALF, WAYFULL, KC_CAD, KC_AENTER, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, C(S(KC_TAB)), C(KC_TAB), _______, _______, _______, _______, _______, _______, _______ ), }; bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case HR_L: if (record->event.pressed && record->tap.count && layer_state_is(1)) { uint8_t mods = get_mods(); uint8_t weak = get_weak_mods(); uint8_t oneshot = get_oneshot_mods(); if ((mods | weak | oneshot) & MOD_MASK_GUI) { // GUI is already held; just tap N so the host sees GUI+N. tap_code(KC_N); return false; } } break; } return true; }