1
0

Compare commits

...

11 Commits

Author SHA1 Message Date
dependabot[bot]
8f728aa731 Bump vite from 5.4.19 to 5.4.20 in /builddefs/docsgen (#25646)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.19 to 5.4.20.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.20/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.20/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 5.4.20
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-11 11:12:40 +01:00
Duncan Sutherland
45a5a94b96 Correct key position for Swiftrax Bebol (#25147) 2025-09-11 11:04:19 +01:00
Nikolai Grigoriev
bef5c95675 Handwired Dactyl Manuform version 5x7 matrix, 6-key thumb cluster, 2 keys in the last row (#24246)
Co-authored-by: Ryan <fauxpark@gmail.com>
2025-09-11 01:42:20 -07:00
Freather
e5f47fa269 add fave 10xs pcb (#25296)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2025-09-11 01:16:25 -07:00
Ryan Chomistek
05ea735e86 Add Leftpaw Keyboard (#25313)
Co-authored-by: jack <jack@pngu.org>
2025-09-11 01:15:45 -07:00
Steven Karrmann
35e62d236b Add Cata keyboard (#25557)
Co-authored-by: Jack Sangdahl <jack@pngu.org>
2025-09-10 17:44:38 -07:00
Alex Havermale
fc55fcff3d Add haverworks/theseus75 keyboard (#25457)
Co-authored-by: Moritz <moritz.plattner@gmx.net>
2025-09-10 08:28:24 -04:00
diegorodriguezv
b4bdf3f1d5 Update data_driven_config.md (#25612) 2025-09-10 01:52:25 -07:00
Joel Challis
c4ccbf06e1 Fix silakka54 layout (#25643) 2025-09-10 09:11:46 +01:00
diegorodriguezv
24c05ff1c7 Correct link in porting_your_keyboard_to_qmk.md (#25635)
Fixed anchor
2025-09-09 19:44:47 -06:00
diegorodriguezv
65e1afe0af Correct link in faq_general.md (#25640)
Updated the link to the QMK trademark page.
2025-09-09 19:43:28 -06:00
32 changed files with 1755 additions and 39 deletions

View File

@@ -1,7 +1,7 @@
{
"license": "GPL-2.0-or-later",
"devDependencies": {
"vite": "^5.4.19",
"vite": "^5.4.20",
"vitepress": "^1.1.0",
"vitepress-plugin-tabs": "^0.5.0",
"vue": "^3.4.24"

View File

@@ -766,10 +766,10 @@ tabbable@^6.2.0:
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
vite@^5.2.9, vite@^5.4.19:
version "5.4.19"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.19.tgz#20efd060410044b3ed555049418a5e7d1998f959"
integrity sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==
vite@^5.2.9, vite@^5.4.20:
version "5.4.20"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.20.tgz#3267a5e03f21212f44edfd72758138e8fcecd76a"
integrity sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.43"

View File

@@ -6,7 +6,7 @@ This page describes how QMK's data driven JSON configuration system works. It is
Historically QMK has been configured through a combination of two mechanisms- `rules.mk` and `config.h`. While this worked well when QMK was only a handful of keyboards we've grown to encompass nearly 4000 supported keyboards. That extrapolates out to 6000 configuration files under `keyboards/` alone! The freeform nature of these files and the unique patterns people have used to avoid duplication have made ongoing maintenance a challenge, and a large number of our keyboards follow patterns that are outdated and sometimes harder to understand.
We have also been working on bringing the power of QMK to people who aren't comformable with a CLI, and other projects such as VIA are working to make using QMK as easy as installing a program. These tools need information about how a keyboard is laid out or what pins and features are available so that users can take full advantage of QMK. We introduced `info.json` as a first step towards this. The QMK API is an effort to combine these 3 sources of information- `config.h`, `rules.mk`, and `info.json`- into a single source of truth that end-user tools can use.
We have also been working on bringing the power of QMK to people who aren't comfortable with a CLI, and other projects such as VIA are working to make using QMK as easy as installing a program. These tools need information about how a keyboard is laid out or what pins and features are available so that users can take full advantage of QMK. We introduced `info.json` as a first step towards this. The QMK API is an effort to combine these 3 sources of information- `config.h`, `rules.mk`, and `info.json`- into a single source of truth that end-user tools can use.
Now we have support for generating `rules.mk` and `config.h` values from `info.json`, allowing us to have a single source of truth. This will allow us to use automated tooling to maintain keyboards saving a lot of time and maintenance work.

View File

@@ -38,7 +38,7 @@ Awesome! Open up a Pull Request for it. We'll review the code, and merge it!
That's amazing! We would love to assist you with that!
In fact, we have a [whole page](https://qmk.fm/powered/) dedicated to adding QMK Branding to your page and keyboard. This covers pretty much everything you need (knowledge and images) to officially support QMK.
In fact, we have a [whole page](https://qmk.fm/trademark) dedicated to adding QMK Branding to your page and keyboard. This covers pretty much everything you need (knowledge and images) to officially support QMK.
If you have any questions about this, open an issue or head to [Discord](https://discord.gg/qmk).

View File

@@ -164,7 +164,7 @@ There are a lot of features that can be turned on or off, configured or tuned. S
### Configuration Options
For available options for `config.h`, you should see the [Config Options](config_options#the-configh-file) page for more details.
For available options for `config.h`, you should see the [Config Options](config_options#the-config-h-file) page for more details.
### Build Options

View File

@@ -0,0 +1,65 @@
{
"manufacturer": "Steven Karrmann",
"keyboard_name": "Cata",
"maintainer": "skarrmann",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["GP9", "GP10", "GP11", "GP12", "GP13", "GP14"],
"rows": ["GP27", "GP5", "GP26", "GP6", "GP15", "GP7", "GP14", "GP8"]
},
"processor": "RP2040",
"url": "https://github.com/skarrmann/cata",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"community_layouts": ["split_3x5_2"],
"layouts": {
"LAYOUT_split_3x5_2": {
"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": [1, 0], "x": 6, "y": 0},
{"matrix": [1, 1], "x": 7, "y": 0},
{"matrix": [1, 2], "x": 8, "y": 0},
{"matrix": [1, 3], "x": 9, "y": 0},
{"matrix": [1, 4], "x": 10, "y": 0},
{"matrix": [2, 0], "x": 0, "y": 1},
{"matrix": [2, 1], "x": 1, "y": 1},
{"matrix": [2, 2], "x": 2, "y": 1},
{"matrix": [2, 3], "x": 3, "y": 1},
{"matrix": [2, 4], "x": 4, "y": 1},
{"matrix": [3, 0], "x": 6, "y": 1},
{"matrix": [3, 1], "x": 7, "y": 1},
{"matrix": [3, 2], "x": 8, "y": 1},
{"matrix": [3, 3], "x": 9, "y": 1},
{"matrix": [3, 4], "x": 10, "y": 1},
{"matrix": [4, 0], "x": 0, "y": 2},
{"matrix": [4, 1], "x": 1, "y": 2},
{"matrix": [4, 2], "x": 2, "y": 2},
{"matrix": [4, 3], "x": 3, "y": 2},
{"matrix": [4, 4], "x": 4, "y": 2},
{"matrix": [5, 0], "x": 6, "y": 2},
{"matrix": [5, 1], "x": 7, "y": 2},
{"matrix": [5, 2], "x": 8, "y": 2},
{"matrix": [5, 3], "x": 9, "y": 2},
{"matrix": [5, 4], "x": 10, "y": 2},
{"matrix": [6, 3], "x": 3, "y": 3},
{"matrix": [6, 4], "x": 4, "y": 3},
{"matrix": [7, 0], "x": 6, "y": 3},
{"matrix": [7, 1], "x": 7, "y": 3}
]
}
}
}

View File

@@ -0,0 +1,42 @@
// Copyright 2025 Steven Karrmann (@skarrmann)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_SYMBOL,
_NAVIGATION,
_FUNCTION
};
#define MO_SYM MO(_SYMBOL)
#define MO_NAV MO(_NAVIGATION)
#define MO_FUN MO(_FUNCTION)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_split_3x5_2(
KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,
KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_QUOT,
KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH,
MO_NAV , KC_LSFT, KC_SPC , MO_SYM
),
[_SYMBOL] = LAYOUT_split_3x5_2(
KC_SCLN, KC_LBRC, KC_RBRC, KC_5 , XXXXXXX, XXXXXXX, KC_6 , KC_MINS, KC_EQL , KC_GRV ,
KC_1 , KC_2 , KC_3 , KC_4 , KC_BSLS, XXXXXXX, KC_7 , KC_8 , KC_9 , KC_0 ,
OS_LGUI, OS_LALT, OS_LSFT, OS_LCTL, XXXXXXX, XXXXXXX, OS_RCTL, OS_RSFT, OS_RALT, OS_RGUI,
MO_FUN , _______, _______, _______
),
[_NAVIGATION] = LAYOUT_split_3x5_2(
KC_PSCR, KC_INS , KC_APP , KC_DEL , XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END ,
KC_ESC , KC_TAB , KC_ENT , KC_BSPC, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT,
OS_LGUI, OS_LALT, OS_LSFT, OS_LCTL, XXXXXXX, XXXXXXX, OS_RCTL, OS_RSFT, OS_RALT, OS_RGUI,
_______, _______, _______, MO_FUN
),
[_FUNCTION] = LAYOUT_split_3x5_2(
KC_F1 , KC_F2 , KC_F3 , KC_F4 , QK_BOOT, KC_SCRL, KC_F9 , KC_F10 , KC_F11 , KC_F12 ,
KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX, KC_CAPS, KC_MUTE, KC_VOLD, KC_VOLU, KC_PAUS,
OS_LGUI, OS_LALT, OS_LSFT, OS_LCTL, XXXXXXX, KC_NUM, OS_RCTL, OS_RSFT, OS_RALT, OS_RGUI,
_______, _______, _______, _______
),
};

27
keyboards/cata/readme.md Normal file
View File

@@ -0,0 +1,27 @@
# Cata
![Cata](https://i.imgur.com/6jGENr9.jpeg)
Cata is a 34 key ortholinear keyboard, powered by a Waveshare RP2040-Zero.
* Keyboard Maintainer: [skarrmann](https://github.com/skarrmann)
* Hardware Supported: Cata PCBs with RP2040-Zero
* Hardware Availability: [Cata GitHub repository](https://github.com/skarrmann/cata)
Make example for this keyboard (after setting up your build environment):
make cata:default
Flashing example for this keyboard:
make cata:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the top left key) and plug in the keyboard.
* **Physical reset button**: Double-tap the RESET button on the RP-2040 Zero (button on the right).
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.

View File

@@ -0,0 +1,20 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com> Nikolai Grigoriev @ngrigoriev
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define EE_HANDS

View File

@@ -0,0 +1,115 @@
{
"manufacturer": "Nikolai Grigoriev",
"keyboard_name": "Dactyl Manuform 5x7 2-key last row 6-key thumb cluster",
"maintainer": "ngrigoriev",
"build": {
"lto": true
},
"development_board": "promicro",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
"nkro": true
},
"matrix_pins": {
"cols": ["F5", "F6", "F7", "B1", "B3", "B2", "B6"],
"rows": ["D4", "C6", "D7", "E6", "B4", "B5"]
},
"qmk": {
"locking": {
"enabled": true,
"resync": true
}
},
"split": {
"enabled": true,
"transport": {
"protocol": "i2c"
},
"usb_detect": {
"enabled": true
}
},
"url": "https://github.com/ngrigoriev/dactyl-manuform-5x7_2_6",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT_5x7_2_6": {
"layout": [
{"label": "KC_GRV", "matrix": [0, 0], "x": 0, "y": 0.5, "w": 1.5},
{"label": "KC_1", "matrix": [0, 1], "x": 1.5, "y": 0.5},
{"label": "KC_2", "matrix": [0, 2], "x": 2.5, "y": 0},
{"label": "KC_3", "matrix": [0, 3], "x": 3.5, "y": 0},
{"label": "KC_4", "matrix": [0, 4], "x": 4.5, "y": 0},
{"label": "KC_5", "matrix": [0, 5], "x": 5.5, "y": 0},
{"label": "KC_NO", "matrix": [0, 6], "x": 6.5, "y": 0},
{"label": "KC_EQL", "matrix": [6, 0], "x": 12, "y": 0},
{"label": "KC_6", "matrix": [6, 1], "x": 13, "y": 0},
{"label": "KC_7", "matrix": [6, 2], "x": 14, "y": 0},
{"label": "KC_8", "matrix": [6, 3], "x": 15, "y": 0},
{"label": "KC_9", "matrix": [6, 4], "x": 16, "y": 0},
{"label": "KC_0", "matrix": [6, 5], "x": 17, "y": 0.5},
{"label": "KC_BSPC", "matrix": [6, 6], "x": 18, "y": 0.5, "w": 1.5},
{"label": "KC_TAB", "matrix": [1, 0], "x": 0, "y": 1.5, "w": 1.5},
{"label": "KC_Q", "matrix": [1, 1], "x": 1.5, "y": 1.5},
{"label": "KC_W", "matrix": [1, 2], "x": 2.5, "y": 1},
{"label": "KC_E", "matrix": [1, 3], "x": 3.5, "y": 1},
{"label": "KC_R", "matrix": [1, 4], "x": 4.5, "y": 1},
{"label": "KC_T", "matrix": [1, 5], "x": 5.5, "y": 1},
{"label": "KC_NO", "matrix": [1, 6], "x": 6.5, "y": 1},
{"label": "KC_MINUS", "matrix": [7, 0], "x": 12, "y": 1},
{"label": "KC_Y", "matrix": [7, 1], "x": 13, "y": 1},
{"label": "KC_U", "matrix": [7, 2], "x": 14, "y": 1},
{"label": "KC_I", "matrix": [7, 3], "x": 15, "y": 1},
{"label": "KC_O", "matrix": [7, 4], "x": 16, "y": 1},
{"label": "KC_P", "matrix": [7, 5], "x": 17, "y": 1.5},
{"label": "KC_BSLS", "matrix": [7, 6], "x": 18, "y": 1.5, "w": 1.5},
{"label": "KC_LCTL", "matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
{"label": "KC_A", "matrix": [2, 1], "x": 1.5, "y": 2.5},
{"label": "KC_S", "matrix": [2, 2], "x": 2.5, "y": 2},
{"label": "KC_D", "matrix": [2, 3], "x": 3.5, "y": 2},
{"label": "KC_F", "matrix": [2, 4], "x": 4.5, "y": 2},
{"label": "KC_G", "matrix": [2, 5], "x": 5.5, "y": 2},
{"label": "KC_NO", "matrix": [2, 6], "x": 6.5, "y": 2},
{"label": "KC_DEL", "matrix": [8, 0], "x": 12, "y": 2},
{"label": "KC_H", "matrix": [8, 1], "x": 13, "y": 2},
{"label": "KC_J", "matrix": [8, 2], "x": 14, "y": 2},
{"label": "KC_K", "matrix": [8, 3], "x": 15, "y": 2},
{"label": "KC_L", "matrix": [8, 4], "x": 16, "y": 2},
{"label": "KC_SCLN", "matrix": [8, 5], "x": 17, "y": 2.5},
{"label": "KC_RSFT", "matrix": [8, 6], "x": 18, "y": 2.5, "w": 1.5},
{"label": "KC_LSFT", "matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.5},
{"label": "KC_Z", "matrix": [3, 1], "x": 1.5, "y": 3.5},
{"label": "KC_X", "matrix": [3, 2], "x": 2.5, "y": 3},
{"label": "KC_C", "matrix": [3, 3], "x": 3.5, "y": 3},
{"label": "KC_V", "matrix": [3, 4], "x": 4.5, "y": 3},
{"label": "KC_B", "matrix": [3, 5], "x": 5.5, "y": 3},
{"label": "KC_N", "matrix": [9, 1], "x": 13, "y": 3},
{"label": "KC_M", "matrix": [9, 2], "x": 14, "y": 3},
{"label": "KC_COMM", "matrix": [9, 3], "x": 15, "y": 3},
{"label": "KC_DOT", "matrix": [9, 4], "x": 16, "y": 3},
{"label": "KC_SLSH", "matrix": [9, 5], "x": 17, "y": 3.5},
{"label": "KC_RSFT", "matrix": [9, 6], "x": 18, "y": 3.5, "w": 1.5},
{"label": "KC_PGUP", "matrix": [4, 2], "x": 2.5, "y": 4},
{"label": "KC_PGDN", "matrix": [4, 3], "x": 3.5, "y": 4},
{"label": "KC_LBRC", "matrix": [10, 3], "x": 15, "y": 4},
{"label": "KC_RBRC", "matrix": [10, 4], "x": 16, "y": 4},
{"label": "KC_LCTL", "matrix": [4, 4], "x": 5, "y": 5, "h": 1.5, "r": 30},
{"label": "KC_ESC", "matrix": [4, 5], "x": 6, "y": 5, "h": 1.5, "r": 30},
{"label": "KC_ENTER", "matrix": [10, 1], "x": 12.5, "y": 5, "h": 1.5, "r": -30},
{"label": "KC_SPC", "matrix": [10, 2], "x": 13.5, "y": 5, "h": 1.5, "r": -30},
{"label": "KC_UP", "matrix": [5, 5], "x": 7.5, "y": 6.5, "r": 45},
{"label": "KC_DOWN", "matrix": [5, 3], "x": 8, "y": 7.5, "r": 45},
{"label": "KC_LEFT", "matrix": [11, 3], "x": 10.5, "y": 7.5, "r": -45},
{"label": "KC_RIGHT", "matrix": [11, 1], "x": 11, "y": 6.5, "r": -45},
{"label": "KC_LCMD", "matrix": [5, 4], "x": 6.5, "y": 7, "r": 45},
{"label": "KC_LALT", "matrix": [5, 2], "x": 7, "y": 8, "r": 45},
{"label": "KC_RCTL", "matrix": [11, 4], "x": 11.5, "y": 8, "r": -45},
{"label": "KC_RALT", "matrix": [11, 2], "x": 12, "y": 7, "r": -45}
]
}
}
}

View File

@@ -0,0 +1,74 @@
/* vim: noai:ts=4:sw=4:nowrap
*/
/*
Copyright 2012 Jun Wako <wakojun@gmail.com> Nikolai Grigoriev @ngrigoriev
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layers {
_BASE,
_MAGIC,
_NUMPAD,
_FN
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_5x7_2_6(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, MO(_MAGIC), KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(_NUMPAD), KC_MINUS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, _______, KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM(MOD_RSFT),
KC_PGUP, KC_PGDN, KC_LBRC, KC_RBRC,
KC_LCTL, LT(_FN, KC_ESC), KC_ENTER,KC_SPC,
KC_UP, KC_DOWN, KC_LEFT, KC_RIGHT,
KC_LCMD, KC_LALT, KC_RCTL, KC_RALT
),
[_FN] = LAYOUT_5x7_2_6(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, MO(_MAGIC), _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
_______, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F12,
_______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, QK_BOOT, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_MPRV, KC_MNXT, _______, _______,
_______, _______, KC_DEL, _______,
_______, _______, _______, _______,
_______, _______, _______, _______
),
[_NUMPAD] = LAYOUT_5x7_2_6(
_______, _______, _______, _______, _______, _______, MO(_MAGIC), _______, _______, KC_NUM, _______, KC_PMNS, KC_PPLS, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_P4, KC_P5, KC_P6, KC_PAST, _______,
_______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PSLS, _______,
_______, _______, KC_P0, KC_PDOT,
_______, _______, _______, KC_PENT,
_______, _______, _______, _______,
_______, _______, _______, _______
),
[_MAGIC] = LAYOUT_5x7_2_6(
_______, _______, _______, _______, _______, _______, _______, CG_SWAP, _______, _______, _______, _______, _______, QK_REBOOT,
_______, _______, _______, _______, _______, _______, _______, CG_NORM, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOTLOADER,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______,
_______, _______, _______, _______,
_______, _______, _______, _______,
_______, _______, _______, _______
)
};

View File

@@ -0,0 +1,29 @@
# handwired/dactyl_manuform/5x7_2_6
![keyboad_image](https://i.ibb.co/09tfjY0/kbpic-small-21.jpg)
A standard Dactyl Manuform keyboard with 5x7 matrix, 6 thumb cluster keys. Last row has 2 keys only. Index column has 3 rows. The outer keys are 1,5u wide. [More info on https://github.com/ngrigoriev/dactyl-manuform-5x7_2_6](https://github.com/ngrigoriev/dactyl-manuform-5x7_2_6). Based on the original set of Dactyl Manuform keyboards created and maintaied by [Jack Humbert](https://github.com/jackhumbert).
This keyboard can be generated using one of Dactyl Manuform generators, such as (https://dactyl.mbugert.de/manuform).
* Keyboard Maintainer: [Nikolai Grigoriev](https://github.com/ngrigoriev)
* Hardware Supported: Promicro
* Hardware Availability: general DIY
Make example for this keyboard (after setting up your build environment):
make handwired/dactyl_manuform/5x7_2_6:default
Flashing example for this keyboard:
make handwired/dactyl_manuform/5x7_2_6:default:flash
See the [build environment setup](getting_started_build_tools) and the [make instructions](getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -251,7 +251,7 @@
{"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.5},
{"label": "Ctrl", "matrix": [4, 12], "x": 12, "y": 4, "w": 1.5},
{"label": "Ctrl", "matrix": [4, 12], "x": 11.5, "y": 4, "w": 1.5},
{"label": "\u2190", "matrix": [4, 13], "x": 13, "y": 4},
{"label": "\u2193", "matrix": [4, 14], "x": 14, "y": 4},
{"label": "\u2192", "matrix": [4, 15], "x": 15, "y": 4}
@@ -327,7 +327,7 @@
{"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.5},
{"label": "Ctrl", "matrix": [4, 12], "x": 12, "y": 4, "w": 1.5},
{"label": "Ctrl", "matrix": [4, 12], "x": 11.5, "y": 4, "w": 1.5},
{"label": "\u2190", "matrix": [4, 13], "x": 13, "y": 4},
{"label": "\u2193", "matrix": [4, 14], "x": 14, "y": 4},
{"label": "\u2192", "matrix": [4, 15], "x": 15, "y": 4}

View File

@@ -0,0 +1,33 @@
// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* Defines for configuring the serial driver for split comms (see https://docs.qmk.fm/drivers/serial) */
#define SERIAL_USART_DRIVER SD3 // USART 3
/* Defines for required pins */
#define ID_PIN A13
#define USBSW_PIN A14 // Switches the hub input/output with the MUXes
#define PSW_PIN A15 // Turns the power routing to the USB-C port on/off
#define BUS_B_PIN C13 // Tells the hub to be bus-powered or self-powered (which in turn tells the clients to use 100 mA or 500 mA)
#define USB_VBUS_PIN C15 // Only the master side will have VBUS present at power-up (used to determine master/slave)
#define USBPD_1_PIN F0
#define USBPD_2_PIN F1
/* Additional defines for managing power and state scross split */
#define DISABLE_BUS_POWER_MODE TRUE
#define KB_STATE_SYNC_INTERVAL 500
#define USBPD_ALLOWANCE_CHECK_INTERVAL 100
#define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_STATE
/* Defines for the RGB matrix */
#define INDICATOR_MAX_BRIGHTNESS 255
#define CAPS_LOCK_LED_INDEX 0 // LED1 on PCB
#define WS2812_EXTERNAL_PULLUP
#define WS2812_PWM_DRIVER PWMD3
#define WS2812_PWM_CHANNEL 4
#define WS2812_PWM_PAL_MODE 10
#define WS2812_DMA_STREAM STM32_DMA1_STREAM2
#define WS2812_DMA_CHANNEL 2
#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP

View File

@@ -0,0 +1,10 @@
// Copyright 2023 Moritz Plattner (@ebastler)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_SERIAL TRUE
#define HAL_USE_PWM TRUE
#include_next <halconf.h>

View File

@@ -0,0 +1,456 @@
{
"manufacturer": "Haverworks",
"keyboard_name": "Theseus75",
"maintainer": "ebastler",
"bootloader": "stm32-dfu",
"bootmagic": {
"matrix": [0, 1]
},
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "A8", "pin_b": "C6", "resolution": 2}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["B11", "C14", "B6", "B5", "B4", "B3", "C11", "C10", null],
"rows": ["A9", "A10", "B15", "B12", "B13", "B14"]
},
"processor": "STM32G431",
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"dual_beacon": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true
},
"driver": "ws2812",
"layout": [
{"matrix": [3, 1], "x": 32, "y": 34, "flags": 8},
{"x": 28, "y": 1, "flags": 2},
{"x": 43, "y": 1, "flags": 2},
{"x": 56, "y": 1, "flags": 2},
{"x": 69, "y": 1, "flags": 2},
{"x": 84, "y": 1, "flags": 2},
{"x": 99, "y": 1, "flags": 2},
{"x": 97, "y": 8, "flags": 2},
{"x": 91, "y": 19, "flags": 2},
{"x": 91, "y": 31, "flags": 2},
{"x": 92, "y": 42, "flags": 2},
{"x": 96, "y": 53, "flags": 2},
{"x": 97, "y": 64, "flags": 2},
{"x": 81, "y": 64, "flags": 2},
{"x": 66, "y": 64, "flags": 2},
{"x": 53, "y": 64, "flags": 2},
{"x": 40, "y": 64, "flags": 2},
{"x": 26, "y": 64, "flags": 2},
{"x": 13, "y": 64, "flags": 2},
{"x": 0, "y": 64, "flags": 2},
{"x": 0, "y": 53, "flags": 2},
{"x": 0, "y": 42, "flags": 2},
{"x": 0, "y": 31, "flags": 2},
{"x": 0, "y": 19, "flags": 2},
{"x": 0, "y": 9, "flags": 2},
{"x": 0, "y": 1, "flags": 2},
{"x": 13, "y": 1, "flags": 2},
{"x": 224, "y": 31, "flags": 2},
{"x": 224, "y": 42, "flags": 2},
{"x": 224, "y": 53, "flags": 2},
{"x": 224, "y": 64, "flags": 2},
{"x": 209, "y": 64, "flags": 2},
{"x": 194, "y": 64, "flags": 2},
{"x": 180, "y": 64, "flags": 2},
{"x": 165, "y": 64, "flags": 2},
{"x": 152, "y": 64, "flags": 2},
{"x": 138, "y": 64, "flags": 2},
{"x": 124, "y": 64, "flags": 2},
{"x": 124, "y": 53, "flags": 2},
{"x": 119, "y": 42, "flags": 2},
{"x": 114, "y": 31, "flags": 2},
{"x": 117, "y": 19, "flags": 2},
{"x": 122, "y": 8, "flags": 2},
{"x": 126, "y": 1, "flags": 2},
{"x": 140, "y": 1, "flags": 2},
{"x": 155, "y": 1, "flags": 2},
{"x": 168, "y": 1, "flags": 2},
{"x": 181, "y": 1, "flags": 2},
{"x": 196, "y": 1, "flags": 2},
{"x": 211, "y": 1, "flags": 2},
{"x": 224, "y": 1, "flags": 2},
{"x": 224, "y": 8, "flags": 2},
{"x": 224, "y": 19, "flags": 2}
],
"max_brightness": 128,
"sleep": true,
"split_count": [27, 26]
},
"split": {
"bootmagic": {
"matrix": [6, 6]
},
"enabled": true,
"encoder": {
"right": {
"rotary": [
{"pin_a": "B5", "pin_b": "B4", "resolution": 2}
]
}
},
"handedness": {
"pin": "B9"
},
"matrix_pins": {
"right": {
"cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C14"],
"rows": ["B3", "C10", "C11", "A1", "A0", "B6"]
}
},
"serial": {
"driver": "usart",
"pin": "B10"
},
"soft_serial_speed": 0,
"transport": {
"sync": {
"indicators": true,
"layer_state": true,
"matrix_state": true
},
"watchdog": true
}
},
"url": "https://haver.works/theseus75",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
"vid": "0x6877"
},
"ws2812": {
"driver": "pwm",
"pin": "B7"
},
"layouts": {
"LAYOUT_all": {
"layout": [
{"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0},
{"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0},
{"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0},
{"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0},
{"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0},
{"label": "F5", "matrix": [0, 6], "x": 7, "y": 0},
{"label": "F6", "matrix": [0, 7], "x": 8, "y": 0},
{"label": "F7", "matrix": [6, 0], "x": 10, "y": 0},
{"label": "F8", "matrix": [6, 1], "x": 11, "y": 0},
{"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0},
{"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0},
{"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0},
{"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0},
{"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0},
{"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0},
{"label": "M1", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1},
{"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1},
{"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1},
{"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1},
{"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1},
{"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1},
{"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1},
{"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1},
{"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1},
{"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1},
{"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1},
{"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1},
{"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1},
{"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1},
{"label": "Del", "matrix": [7, 7], "x": 16.5, "y": 1},
{"label": "Home", "matrix": [7, 8], "x": 18, "y": 1},
{"label": "M2", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5},
{"label": "Q", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "W", "matrix": [2, 4], "x": 4, "y": 2},
{"label": "E", "matrix": [2, 5], "x": 5, "y": 2},
{"label": "R", "matrix": [2, 6], "x": 6, "y": 2},
{"label": "T", "matrix": [2, 7], "x": 7, "y": 2},
{"label": "Y", "matrix": [8, 0], "x": 9, "y": 2},
{"label": "U", "matrix": [8, 1], "x": 10, "y": 2},
{"label": "I", "matrix": [8, 2], "x": 11, "y": 2},
{"label": "O", "matrix": [8, 3], "x": 12, "y": 2},
{"label": "P", "matrix": [8, 4], "x": 13, "y": 2},
{"label": "[", "matrix": [8, 5], "x": 14, "y": 2},
{"label": "]", "matrix": [8, 6], "x": 15, "y": 2},
{"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5},
{"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2},
{"label": "M3", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75},
{"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3},
{"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3},
{"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3},
{"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3},
{"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3},
{"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3},
{"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3},
{"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3},
{"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3},
{"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3},
{"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3},
{"label": "NUHS", "matrix": [9, 6], "x": 15.25, "y": 3},
{"label": "Enter", "matrix": [9, 7], "x": 16.25, "y": 3, "w": 1.25},
{"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3},
{"label": "M4", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25},
{"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4},
{"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4},
{"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4},
{"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4},
{"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4},
{"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4},
{"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4},
{"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4},
{"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4},
{"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4},
{"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4},
{"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75},
{"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4},
{"label": "End", "matrix": [10, 8], "x": 18, "y": 4},
{"label": "M5", "matrix": [5, 0], "x": 0, "y": 5},
{"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25},
{"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25},
{"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25},
{"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25},
{"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25},
{"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75},
{"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5},
{"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5},
{"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5},
{"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5},
{"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5},
{"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5}
]
},
"LAYOUT_ansi": {
"layout": [
{"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0},
{"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0},
{"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0},
{"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0},
{"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0},
{"label": "F5", "matrix": [0, 6], "x": 7, "y": 0},
{"label": "F6", "matrix": [0, 7], "x": 8, "y": 0},
{"label": "F7", "matrix": [6, 0], "x": 10, "y": 0},
{"label": "F8", "matrix": [6, 1], "x": 11, "y": 0},
{"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0},
{"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0},
{"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0},
{"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0},
{"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0},
{"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0},
{"label": "M1", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1},
{"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1},
{"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1},
{"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1},
{"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1},
{"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1},
{"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1},
{"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1},
{"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1},
{"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1},
{"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1},
{"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1},
{"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1},
{"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1, "w": 2},
{"label": "Home", "matrix": [7, 8], "x": 18, "y": 1},
{"label": "M2", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5},
{"label": "Q", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "W", "matrix": [2, 4], "x": 4, "y": 2},
{"label": "E", "matrix": [2, 5], "x": 5, "y": 2},
{"label": "R", "matrix": [2, 6], "x": 6, "y": 2},
{"label": "T", "matrix": [2, 7], "x": 7, "y": 2},
{"label": "Y", "matrix": [8, 0], "x": 9, "y": 2},
{"label": "U", "matrix": [8, 1], "x": 10, "y": 2},
{"label": "I", "matrix": [8, 2], "x": 11, "y": 2},
{"label": "O", "matrix": [8, 3], "x": 12, "y": 2},
{"label": "P", "matrix": [8, 4], "x": 13, "y": 2},
{"label": "[", "matrix": [8, 5], "x": 14, "y": 2},
{"label": "]", "matrix": [8, 6], "x": 15, "y": 2},
{"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5},
{"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2},
{"label": "M3", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75},
{"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3},
{"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3},
{"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3},
{"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3},
{"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3},
{"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3},
{"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3},
{"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3},
{"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3},
{"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3},
{"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3},
{"label": "Enter", "matrix": [9, 7], "x": 15.25, "y": 3, "w": 2.25},
{"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3},
{"label": "M4", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 2.25},
{"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4},
{"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4},
{"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4},
{"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4},
{"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4},
{"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4},
{"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4},
{"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4},
{"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4},
{"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4},
{"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75},
{"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4},
{"label": "End", "matrix": [10, 8], "x": 18, "y": 4},
{"label": "M5", "matrix": [5, 0], "x": 0, "y": 5},
{"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25},
{"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25},
{"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25},
{"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25},
{"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25},
{"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75},
{"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5},
{"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5},
{"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5},
{"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5},
{"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5},
{"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5}
]
},
"LAYOUT_iso": {
"layout": [
{"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0},
{"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0},
{"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0},
{"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0},
{"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0},
{"label": "F5", "matrix": [0, 6], "x": 7, "y": 0},
{"label": "F6", "matrix": [0, 7], "x": 8, "y": 0},
{"label": "F7", "matrix": [6, 0], "x": 10, "y": 0},
{"label": "F8", "matrix": [6, 1], "x": 11, "y": 0},
{"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0},
{"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0},
{"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0},
{"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0},
{"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0},
{"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0},
{"label": "M1", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1},
{"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1},
{"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1},
{"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1},
{"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1},
{"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1},
{"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1},
{"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1},
{"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1},
{"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1},
{"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1},
{"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1},
{"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1},
{"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1, "w": 2},
{"label": "Home", "matrix": [7, 8], "x": 18, "y": 1},
{"label": "M2", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5},
{"label": "Q", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "W", "matrix": [2, 4], "x": 4, "y": 2},
{"label": "E", "matrix": [2, 5], "x": 5, "y": 2},
{"label": "R", "matrix": [2, 6], "x": 6, "y": 2},
{"label": "T", "matrix": [2, 7], "x": 7, "y": 2},
{"label": "Y", "matrix": [8, 0], "x": 9, "y": 2},
{"label": "U", "matrix": [8, 1], "x": 10, "y": 2},
{"label": "I", "matrix": [8, 2], "x": 11, "y": 2},
{"label": "O", "matrix": [8, 3], "x": 12, "y": 2},
{"label": "P", "matrix": [8, 4], "x": 13, "y": 2},
{"label": "[", "matrix": [8, 5], "x": 14, "y": 2},
{"label": "]", "matrix": [8, 6], "x": 15, "y": 2},
{"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2},
{"label": "M3", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75},
{"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3},
{"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3},
{"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3},
{"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3},
{"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3},
{"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3},
{"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3},
{"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3},
{"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3},
{"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3},
{"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3},
{"label": "NUHS", "matrix": [9, 6], "x": 15.25, "y": 3},
{"label": "Enter", "matrix": [9, 7], "x": 16.25, "y": 2, "w": 1.25, "h": 2},
{"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3},
{"label": "M4", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25},
{"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4},
{"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4},
{"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4},
{"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4},
{"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4},
{"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4},
{"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4},
{"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4},
{"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4},
{"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4},
{"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4},
{"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75},
{"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4},
{"label": "End", "matrix": [10, 8], "x": 18, "y": 4},
{"label": "M5", "matrix": [5, 0], "x": 0, "y": 5},
{"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25},
{"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25},
{"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25},
{"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25},
{"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25},
{"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75},
{"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5},
{"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5},
{"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5},
{"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5},
{"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5},
{"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5}
]
}
}
}

View File

@@ -0,0 +1,31 @@
// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ansi(
RM_TOGG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_F15, 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_ENT, KC_PGDN,
KC_F16, 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_UP, KC_END,
KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_ansi(
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, KC_TRNS, KC_MPLY,
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, KC_DEL, 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, 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, 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
};
#endif

View File

@@ -0,0 +1 @@
ENCODER_MAP_ENABLE = yes

View File

@@ -0,0 +1,31 @@
// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
RM_TOGG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_F15, 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_NUHS, KC_ENT, KC_PGDN,
KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_all(
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, KC_TRNS, KC_MPLY,
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, 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, 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, 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
};
#endif

View File

@@ -0,0 +1 @@
ENCODER_MAP_ENABLE = yes

View File

@@ -0,0 +1,31 @@
// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_iso(
RM_TOGG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP,
KC_F15, 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_NUHS, KC_ENT, KC_PGDN,
KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_iso(
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, KC_TRNS, KC_MPLY,
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, KC_DEL, 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, 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, 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
};
#endif

View File

@@ -0,0 +1 @@
ENCODER_MAP_ENABLE = yes

View File

@@ -0,0 +1,14 @@
// Copyright 2023 Moritz Plattner (@ebastler)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
/* enable USART3, used for split comms */
#undef STM32_SERIAL_USE_USART3
#define STM32_SERIAL_USE_USART3 TRUE
/* enable TIM3, used for Underglow PWM driver */
#undef STM32_PWM_USE_TIM3
#define STM32_PWM_USE_TIM3 TRUE

View File

@@ -0,0 +1,31 @@
# Haverworks Theseus75
![Theseus75 v1 PCB](https://imgur.com/N81LsCO.png)
The Theseus75 is a 75% row-staggered split keyboard with a macro column and rotary encoders on both sides. Each half features a dual-role USB-C port and integrated USB hub, allowing the unused port to act as a USB-C 2.0 High-Speed host for connecting a numpad, mouse, flash drive, security key, mobile phone, or similar device.
> [!NOTE]
> Up to 5V at 1.5A can be supplied, depending on negotiations with the host.
* Keyboard Maintainers: [Moritz Plattner](https://github.com/ebastler), [Alex Havermale](https://github.com/haversnail)
* Hardware Supported: Haverworks Theseus75 v1 PCBs (hot-swap and solder)
* Hardware Availability: [Group buy](https://haver.works/theseus75)
Make example for this keyboard (after setting up your build environment):
make haverworks/theseus75:default
Flashing example for this keyboard:
make haverworks/theseus75:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in two ways:
* **Physical reset button**: Hold the <kbd>Reset</kbd>/<kbd>Flash</kbd> button on the back of the PCB for approximately one second (instructions are also included on the PCB)
* **Bootmagic reset**:
* **Left half**: Hold down the first key to the right of the encoder (<kbd>Esc</kbd> by default) and plug in the keyboard
* **Right half**: Hold down the first key to the left of the encoder (<kbd>Print Screen</kbd> by default) and plug in the keyboard

View File

@@ -0,0 +1,214 @@
// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
#include "transactions.h"
#include <stdio.h>
#include "print.h"
#include "split_util.h"
#include "usbpd.h"
typedef struct _kb_state_t {
usbpd_allowance_t allowance;
} kb_state_t;
kb_state_t kb_state;
const char* usbpd_str(usbpd_allowance_t allowance) {
switch (allowance) {
case USBPD_500MA:
return "500mA";
case USBPD_1500MA:
return "1500mA";
case USBPD_3000MA:
return "3000mA";
default:
dprintf("Encountered unknown allowance enum value: %d\n", allowance);
return "UNKNOWN";
}
}
void kb_state_slave_handler(uint8_t m2s_size, const void* m2s_buffer, uint8_t s2m_size, void* s2m_buffer) {
if (m2s_size == sizeof(kb_state_t)) {
memcpy(&kb_state, m2s_buffer, sizeof(kb_state_t));
} else {
dprintf("Unexpected response in slave handler\n"); // TODO: add split debug logging
}
}
void keyboard_pre_init_kb(void) {
// Disable the PD peripheral in pre-init because its pins are being used in the matrix:
PWR->CR3 |= PWR_CR3_UCPD_DBDIS;
// Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions)
keyboard_pre_init_user();
}
void keyboard_post_init_kb(void) {
// Register keyboard state transaction:
transaction_register_rpc(RPC_ID_KB_STATE, kb_state_slave_handler);
// Set default state values:
kb_state.allowance = USBPD_500MA;
// If the keyboard is master,
if (is_keyboard_master()) {
// Turn on power to the split half and to underglow LEDs:
gpio_set_pin_output(PSW_PIN);
gpio_write_pin_high(PSW_PIN);
// Enable inputs used for current negotiation:
gpio_set_pin_input_high(USBPD_1_PIN);
gpio_set_pin_input_high(USBPD_2_PIN);
// Not needed in this mode (always high-Z with pull-up on PCB if port controller is sink)
gpio_set_pin_input_high(ID_PIN);
} else {
// Prepare output to enable power for USB output after negotiation:
gpio_set_pin_output(PSW_PIN);
// Switch the USB MUXes between hub and ports:
gpio_set_pin_output(USBSW_PIN);
gpio_write_pin_high(USBSW_PIN);
// Enable outputs used for current negotiation and default to 500mA:
gpio_set_pin_output(USBPD_1_PIN);
gpio_write_pin_high(USBPD_1_PIN);
gpio_set_pin_output(USBPD_2_PIN);
gpio_write_pin_high(USBPD_2_PIN);
// Use ID pin to check if client is detected (if low: USB source port powered):
gpio_set_pin_input_high(ID_PIN);
// Indicate that the hub is either self-powered or bus-powered based on whether the bus-power mode flag is enabled
// (configurable for users who would rather always have their device connect, regardless of whether they meet the specs):
gpio_set_pin_output(BUS_B_PIN);
if (DISABLE_BUS_POWER_MODE == TRUE) {
gpio_write_pin_high(BUS_B_PIN);
} else {
gpio_write_pin_low(BUS_B_PIN);
}
}
// Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions)
keyboard_post_init_user();
}
void housekeeping_task_kb(void) {
// Update any shared kb state to send to slave:
static uint32_t last_usbpd_allowance_check_time = 0;
if (timer_elapsed32(last_usbpd_allowance_check_time) > USBPD_ALLOWANCE_CHECK_INTERVAL) {
// On master side: check USBPD_1_PIN and USBPD_2_PIN to determine current negotiated with host
// (Can't use the usbpd_get_allowance() function, as this uses this uses the native CC PD interface
// of the G series MCU, while we're using dedicated port controllers instead):
if (is_keyboard_master()) {
usbpd_allowance_t allowance;
if (gpio_read_pin(USBPD_1_PIN)) {
allowance = USBPD_500MA;
} else if (gpio_read_pin(USBPD_2_PIN)) {
allowance = USBPD_1500MA;
} else {
allowance = USBPD_3000MA;
}
if (kb_state.allowance != allowance) {
printf("Host negotiated current: %s -> %s\n", usbpd_str(kb_state.allowance), usbpd_str(allowance));
kb_state.allowance = allowance;
}
} else {
// On peripheral side - If ID_PIN is low: USB client negotiated 5V successfully -> enable power routing
// Check if PSW_PIN is not already high to avoid wasting time
if (!gpio_read_pin(ID_PIN) && !gpio_read_pin(PSW_PIN)) {
gpio_write_pin_high(PSW_PIN);
dprintf("USB downstream device connected\n"); // TODO: add split debug logging
} else if (gpio_read_pin(ID_PIN) && gpio_read_pin(PSW_PIN)) {
gpio_write_pin_low(PSW_PIN);
dprintf("USB downstream device disconnected\n"); // TODO: add split debug logging
}
};
last_usbpd_allowance_check_time = timer_read32();
};
// Sync state from master to slave:
if (is_keyboard_master() && is_transport_connected()) {
bool needs_sync = false;
static uint32_t last_kb_state_sync_time;
static kb_state_t last_kb_state;
// Check if the state values are different:
if (memcmp(&kb_state, &last_kb_state, sizeof(kb_state_t))) {
needs_sync = true;
memcpy(&last_kb_state, &kb_state, sizeof(kb_state_t));
}
// Sync state every so often regardless:
if (timer_elapsed32(last_kb_state_sync_time) > KB_STATE_SYNC_INTERVAL) {
needs_sync = true;
}
if (needs_sync) {
bool did_sync = transaction_rpc_send(RPC_ID_KB_STATE, sizeof(kb_state_t), &kb_state);
if (did_sync) {
dprintf("Synced to slave\n");
last_kb_state_sync_time = timer_read32();
} else {
dprintf("Failed to sync state\n");
}
}
}
// Update the USBPD output pins on slave half whenever allowance has changed:
if (!is_keyboard_master()) {
static usbpd_allowance_t last_allowance;
if (last_allowance != kb_state.allowance) {
last_allowance = kb_state.allowance;
printf("Setting USB-PD output to %s (%s-powered)\n", usbpd_str(kb_state.allowance), kb_state.allowance == USBPD_500MA ? "bus" : "self"); // TODO: add split debug logging
switch (kb_state.allowance) {
default:
case USBPD_500MA:
// Set USBPD output to 500 mA:
gpio_write_pin_high(USBPD_1_PIN);
gpio_write_pin_high(USBPD_2_PIN);
if (DISABLE_BUS_POWER_MODE == TRUE) {
// Indicate hub is self-powered and devices can try to connect or fast charge:
gpio_write_pin_high(BUS_B_PIN);
} else {
// Indicate hub is bus-powered and devices should not try to connect or fast charge:
gpio_write_pin_low(BUS_B_PIN);
}
break;
case USBPD_1500MA:
// Set USBPD output to 500 mA:
gpio_write_pin_high(USBPD_1_PIN);
gpio_write_pin_high(USBPD_2_PIN);
// Indicate hub is self-powered and devices can try to connect or fast charge:
gpio_write_pin_high(BUS_B_PIN);
break;
case USBPD_3000MA:
// Set USBPD output to 1500 mA:
gpio_write_pin_low(USBPD_1_PIN);
gpio_write_pin_high(USBPD_2_PIN);
// Indicate hub is self-powered and devices can try to connect or fast charge:
gpio_write_pin_high(BUS_B_PIN);
break;
}
}
}
}
#ifdef RGB_MATRIX_ENABLE
bool rgb_matrix_indicators_kb(void) {
if (!rgb_matrix_indicators_user()) {
return false;
}
if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS);
} else {
rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0);
}
return true;
}
#endif

View File

@@ -0,0 +1,114 @@
{
"manufacturer": "Ryan Chomistek",
"keyboard_name": "leftpaw",
"maintainer": "Ryan Chomistek",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["GP21", "GP22", "GP26", "GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15"],
"rows": ["GP20", "GP19", "GP18", "GP17", "GP16"]
},
"processor": "RP2040",
"url": "https://github.com/RyanChomistek/lefty",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "Num Lock", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "/", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "*", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "-", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "esc", "matrix": [0, 4], "x": 4.25, "y": 0},
{"label": "!", "matrix": [0, 5], "x": 5.25, "y": 0},
{"label": "@", "matrix": [0, 6], "x": 6.25, "y": 0},
{"label": "#", "matrix": [0, 7], "x": 7.25, "y": 0},
{"label": "$", "matrix": [0, 8], "x": 8.25, "y": 0},
{"label": "%", "matrix": [0, 9], "x": 9.25, "y": 0},
{"label": "^", "matrix": [0, 10], "x": 10.25, "y": 0},
{"label": "&", "matrix": [0, 11], "x": 11.25, "y": 0},
{"label": "*", "matrix": [0, 12], "x": 12.25, "y": 0},
{"label": "(", "matrix": [0, 13], "x": 13.25, "y": 0},
{"label": ")", "matrix": [0, 14], "x": 14.25, "y": 0},
{"label": "_", "matrix": [0, 15], "x": 15.25, "y": 0},
{"label": "+", "matrix": [0, 16], "x": 16.25, "y": 0},
{"label": "Backspace", "matrix": [0, 17], "x": 17.25, "y": 0, "w": 2},
{"label": "Pg Up", "matrix": [0, 18], "x": 19.5, "y": 0},
{"label": "7", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "8", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "9", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "+", "matrix": [1, 3], "x": 3, "y": 1, "h": 2},
{"label": "Tab", "matrix": [1, 4], "x": 4.25, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 5], "x": 5.75, "y": 1},
{"label": "W", "matrix": [1, 6], "x": 6.75, "y": 1},
{"label": "E", "matrix": [1, 7], "x": 7.75, "y": 1},
{"label": "R", "matrix": [1, 8], "x": 8.75, "y": 1},
{"label": "T", "matrix": [1, 9], "x": 9.75, "y": 1},
{"label": "Y", "matrix": [1, 10], "x": 10.75, "y": 1},
{"label": "U", "matrix": [1, 11], "x": 11.75, "y": 1},
{"label": "I", "matrix": [1, 12], "x": 12.75, "y": 1},
{"label": "O", "matrix": [1, 13], "x": 13.75, "y": 1},
{"label": "P", "matrix": [1, 14], "x": 14.75, "y": 1},
{"label": "{", "matrix": [1, 15], "x": 15.75, "y": 1},
{"label": "}", "matrix": [1, 16], "x": 16.75, "y": 1},
{"label": "|", "matrix": [1, 17], "x": 17.75, "y": 1, "w": 1.5},
{"label": "Pg Dn", "matrix": [1, 18], "x": 19.5, "y": 1},
{"label": "4", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "5", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "6", "matrix": [2, 2], "x": 2, "y": 2},
{"label": "Caps Lock", "matrix": [2, 4], "x": 4.25, "y": 2, "w": 1.75},
{"label": "A", "matrix": [2, 5], "x": 6, "y": 2},
{"label": "S", "matrix": [2, 6], "x": 7, "y": 2},
{"label": "D", "matrix": [2, 7], "x": 8, "y": 2},
{"label": "F", "matrix": [2, 8], "x": 9, "y": 2},
{"label": "G", "matrix": [2, 9], "x": 10, "y": 2},
{"label": "H", "matrix": [2, 10], "x": 11, "y": 2},
{"label": "J", "matrix": [2, 11], "x": 12, "y": 2},
{"label": "K", "matrix": [2, 12], "x": 13, "y": 2},
{"label": "L", "matrix": [2, 13], "x": 14, "y": 2},
{"label": ":", "matrix": [2, 14], "x": 15, "y": 2},
{"label": "\"", "matrix": [2, 15], "x": 16, "y": 2},
{"label": "Enter", "matrix": [2, 17], "x": 17, "y": 2, "w": 2.25},
{"label": "Delete", "matrix": [2, 18], "x": 19.5, "y": 2},
{"label": "1", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "2", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "3", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "Enter", "matrix": [3, 3], "x": 3, "y": 3, "h": 2},
{"label": "Shift", "matrix": [3, 4], "x": 4.25, "y": 3, "w": 2.25},
{"label": "Z", "matrix": [3, 5], "x": 6.5, "y": 3},
{"label": "X", "matrix": [3, 6], "x": 7.5, "y": 3},
{"label": "C", "matrix": [3, 7], "x": 8.5, "y": 3},
{"label": "V", "matrix": [3, 8], "x": 9.5, "y": 3},
{"label": "B", "matrix": [3, 9], "x": 10.5, "y": 3},
{"label": "N", "matrix": [3, 10], "x": 11.5, "y": 3},
{"label": "M", "matrix": [3, 11], "x": 12.5, "y": 3},
{"label": "<", "matrix": [3, 12], "x": 13.5, "y": 3},
{"label": ">", "matrix": [3, 13], "x": 14.5, "y": 3},
{"label": "?", "matrix": [3, 14], "x": 15.5, "y": 3},
{"label": "Shift", "matrix": [3, 16], "x": 16.5, "y": 3, "w": 1.5},
{"label": "\u2191", "matrix": [3, 17], "x": 18.5, "y": 3.25},
{"label": "0", "matrix": [4, 0], "x": 0, "y": 4, "w": 2},
{"label": ".", "matrix": [4, 2], "x": 2, "y": 4},
{"label": "Ctrl", "matrix": [4, 4], "x": 4.25, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [4, 5], "x": 5.5, "y": 4, "w": 1.25},
{"label": "Alt", "matrix": [4, 6], "x": 6.75, "y": 4, "w": 1.25},
{"matrix": [4, 9], "x": 8, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [4, 13], "x": 14.25, "y": 4},
{"label": "Win", "matrix": [4, 14], "x": 15.25, "y": 4},
{"label": "Ctrl", "matrix": [4, 15], "x": 16.25, "y": 4},
{"label": "\u2190", "matrix": [4, 16], "x": 17.5, "y": 4.25},
{"label": "\u2193", "matrix": [4, 17], "x": 18.5, "y": 4.25},
{"label": "\u2192", "matrix": [4, 18], "x": 19.5, "y": 4.25}
]
}
}
}

View File

@@ -0,0 +1,38 @@
/* Copyright 2025 Ryan Chomistek
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
KC_NUM, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPC, KC_GRAVE,
KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
KC_KP_4, KC_KP_5, KC_KP_6, MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, KC_ENTER, KC_DELETE,
KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RSFT, KC_UP,
KC_KP_0, KC_KP_DOT, KC_LCTL, KC_LWIN, KC_LALT, KC_SPACE, KC_RALT, KC_RWIN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
),
[1] = LAYOUT(
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_PGUP,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_KB_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};

View File

@@ -0,0 +1,25 @@
# leftpaw
A 76% keyboard with a numpad on the left hand side
* Keyboard Maintainer: [Ryan Chomistek](https://github.com/RyanChomistek)
* Hardware Supported: RP2040
* Hardware Availability: [PCB Files](https://github.com/RyanChomistek/lefty) and [Case Files](https://www.printables.com/model/1310397-leftpaw-keyboard)
Make example for this keyboard (after setting up your build environment):
make leftpaw:default
Flashing example for this keyboard:
make leftpaw:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,273 @@
{
"manufacturer": "Lx3",
"keyboard_name": "Fave10xS",
"maintainer": "Freather",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["B10", "A6", "A7", "B0", "B1", "B2", "A13", "B12", "B13", "B14", "B15", "A8", "A9", "A10", "A15", "B3", "B4", "C13", "C14", "C15", "F0"],
"rows": ["A14", "B5", "B7", "B8", "F1", "A0"]
},
"indicators": {
"caps_lock": "B11",
"scroll_lock": "B9",
"num_lock": "B6"
},
"processor": "STM32F072",
"usb": {
"device_version": "1.0.0",
"pid": "0x0100",
"vid": "0x4C58"
},
"community_layouts": ["fullsize_extended_ansi"],
"layouts": {
"LAYOUT_fullsize_extended_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "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": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [0, 8], "x": 8.5, "y": 0},
{"matrix": [0, 9], "x": 9.5, "y": 0},
{"matrix": [0, 10], "x": 11, "y": 0},
{"matrix": [0, 11], "x": 12, "y": 0},
{"matrix": [0, 12], "x": 13, "y": 0},
{"matrix": [0, 13], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [0, 16], "x": 17.25, "y": 0},
{"matrix": [0, 17], "x": 18.5, "y": 0},
{"matrix": [0, 18], "x": 19.5, "y": 0},
{"matrix": [0, 19], "x": 20.5, "y": 0},
{"matrix": [0, 20], "x": 21.5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
{"matrix": [1, 3], "x": 3, "y": 1.25},
{"matrix": [1, 4], "x": 4, "y": 1.25},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [1, 6], "x": 6, "y": 1.25},
{"matrix": [1, 7], "x": 7, "y": 1.25},
{"matrix": [1, 8], "x": 8, "y": 1.25},
{"matrix": [1, 9], "x": 9, "y": 1.25},
{"matrix": [1, 10], "x": 10, "y": 1.25},
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
{"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"matrix": [1, 14], "x": 15.25, "y": 1.25},
{"matrix": [1, 15], "x": 16.25, "y": 1.25},
{"matrix": [1, 16], "x": 17.25, "y": 1.25},
{"matrix": [1, 17], "x": 18.5, "y": 1.25},
{"matrix": [1, 18], "x": 19.5, "y": 1.25},
{"matrix": [1, 19], "x": 20.5, "y": 1.25},
{"matrix": [1, 20], "x": 21.5, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
{"matrix": [2, 3], "x": 3.5, "y": 2.25},
{"matrix": [2, 4], "x": 4.5, "y": 2.25},
{"matrix": [2, 5], "x": 5.5, "y": 2.25},
{"matrix": [2, 6], "x": 6.5, "y": 2.25},
{"matrix": [2, 7], "x": 7.5, "y": 2.25},
{"matrix": [2, 8], "x": 8.5, "y": 2.25},
{"matrix": [2, 9], "x": 9.5, "y": 2.25},
{"matrix": [2, 10], "x": 10.5, "y": 2.25},
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
{"matrix": [3, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"matrix": [2, 14], "x": 15.25, "y": 2.25},
{"matrix": [2, 15], "x": 16.25, "y": 2.25},
{"matrix": [2, 16], "x": 17.25, "y": 2.25},
{"matrix": [2, 17], "x": 18.5, "y": 2.25},
{"matrix": [2, 18], "x": 19.5, "y": 2.25},
{"matrix": [2, 19], "x": 20.5, "y": 2.25},
{"matrix": [2, 20], "x": 21.5, "y": 2.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
{"matrix": [3, 3], "x": 3.75, "y": 3.25},
{"matrix": [3, 4], "x": 4.75, "y": 3.25},
{"matrix": [3, 5], "x": 5.75, "y": 3.25},
{"matrix": [3, 6], "x": 6.75, "y": 3.25},
{"matrix": [3, 7], "x": 7.75, "y": 3.25},
{"matrix": [3, 8], "x": 8.75, "y": 3.25},
{"matrix": [3, 9], "x": 9.75, "y": 3.25},
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
{"matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
{"matrix": [3, 17], "x": 18.5, "y": 3.25},
{"matrix": [3, 18], "x": 19.5, "y": 3.25},
{"matrix": [3, 19], "x": 20.5, "y": 3.25},
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
{"matrix": [4, 5], "x": 5.25, "y": 4.25},
{"matrix": [4, 6], "x": 6.25, "y": 4.25},
{"matrix": [4, 7], "x": 7.25, "y": 4.25},
{"matrix": [4, 8], "x": 8.25, "y": 4.25},
{"matrix": [4, 9], "x": 9.25, "y": 4.25},
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
{"matrix": [4, 15], "x": 16.25, "y": 4.25},
{"matrix": [4, 17], "x": 18.5, "y": 4.25},
{"matrix": [4, 18], "x": 19.5, "y": 4.25},
{"matrix": [4, 19], "x": 20.5, "y": 4.25},
{"matrix": [4, 20], "x": 21.5, "y": 4.25, "h": 2},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 14], "x": 15.25, "y": 5.25},
{"matrix": [5, 15], "x": 16.25, "y": 5.25},
{"matrix": [5, 16], "x": 17.25, "y": 5.25},
{"matrix": [5, 17], "x": 18.5, "y": 5.25, "w": 2},
{"matrix": [5, 19], "x": 20.5, "y": 5.25}
]
},
"LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "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": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [0, 8], "x": 8.5, "y": 0},
{"matrix": [0, 9], "x": 9.5, "y": 0},
{"matrix": [0, 10], "x": 11, "y": 0},
{"matrix": [0, 11], "x": 12, "y": 0},
{"matrix": [0, 12], "x": 13, "y": 0},
{"matrix": [0, 13], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [0, 16], "x": 17.25, "y": 0},
{"matrix": [0, 17], "x": 18.5, "y": 0},
{"matrix": [0, 18], "x": 19.5, "y": 0},
{"matrix": [0, 19], "x": 20.5, "y": 0},
{"matrix": [0, 20], "x": 21.5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
{"matrix": [1, 3], "x": 3, "y": 1.25},
{"matrix": [1, 4], "x": 4, "y": 1.25},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [1, 6], "x": 6, "y": 1.25},
{"matrix": [1, 7], "x": 7, "y": 1.25},
{"matrix": [1, 8], "x": 8, "y": 1.25},
{"matrix": [1, 9], "x": 9, "y": 1.25},
{"matrix": [1, 10], "x": 10, "y": 1.25},
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
{"matrix": [1, 13], "x": 13, "y": 1.25},
{"matrix": [2, 13], "x": 14, "y": 1.25},
{"matrix": [1, 14], "x": 15.25, "y": 1.25},
{"matrix": [1, 15], "x": 16.25, "y": 1.25},
{"matrix": [1, 16], "x": 17.25, "y": 1.25},
{"matrix": [1, 17], "x": 18.5, "y": 1.25},
{"matrix": [1, 18], "x": 19.5, "y": 1.25},
{"matrix": [1, 19], "x": 20.5, "y": 1.25},
{"matrix": [1, 20], "x": 21.5, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
{"matrix": [2, 3], "x": 3.5, "y": 2.25},
{"matrix": [2, 4], "x": 4.5, "y": 2.25},
{"matrix": [2, 5], "x": 5.5, "y": 2.25},
{"matrix": [2, 6], "x": 6.5, "y": 2.25},
{"matrix": [2, 7], "x": 7.5, "y": 2.25},
{"matrix": [2, 8], "x": 8.5, "y": 2.25},
{"matrix": [2, 9], "x": 9.5, "y": 2.25},
{"matrix": [2, 10], "x": 10.5, "y": 2.25},
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
{"matrix": [3, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"matrix": [2, 14], "x": 15.25, "y": 2.25},
{"matrix": [2, 15], "x": 16.25, "y": 2.25},
{"matrix": [2, 16], "x": 17.25, "y": 2.25},
{"matrix": [2, 17], "x": 18.5, "y": 2.25},
{"matrix": [2, 18], "x": 19.5, "y": 2.25},
{"matrix": [2, 19], "x": 20.5, "y": 2.25},
{"matrix": [2, 20], "x": 21.5, "y": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
{"matrix": [3, 3], "x": 3.75, "y": 3.25},
{"matrix": [3, 4], "x": 4.75, "y": 3.25},
{"matrix": [3, 5], "x": 5.75, "y": 3.25},
{"matrix": [3, 6], "x": 6.75, "y": 3.25},
{"matrix": [3, 7], "x": 7.75, "y": 3.25},
{"matrix": [3, 8], "x": 8.75, "y": 3.25},
{"matrix": [3, 9], "x": 9.75, "y": 3.25},
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
{"matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
{"matrix": [3, 17], "x": 18.5, "y": 3.25},
{"matrix": [3, 18], "x": 19.5, "y": 3.25},
{"matrix": [3, 19], "x": 20.5, "y": 3.25},
{"matrix": [3, 20], "x": 21.5, "y": 3.25},
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
{"matrix": [4, 5], "x": 5.25, "y": 4.25},
{"matrix": [4, 6], "x": 6.25, "y": 4.25},
{"matrix": [4, 7], "x": 7.25, "y": 4.25},
{"matrix": [4, 8], "x": 8.25, "y": 4.25},
{"matrix": [4, 9], "x": 9.25, "y": 4.25},
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
{"matrix": [4, 13], "x": 14, "y": 4.25},
{"matrix": [4, 15], "x": 16.25, "y": 4.25},
{"matrix": [4, 17], "x": 18.5, "y": 4.25},
{"matrix": [4, 18], "x": 19.5, "y": 4.25},
{"matrix": [4, 19], "x": 20.5, "y": 4.25},
{"matrix": [4, 20], "x": 21.5, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 4], "x": 3.75, "y": 5.25, "w": 2.25},
{"matrix": [5, 6], "x": 6, "y": 5.25, "w": 1.25},
{"matrix": [5, 8], "x": 7.25, "y": 5.25, "w": 2.75},
{"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 14], "x": 15.25, "y": 5.25},
{"matrix": [5, 15], "x": 16.25, "y": 5.25},
{"matrix": [5, 16], "x": 17.25, "y": 5.25},
{"matrix": [5, 17], "x": 18.5, "y": 5.25},
{"matrix": [5, 18], "x": 19.5, "y": 5.25},
{"matrix": [5, 19], "x": 20.5, "y": 5.25},
{"matrix": [5, 20], "x": 21.5, "y": 5.25}
]
}
}
}

View File

@@ -0,0 +1,15 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_MNXT, KC_MPRV, KC_VOLU, KC_VOLD,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TILD, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
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_ENT, KC_P4, KC_P5, KC_P6, KC_PENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_P0, KC_PDOT, KC_PCMM
)
};

View File

@@ -0,0 +1,27 @@
# fave10xs
![fave10xs](https://i.imgur.com/o4pq0mV.png)
Dolphin max PCB solder version Fave10xs
* Keyboard Maintainer: [Freather](https://github.com/Freather)
* Hardware Supported: STM32F072 Linworks Fave10xs PCB
* Hardware Availability: small gb ran in Asia
Make example for this keyboard (after setting up your build environment):
make linworks/fave10xs:default
Flashing example for this keyboard:
make linworks/fave10xs:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Hold the button on the back of the PCB then plug in the PCB with USB cable
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -40,12 +40,12 @@
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [5, 5], "x": 0, "y": 5},
{"matrix": [5, 4], "x": 1, "y": 5},
{"matrix": [5, 3], "x": 2, "y": 5},
{"matrix": [5, 2], "x": 3, "y": 5},
{"matrix": [5, 1], "x": 4, "y": 5},
{"matrix": [5, 0], "x": 5, "y": 5},
{"matrix": [5, 5], "x": 7, "y": 0},
{"matrix": [5, 4], "x": 8, "y": 0},
{"matrix": [5, 3], "x": 9, "y": 0},
{"matrix": [5, 2], "x": 10, "y": 0},
{"matrix": [5, 1], "x": 11, "y": 0},
{"matrix": [5, 0], "x": 12, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
@@ -55,12 +55,12 @@
{"matrix": [1, 4], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
{"matrix": [6, 5], "x": 0, "y": 6},
{"matrix": [6, 4], "x": 1, "y": 6},
{"matrix": [6, 3], "x": 2, "y": 6},
{"matrix": [6, 2], "x": 3, "y": 6},
{"matrix": [6, 1], "x": 4, "y": 6},
{"matrix": [6, 0], "x": 5, "y": 6},
{"matrix": [6, 5], "x": 7, "y": 1},
{"matrix": [6, 4], "x": 8, "y": 1},
{"matrix": [6, 3], "x": 9, "y": 1},
{"matrix": [6, 2], "x": 10, "y": 1},
{"matrix": [6, 1], "x": 11, "y": 1},
{"matrix": [6, 0], "x": 12, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
@@ -69,12 +69,12 @@
{"matrix": [2, 4], "x": 4, "y": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
{"matrix": [7, 5], "x": 0, "y": 7},
{"matrix": [7, 4], "x": 1, "y": 7},
{"matrix": [7, 3], "x": 2, "y": 7},
{"matrix": [7, 2], "x": 3, "y": 7},
{"matrix": [7, 1], "x": 4, "y": 7},
{"matrix": [7, 0], "x": 5, "y": 7},
{"matrix": [7, 5], "x": 7, "y": 2},
{"matrix": [7, 4], "x": 8, "y": 2},
{"matrix": [7, 3], "x": 9, "y": 2},
{"matrix": [7, 2], "x": 10, "y": 2},
{"matrix": [7, 1], "x": 11, "y": 2},
{"matrix": [7, 0], "x": 12, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
@@ -83,22 +83,20 @@
{"matrix": [3, 4], "x": 4, "y": 3},
{"matrix": [3, 5], "x": 5, "y": 3},
{"matrix": [8, 5], "x": 0, "y": 9},
{"matrix": [8, 4], "x": 1, "y": 9},
{"matrix": [8, 3], "x": 2, "y": 9},
{"matrix": [8, 2], "x": 3, "y": 9},
{"matrix": [8, 1], "x": 4, "y": 9},
{"matrix": [8, 0], "x": 5, "y": 9},
{"matrix": [8, 5], "x": 7, "y": 3},
{"matrix": [8, 4], "x": 8, "y": 3},
{"matrix": [8, 3], "x": 9, "y": 3},
{"matrix": [8, 2], "x": 10, "y": 3},
{"matrix": [8, 1], "x": 11, "y": 3},
{"matrix": [8, 0], "x": 12, "y": 3},
{"matrix": [4, 3], "x": 3, "y": 4},
{"matrix": [4, 4], "x": 4, "y": 4},
{"matrix": [4, 5], "x": 5, "y": 4},
{"matrix": [9, 5], "x": 3, "y": 9},
{"matrix": [9, 4], "x": 4, "y": 9},
{"matrix": [9, 3], "x": 5, "y": 9}
{"matrix": [9, 5], "x": 7, "y": 4},
{"matrix": [9, 4], "x": 8, "y": 4},
{"matrix": [9, 3], "x": 9, "y": 4}
]
}
}