diff options
| author | Vineet Kumar <git@vineetk.net> | 2026-03-26 11:24:52 -0400 |
|---|---|---|
| committer | Vineet Kumar <git@vineetk.net> | 2026-03-26 11:24:52 -0400 |
| commit | 56651d275205eb9d12dd3098431724a933449ddc (patch) | |
| tree | 85603d4a5b552f6e19c81a8362ea4408fe74d2ee /keyboards | |
| parent | 684d31094c664cd9c95b6d91ae2bd5433946610d (diff) | |
keyboards/ferris: add current keymap
Diffstat (limited to 'keyboards')
| -rw-r--r-- | keyboards/ferris/keymaps/mine/config.h | 17 | ||||
| -rw-r--r-- | keyboards/ferris/keymaps/mine/keymap.c | 109 | ||||
| -rw-r--r-- | keyboards/ferris/keymaps/mine/rules.mk | 1 |
3 files changed, 127 insertions, 0 deletions
diff --git a/keyboards/ferris/keymaps/mine/config.h b/keyboards/ferris/keymaps/mine/config.h new file mode 100644 index 0000000000..c0369f2af6 --- /dev/null +++ b/keyboards/ferris/keymaps/mine/config.h | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | #pragma once | ||
| 2 | |||
| 3 | /* Handedness */ | ||
| 4 | #define MASTER_LEFT | ||
| 5 | |||
| 6 | /* Home Row Mods Configuration */ | ||
| 7 | #define TAPPING_TERM 200 | ||
| 8 | #define QUICK_TAP_TERM 0 // auto repeat isn't good for HRM | ||
| 9 | |||
| 10 | /* don't enable yet until I get more comfortable with HRM */ | ||
| 11 | //#define PERMISSIVE_HOLD | ||
| 12 | |||
| 13 | /* Native QMK Chordal Hold Logic (previously the acchordion extension) */ | ||
| 14 | #define CHORDAL_HOLD // enables the opposite hands rule | ||
| 15 | |||
| 16 | /* caps word is a better caps lock */ | ||
| 17 | #define BOTH_SHIFTS_TURNS_ON_CAPS_WORD | ||
diff --git a/keyboards/ferris/keymaps/mine/keymap.c b/keyboards/ferris/keymaps/mine/keymap.c new file mode 100644 index 0000000000..d8eab15f64 --- /dev/null +++ b/keyboards/ferris/keymaps/mine/keymap.c | |||
| @@ -0,0 +1,109 @@ | |||
| 1 | #include QMK_KEYBOARD_H | ||
| 2 | |||
| 3 | // Layer Definitions | ||
| 4 | enum layers { | ||
| 5 | _BASE, | ||
| 6 | _NUM, | ||
| 7 | _SYM, | ||
| 8 | _NAV, | ||
| 9 | _ADJ | ||
| 10 | }; | ||
| 11 | |||
| 12 | // --- Workman Home Row Mods (GACS) --- | ||
| 13 | // Left Hand | ||
| 14 | #define MT_A_GUI LGUI_T(KC_A) | ||
| 15 | #define MT_S_ALT LALT_T(KC_S) | ||
| 16 | #define MT_H_CTL LCTL_T(KC_H) | ||
| 17 | #define MT_T_SFT LSFT_T(KC_T) | ||
| 18 | |||
| 19 | // Right Hand | ||
| 20 | #define MT_N_SFT RSFT_T(KC_N) | ||
| 21 | #define MT_E_CTL RCTL_T(KC_E) | ||
| 22 | #define MT_O_ALT RALT_T(KC_O) | ||
| 23 | #define MT_I_GUI RGUI_T(KC_I) | ||
| 24 | |||
| 25 | // --- Keymap --- | ||
| 26 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
| 27 | [_BASE] = LAYOUT( | ||
| 28 | KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, | ||
| 29 | MT_A_GUI, MT_S_ALT, MT_H_CTL, MT_T_SFT, KC_G, KC_Y, MT_N_SFT, MT_E_CTL, MT_O_ALT, MT_I_GUI, | ||
| 30 | KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, | ||
| 31 | KC_BSPC, LT(_NAV, KC_SPC), LT(_SYM, KC_ENT), LT(_NUM, KC_TAB) | ||
| 32 | ), | ||
| 33 | |||
| 34 | [_NUM] = LAYOUT( | ||
| 35 | XXXXXXX, KC_7, KC_8, KC_9, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
| 36 | KC_DOT, KC_4, KC_5, KC_6, KC_0, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, | ||
| 37 | KC_COMM, KC_1, KC_2, KC_3, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
| 38 | _______, _______, _______, _______ | ||
| 39 | ), | ||
| 40 | |||
| 41 | /* symbol layer is for those not accessed by shift+num */ | ||
| 42 | [_SYM] = LAYOUT( | ||
| 43 | XXXXXXX, KC_BSLS, KC_QUOT, KC_LPRN, KC_RPRN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
| 44 | KC_GRV, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, | ||
| 45 | KC_TILD, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
| 46 | _______, _______, _______, _______ | ||
| 47 | ), | ||
| 48 | |||
| 49 | [_NAV] = LAYOUT( | ||
| 50 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_END, XXXXXXX, XXXXXXX, | ||
| 51 | KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PGDN, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, | ||
| 52 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, | ||
| 53 | _______, _______, _______, _______ | ||
| 54 | ), | ||
| 55 | |||
| 56 | [_ADJ] = LAYOUT( | ||
| 57 | KC_F12, KC_F7, KC_F8, KC_F9, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
| 58 | KC_F11, KC_F4, KC_F5, KC_F6, KC_DEL, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, | ||
| 59 | KC_F10, KC_F1, KC_F2, KC_F3, KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
| 60 | _______, _______, _______, _______ | ||
| 61 | ) | ||
| 62 | }; | ||
| 63 | |||
| 64 | // --- Layer Logic --- | ||
| 65 | layer_state_t layer_state_set_user(layer_state_t state) { | ||
| 66 | return update_tri_layer_state(state, _NAV, _NUM, _ADJ); | ||
| 67 | } | ||
| 68 | |||
| 69 | // --- Chordal Hold Implementation (Replaces Achordion) --- | ||
| 70 | |||
| 71 | /** * Define Handedness: | ||
| 72 | * Sweep usually has 5 columns per side. | ||
| 73 | * Cols 0-4 are Left, 5-9 are Right. | ||
| 74 | */ | ||
| 75 | char chordal_hold_handedness(keypos_t key) { | ||
| 76 | return key.col < 5 ? 'L' : 'R'; | ||
| 77 | } | ||
| 78 | |||
| 79 | /** | ||
| 80 | * Define Logic: | ||
| 81 | * Return true = Allow Hold (Logic is satisfied, or exception granted) | ||
| 82 | * Return false = Force Tap (Same hand detected, deny hold) | ||
| 83 | */ | ||
| 84 | bool get_chordal_hold(uint16_t tap_hold_keycode, keyrecord_t* tap_hold_record, | ||
| 85 | uint16_t other_keycode, keyrecord_t* other_record) { | ||
| 86 | |||
| 87 | // 1. Emacs M-DEL Exception | ||
| 88 | // Left Alt (Ring) + Backspace (Outer Thumb) | ||
| 89 | // Both are on Left hand, but we return TRUE to allow the hold. | ||
| 90 | if (tap_hold_keycode == MT_S_ALT && other_keycode == KC_BSPC) { | ||
| 91 | return true; | ||
| 92 | } | ||
| 93 | |||
| 94 | // 2. Emacs C-w Exception (Kill Region) | ||
| 95 | // Left Ctrl (Middle) + W (Index Top) | ||
| 96 | if (tap_hold_keycode == MT_H_CTL && other_keycode == KC_W) { | ||
| 97 | return true; | ||
| 98 | } | ||
| 99 | |||
| 100 | // 3. Emacs C-g Exception (Quit/Cancel) | ||
| 101 | // Left Ctrl (Middle) + G (Index Inner) | ||
| 102 | if (tap_hold_keycode == MT_H_CTL && other_keycode == KC_G) { | ||
| 103 | return true; | ||
| 104 | } | ||
| 105 | |||
| 106 | // Default: Defer to the standard Opposite Hands rule | ||
| 107 | // (If same hand -> Tap. If opposite hand -> Hold). | ||
| 108 | return get_chordal_hold_default(tap_hold_record, other_record); | ||
| 109 | } | ||
diff --git a/keyboards/ferris/keymaps/mine/rules.mk b/keyboards/ferris/keymaps/mine/rules.mk new file mode 100644 index 0000000000..9617c1460e --- /dev/null +++ b/keyboards/ferris/keymaps/mine/rules.mk | |||
| @@ -0,0 +1 @@ | |||
| CONVERT_TO = rp2040_ce | |||
