This commit is contained in:
Drew Whitney 2026-06-28 13:10:52 -06:00
commit 559464d886
8 changed files with 41 additions and 121 deletions

View file

@ -21,10 +21,14 @@ enum CustomKeycodes {
// layers
#define NUM MO(_NUM) // used by the NumCombo combo
#define NAV MO(_NAV)
#define SYM MO(_SYM)
#define FUNC MO(_FUNC)
#define SYM_BSPC LT(_SYM, KC_BSPC)
#define NAV_TAB LT(_NAV, KC_TAB)
#define ARROW MO(_SH_ARROW)
#define FN_ESC LT(_FUNC, KC_ESC)
// trigger mods
#define OBLITERATE_TRIGGER_MODS MOD_MASK_GUI
#define OBLITERATE_TRIGGER_MODS MOD_MASK_SHIFT

View file

@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
#include "../alias.h"
#include "../tap_dance/tap_dance.h"
bool caps_word_press_user(uint16_t keycode) {
switch (keycode) {

View file

@ -3,8 +3,9 @@
#define TAPPING_TERM 200
// tap-hold
#define QUICK_TAP_TERM_PER_KEY
// #define QUICK_TAP_TERM_PER_KEY
#define HOLD_ON_OTHER_KEY_PRESS
#define SPECULATIVE_HOLD
// #define HOLD_ON_OTHER_KEY_PRESS_PER_KEY
// #define PERMISSIVE_HOLD_PER_KEY

View file

@ -2,7 +2,6 @@
#include "./alias.h"
#include "./combos/combos.h"
#include "./layers/layers.h"
#include "./tap_dance/tap_dance.h"
#include "./utils/utils.h"
#include <stdbool.h>
#include <stdint.h>
@ -13,13 +12,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐ ┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐
KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_NO, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_NO,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_NO, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_NO,
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┐ ┌───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_NO, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_NO, KC_NO, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_NO,
KC_NO, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_NO, KC_NO, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_DEL,
//└───────────┴───────────┴───────────┴─────┬─────┴─────┬─────┴─────┬─────┴────┬──────┘ └─────┬─────┴─────┬─────┴─────┬─────┴─────┬─────┴───────────┴───────────┴───────────┘
FN_ESC, NAV_TAB, KC_SPC, OS_LSFT, SYM_BSPC, ARROW
FUNC, NAV, KC_SPC, OS_LSFT, SYM, ARROW
// └───────────┴───────────┴──────────┘ └───────────┴───────────┴───────────┘
),
@ -27,11 +26,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐ ┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_TRNS,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_J, KC_L, KC_UP, KC_NO, KC_NO, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┐ ┌───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
//└───────────┴───────────┴───────────┴─────┬─────┴─────┬─────┴─────┬─────┴────┬──────┘ └─────┬─────┴─────┬─────┴─────┬─────┴─────┬─────┴───────────┴───────────┴───────────┘
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
// └───────────┴───────────┴──────────┘ └───────────┴───────────┴───────────┘
@ -41,11 +40,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐ ┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_QUES, KC_TILD, KC_TRNS,
KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_QUES, KC_BSLS, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_PIPE, KC_PLUS, KC_UNDS, KC_MINS, KC_EQL, KC_DQUO, OS_LSFT, OS_LCTL, OS_LALT, OS_LGUI, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┐ ┌───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS, KC_TRNS, KC_SCLN, KC_COLN, KC_LCBR, KC_RCBR, KC_GRV, KC_TRNS,
KC_LABK, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_SCLN, KC_COLN, KC_LCBR, KC_RCBR, KC_GRV, KC_RABK,
//└───────────┴───────────┴───────────┴─────┬─────┴─────┬─────┴─────┬─────┴────┬──────┘ └─────┬─────┴─────┬─────┴─────┬─────┴─────┬─────┴───────────┴───────────┴───────────┘
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
// └───────────┴───────────┴──────────┘ └───────────┴───────────┴───────────┘
@ -55,11 +54,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐ ┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_ESC, C(KC_Y), TAB_LEFT, TAB_RIGHT, LAUNCH, COMPOSE, KC_HOME, KC_UP, KC_END, KC_DEL, KC_TRNS,
KC_TRNS, KC_NO, C(KC_Y), TAB_LEFT, TAB_RIGHT, LAUNCH, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_CAPS, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, OS_LGUI, OS_LALT, OS_LCTL, OS_LSFT, KC_F2, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_ENT, KC_TRNS,
KC_TRNS, OS_LGUI, OS_LALT, OS_LCTL, OS_LSFT, KC_F2, COMPOSE, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┐ ┌───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, C(KC_Z), C(KC_X), C(KC_C), KC_SPC, C(KC_V), KC_TRNS, KC_TRNS, KC_NO, CW_TOGG, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS,
KC_TRNS, C(KC_Z), C(KC_X), C(KC_C), KC_SPC, C(KC_V), KC_TRNS, KC_TRNS, KC_PGDN, CW_TOGG, KC_COMM, KC_DOT, KC_SLSH, KC_DEL,
//└───────────┴───────────┴───────────┴─────┬─────┴─────┬─────┴─────┬─────┴────┬──────┘ └─────┬─────┴─────┬─────┴─────┬─────┴─────┬─────┴───────────┴───────────┴───────────┘
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
// └───────────┴───────────┴──────────┘ └───────────┴───────────┴───────────┘
@ -73,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┐ ┌───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_LPRN, KC_RPRN, KC_NO, KC_SPC, KC_NO, KC_TRNS, KC_TRNS, KC_SCLN, KC_COLN, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS,
KC_TRNS, KC_LPRN, KC_RPRN, KC_NO, KC_SPC, KC_NO, KC_TRNS, KC_TRNS, KC_SCLN, KC_COLN, KC_COMM, KC_DOT, KC_SLSH, KC_DEL,
//└───────────┴───────────┴───────────┴─────┬─────┴─────┬─────┴─────┬─────┴────┬──────┘ └─────┬─────┴─────┬─────┴─────┬─────┴─────┬─────┴───────────┴───────────┴───────────┘
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
// └───────────┴───────────┴──────────┘ └───────────┴───────────┴───────────┘
@ -83,11 +82,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐ ┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_NO, KC_NO, ZOOM_OUT, ZOOM_IN, KC_F11, QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
KC_TRNS, CAD, KC_F11, ZOOM_OUT, ZOOM_IN, KC_SLEP, QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ ├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, CAD, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
//├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┐ ┌───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
KC_TRNS, KC_BRID, KC_BRIU, KC_WBAK, KC_WFWD, KC_MUTE, KC_TRNS, KC_TRNS, KC_SLEP, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
KC_TRNS, KC_BRID, KC_BRIU, KC_WBAK, KC_WFWD, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
//└───────────┴───────────┴───────────┴─────┬─────┴─────┬─────┴─────┬─────┴────┬──────┘ └─────┬─────┴─────┬─────┴─────┬─────┴─────┬─────┴───────────┴───────────┴───────────┘
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
// └───────────┴───────────┴──────────┘ └───────────┴───────────┴───────────┘
@ -96,10 +95,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
// clang-format on
tap_dance_action_t tap_dance_actions[] = {
[TD_CAD_LOCK_SLEEP] = ACTION_TAP_DANCE_FN(CAD_lock_sleep),
};
const uint16_t PROGMEM num_layer_combo[] = {NAV_TAB, SYM_BSPC, COMBO_END};
const uint16_t PROGMEM win_swap_combo[] = {TAB_LEFT, TAB_RIGHT, COMBO_END};
@ -112,38 +107,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
// static bool NAV_is_on = false;
switch (keycode) {
// allow NAV and SYM to override each other
case SYM_BSPC:
if (!record->tap.count) {
// if NAV is on, turn it off when SYM is turned on, then restore it when SYM is
// turned off
// if we're NUM-latched, don't interfere with the states
// if (NAV_is_on) {
// record->event.pressed && !NUM_latched ? layer_off(_NAV) : layer_on(_NAV);
// }
} else {
// backspace -> obliterate line
if (record->event.pressed) {
uint8_t mods = get_mods();
if ((mods | get_oneshot_mods()) & OBLITERATE_TRIGGER_MODS) {
tap_code(DUMMY_MOD_NEUTRALIZER_KEYCODE);
unregister_mods(OBLITERATE_TRIGGER_MODS);
clear_oneshot_mods();
tap_code16(S(KC_HOME));
register_code(KC_BSPC);
set_mods(mods);
return false;
}
}
}
break;
// case NAV_TAB:
// if (!record->tap.count) {
// NAV_is_on = record->event.pressed;
// }
// break;
case WIN_SWAP: // easy Alt-Tab
if (record->event.pressed) {
register_mods(MOD_LALT);
@ -157,7 +120,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
// have to implement this here instead of as a key override because it was acting
// weird with layers as a key override
if (get_highest_layer(layer_state) != _BASE) {
return true; // return early
return true;
}
if (record->event.pressed) {
uint8_t mods = get_mods();
@ -174,27 +137,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
return true;
}
const key_override_t Q_TO_KILL = ko_make_with_layers(MOD_MASK_GUI, KC_Q, A(KC_F4), 1 << _BASE);
const key_override_t DEL_TO_OBLITERATE = {
.trigger = KC_DEL,
.trigger_mods = OBLITERATE_TRIGGER_MODS,
.layers = 0xFF,
.custom_action = obliterate_line_forwards,
.suppressed_mods = OBLITERATE_TRIGGER_MODS,
};
const key_override_t HOME_NOCTRL = ko_make_basic(MOD_MASK_CTRL, KC_HOME, KC_HOME);
const key_override_t HOME_TO_MEGA_HOME = ko_make_basic(MOD_MASK_GUI, KC_HOME, C(KC_HOME));
const key_override_t END_NO_CTRL = ko_make_basic(MOD_MASK_CTRL, KC_END, KC_END);
const key_override_t END_TO_META_END = ko_make_basic(MOD_MASK_GUI, KC_END, C(KC_END));
const key_override_t UP_NO_CTRL = ko_make_with_layers_and_negmods(MOD_MASK_CTRL, KC_UP, KC_UP, 0xFF & ~(1 << _SH_ARROW), MOD_MASK_SAG);
const key_override_t DOWN_NO_CTRL = ko_make_with_layers_and_negmods(MOD_MASK_CTRL, KC_DOWN, KC_DOWN, 0xFF & ~(1 << _SH_ARROW), MOD_MASK_SAG);
const key_override_t LPRN_TO_LABK = ko_make_with_layers(MOD_MASK_SHIFT, KC_LPRN, KC_LABK, 1 << _SYM | 1 << _NUM);
const key_override_t RPRN_TO_RABK = ko_make_with_layers(MOD_MASK_SHIFT, KC_RPRN, KC_RABK, 1 << _SYM | 1 << _NUM);
const key_override_t BSPC_TO_OBLITERATE = {
.trigger = KC_BSPC,
.trigger_mods = OBLITERATE_TRIGGER_MODS,
.layers = 0xFF,
.custom_action = obliterate_line_backwards,
};
// noshifts
const key_override_t ONE_NOSHIFT = ko_make_basic(MOD_MASK_SHIFT, KC_1, KC_1);
@ -218,21 +173,9 @@ const key_override_t GRV_NOSHIFT = ko_make_basic(MOD_MASK_SHIFT, KC_GRV, KC_GRV)
// this globally defines all key overrides to be used
const key_override_t* key_overrides[] = {
&Q_TO_KILL,
// blocking formatting with this line
&DEL_TO_OBLITERATE,
&HOME_TO_MEGA_HOME,
&HOME_NOCTRL,
&END_TO_META_END,
&END_NO_CTRL,
&UP_NO_CTRL,
&DOWN_NO_CTRL,
&LPRN_TO_LABK,
&RPRN_TO_RABK,
&BSPC_TO_OBLITERATE,
// noshifts
&ONE_NOSHIFT,

View file

@ -1,10 +1,9 @@
BOOTLOADER = stm32-dfu
SRC += caps_word/caps_word.c
SRC += tap_dance/tap_dance.c
SRC += layers/layers.c
SRC += combos/combos.c
SRC += taphold/taphold_options.c
# SRC += taphold/taphold_options.c
SRC += utils/utils.c
# VIA_ENABLE = yes
@ -14,7 +13,7 @@ CAPS_WORD_ENABLE = yes
# CONSOLE_ENABLE = yes
TAP_DANCE_ENABLE = yes
# TAP_DANCE_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes
COMBO_ENABLE = yes

View file

@ -1,17 +0,0 @@
#include "./tap_dance.h"
#include "../alias.h"
void CAD_lock_sleep(tap_dance_state_t* state, void*) {
switch (state->count) {
case 1:
tap_code16(CAD);
break;
case 2:
tap_code16(G(KC_L));
break;
case 3:
tap_code16(KC_SLEP);
reset_tap_dance(state);
break;
}
}

View file

@ -1,9 +0,0 @@
#pragma once
#include QMK_KEYBOARD_H
enum {
TD_CAD_LOCK_SLEEP,
};
void CAD_lock_sleep(tap_dance_state_t* state, void*);

View file

@ -3,15 +3,15 @@
#include "../alias.h"
#include "../tap_dance/tap_dance.h"
uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t* record) {
switch (keycode) {
case NAV_TAB:
case SYM_BSPC:
return 0;
break;
}
return QUICK_TAP_TERM;
}
// uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t* record) {
// switch (keycode) {
// case NAV:
// case SYM:
// return 0;
// break;
// }
// return QUICK_TAP_TERM;
// }
// TODO: remove
// bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t* record) {