@@ 0,0 1,80 @@
+// Copyright 2023 ZSA Technology Labs, Inc <@zsa>
+// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
+// 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;
+}