From ab53c9760831b1ac12f5eeb196af49c6a71b02d6 Mon Sep 17 00:00:00 2001 From: Christoph Cullmann Date: Fri, 11 Aug 2023 23:16:38 +0200 Subject: [PATCH] adjust to use the Ferris layout --- planck/config.h | 18 ++++++++ planck/keymap.c | 113 ++++++++++++++++++++++++++++++------------------ planck/rules.mk | 17 +++++++- 3 files changed, 103 insertions(+), 45 deletions(-) diff --git a/planck/config.h b/planck/config.h index a5924e0..9096c32 100644 --- a/planck/config.h +++ b/planck/config.h @@ -16,10 +16,28 @@ #pragma once +// we don't use one shots +#define NO_ACTION_ONESHOT + // we don't have any lock switches #undef LOCKING_SUPPORT_ENABLE #undef LOCKING_RESYNC_ENABLE +// enable NKRO by default +#define FORCE_NKRO + +// settings for home row modifiers +// details see https://precondition.github.io/home-row-mods + +// the default of 200 +#define TAPPING_TERM 180 + +// Enable rapid switch from tap to hold, disables double tap hold auto-repeat. +#define QUICK_TAP_TERM 0 + +// try to be more permissive with holds for layer switch keys +#define PERMISSIVE_HOLD_PER_KEY + // // audio configuration // diff --git a/planck/keymap.c b/planck/keymap.c index d0e8bf3..17894fb 100644 --- a/planck/keymap.c +++ b/planck/keymap.c @@ -17,7 +17,8 @@ #include QMK_KEYBOARD_H // layout helper macro, we just use 34 keys -#define LAYOUT_cullmann(\ +#undef LAYOUT +#define LAYOUT(\ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19,\ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29,\ @@ -30,54 +31,80 @@ K20, K21, K22, K23, K24, KC_NO, KC_NO, K25, K26, K27, K28, K29 KC_NO, KC_NO, KC_NO, K30, K31, KC_NO, KC_NO, K32, K33, KC_NO, KC_NO, KC_NO\ ) -// our layers, used as index in layers and rgb lights -enum planck_layers { - L_CANARY, - L_EXT, - L_SYM, - L_NUM, - L_FUN, +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ D E F I N I T I O N S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e l a y e r s │ +// └─────────────────────────────────────────────────┘ + +enum my_layers { + _QWERTY, + _SYM, + _NUM, + _FN, + _NAV }; +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ K E Y M A P S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[L_CANARY] = LAYOUT_cullmann( - KC_W, KC_L, KC_Y, KC_P, KC_B, KC_Z, KC_F, KC_O, KC_U, KC_QUOT, - KC_C, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_A, - KC_Q, KC_J, KC_V, KC_D, KC_K, KC_X, KC_H, KC_SLSH, KC_COMM, KC_DOT, - MO(L_EXT), KC_SPC, KC_RSFT, MO(L_SYM) +[_QWERTY] = LAYOUT( + KC_W, KC_L, KC_Y, KC_P, KC_B, KC_Z, KC_F, KC_SCLN, KC_U, KC_QUOT, + RALT_T(KC_C) , LALT_T(KC_R), LCTL_T(KC_S) , LSFT_T(KC_T) , LGUI_T(KC_G), RGUI_T(KC_M), RSFT_T(KC_N), RCTL_T(KC_O), LALT_T(KC_I) , RALT_T(KC_A), + KC_Q , KC_J, KC_V , KC_D , KC_K, KC_X, KC_H , KC_SLSH , KC_COMM, KC_DOT , + MO(_SYM), LT(_NUM, KC_SPC), LT(_NAV, KC_E), MO(_FN) ), -[L_EXT] = LAYOUT_cullmann( - KC_ESC, LALT(KC_LEFT), LCTL(KC_F), LALT(KC_RGHT), KC_INS, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_CAPS, - OSM(MOD_LALT), OSM(MOD_LGUI), OSM(MOD_LSFT), OSM(MOD_LCTL), OSM(MOD_RALT), KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, - LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), KC_LGUI, LCTL(KC_V), KC_ENT, KC_BSPC, KC_TAB, KC_APP, KC_PSCR, - KC_TRNS, XXXXXXX, KC_ENT, MO(L_FUN) +[_SYM] = LAYOUT( + XXXXXXX, C(KC_X), C(KC_C), C(KC_V), XXXXXXX, KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, + KC_RALT, KC_LALT, KC_LCTL, KC_LSFT, KC_LGUI, KC_PLUS, KC_DLR, KC_PERC, KC_CIRC, KC_COLN, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PIPE, KC_EXLM, KC_AT, KC_HASH, KC_TILD, + _______, _______, KC_UNDS, KC_RPRN ), -[L_SYM] = LAYOUT_cullmann( - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_EQL, KC_GRV, KC_COLN, KC_SCLN, KC_PLUS, - OSM(MOD_LALT), OSM(MOD_LGUI), OSM(MOD_LSFT), OSM(MOD_LCTL), KC_CIRC, KC_ASTR, KC_LPRN, KC_LCBR, KC_LBRC, KC_MINS, - KC_NUBS, LSFT(KC_NUBS), KC_NUHS, LSFT(KC_NUHS), KC_AMPR, KC_TILD, KC_RPRN, KC_RCBR, KC_RBRC, KC_UNDS, - MO(L_FUN), MO(L_NUM), KC_ENT, KC_TRNS +[_NUM] = LAYOUT( + XXXXXXX, C(KC_X), C(KC_C), C(KC_V), XXXXXXX, KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, + KC_RALT, KC_LALT, KC_LCTL, KC_LSFT, KC_LGUI, KC_EQL, KC_4, KC_5, KC_6, KC_SCLN, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, KC_1, KC_2, KC_3, KC_GRV, + _______, _______, KC_MINS, KC_0 ), -[L_NUM] = LAYOUT_cullmann( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NUM, KC_EQL, KC_7, KC_8, KC_9, KC_PLUS, - OSM(MOD_LALT), OSM(MOD_LGUI), OSM(MOD_LSFT), OSM(MOD_LCTL), OSM(MOD_RALT), KC_ASTR, KC_4, KC_5, KC_6, KC_MINS, - XXXXXXX, KC_APP, KC_TAB, KC_BSPC, KC_ENT, KC_0, KC_1, KC_2, KC_3, KC_SLSH, - MO(L_FUN), MO(L_NUM), KC_ENT, KC_TRNS +[_FN] = LAYOUT( + KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_F11, KC_F4, KC_F5, KC_F6, KC_DEL, KC_RGUI, KC_RSFT, KC_RCTL, KC_LALT, KC_RALT, + KC_F10, KC_F1, KC_F2, KC_F3, KC_INS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_BSPC, KC_ESC, _______, _______ ), -[L_FUN] = LAYOUT_cullmann( - KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_BRIU, KC_F12, KC_F7, KC_F8, KC_F9, QK_BOOT, - OSM(MOD_LALT), OSM(MOD_LGUI), OSM(MOD_LSFT), OSM(MOD_LCTL), KC_BRID, KC_F11, KC_F4, KC_F5, KC_F6, XXXXXXX, - KC_MUTE, KC_VOLD, RCS(KC_C), KC_VOLU, RCS(KC_V), KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, - KC_TRNS, XXXXXXX, KC_ENT, KC_TRNS -), +[_NAV] = LAYOUT( + XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_RGUI, KC_RSFT, KC_RCTL, KC_LALT, KC_RALT, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_TAB, KC_ENT, _______, _______ +) }; +// try to be more permissive with holds for layer switch keys +bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LT(_NUM, KC_SPC): + case LT(_NAV, KC_E): + // Immediately select the hold action when another key is tapped. + return true; + default: + // Do not select the hold action when another key is tapped. + return false; + } +} + /* plwnck rev6 RGB layout: * ---------------------------------- * | 6 5 4 3 | @@ -107,11 +134,11 @@ const rgblight_segment_t PROGMEM nav_layer[] = RGBLIGHT_LAYER_SEGMENTS( ); const rgblight_segment_t * const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( - [L_CANARY] = qwerty_layer, - [L_EXT] = sym_layer, - [L_SYM] = num_layer, - [L_NUM] = fn_layer, - [L_FUN] = nav_layer + [_QWERTY] = qwerty_layer, + [_SYM] = sym_layer, + [_NUM] = num_layer, + [_FN] = fn_layer, + [_NAV] = nav_layer ); void keyboard_post_init_user(void) { @@ -121,9 +148,9 @@ void keyboard_post_init_user(void) { layer_state_t layer_state_set_user(layer_state_t state) { - rgblight_set_layer_state(L_EXT, layer_state_cmp(state, L_EXT)); - rgblight_set_layer_state(L_SYM, layer_state_cmp(state, L_SYM)); - rgblight_set_layer_state(L_NUM, layer_state_cmp(state, L_NUM)); - rgblight_set_layer_state(L_FUN, layer_state_cmp(state, L_FUN)); + rgblight_set_layer_state(_SYM, layer_state_cmp(state, _SYM)); + rgblight_set_layer_state(_NUM, layer_state_cmp(state, _NUM)); + rgblight_set_layer_state(_FN, layer_state_cmp(state, _FN)); + rgblight_set_layer_state(_NAV, layer_state_cmp(state, _NAV)); return state; } diff --git a/planck/rules.mk b/planck/rules.mk index dd070e7..30e77e1 100644 --- a/planck/rules.mk +++ b/planck/rules.mk @@ -5,5 +5,18 @@ LTO_ENABLE = yes COMMAND_ENABLE = no CONSOLE_ENABLE = no -# per key debounce: https://github.com/qmk/qmk_firmware/blob/master/docs/feature_debounce_type.md -DEBOUNCE_TYPE = sym_defer_pk +# Enable N-Key Rollover +NKRO_ENABLE = yes + +# less features we don't use +MOUSEKEY_ENABLE = no +SPACE_CADET_ENABLE = no +GRAVE_ESC_ENABLE = no +MAGIC_ENABLE = no + +# more responsive debouncing: https://michael.stapelberg.ch/posts/2021-05-08-keyboard-input-latency-qmk-kinesis/ +DEBOUNCE_TYPE = sym_eager_pk + +# build +# qmk compile -kb planck/rev6_drop -km christoph-cullmann +# qmk flash -kb planck/rev6_drop -km christoph-cullmann