From b87a3e3088690f44c99894353b95b2c97b73ef8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Gr=C3=B6ger?= Date: Mon, 11 May 2026 21:13:23 +0200 Subject: [PATCH] feat(keyboard): add crimsens handwired dactyl_manuform 5x6_68_1 Initial implementation of the 5x6_68_1 Dactyl Manuform layout, including: - Hardware configuration for RP2040 (Helios) development board. - Integrated RGB matrix support using WS2812 drivers. - Split keyboard communication via Serial (GP11) and I2C support for pointing devices. - Custom keymap featuring Neo2 (default) and QWERTY layers. - Advanced features including Home Row Mods, Tap Dance, and layer-based RGB indicators. - Support for Cirque Pinnacle trackpad and SPI-based display peripherals. --- .../dactyl_manuform/5x6_68_1/keyboard.json | 708 ++++++++++++++++++ .../5x6_68_1/keymaps/crimsen/config.h | 47 ++ .../5x6_68_1/keymaps/crimsen/keymap.c | 204 +++++ .../5x6_68_1/keymaps/crimsen/rules.mk | 16 + .../5x6_68_1/keymaps/default/config.h | 8 + .../5x6_68_1/keymaps/default/keymap.c | 49 ++ .../dactyl_manuform/5x6_68_1/readme.md | 5 + 7 files changed, 1037 insertions(+) create mode 100644 keyboards/handwired/dactyl_manuform/5x6_68_1/keyboard.json create mode 100644 keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/config.h create mode 100644 keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/keymap.c create mode 100644 keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/rules.mk create mode 100644 keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/default/config.h create mode 100644 keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/default/keymap.c create mode 100644 keyboards/handwired/dactyl_manuform/5x6_68_1/readme.md diff --git a/keyboards/handwired/dactyl_manuform/5x6_68_1/keyboard.json b/keyboards/handwired/dactyl_manuform/5x6_68_1/keyboard.json new file mode 100644 index 0000000000..09c3e1a390 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_68_1/keyboard.json @@ -0,0 +1,708 @@ +{ + "keyboard_name": "Crimsens Tastatur", + "manufacturer": "crimsen-manufactor", + "maintainer": "crimsen", + "development_board": "helios", + "usb": { + "vid": "0xFEED", + "pid": "0x0016", + "device_version": "0.0.1" + }, + "features": { + "bootmagic": true, + "command": true, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "qmk": { + "locking": { + "enabled": true, + "resync": true + } + }, + "split": { + "enabled": true, + "serial": { + "pin": "GP11" + }, + "transport": { + "sync": { + "activity": true, + "layer_state": true, + "indicators": true, + "matrix_state": true, + "modifiers": true, + } + }, + "matrix_pins": { + "right": { + "cols": [ + "GP4", + "GP5", + "GP6", + "GP7", + "GP8", + "GP9" + ], + "rows": [ + "GP27", + "GP26", + "GP22", + "GP20", + "GP23", + "GP21" + ] + } + } + }, + "matrix_pins": { + "cols": [ + "GP5", + "GP4", + "GP6", + "GP7", + "GP8", + "GP9" + ], + "rows": [ + "GP27", + "GP26", + "GP15", + "GP14", + "GP13", + "GP12" + ], + }, + "processor": "RP2040", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 1, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 6, + 1 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 15, + "y": 0 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 16, + "y": 0 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 1 + }, + { + "matrix": [ + 1, + 1 + ], + "x": 1, + "y": 1 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 2, + "y": 1 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 3, + "y": 1 + }, + { + "matrix": [ + 1, + 4 + ], + "x": 4, + "y": 1 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 5, + "y": 1 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 11, + "y": 1 + }, + { + "matrix": [ + 7, + 1 + ], + "x": 12, + "y": 1 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 13, + "y": 1 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 14, + "y": 1 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 15, + "y": 1 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 16, + "y": 1 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 0, + "y": 2 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 1, + "y": 2 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 2, + "y": 2 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 3, + "y": 2 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 4, + "y": 2 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 5, + "y": 2 + }, + { + "matrix": [ + 8, + 0 + ], + "x": 11, + "y": 2 + }, + { + "matrix": [ + 8, + 1 + ], + "x": 12, + "y": 2 + }, + { + "matrix": [ + 8, + 2 + ], + "x": 13, + "y": 2 + }, + { + "matrix": [ + 8, + 3 + ], + "x": 14, + "y": 2 + }, + { + "matrix": [ + 8, + 4 + ], + "x": 15, + "y": 2 + }, + { + "matrix": [ + 8, + 5 + ], + "x": 16, + "y": 2 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 0, + "y": 3 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 1, + "y": 3 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 2, + "y": 3 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 3, + "y": 3 + }, + { + "matrix": [ + 3, + 4 + ], + "x": 4, + "y": 3 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 5, + "y": 3 + }, + { + "matrix": [ + 9, + 0 + ], + "x": 11, + "y": 3 + }, + { + "matrix": [ + 9, + 1 + ], + "x": 12, + "y": 3 + }, + { + "matrix": [ + 9, + 2 + ], + "x": 13, + "y": 3 + }, + { + "matrix": [ + 9, + 3 + ], + "x": 14, + "y": 3 + }, + { + "matrix": [ + 9, + 4 + ], + "x": 15, + "y": 3 + }, + { + "matrix": [ + 9, + 5 + ], + "x": 16, + "y": 3 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 0, + "y": 4 + }, + { + "matrix": [ + 4, + 1 + ], + "x": 1, + "y": 4 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 2, + "y": 4 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 3, + "y": 4 + }, + { + "matrix": [ + 10, + 2 + ], + "x": 13, + "y": 4 + }, + { + "matrix": [ + 10, + 3 + ], + "x": 14, + "y": 4 + }, + { + "matrix": [ + 10, + 4 + ], + "x": 15, + "y": 4 + }, + { + "matrix": [ + 10, + 5 + ], + "x": 16, + "y": 4 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 4, + "y": 5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 5, + "y": 5 + }, + { + "matrix": [ + 10, + 0 + ], + "x": 11, + "y": 5 + }, + { + "matrix": [ + 10, + 1 + ], + "x": 12, + "y": 5 + }, + { + "matrix": [ + 5, + 4 + ], + "x": 6, + "y": 6 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 7, + "y": 6 + }, + { + "matrix": [ + 11, + 0 + ], + "x": 9, + "y": 6 + }, + { + "matrix": [ + 11, + 1 + ], + "x": 10, + "y": 6 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 6, + "y": 7 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 7, + "y": 7 + }, + { + "matrix": [ + 11, + 2 + ], + "x": 9, + "y": 7 + }, + { + "matrix": [ + 11, + 3 + ], + "x": 10, + "y": 7 + } + ] + } + }, + // "rgb_light": { + // "led_count": 68 + // }, + "rgb_matrix": { + "driver": "ws2812", + "split_count": [34,34], + "animations": { + "breathing": false, + "cycle_all": false, + "solid_reactive_nexus": false, + "splash": true, + }, + "default": { + "animation": "splash", + "on": true, + }, + "react_on_keyup": false, + "layout": [ + {"matrix": [0, 5], "x": 95, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 76, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 57, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 38, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 19, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 19, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 57, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 76, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 95, "y": 16, "flags": 4}, + {"matrix": [2, 5], "x": 95, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 57, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 38, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 19, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 19, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 38, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 57, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 76, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 95, "y": 48, "flags": 4}, + {"matrix": [4, 5], "x": 95, "y": 64, "flags": 4}, + {"matrix": [5, 5], "x": 114, "y": 64, "flags": 4}, + {"matrix": [5, 3], "x": 133, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 152, "y": 64, "flags": 4}, + {"matrix": [5, 4], "x": 171, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 76, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 57, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 38, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 19, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4} + + + /* Reihe 6: Von links nach rechts (Col 0 bis 5) */ + {"matrix": [6, 0], "x": 128, "y": 0, "flags": 4}, {"matrix": [6, 1], "x": 147, "y": 0, "flags": 4}, {"matrix": [6, 2], "x": 166, "y": 0, "flags": 4}, {"matrix": [6, 3], "x": 185, "y": 0, "flags": 4}, {"matrix": [6, 4], "x": 204, "y": 0, "flags": 4}, {"matrix": [6, 5], "x": 224, "y": 0, "flags": 4}, + + /* Reihe 7: Rückwärts von rechts nach links (Col 5 bis 0) */ + {"matrix": [7, 5], "x": 224, "y": 16, "flags": 4}, {"matrix": [7, 4], "x": 204, "y": 16, "flags": 4}, {"matrix": [7, 3], "x": 185, "y": 16, "flags": 4}, {"matrix": [7, 2], "x": 166, "y": 16, "flags": 4}, {"matrix": [7, 1], "x": 147, "y": 16, "flags": 4}, {"matrix": [7, 0], "x": 128, "y": 16, "flags": 4}, + + /* Reihe 8: Wieder vorwärts (Col 0 bis 5) */ + {"matrix": [8, 0], "x": 128, "y": 32, "flags": 4}, {"matrix": [8, 1], "x": 147, "y": 32, "flags": 4}, {"matrix": [8, 2], "x": 166, "y": 32, "flags": 4}, {"matrix": [8, 3], "x": 185, "y": 32, "flags": 4}, {"matrix": [8, 4], "x": 204, "y": 32, "flags": 4}, {"matrix": [8, 5], "x": 224, "y": 32, "flags": 4}, + + /* Reihe 9: Wieder rückwärts (Col 5 bis 0) */ + {"matrix": [9, 5], "x": 224, "y": 48, "flags": 4}, {"matrix": [9, 4], "x": 204, "y": 48, "flags": 4}, {"matrix": [9, 3], "x": 185, "y": 48, "flags": 4}, {"matrix": [9, 2], "x": 166, "y": 48, "flags": 4}, {"matrix": [9, 1], "x": 147, "y": 48, "flags": 4}, {"matrix": [9, 0], "x": 128, "y": 48, "flags": 4}, + + /* Thumb Cluster & Sonderpfad (Deine spezifische Reihenfolge) */ + {"matrix": [10, 0], "x": 128, "y": 80, "flags": 4}, + {"matrix": [11, 0], "x": 140, "y": 96, "flags": 4}, + {"matrix": [11, 2], "x": 140, "y": 112, "flags": 4}, + {"matrix": [11, 3], "x": 150, "y": 112, "flags": 4}, + {"matrix": [11, 1], "x": 150, "y": 96, "flags": 4}, + {"matrix": [10, 1], "x": 147, "y": 80, "flags": 4}, + {"matrix": [10, 2], "x": 166, "y": 64, "flags": 4}, + {"matrix": [10, 3], "x": 185, "y": 64, "flags": 4}, + {"matrix": [10, 4], "x": 204, "y": 64, "flags": 4}, + {"matrix": [10, 5], "x": 224, "y": 64, "flags": 4} + ] + } +} diff --git a/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/config.h b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/config.h new file mode 100644 index 0000000000..894dc08a70 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/config.h @@ -0,0 +1,47 @@ +#pragma once + +#define SPLIT_USB_DETECT +#define SOFT_SERIAL_PIN GP11 +#define EE_HANDS + +#define TAPPING_TERM 250 + +#define QUICK_TAP_TERM 150 + +#define TAPPING_TERM_PER_KEY + +#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY + +#define WS2812_DI_PIN GP25 +// #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // Nicht auf voller Pulle testen (USB-Schutz) + +/* Damit du sofort siehst, ob es geht, aktiviere einen Standard-Effekt */ +#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_GRB +// #define RGBLIGHT_SPLIT + +#define I2C_DRIVER I2CD1 +#define I2C1_SCL_PIN GP3 +#define I2C1_SDA_PIN GP2 +#define POINTING_DEVICE_RIGHT +#define POINTING_DEVICE_COMBED +#define SPLIT_POINTING_ENABLE +#define CIRQUE_PINNACLE_TAP_ENABLE +#define CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE +#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE + +#define SPLIT_OLED_ENABLE +#define SPI_DRIVER SPID0 +#define SPI_SCK_PIN GP22 +#define SPI_MOSI_PIN GP20 +#define SPI_MISO_PIN GP23 +#define DISPLAY_CS_PIN P21 +// #define UNUSED_PIN GP29 + +// #define OLED_CS_PIN GP21 +// #define OLED_DC_PIN GP10 +// #define OLED_DRIVER_LS013B7DH03 +// #define SHARP_LCD_BIT_ORDER LSBFIRST +// #define OLED_UPDATE_INTERVAL 33 +// #define OLED_DISPLAY_WIDTH 160 +// #define OLED_DISPLAY_HEIGHT 68 + diff --git a/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/keymap.c b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/keymap.c new file mode 100644 index 0000000000..ef129cea55 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/keymap.c @@ -0,0 +1,204 @@ +// Copyright 2026 Gemini Adaptive AI & Your Build +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +enum custom_layers { + _NEO, // Ebene 0: Basis 1: Neo2 Hauptlayout + _QWERTY, // Ebene 1: Basis 2: QWERTY/QWERTZ + _LOWER, // Ebene 3: Sonderzeichen + _RAISE, // Ebene 4: Navigation & Nummernblock + _EXTRA, // Ebene 5: Media & Boot +}; + +enum { + TD_NEO_QWERTY +}; + +// Aliase für bessere Lesbarkeit +#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 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_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, + RM_TOGG, RM_NEXT, KC_NUBS, KC_NO, TD(TD_NEO_QWERTY), EXTRA, RM_NEXT, RM_TOGG, + LOWER, RAISE, RAISE, LOWER, + KC_TAB, KC_NO, KC_NO, KC_ENTER, + KC_ESC, QK_BOOT, QK_BOOT, 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, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LALT, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_RALT, KC_RCTL, + LOWER, KC_BSPC, RAISE, KC_SPC, + KC_LGUI, KC_DEL, KC_RGUI, KC_ENTER, + KC_PGUP, NEO, KC_RGUI, KC_PGDN + ), + + [_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_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, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [_RAISE] = LAYOUT( + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + 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_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, 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_LGUI, KC_TRNS, KC_TRNS, MS_BTN1, + KC_TRNS, MS_BTN3, KC_TRNS, MS_BTN2, + MS_BTN2, MS_BTN1, KC_TRNS, MS_BTN3 + ), + + +}; + + +void dance_qwerty_fn(tap_dance_state_t *state, void *user_data) { + if (state->count >= 2) { + default_layer_set(1UL << _QWERTY); + reset_tap_dance(state); + } +} + + +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); + } +} + +bool rgb_matrix_indicators_user(void) { + uint8_t layer = get_highest_layer(layer_state); + + switch (layer) { + case 1: // Wenn Layer 1 aktiv ist + // Setze LED an Index 0 auf Blau (RGB: 0, 0, 255) + rgb_matrix_set_color_all( 0, 0, 255); + return true; + break; + case 2: // Wenn Layer 2 aktiv ist + rgb_matrix_set_color_all( 255, 0, 0); // Rot + return true; + break; + case 3: // Wenn Layer 2 aktiv ist + rgb_matrix_set_color_all( 0, 255, 0); // Rot + return true; + break; + case 4: // Wenn Layer 2 aktiv ist + rgb_matrix_set_color_all( 0, 0, 255); // Rot + return true; + break; + } + return false; +} + +// #ifdef QUANTUM_PAINTER_ENABLE +// static painter_device_t display; +// +// void keyboard_post_init_user(void) { +// display = qp_sh1106_make_spi_device(160, 68, DISPLAY_CS_PIN, UNUSED_PIN, UNUSED_PIN); +// qp_init(display, QP_ROTATION_0); +// } +// +// void process_painter_user(void) { +// // Hier kannst du Text oder Logos rendern +// qp_drawtext(display, 0, 0, get_font(0), "QMK x Nice!View"); +// } +// #endif +// // 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; +// } diff --git a/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/rules.mk b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/rules.mk new file mode 100644 index 0000000000..4eeb9d7e8e --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/crimsen/rules.mk @@ -0,0 +1,16 @@ +TAP_DANCE_ENABLE = yes +SERIAL_DRIVER = vendor +RGB_MATRIX_DRIVER = ws2812 +WS2812_DRIVER = vendor # Nutzt die PIO-Einheit des RP2040 +RGB_MATRIX_ENABLE = yes +POINTING_DEVICE_ENABLE = yes +POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c + +# OLED_ENABLE = yes +# OLED_TRANSPORT = spi +# OLED_DRIVER = custom +SPI_ENABLE = yes +QUANTUM_PAINTER_ENABLE = yes +QUANTUM_PAINTER_DRIVERS += sh1106_spi + +# SPLIT_TRANSPORT_MIRROR_ENABLED = yes diff --git a/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/default/config.h new file mode 100644 index 0000000000..0b5e296dc8 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/default/config.h @@ -0,0 +1,8 @@ +// Copyright 2023 Kostas Pagratis (@kpagratis) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + + +#define SPLIT_USB_DETECT +#define TAPPING_TERM 250 diff --git a/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/default/keymap.c new file mode 100644 index 0000000000..4e774ea716 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_68_1/keymaps/default/keymap.c @@ -0,0 +1,49 @@ +// Copyright 2023 Kostas Pagratis (@kpagratis) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +enum custom_layers { + _QWERTY, + _LOWER, + _RAISE +}; + +#define RAISE MO(_RAISE) +#define LOWER MO(_LOWER) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_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, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LALT, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_RALT, KC_RCTL, + RAISE, KC_SPC, KC_ENT, LOWER, + KC_HOME, KC_BSPC, KC_DEL, KC_END, + KC_PGUP, KC_LGUI, KC_RGUI, KC_PGDN + ), + + [_LOWER] = LAYOUT( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, _______, _______, + _______, KC_SCRL, KC_INS, KC_PAUS, KC_PSCR, KC_LPRN, KC_RPRN, KC_P4, KC_P5, KC_P6, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, + _______, _______, _______, _______, KC_P0, KC_PDOT, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______ + + ), + + [_RAISE] = LAYOUT( + KC_F12, KC_F1, KC_F2, KC_F3 , KC_F4, KC_F5, KC_F6, KC_F7 , KC_F8, KC_F9, KC_F10 , KC_F11, + _______, _______, _______, _______, _______, KC_TRNS, KC_TRNS, _______, KC_NUM, _______, _______, KC_MUTE, + _______, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_VOLU, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, + _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______ + ) +}; diff --git a/keyboards/handwired/dactyl_manuform/5x6_68_1/readme.md b/keyboards/handwired/dactyl_manuform/5x6_68_1/readme.md new file mode 100644 index 0000000000..b21270e391 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_68_1/readme.md @@ -0,0 +1,5 @@ +# Dactyl Manuform 5x6_68 + +This is a Dactyl ManuForm 5x6 with an extended, 4 key, bottom row; totalling 68 keys. + +![diagram](https://i.imgur.com/TGd36fWh.png)