From 292416976d9e69add4a68a890815e79c5a78c2da Mon Sep 17 00:00:00 2001 From: Andrew Reisner Date: Sun, 4 Oct 2026 11:34:18 -0400 Subject: [PATCH] Changes for WSL2 --- .../keyball/keyball39/keymaps/init/keymap.c | 60 +++++++++++++++++-- .../keyball/keyball39/keymaps/init/rules.mk | 1 + 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/keyboards/keyball/keyball39/keymaps/init/keymap.c b/keyboards/keyball/keyball39/keymaps/init/keymap.c index 371454c0f4d920c5bdb0bfc652395eeb21d997ce..bde27bff25cb03a440a4d97848c1cdffad1c4a09 100644 --- a/keyboards/keyball/keyball39/keymaps/init/keymap.c +++ b/keyboards/keyball/keyball39/keymaps/init/keymap.c @@ -19,6 +19,7 @@ along with this program. If not, see . #include QMK_KEYBOARD_H #include "quantum.h" +#include "os_detection.h" // Home row mods #define HR_A KC_A @@ -26,7 +27,7 @@ along with this program. If not, see . #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_J MT(MOD_LCTL, KC_J) #define HR_K MT(MOD_RSFT, KC_K) #define HR_L MT(MOD_RALT, KC_L) #define HR_SCLN KC_SCLN @@ -41,6 +42,7 @@ along with this program. If not, see . enum { TD_UNDO, + TD_NAV, }; // Combo for caps word @@ -50,8 +52,48 @@ combo_t key_combos[] = { COMBO(capsword_combo, QK_CAPS_WORD_TOGGLE), }; +// Advanced tap dance for bottom-left thumb key: hold = momentary layer 5, double tap = toggle layer 1 +typedef enum { + TD_NAV_NONE, + TD_NAV_SINGLE_HOLD, + TD_NAV_DOUBLE_TAP, +} td_nav_state_t; + +static td_nav_state_t nav_tap_state = TD_NAV_NONE; + +td_nav_state_t nav_cur_dance(tap_dance_state_t *state) { + if (state->count == 1) { + return state->pressed ? TD_NAV_SINGLE_HOLD : TD_NAV_NONE; + } else if (state->count == 2) { + return TD_NAV_DOUBLE_TAP; + } + return TD_NAV_NONE; +} + +void nav_finished(tap_dance_state_t *state, void *user_data) { + nav_tap_state = nav_cur_dance(state); + switch (nav_tap_state) { + case TD_NAV_SINGLE_HOLD: + layer_on(5); + break; + case TD_NAV_DOUBLE_TAP: + layer_invert(1); + break; + default: + break; + } +} + +void nav_reset(tap_dance_state_t *state, void *user_data) { + if (nav_tap_state == TD_NAV_SINGLE_HOLD) { + layer_off(5); + } + nav_tap_state = TD_NAV_NONE; +} + tap_dance_action_t tap_dance_actions[] = { [TD_UNDO] = ACTION_TAP_DANCE_DOUBLE(KC_U, KC_EUNDO), + [TD_NAV] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, nav_finished, nav_reset), }; // clang-format off @@ -61,15 +103,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , TD(TD_UNDO), KC_I , KC_O , KC_P , HR_A , HR_S , HR_D , HR_F , KC_G , KC_H , HR_J , HR_K , HR_L , HR_SCLN , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , - MO(5) , KC_TAB , KC_ESC , LT(3,KC_TAB), LT(4,KC_BSPC), KC_LGUI, MT(MOD_RGUI, KC_ENT), LT(4,KC_SPC), _______, _______, _______, KC_QUOT + TD(TD_NAV), KC_TAB , KC_ESC , LT(3,KC_TAB), LT(4,KC_BSPC), KC_LGUI, MT(MOD_RGUI, KC_ENT), LT(4,KC_SPC), _______, _______, _______, KC_QUOT ), - // Transparent layer for HR_L GUI+N behavior + // Transparent layer for HR_L GUI+N behavior; GUI thumb keys become RCTL, RCTL home row mod becomes LCTL [1] = LAYOUT_universal( _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , MT(MOD_LCTL, KC_J), _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ + _______ , _______ , _______ , _______ , _______ , KC_RCTL, MT(MOD_RCTL, KC_ENT), _______ , _______ , _______ , _______ , _______ ), // Gaming layer (removes home row mods via layer toggle) @@ -135,6 +177,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } +bool process_detected_host_os_user(os_variant_t detected_os) { + if (detected_os == OS_WINDOWS) + layer_on(1); + else + layer_off(1); + return true; +} + bool caps_word_press_user(uint16_t keycode) { switch (keycode) { // Keycodes that continue Caps Word, with shift applied. diff --git a/keyboards/keyball/keyball39/keymaps/init/rules.mk b/keyboards/keyball/keyball39/keymaps/init/rules.mk index f7e7eb07e3294a08229e41608fabd7c91d403831..c1ed8037a4640a544c70e08ffb6e3e355b5a1ee3 100644 --- a/keyboards/keyball/keyball39/keymaps/init/rules.mk +++ b/keyboards/keyball/keyball39/keymaps/init/rules.mk @@ -4,4 +4,5 @@ CAPS_WORD_ENABLE = yes TAP_DANCE_ENABLE = yes COMBO_ENABLE = yes POINTING_DEVICE_ENABLE = yes +OS_DETECTION_ENABLE = yes