diff --git a/keyboards/handwired/dactyl_manuform/5x6_68/keyboard.json b/keyboards/handwired/dactyl_manuform/5x6_68/keyboard.json index aa989ffb2e..79c5a819d1 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_68/keyboard.json +++ b/keyboards/handwired/dactyl_manuform/5x6_68/keyboard.json @@ -1,7 +1,7 @@ { - "keyboard_name": "Dactyl-Manuform (5x6) 68 Keys", - "manufacturer": "kpagratis", - "maintainer": "kpagratis", + "keyboard_name": "Crimsens Tastatur", + "manufacturer": "crimsen-manufactor", + "maintainer": "crimsen", "development_board": "promicro", "usb": { "vid": "0xFEED", @@ -28,350 +28,568 @@ } }, "matrix_pins": { - "cols": ["F4", "F5", "F6", "F7", "B1", "B3"], - "rows": ["D3", "D2", "D4", "C6", "D7", "E6"] + "cols": [ + "F4", + "F5", + "F6", + "F7", + "B1", + "B3" + ], + "rows": [ + "D3", + "D2", + "D4", + "C6", + "D7", + "E6" + ] }, "diode_direction": "COL2ROW", "layouts": { "LAYOUT": { "layout": [ { - "matrix": [0, 0], + "matrix": [ + 0, + 0 + ], "x": 0, "y": 0 }, { - "matrix": [0, 1], + "matrix": [ + 0, + 1 + ], "x": 1, "y": 0 }, { - "matrix": [0, 2], + "matrix": [ + 0, + 2 + ], "x": 2, "y": 0 }, { - "matrix": [0, 3], + "matrix": [ + 0, + 3 + ], "x": 3, "y": 0 }, { - "matrix": [0, 4], + "matrix": [ + 0, + 4 + ], "x": 4, "y": 0 }, { - "matrix": [0, 5], + "matrix": [ + 0, + 5 + ], "x": 5, "y": 0 }, { - "matrix": [6, 0], + "matrix": [ + 6, + 0 + ], "x": 11, "y": 0 }, { - "matrix": [6, 1], + "matrix": [ + 6, + 1 + ], "x": 12, "y": 0 }, { - "matrix": [6, 2], + "matrix": [ + 6, + 2 + ], "x": 13, "y": 0 }, { - "matrix": [6, 3], + "matrix": [ + 6, + 3 + ], "x": 14, "y": 0 }, { - "matrix": [6, 4], + "matrix": [ + 6, + 4 + ], "x": 15, "y": 0 }, { - "matrix": [6, 5], + "matrix": [ + 6, + 5 + ], "x": 16, "y": 0 }, { - "matrix": [1, 0], + "matrix": [ + 1, + 0 + ], "x": 0, "y": 1 }, { - "matrix": [1, 1], + "matrix": [ + 1, + 1 + ], "x": 1, "y": 1 }, { - "matrix": [1, 2], + "matrix": [ + 1, + 2 + ], "x": 2, "y": 1 }, { - "matrix": [1, 3], + "matrix": [ + 1, + 3 + ], "x": 3, "y": 1 }, { - "matrix": [1, 4], + "matrix": [ + 1, + 4 + ], "x": 4, "y": 1 }, { - "matrix": [1, 5], + "matrix": [ + 1, + 5 + ], "x": 5, "y": 1 }, { - "matrix": [7, 0], + "matrix": [ + 7, + 0 + ], "x": 11, "y": 1 }, { - "matrix": [7, 1], + "matrix": [ + 7, + 1 + ], "x": 12, "y": 1 }, { - "matrix": [7, 2], + "matrix": [ + 7, + 2 + ], "x": 13, "y": 1 }, { - "matrix": [7, 3], + "matrix": [ + 7, + 3 + ], "x": 14, "y": 1 }, { - "matrix": [7, 4], + "matrix": [ + 7, + 4 + ], "x": 15, "y": 1 }, { - "matrix": [7, 5], + "matrix": [ + 7, + 5 + ], "x": 16, "y": 1 }, { - "matrix": [2, 0], + "matrix": [ + 2, + 0 + ], "x": 0, "y": 2 }, { - "matrix": [2, 1], + "matrix": [ + 2, + 1 + ], "x": 1, "y": 2 }, { - "matrix": [2, 2], + "matrix": [ + 2, + 2 + ], "x": 2, "y": 2 }, { - "matrix": [2, 3], + "matrix": [ + 2, + 3 + ], "x": 3, "y": 2 }, { - "matrix": [2, 4], + "matrix": [ + 2, + 4 + ], "x": 4, "y": 2 }, { - "matrix": [2, 5], + "matrix": [ + 2, + 5 + ], "x": 5, "y": 2 }, { - "matrix": [8, 0], + "matrix": [ + 8, + 0 + ], "x": 11, "y": 2 }, { - "matrix": [8, 1], + "matrix": [ + 8, + 1 + ], "x": 12, "y": 2 }, { - "matrix": [8, 2], + "matrix": [ + 8, + 2 + ], "x": 13, "y": 2 }, { - "matrix": [8, 3], + "matrix": [ + 8, + 3 + ], "x": 14, "y": 2 }, { - "matrix": [8, 4], + "matrix": [ + 8, + 4 + ], "x": 15, "y": 2 }, { - "matrix": [8, 5], + "matrix": [ + 8, + 5 + ], "x": 16, "y": 2 }, { - "matrix": [3, 0], + "matrix": [ + 3, + 0 + ], "x": 0, "y": 3 }, { - "matrix": [3, 1], + "matrix": [ + 3, + 1 + ], "x": 1, "y": 3 }, { - "matrix": [3, 2], + "matrix": [ + 3, + 2 + ], "x": 2, "y": 3 }, { - "matrix": [3, 3], + "matrix": [ + 3, + 3 + ], "x": 3, "y": 3 }, { - "matrix": [3, 4], + "matrix": [ + 3, + 4 + ], "x": 4, "y": 3 }, { - "matrix": [3, 5], + "matrix": [ + 3, + 5 + ], "x": 5, "y": 3 }, { - "matrix": [9, 0], + "matrix": [ + 9, + 0 + ], "x": 11, "y": 3 }, { - "matrix": [9, 1], + "matrix": [ + 9, + 1 + ], "x": 12, "y": 3 }, { - "matrix": [9, 2], + "matrix": [ + 9, + 2 + ], "x": 13, "y": 3 }, { - "matrix": [9, 3], + "matrix": [ + 9, + 3 + ], "x": 14, "y": 3 }, { - "matrix": [9, 4], + "matrix": [ + 9, + 4 + ], "x": 15, "y": 3 }, { - "matrix": [9, 5], + "matrix": [ + 9, + 5 + ], "x": 16, "y": 3 }, { - "matrix": [4, 0], + "matrix": [ + 4, + 0 + ], "x": 0, "y": 4 }, { - "matrix": [4, 1], + "matrix": [ + 4, + 1 + ], "x": 1, "y": 4 }, { - "matrix": [4, 2], + "matrix": [ + 4, + 2 + ], "x": 2, "y": 4 }, { - "matrix": [4, 3], + "matrix": [ + 4, + 3 + ], "x": 3, "y": 4 }, { - "matrix": [10, 2], + "matrix": [ + 10, + 2 + ], "x": 13, "y": 4 }, { - "matrix": [10, 3], + "matrix": [ + 10, + 3 + ], "x": 14, "y": 4 }, { - "matrix": [10, 4], + "matrix": [ + 10, + 4 + ], "x": 15, "y": 4 }, { - "matrix": [10, 5], + "matrix": [ + 10, + 5 + ], "x": 16, "y": 4 }, { - "matrix": [4, 4], + "matrix": [ + 4, + 4 + ], "x": 4, "y": 5 }, { - "matrix": [4, 5], + "matrix": [ + 4, + 5 + ], "x": 5, "y": 5 }, { - "matrix": [10, 0], + "matrix": [ + 10, + 0 + ], "x": 11, "y": 5 }, { - "matrix": [10, 1], + "matrix": [ + 10, + 1 + ], "x": 12, "y": 5 }, { - "matrix": [5, 4], + "matrix": [ + 5, + 4 + ], "x": 6, "y": 6 }, { - "matrix": [5, 5], + "matrix": [ + 5, + 5 + ], "x": 7, "y": 6 }, { - "matrix": [11, 0], + "matrix": [ + 11, + 0 + ], "x": 9, "y": 6 }, { - "matrix": [11, 1], + "matrix": [ + 11, + 1 + ], "x": 10, "y": 6 }, { - "matrix": [5, 2], + "matrix": [ + 5, + 2 + ], "x": 6, "y": 7 }, { - "matrix": [5, 3], + "matrix": [ + 5, + 3 + ], "x": 7, "y": 7 }, { - "matrix": [11, 2], + "matrix": [ + 11, + 2 + ], "x": 9, "y": 7 }, { - "matrix": [11, 3], + "matrix": [ + 11, + 3 + ], "x": 10, "y": 7 } diff --git a/keyboards/handwired/dactyl_manuform/5x6_68/keymaps/crimsen/config.h b/keyboards/handwired/dactyl_manuform/5x6_68/keymaps/crimsen/config.h index f8a88f3e3b..6b35223fda 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_68/keymaps/crimsen/config.h +++ b/keyboards/handwired/dactyl_manuform/5x6_68/keymaps/crimsen/config.h @@ -1,10 +1,12 @@ -// Copyright 2023 Kostas Pagratis (@kpagratis) -// SPDX-License-Identifier: GPL-2.0-or-later - #pragma once - #define SPLIT_USB_DETECT +#define EE_HANDS + #define TAPPING_TERM 250 -#define TAPPING_TOGGLE 2 + +#define QUICK_TAP_TERM 150 + #define TAPPING_TERM_PER_KEY + +#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY diff --git a/keyboards/handwired/dactyl_manuform/5x6_68/keymaps/crimsen/keymap.c b/keyboards/handwired/dactyl_manuform/5x6_68/keymaps/crimsen/keymap.c index b5446fe36d..e694e6370c 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_68/keymaps/crimsen/keymap.c +++ b/keyboards/handwired/dactyl_manuform/5x6_68/keymaps/crimsen/keymap.c @@ -16,24 +16,33 @@ enum { }; // Aliase für bessere Lesbarkeit -#define LOWER MO(_LOWER) -#define RAISE MO(_RAISE) +#define LOWER LT(_LOWER, KC_SPC) +#define RAISE LT(_RAISE, KC_BSPC) #define EXTRA TT(_EXTRA) #define QWERTY DF(_QWERTY) #define NEO DF(_NEO) -#define EE_HANDS + +#define HOME_U LCTL_T(KC_U) +#define HOME_I LALT_T(KC_I) +#define HOME_A LGUI_T(KC_A) // Super/Win für Hyprland +#define HOME_E LSFT_T(KC_E) + +#define HOME_N LSFT_T(KC_N) +#define HOME_R RGUI_T(KC_R) // Super/Win für Hyprland +#define HOME_T LALT_T(KC_T) +#define HOME_D LCTL_T(KC_D) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NEO] = LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLSH, - KC_TAB, KC_X, KC_V, KC_L, KC_C, KC_W, KC_K, KC_H, KC_G, KC_F, KC_Q, KC_MINS, - KC_CAPS, KC_U, KC_I, KC_A, KC_E, KC_O, KC_S, KC_N, KC_R, KC_T, KC_D, KC_Z, - KC_LSFT, KC_LBRC, KC_SCLN, KC_QUOT, KC_P, KC_Y, KC_B, KC_M, KC_COMM, KC_DOT, KC_J, KC_RSFT, - KC_LCTL, KC_LALT, KC_NUBS, KC_NO, TD(TD_NEO_QWERTY), EXTRA, KC_RALT, KC_RGUI, - LOWER, KC_BSPC, RAISE, KC_SPC, - KC_LGUI, KC_DEL, KC_RGUI, KC_ENTER, - KC_LSFT, KC_LCTL, KC_RCTL, KC_RSFT + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLSH, + KC_NO, KC_X, KC_V, KC_L, KC_C, KC_W, KC_K, KC_H, KC_G, KC_F, KC_Q, KC_MINS, + KC_CAPS, HOME_U, HOME_I, HOME_A, HOME_E, KC_O, KC_S, HOME_N, HOME_R, HOME_T, HOME_D, KC_Z, + KC_NO, KC_LBRC, KC_SCLN, KC_QUOT, KC_P, KC_Y, KC_B, KC_M, KC_COMM, KC_DOT, KC_J, KC_NO, + KC_NO, KC_NO, KC_NUBS, KC_NO, TD(TD_NEO_QWERTY), EXTRA, KC_NO, KC_NO, + LOWER, RAISE, RAISE, LOWER, + KC_TAB, KC_NO, KC_NO, KC_ENTER, + KC_ESC, KC_NO, KC_NO, KC_DEL ), [_QWERTY] = LAYOUT( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, @@ -48,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = LAYOUT( KC_GRV, 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, LSFT(KC_SLSH), RALT(KC_8), RALT(KC_9), KC_GRV, KC_EXLM, KC_NUBS, LSFT(KC_NUBS), LSFT(KC_0), LSFT(KC_7), KC_TRNS, + KC_TRNS, KC_TRNS, LSFT(KC_SLSH), RALT(KC_8), RALT(KC_9), KC_GRV, KC_EXLM, KC_NUBS, LSFT(KC_NUBS), LSFT(KC_0), LSFT(KC_6), KC_TRNS, KC_TRNS, RALT(KC_MINS), KC_AMPR, RALT(KC_7), RALT(KC_0), LSFT(KC_RBRC), KC_UNDS, KC_ASTR, KC_LPRN, KC_SLSH, KC_GT, RALT(KC_Q), KC_TRNS, KC_BSLS, KC_DLR, RALT(KC_NUBS), RALT(KC_RBRC), KC_PLUS, KC_RBRC, KC_PERC, KC_AT, KC_PIPE, KC_LT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LOWER, KC_TRNS, KC_TRNS, @@ -62,21 +71,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NUM, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_PAST, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TAB, KC_INS, KC_TRNS, KC_DOT, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PEQL, KC_P0, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P0, KC_PEQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT ), [_EXTRA] = LAYOUT( - QK_BOOT, KC_TRNS, KC_TRNS, MS_WHLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, MS_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, MS_LEFT, MS_DOWN, MS_RGHT, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, + QK_BOOT, QK_RBT, KC_TRNS, MS_WHLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, MS_UP, KC_TRNS, KC_BRIU, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, MS_LEFT, MS_DOWN, MS_RGHT, KC_BRID, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MS_WHLL, MS_WHLD, MS_WHLR, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EXTRA, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, MS_BTN1, + KC_LGUI, KC_TRNS, KC_TRNS, MS_BTN1, KC_TRNS, MS_BTN3, KC_TRNS, MS_BTN2, - MS_BTN2, MS_BTN1, KC_TRNS, KC_TRNS + MS_BTN2, MS_BTN1, KC_TRNS, MS_BTN3 ), @@ -95,3 +104,62 @@ tap_dance_action_t tap_dance_actions[] = { // [TD_NEO_QWERTY] = ACTION_TAP_DANCE_DOUBLE(KC_TRNS, DF(_QWERTY)) [TD_NEO_QWERTY] = ACTION_TAP_DANCE_FN(dance_qwerty_fn), }; + +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LOWER: // Deine Definition für LT(_LOWER, KC_SPC) + case RAISE: // Deine Definition für LT(_RAISE, KC_BSPC) + return 175; // Viel kürzerer Wert für den Daumen + default: + return 250; // Deine sicheren 250ms für die Home Row Mods + } +} + +void keyboard_post_init_user(void) { + // Schaltet Num Lock ein, falls es beim Start aus ist + if (!host_keyboard_led_state().num_lock) { + tap_code(KC_NUM); + } +} +// // 1. Die Symmetrie-Prüfung (wie gehabt) +// bool achordion_is_left(uint16_t keycode, keyrecord_t* record) { +// return record->event.key.col <= 5; +// } +// +// // 2. Die verbesserte Achordion-Logik +// bool process_achordion(uint16_t keycode, keyrecord_t* record) { +// static uint16_t hold_keycode = KC_NO; +// static bool hold_is_left = false; +// +// if (record->event.pressed) { +// // Falls ein Mod gehalten wird... +// if (hold_keycode != KC_NO) { +// // ...und wir auf der GLEICHEN Hand tippen: +// if (hold_is_left == achordion_is_left(keycode, record)) { +// +// // JETZT WICHTIG: Sende den Buchstaben der gehaltenen Taste +// // BEVOR die neue Taste verarbeitet wird. +// tap_code16(hold_keycode & 0xFF); +// hold_keycode = KC_NO; // Mod-Status löschen +// return true; +// } +// } +// +// // Registriere, wenn ein Mod-Tap gedrückt wird +// if (keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) { +// hold_keycode = keycode; +// hold_is_left = achordion_is_left(keycode, record); +// } +// } else { +// if (keycode == hold_keycode) { hold_keycode = KC_NO; } +// } +// return true; +// } +// +// // 3. Die Einbindung (Ohne das "return false", das Tasten schluckt) +// bool process_record_user(uint16_t keycode, keyrecord_t* record) { +// if (!process_achordion(keycode, record)) { +// return false; +// } +// return true; +// }