From 5004fe83fe0ee6e8cb45011497ec2351078827bc Mon Sep 17 00:00:00 2001 From: Andrew Reisner Date: Wed, 21 Jan 2026 16:07:06 -0500 Subject: [PATCH] Added keymap with symbol layer. --- keyboards/zsa/voyager/keymaps/mod/config.h | 4 ++ keyboards/zsa/voyager/keymaps/mod/keymap.c | 80 ++++++++++++++++++++++ keyboards/zsa/voyager/keymaps/mod/rules.mk | 2 + 3 files changed, 86 insertions(+) create mode 100644 keyboards/zsa/voyager/keymaps/mod/config.h create mode 100644 keyboards/zsa/voyager/keymaps/mod/keymap.c create mode 100644 keyboards/zsa/voyager/keymaps/mod/rules.mk diff --git a/keyboards/zsa/voyager/keymaps/mod/config.h b/keyboards/zsa/voyager/keymaps/mod/config.h new file mode 100644 index 0000000000000000000000000000000000000000..ab85d3202cb0808a30cd5a6f24dce7a13b7ca727 --- /dev/null +++ b/keyboards/zsa/voyager/keymaps/mod/config.h @@ -0,0 +1,4 @@ +/* #define TAPPING_TERM 200 */ +#define PERMISSIVE_HOLD +// #define TAPPING_FORCE_HOLD +#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD diff --git a/keyboards/zsa/voyager/keymaps/mod/keymap.c b/keyboards/zsa/voyager/keymaps/mod/keymap.c new file mode 100644 index 0000000000000000000000000000000000000000..5223aef3145cf5d7e6d428a1b3efc838780bd5be --- /dev/null +++ b/keyboards/zsa/voyager/keymaps/mod/keymap.c @@ -0,0 +1,80 @@ +// 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; +} diff --git a/keyboards/zsa/voyager/keymaps/mod/rules.mk b/keyboards/zsa/voyager/keymaps/mod/rules.mk new file mode 100644 index 0000000000000000000000000000000000000000..4d34509a1744dc266359b0109e8062e193746488 --- /dev/null +++ b/keyboards/zsa/voyager/keymaps/mod/rules.mk @@ -0,0 +1,2 @@ +CAPS_WORD_ENABLE = yes +TAP_DANCE_ENABLE = yes