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.
This commit is contained in:
parent
88f0d31107
commit
b87a3e3088
|
|
@ -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}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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;
|
||||
// }
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Dactyl Manuform 5x6_68
|
||||
|
||||
This is a Dactyl ManuForm 5x6 with an extended, 4 key, bottom row; totalling 68 keys.
|
||||
|
||||

|
||||
Loading…
Reference in New Issue