Merge remote-tracking branch 'upstream/master' into bootstrap

This commit is contained in:
Nick Brassel 2025-04-02 16:41:10 +11:00
commit 1e80179941
No known key found for this signature in database
70 changed files with 2382 additions and 46 deletions

View File

@ -15,6 +15,7 @@ on:
- quantum/**/*
- tests/**/*
- tmk_core/**/*
- lib/python/**/*
- util/**/*
- Makefile
- '*.mk'

View File

@ -1,7 +1,7 @@
{
"license": "GPL-2.0-or-later",
"devDependencies": {
"vite": "^5.4.12",
"vite": "^5.4.15",
"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.12:
version "5.4.12"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.12.tgz#627d12ff06de3942557dfe8632fd712a12a072c7"
integrity sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA==
vite@^5.2.9, vite@^5.4.15:
version "5.4.15"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.15.tgz#2941547f10ebb4bf9b0fa0da863c06711eb7e5e5"
integrity sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.43"

View File

@ -40,7 +40,7 @@ cd /path/to/your/external/userspace
mkdir -p modules
# Replace the following {user} and {repo} with the author's community module repository
git submodule add https://github.com/{user}/{repo}.git modules/{user}
git submdule update --init --recursive
git submodule update --init --recursive
```
This will ensure the copy of the module is made in your userspace.

View File

@ -444,7 +444,7 @@ This setting implies that `RGBLIGHT_SPLIT` is enabled, and will forcibly enable
#define SPLIT_USB_DETECT
```
Enabling this option changes the startup behavior to listen for an active USB communication to delegate which part is master and which is slave. With this option enabled and theres's USB communication, then that half assumes it is the master, otherwise it assumes it is the slave.
Enabling this option changes the startup behavior to listen for an active USB communication to delegate which part is master and which is slave. With this option enabled and active USB communication, then that half assumes it is the master, otherwise it assumes it is the slave.
Without this option, the master is the half that can detect voltage on the physical USB connection (VBUS detection).

View File

@ -0,0 +1,34 @@
{
"manufacturer": "mikiya418",
"keyboard_name": "5keys",
"maintainer": "mikiya418",
"development_board": "promicro",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": false
},
"matrix_pins": {
"direct": [
["F4","F5","F6","F7","B1"]
]
},
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
"vid": "0x4D4B"
},
"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}
]
}
}
}

View File

@ -0,0 +1,21 @@
/* Copylight 2024 mikiya418.
*
* 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 3 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 <https://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_WBAK, KC_WFWD, LSG_T(KC_S), G(KC_L), MO(1)
)
};

27
keyboards/5keys/readme.md Normal file
View File

@ -0,0 +1,27 @@
# 5keys
![5keys](https://imgur.com/yOkI4HT)
This keyboard is a macro keyboard with five keys.
* Keyboard Maintainer: [mikiya418](https://github.com/mikiya418)
* Hardware Supported: 5keys PCBs, Pro Micro
* Hardware Availability: [Thingiverse](https://www.thingiverse.com/thing:6834908)
Make example for this keyboard (after setting up your build environment):
make 5keys:default
Flashing example for this keyboard:
make 5keys: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,53 @@
{
"manufacturer": "Raspberry Pi",
"keyboard_name": "DirectPins Pico Pad 21 keys RP2040",
"maintainer": "icyavocado",
"bootloader": "rp2040",
"usb": {
"vid": "0x2326",
"pid": "0xFEED",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true
},
"processor": "RP2040",
"matrix_pins": {
"direct": [
[ "GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6" ],
[ "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13"],
[ "GP14", "GP16", "GP17", "GP18", "GP19", "GP20", "GP21"]
]
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "GP0", "x": 0, "y": 0, "matrix": [0, 0]},
{"label": "GP1", "x": 0, "y": 1, "matrix": [0, 1]},
{"label": "GP2", "x": 0, "y": 2, "matrix": [0, 2]},
{"label": "GP3", "x": 0, "y": 3, "matrix": [0, 3]},
{"label": "GP4", "x": 0, "y": 4, "matrix": [0, 4]},
{"label": "GP5", "x": 0, "y": 5, "matrix": [0, 5]},
{"label": "GP6", "x": 0, "y": 6, "matrix": [0, 6]},
{"label": "GP7", "x": 1, "y": 0, "matrix": [1, 0]},
{"label": "GP8", "x": 1, "y": 1, "matrix": [1, 1]},
{"label": "GP9", "x": 1, "y": 2, "matrix": [1, 2]},
{"label": "GP10", "x": 1, "y": 3, "matrix": [1, 3]},
{"label": "GP11", "x": 1, "y": 4, "matrix": [1, 4]},
{"label": "GP12", "x": 1, "y": 5, "matrix": [1, 5]},
{"label": "GP13", "x": 1, "y": 6, "matrix": [1, 6]},
{"label": "GP14", "x": 2, "y": 0, "matrix": [2, 0]},
{"label": "GP16", "x": 2, "y": 1, "matrix": [2, 1]},
{"label": "GP17", "x": 2, "y": 2, "matrix": [2, 2]},
{"label": "GP18", "x": 2, "y": 3, "matrix": [2, 3]},
{"label": "GP19", "x": 2, "y": 4, "matrix": [2, 4]},
{"label": "GP20", "x": 2, "y": 5, "matrix": [2, 5]},
{"label": "GP21", "x": 2, "y": 6, "matrix": [2, 6]}
]
}
}
}

View File

@ -0,0 +1,12 @@
{
"keyboard": "adafruit/pico_pad",
"keymap": "default",
"layout": "LAYOUT",
"layers": [
[
"KC_A", "KC_B", "KC_C", "KC_D", "KC_E", "KC_F", "KC_G",
"KC_H", "KC_I", "KC_J", "KC_K", "KC_L", "KC_M", "KC_N",
"KC_O", "KC_P", "KC_Q", "KC_R", "KC_S", "KC_T", "KC_U"
]
]
}

View File

@ -0,0 +1,25 @@
# PICO PAD
![PICO PAD](https://imgur.com/Nl4tZPl.jpg)
A RP2040 powered direct pins QMK keyboard in 3x7 layout.
A guide can be found here: [Pico Mechanical Keyboard](https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/overview)
* Keyboard Maintainer: [IcyAvocado](https://github.com/icyavocado)
* Hardware Supported: [Pico 1 Microcontrollers - RP2040](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#pico-1-family)
* Hardware Availability: [The PiHut](https://thepihut.com/products/raspberry-pi-pico) | [Adafruit Parts](https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/overview)
Make example for this board (after setting up your build environment):
```sh
qmk compile -kb adafruit/pico_pad -km default
```
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:
* **Physical reset button**: Briefly press the reset button on the left of the PCB - some may have pads you must short instead
* **Boot button**: Press and hold the BOOTSEL button on the pico when powered on

View File

@ -48,6 +48,11 @@ ble_capslock_t ble_capslock = {._dummy = {0}, .caps_lock = false};
static uint8_t led_enabled = 1;
#endif
void mcu_reset(void) {
__disable_irq();
NVIC_SystemReset();
}
void bootloader_jump(void) {
// Send msg to shine to boot into IAP
ap2_set_IAP();

View File

@ -12,8 +12,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, 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_GRV, KC_INS, KC_HOME, KC_PGUP,
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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, MO(1), KC_LGUI, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN1] = LAYOUT_all(

View File

@ -11,8 +11,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, 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_GRV, KC_INS, KC_HOME, KC_PGUP,
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_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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, MO(1), KC_LGUI, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
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, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN1] = LAYOUT_all(

View File

@ -235,6 +235,75 @@
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_tsangan": {
"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": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 12], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 5], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@ -0,0 +1,70 @@
/* Copyright 2019 /u/KeepItUnder
*
* 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
// LAYERS
enum Layer {
_QWERTY = 0, // Standard QWERTY layer
_FUNCTION, // Function key layer
_COLOUR // RGB key layer
};
#define _QW _QWERTY
#define _FN _FUNCTION
#define _CLR _COLOUR
/*
*
* Esc 1 2 3 4 5 6 7 8 9 0 - = Backsp
*
* Tab Q W E R T Y U I O P [ ] \
*
* Caps A S D F G H J K L ; ' Enter
*
* Shift Z X C V B N M , . / Shift Fn
*
* CtrlGUI Alt Alt GUI Ctrl
*
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_60_ansi_tsangan(
// 2 3 4 5 6 7 8 9 10 11 12 13 14
QK_GESC, 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_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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[_FUNCTION] = LAYOUT_60_ansi_tsangan(
// 2 3 4 5 6 7 8 9 10 11 12 13 14
KC_GRV, 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_DEL,
_______, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, _______, KC_INS, _______, KC_UP, KC_PAUS, KC_PGUP, KC_HOME, KC_PSCR, _______,
_______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, KC_SCRL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END, KC_ENT,
_______, _______, KC_APP, _______, _______, _______, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
_______, KC_APP, MO(_CLR), _______, KC_APP, _______, _______
),
[_COLOUR] = LAYOUT_60_ansi_tsangan(
// 2 3 4 5 6 7 8 9 10 11 12 13 14
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, RM_NEXT, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RM_HUEU, RM_SATU, RM_VALU, RM_SPDU, _______, _______, _______, _______, _______, _______, _______,
_______, RM_HUED, RM_SATD, RM_VALD, RM_SPDD, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, RM_TOGG, _______, _______, _______
),
};

View File

@ -0,0 +1,363 @@
{
"manufacturer": "Henrik O. S\u00f8rensen",
"keyboard_name": "AT101ish",
"maintainer": "qmk",
"bootloader": "halfkay",
"diode_direction": "ROW2COL",
"features": {
"bootmagic": true,
"command": true,
"console": true,
"extrakey": true,
"nkro": true
},
"indicators": {
"caps_lock": "D6",
"num_lock": "D4",
"scroll_lock": "E6"
},
"matrix_pins": {
"cols": ["D7", "B4", "B5", "B6", "F7", "F6", "F5", "F4", "F1", "F0"],
"rows": ["B1", "B0", "B2", "D5", "B3", "C7", "B7", "C6", "D0", "D3", "D1", "D2"]
},
"processor": "atmega32u4",
"tags": ["at101", "at102", "bigfoot"],
"url": "https://github.com/henrikosorensen/keyboard_pcbs/tree/master/at101_pcb",
"usb": {
"device_version": "1.1.0",
"pid": "0x0101",
"vid": "0xFEED"
},
"community_layouts": ["fullsize_ansi", "fullsize_iso"],
"layouts": {
"LAYOUT_all": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [1, 0], "x": 12, "y": 0},
{"label": "F11", "matrix": [1, 1], "x": 13, "y": 0},
{"label": "F12", "matrix": [1, 2], "x": 14, "y": 0},
{"label": "PrtSc", "matrix": [1, 3], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [1, 4], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [1, 5], "x": 17.25, "y": 0},
{"label": "\u00ac", "matrix": [2, 0], "x": 0, "y": 1.5},
{"label": "!", "matrix": [2, 1], "x": 1, "y": 1.5},
{"label": "\"", "matrix": [2, 2], "x": 2, "y": 1.5},
{"label": "\u00a3", "matrix": [2, 3], "x": 3, "y": 1.5},
{"label": "$", "matrix": [2, 4], "x": 4, "y": 1.5},
{"label": "%", "matrix": [2, 5], "x": 5, "y": 1.5},
{"label": "^", "matrix": [2, 6], "x": 6, "y": 1.5},
{"label": "&", "matrix": [2, 7], "x": 7, "y": 1.5},
{"label": "*", "matrix": [2, 8], "x": 8, "y": 1.5},
{"label": "(", "matrix": [2, 9], "x": 9, "y": 1.5},
{"label": ")", "matrix": [3, 0], "x": 10, "y": 1.5},
{"label": "_", "matrix": [3, 1], "x": 11, "y": 1.5},
{"label": "+", "matrix": [3, 2], "x": 12, "y": 1.5},
{"label": "Backspace", "matrix": [3, 3], "x": 13, "y": 1.5, "w": 2},
{"label": "Insert", "matrix": [3, 4], "x": 15.25, "y": 1.5},
{"label": "Home", "matrix": [3, 5], "x": 16.25, "y": 1.5},
{"label": "PgUp", "matrix": [3, 6], "x": 17.25, "y": 1.5},
{"label": "Num Lock", "matrix": [3, 7], "x": 18.5, "y": 1.5},
{"label": "/", "matrix": [3, 8], "x": 19.5, "y": 1.5},
{"label": "*", "matrix": [3, 9], "x": 20.5, "y": 1.5},
{"label": "-", "matrix": [1, 9], "x": 21.5, "y": 1.5},
{"label": "Tab", "matrix": [4, 0], "x": 0, "y": 2.5, "w": 1.5},
{"label": "Q", "matrix": [4, 1], "x": 1.5, "y": 2.5},
{"label": "W", "matrix": [4, 2], "x": 2.5, "y": 2.5},
{"label": "E", "matrix": [4, 3], "x": 3.5, "y": 2.5},
{"label": "R", "matrix": [4, 4], "x": 4.5, "y": 2.5},
{"label": "T", "matrix": [4, 5], "x": 5.5, "y": 2.5},
{"label": "Y", "matrix": [4, 6], "x": 6.5, "y": 2.5},
{"label": "U", "matrix": [4, 7], "x": 7.5, "y": 2.5},
{"label": "I", "matrix": [4, 8], "x": 8.5, "y": 2.5},
{"label": "O", "matrix": [4, 9], "x": 9.5, "y": 2.5},
{"label": "P", "matrix": [5, 0], "x": 10.5, "y": 2.5},
{"label": "{", "matrix": [5, 1], "x": 11.5, "y": 2.5},
{"label": "}", "matrix": [5, 2], "x": 12.5, "y": 2.5},
{"label": "|", "matrix": [5, 3], "x": 13.5, "y": 2.5, "w": 1.5},
{"label": "Delete", "matrix": [5, 4], "x": 15.25, "y": 2.5},
{"label": "End", "matrix": [5, 5], "x": 16.25, "y": 2.5},
{"label": "PgDn", "matrix": [5, 6], "x": 17.25, "y": 2.5},
{"label": "7", "matrix": [5, 7], "x": 18.5, "y": 2.5},
{"label": "8", "matrix": [5, 8], "x": 19.5, "y": 2.5},
{"label": "9", "matrix": [5, 9], "x": 20.5, "y": 2.5},
{"label": "+", "matrix": [1, 8], "x": 21.5, "y": 2.5},
{"label": "Caps Lock", "matrix": [6, 0], "x": 0, "y": 3.5, "w": 1.75},
{"label": "A", "matrix": [6, 1], "x": 1.75, "y": 3.5},
{"label": "S", "matrix": [6, 2], "x": 2.75, "y": 3.5},
{"label": "D", "matrix": [6, 3], "x": 3.75, "y": 3.5},
{"label": "F", "matrix": [6, 4], "x": 4.75, "y": 3.5},
{"label": "G", "matrix": [6, 5], "x": 5.75, "y": 3.5},
{"label": "H", "matrix": [6, 6], "x": 6.75, "y": 3.5},
{"label": "J", "matrix": [6, 7], "x": 7.75, "y": 3.5},
{"label": "K", "matrix": [6, 8], "x": 8.75, "y": 3.5},
{"label": "L", "matrix": [6, 9], "x": 9.75, "y": 3.5},
{"label": ":", "matrix": [7, 0], "x": 10.75, "y": 3.5},
{"label": "@", "matrix": [7, 1], "x": 11.75, "y": 3.5},
{"label": "~", "matrix": [7, 2], "x": 12.75, "y": 3.5},
{"label": "Enter", "matrix": [7, 3], "x": 13.75, "y": 3.5, "w": 1.25},
{"label": "4", "matrix": [7, 6], "x": 18.5, "y": 3.5},
{"label": "5", "matrix": [7, 7], "x": 19.5, "y": 3.5},
{"label": "6", "matrix": [7, 8], "x": 20.5, "y": 3.5},
{"label": "=", "matrix": [7, 9], "x": 21.5, "y": 3.5},
{"label": "Shift", "matrix": [8, 0], "x": 0, "y": 4.5, "w": 1.25},
{"label": "|", "matrix": [8, 1], "x": 1.25, "y": 4.5},
{"label": "Z", "matrix": [8, 2], "x": 2.25, "y": 4.5},
{"label": "X", "matrix": [8, 3], "x": 3.25, "y": 4.5},
{"label": "C", "matrix": [8, 4], "x": 4.25, "y": 4.5},
{"label": "V", "matrix": [8, 5], "x": 5.25, "y": 4.5},
{"label": "B", "matrix": [8, 6], "x": 6.25, "y": 4.5},
{"label": "N", "matrix": [8, 7], "x": 7.25, "y": 4.5},
{"label": "M", "matrix": [8, 8], "x": 8.25, "y": 4.5},
{"label": "<", "matrix": [8, 9], "x": 9.25, "y": 4.5},
{"label": ">", "matrix": [9, 0], "x": 10.25, "y": 4.5},
{"label": "?", "matrix": [9, 1], "x": 11.25, "y": 4.5},
{"label": "Shift", "matrix": [9, 2], "x": 12.25, "y": 4.5, "w": 1.75},
{"label": "|", "matrix": [9, 3], "x": 14, "y": 4.5},
{"label": "\u2191", "matrix": [9, 4], "x": 16.25, "y": 4.5},
{"label": "1", "matrix": [9, 6], "x": 18.5, "y": 4.5},
{"label": "2", "matrix": [9, 7], "x": 19.5, "y": 4.5},
{"label": "3", "matrix": [9, 8], "x": 20.5, "y": 4.5},
{"label": "Enter", "matrix": [9, 9], "x": 21.5, "y": 4.5, "h": 2},
{"label": "Ctrl", "matrix": [10, 0], "x": 0, "y": 5.5, "w": 1.25},
{"label": "Win", "matrix": [10, 1], "x": 1.25, "y": 5.5, "w": 1.25},
{"label": "Alt", "matrix": [10, 2], "x": 2.5, "y": 5.5, "w": 1.25},
{"label": " ", "matrix": [10, 7], "x": 3.75, "y": 5.5, "w": 6.25},
{"label": "AltGr ", "matrix": [11, 0], "x": 10, "y": 5.5, "w": 1.25},
{"label": "Win", "matrix": [11, 1], "x": 11.25, "y": 5.5, "w": 1.25},
{"label": "Menu", "matrix": [11, 2], "x": 12.5, "y": 5.5, "w": 1.25},
{"label": "Ctrl", "matrix": [11, 3], "x": 13.75, "y": 5.5, "w": 1.25},
{"label": "\u2190", "matrix": [11, 4], "x": 15.25, "y": 5.5},
{"label": "\u2193", "matrix": [11, 5], "x": 16.25, "y": 5.5},
{"label": "\u2192", "matrix": [11, 6], "x": 17.25, "y": 5.5},
{"label": "0", "matrix": [11, 7], "x": 18.5, "y": 5.5, "w": 2},
{"label": ".", "matrix": [11, 8], "x": 20.5, "y": 5.5}
]
},
"LAYOUT_fullsize_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 2, "y": 0},
{"matrix": [0, 2], "x": 3, "y": 0},
{"matrix": [0, 3], "x": 4, "y": 0},
{"matrix": [0, 4], "x": 5, "y": 0},
{"matrix": [0, 5], "x": 6.5, "y": 0},
{"matrix": [0, 6], "x": 7.5, "y": 0},
{"matrix": [0, 7], "x": 8.5, "y": 0},
{"matrix": [0, 8], "x": 9.5, "y": 0},
{"matrix": [0, 9], "x": 11, "y": 0},
{"matrix": [1, 0], "x": 12, "y": 0},
{"matrix": [1, 1], "x": 13, "y": 0},
{"matrix": [1, 2], "x": 14, "y": 0},
{"matrix": [1, 3], "x": 15.25, "y": 0},
{"matrix": [1, 4], "x": 16.25, "y": 0},
{"matrix": [1, 5], "x": 17.25, "y": 0},
{"matrix": [2, 0], "x": 0, "y": 1.5},
{"matrix": [2, 1], "x": 1, "y": 1.5},
{"matrix": [2, 2], "x": 2, "y": 1.5},
{"matrix": [2, 3], "x": 3, "y": 1.5},
{"matrix": [2, 4], "x": 4, "y": 1.5},
{"matrix": [2, 5], "x": 5, "y": 1.5},
{"matrix": [2, 6], "x": 6, "y": 1.5},
{"matrix": [2, 7], "x": 7, "y": 1.5},
{"matrix": [2, 8], "x": 8, "y": 1.5},
{"matrix": [2, 9], "x": 9, "y": 1.5},
{"matrix": [3, 0], "x": 10, "y": 1.5},
{"matrix": [3, 1], "x": 11, "y": 1.5},
{"matrix": [3, 2], "x": 12, "y": 1.5},
{"matrix": [3, 3], "x": 13, "y": 1.5, "w": 2},
{"matrix": [3, 4], "x": 15.25, "y": 1.5},
{"matrix": [3, 5], "x": 16.25, "y": 1.5},
{"matrix": [3, 6], "x": 17.25, "y": 1.5},
{"matrix": [3, 7], "x": 18.5, "y": 1.5},
{"matrix": [3, 8], "x": 19.5, "y": 1.5},
{"matrix": [3, 9], "x": 20.5, "y": 1.5},
{"matrix": [1, 9], "x": 21.5, "y": 1.5},
{"matrix": [4, 0], "x": 0, "y": 2.5, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 2.5},
{"matrix": [4, 2], "x": 2.5, "y": 2.5},
{"matrix": [4, 3], "x": 3.5, "y": 2.5},
{"matrix": [4, 4], "x": 4.5, "y": 2.5},
{"matrix": [4, 5], "x": 5.5, "y": 2.5},
{"matrix": [4, 6], "x": 6.5, "y": 2.5},
{"matrix": [4, 7], "x": 7.5, "y": 2.5},
{"matrix": [4, 8], "x": 8.5, "y": 2.5},
{"matrix": [4, 9], "x": 9.5, "y": 2.5},
{"matrix": [5, 0], "x": 10.5, "y": 2.5},
{"matrix": [5, 1], "x": 11.5, "y": 2.5},
{"matrix": [5, 2], "x": 12.5, "y": 2.5},
{"matrix": [5, 3], "x": 13.5, "y": 2.5, "w": 1.5},
{"matrix": [5, 4], "x": 15.25, "y": 2.5},
{"matrix": [5, 5], "x": 16.25, "y": 2.5},
{"matrix": [5, 6], "x": 17.25, "y": 2.5},
{"matrix": [5, 7], "x": 18.5, "y": 2.5},
{"matrix": [5, 8], "x": 19.5, "y": 2.5},
{"matrix": [5, 9], "x": 20.5, "y": 2.5},
{"matrix": [1, 8], "x": 21.5, "y": 2.5, "h": 2},
{"matrix": [6, 0], "x": 0, "y": 3.5, "w": 1.75},
{"matrix": [6, 1], "x": 1.75, "y": 3.5},
{"matrix": [6, 2], "x": 2.75, "y": 3.5},
{"matrix": [6, 3], "x": 3.75, "y": 3.5},
{"matrix": [6, 4], "x": 4.75, "y": 3.5},
{"matrix": [6, 5], "x": 5.75, "y": 3.5},
{"matrix": [6, 6], "x": 6.75, "y": 3.5},
{"matrix": [6, 7], "x": 7.75, "y": 3.5},
{"matrix": [6, 8], "x": 8.75, "y": 3.5},
{"matrix": [6, 9], "x": 9.75, "y": 3.5},
{"matrix": [7, 0], "x": 10.75, "y": 3.5},
{"matrix": [7, 1], "x": 11.75, "y": 3.5},
{"matrix": [7, 3], "x": 12.75, "y": 3.5, "w": 2.25},
{"matrix": [7, 6], "x": 18.5, "y": 3.5},
{"matrix": [7, 7], "x": 19.5, "y": 3.5},
{"matrix": [7, 8], "x": 20.5, "y": 3.5},
{"matrix": [8, 0], "x": 0, "y": 4.5, "w": 2.25},
{"matrix": [8, 2], "x": 2.25, "y": 4.5},
{"matrix": [8, 3], "x": 3.25, "y": 4.5},
{"matrix": [8, 4], "x": 4.25, "y": 4.5},
{"matrix": [8, 5], "x": 5.25, "y": 4.5},
{"matrix": [8, 6], "x": 6.25, "y": 4.5},
{"matrix": [8, 7], "x": 7.25, "y": 4.5},
{"matrix": [8, 8], "x": 8.25, "y": 4.5},
{"matrix": [8, 9], "x": 9.25, "y": 4.5},
{"matrix": [9, 0], "x": 10.25, "y": 4.5},
{"matrix": [9, 1], "x": 11.25, "y": 4.5},
{"matrix": [9, 2], "x": 12.25, "y": 4.5, "w": 2.75},
{"matrix": [9, 4], "x": 16.25, "y": 4.5},
{"matrix": [9, 6], "x": 18.5, "y": 4.5},
{"matrix": [9, 7], "x": 19.5, "y": 4.5},
{"matrix": [9, 8], "x": 20.5, "y": 4.5},
{"matrix": [9, 9], "x": 21.5, "y": 4.5, "h": 2},
{"matrix": [10, 0], "x": 0, "y": 5.5, "w": 1.25},
{"matrix": [10, 1], "x": 1.25, "y": 5.5, "w": 1.25},
{"matrix": [10, 2], "x": 2.5, "y": 5.5, "w": 1.25},
{"matrix": [10, 7], "x": 3.75, "y": 5.5, "w": 6.25},
{"matrix": [11, 0], "x": 10, "y": 5.5, "w": 1.25},
{"matrix": [11, 1], "x": 11.25, "y": 5.5, "w": 1.25},
{"matrix": [11, 2], "x": 12.5, "y": 5.5, "w": 1.25},
{"matrix": [11, 3], "x": 13.75, "y": 5.5, "w": 1.25},
{"matrix": [11, 4], "x": 15.25, "y": 5.5},
{"matrix": [11, 5], "x": 16.25, "y": 5.5},
{"matrix": [11, 6], "x": 17.25, "y": 5.5},
{"matrix": [11, 7], "x": 18.5, "y": 5.5, "w": 2},
{"matrix": [11, 8], "x": 20.5, "y": 5.5}
]
},
"LAYOUT_fullsize_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 2, "y": 0},
{"matrix": [0, 2], "x": 3, "y": 0},
{"matrix": [0, 3], "x": 4, "y": 0},
{"matrix": [0, 4], "x": 5, "y": 0},
{"matrix": [0, 5], "x": 6.5, "y": 0},
{"matrix": [0, 6], "x": 7.5, "y": 0},
{"matrix": [0, 7], "x": 8.5, "y": 0},
{"matrix": [0, 8], "x": 9.5, "y": 0},
{"matrix": [0, 9], "x": 11, "y": 0},
{"matrix": [1, 0], "x": 12, "y": 0},
{"matrix": [1, 1], "x": 13, "y": 0},
{"matrix": [1, 2], "x": 14, "y": 0},
{"matrix": [1, 3], "x": 15.25, "y": 0},
{"matrix": [1, 4], "x": 16.25, "y": 0},
{"matrix": [1, 5], "x": 17.25, "y": 0},
{"matrix": [2, 0], "x": 0, "y": 1.5},
{"matrix": [2, 1], "x": 1, "y": 1.5},
{"matrix": [2, 2], "x": 2, "y": 1.5},
{"matrix": [2, 3], "x": 3, "y": 1.5},
{"matrix": [2, 4], "x": 4, "y": 1.5},
{"matrix": [2, 5], "x": 5, "y": 1.5},
{"matrix": [2, 6], "x": 6, "y": 1.5},
{"matrix": [2, 7], "x": 7, "y": 1.5},
{"matrix": [2, 8], "x": 8, "y": 1.5},
{"matrix": [2, 9], "x": 9, "y": 1.5},
{"matrix": [3, 0], "x": 10, "y": 1.5},
{"matrix": [3, 1], "x": 11, "y": 1.5},
{"matrix": [3, 2], "x": 12, "y": 1.5},
{"matrix": [3, 3], "x": 13, "y": 1.5, "w": 2},
{"matrix": [3, 4], "x": 15.25, "y": 1.5},
{"matrix": [3, 5], "x": 16.25, "y": 1.5},
{"matrix": [3, 6], "x": 17.25, "y": 1.5},
{"matrix": [3, 7], "x": 18.5, "y": 1.5},
{"matrix": [3, 8], "x": 19.5, "y": 1.5},
{"matrix": [3, 9], "x": 20.5, "y": 1.5},
{"matrix": [1, 9], "x": 21.5, "y": 1.5},
{"matrix": [4, 0], "x": 0, "y": 2.5, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 2.5},
{"matrix": [4, 2], "x": 2.5, "y": 2.5},
{"matrix": [4, 3], "x": 3.5, "y": 2.5},
{"matrix": [4, 4], "x": 4.5, "y": 2.5},
{"matrix": [4, 5], "x": 5.5, "y": 2.5},
{"matrix": [4, 6], "x": 6.5, "y": 2.5},
{"matrix": [4, 7], "x": 7.5, "y": 2.5},
{"matrix": [4, 8], "x": 8.5, "y": 2.5},
{"matrix": [4, 9], "x": 9.5, "y": 2.5},
{"matrix": [5, 0], "x": 10.5, "y": 2.5},
{"matrix": [5, 1], "x": 11.5, "y": 2.5},
{"matrix": [5, 2], "x": 12.5, "y": 2.5},
{"matrix": [5, 4], "x": 15.25, "y": 2.5},
{"matrix": [5, 5], "x": 16.25, "y": 2.5},
{"matrix": [5, 6], "x": 17.25, "y": 2.5},
{"matrix": [5, 7], "x": 18.5, "y": 2.5},
{"matrix": [5, 8], "x": 19.5, "y": 2.5},
{"matrix": [5, 9], "x": 20.5, "y": 2.5},
{"matrix": [1, 8], "x": 21.5, "y": 2.5, "h": 2},
{"matrix": [6, 0], "x": 0, "y": 3.5, "w": 1.75},
{"matrix": [6, 1], "x": 1.75, "y": 3.5},
{"matrix": [6, 2], "x": 2.75, "y": 3.5},
{"matrix": [6, 3], "x": 3.75, "y": 3.5},
{"matrix": [6, 4], "x": 4.75, "y": 3.5},
{"matrix": [6, 5], "x": 5.75, "y": 3.5},
{"matrix": [6, 6], "x": 6.75, "y": 3.5},
{"matrix": [6, 7], "x": 7.75, "y": 3.5},
{"matrix": [6, 8], "x": 8.75, "y": 3.5},
{"matrix": [6, 9], "x": 9.75, "y": 3.5},
{"matrix": [7, 0], "x": 10.75, "y": 3.5},
{"matrix": [7, 1], "x": 11.75, "y": 3.5},
{"matrix": [7, 2], "x": 12.75, "y": 3.5},
{"matrix": [7, 3], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
{"matrix": [7, 6], "x": 18.5, "y": 3.5},
{"matrix": [7, 7], "x": 19.5, "y": 3.5},
{"matrix": [7, 8], "x": 20.5, "y": 3.5},
{"matrix": [8, 0], "x": 0, "y": 4.5, "w": 1.25},
{"matrix": [8, 1], "x": 1.25, "y": 4.5},
{"matrix": [8, 2], "x": 2.25, "y": 4.5},
{"matrix": [8, 3], "x": 3.25, "y": 4.5},
{"matrix": [8, 4], "x": 4.25, "y": 4.5},
{"matrix": [8, 5], "x": 5.25, "y": 4.5},
{"matrix": [8, 6], "x": 6.25, "y": 4.5},
{"matrix": [8, 7], "x": 7.25, "y": 4.5},
{"matrix": [8, 8], "x": 8.25, "y": 4.5},
{"matrix": [8, 9], "x": 9.25, "y": 4.5},
{"matrix": [9, 0], "x": 10.25, "y": 4.5},
{"matrix": [9, 1], "x": 11.25, "y": 4.5},
{"matrix": [9, 2], "x": 12.25, "y": 4.5, "w": 2.75},
{"matrix": [9, 4], "x": 16.25, "y": 4.5},
{"matrix": [9, 6], "x": 18.5, "y": 4.5},
{"matrix": [9, 7], "x": 19.5, "y": 4.5},
{"matrix": [9, 8], "x": 20.5, "y": 4.5},
{"matrix": [9, 9], "x": 21.5, "y": 4.5, "h": 2},
{"matrix": [10, 0], "x": 0, "y": 5.5, "w": 1.25},
{"matrix": [10, 1], "x": 1.25, "y": 5.5, "w": 1.25},
{"matrix": [10, 2], "x": 2.5, "y": 5.5, "w": 1.25},
{"matrix": [10, 7], "x": 3.75, "y": 5.5, "w": 6.25},
{"matrix": [11, 0], "x": 10, "y": 5.5, "w": 1.25},
{"matrix": [11, 1], "x": 11.25, "y": 5.5, "w": 1.25},
{"matrix": [11, 2], "x": 12.5, "y": 5.5, "w": 1.25},
{"matrix": [11, 3], "x": 13.75, "y": 5.5, "w": 1.25},
{"matrix": [11, 4], "x": 15.25, "y": 5.5},
{"matrix": [11, 5], "x": 16.25, "y": 5.5},
{"matrix": [11, 6], "x": 17.25, "y": 5.5},
{"matrix": [11, 7], "x": 18.5, "y": 5.5, "w": 2},
{"matrix": [11, 8], "x": 20.5, "y": 5.5}
]
}
}
}

View File

@ -0,0 +1,27 @@
/* Copyright 2025 Henrik Otte Sørensen (@henrikottesorensen)
*
* 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_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_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_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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PEQL,
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_BSLS, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT)
};

View File

@ -0,0 +1,59 @@
/* Copyright 2025 Henrik Otte Sørensen (@henrikottesorensen)
*
* 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 LAYER {
_PC = 0,
_MAC,
_FN
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_PC] = 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_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_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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PEQL,
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_BSLS, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[_MAC] = LAYOUT_all(
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_WSCH, KC_LPAD, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SCRL, KC_PAUS,
KC_NUBS, 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_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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PEQL,
KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPACE, KC_RGUI, KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[_FN] = LAYOUT_all(
_______, 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_VOLU, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DF(_PC), _______, _______, _______, _______, KC_MUTE, KC_VOLD, _______, _______, _______, _______,
_______, _______, _______, DB_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, QK_BOOT, _______, DF(_MAC),_______, _______, _______, _______, _______, KC_MPLY, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_APP, KC_MPRV, KC_MSTP, KC_MNXT, _______, _______)
};
bool process_detected_host_os_user(os_variant_t detected_os) {
/* If Apple, swap to macOS layer. */
if (detected_os == OS_MACOS || detected_os == OS_IOS) {
set_single_default_layer(_MAC);
}
else /* Else use PC layer */ {
set_single_default_layer(_PC);
}
return true;
}

View File

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

View File

@ -0,0 +1,25 @@
# AT101(-ish)
A replacement PCB for Dell AT101 family. (In theory) supports AT101, AT101W, AT102, AT102W, maybe other Bigfoot platform boards.
Keyboard Maintainer: QMK Community and Henrik O. Sørensen
Hardware Supported: AT101(ish) PCB
Hardware Availability: https://github.com/henrikosorensen/keyboard_pcbs/tree/master/at101_pcb
Make example for this keyboard (after setting up your build environment):
make handwired/at101ish:default
Flashing example for this keyboard:
make handwired/at101ish: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 2 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 programming button on the teensy 2.0 PCB.

View File

@ -0,0 +1,13 @@
// Copyright 2025 Erik Peyronson @erikpeyronson
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
#define I2C_DRIVER I2CD1
#define OLED_IC OLED_IC_SH1106
#define OLED_COLUMN_OFFSET 2
#define OLED_DISPLAY_128X64

View File

@ -0,0 +1,63 @@
// Copyright 2025 Erik Peyronson @erikpeyronson
// SPDX-License-Identifier: GPL-3.0-or-later
#include QMK_KEYBOARD_H
static void oled_render_logo(void) {
// clang-format off
static const char PROGMEM qmk_logo[] = {
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
};
// clang-format on
oled_write_P(qmk_logo, false);
}
static void render_layer(void) {
oled_write_P(PSTR("Layer: "), false);
oled_write_ln(get_u8_str(get_highest_layer(layer_state), ' '), false);
}
static void render_locks(void) {
led_t led_config = host_keyboard_led_state();
oled_write_P(PSTR("Caps "), led_config.caps_lock);
oled_write_P(PSTR("Scrl "), led_config.scroll_lock);
oled_write_P(PSTR("Num "), led_config.num_lock);
#ifdef CAPS_WORD_ENABLE
oled_write_P(PSTR("Word "), is_caps_word_on());
#endif
oled_advance_page(true);
}
static void render_mods(void) {
uint8_t mod_state = get_mods();
oled_write_P("Ctrl ", mod_state & MOD_MASK_CTRL);
oled_write_P("Shift ", mod_state & MOD_MASK_SHIFT);
oled_write_P("Alt ", mod_state & MOD_MASK_ALT);
oled_write_P("Gui", mod_state & MOD_MASK_GUI);
oled_advance_page(true);
}
static void render_delimeter(void) {
oled_write_ln_P(PSTR("------------------"), false);
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
if (is_keyboard_left()) {
oled_render_logo();
} else {
render_delimeter();
render_locks();
render_delimeter();
render_mods();
render_delimeter();
render_layer();
render_delimeter();
}
return false;
}

View File

@ -0,0 +1,107 @@
{
"manufacturer": "Erik Peyronson",
"keyboard_name": "erkbd",
"maintainer": "erikpeyronson",
"bootloader": "rp2040",
"bootloader_instructions": "Double tap the reset button on the controller board if accessable. If not hold down bootmagic key while powering on. Left side: row 0 column 0. (The tab key on regular keyboard). Right side: row 5 column 4 (the Backspace key on regular keyboard)",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP7", "pin_b": "GP8"}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"oled": true
},
"matrix_pins": {
"cols": ["GP8", "GP9", "GP10", "GP11", "GP12", "GP13"],
"rows": ["GP4", "GP5", "GP6", "GP7"]
},
"processor": "RP2040",
"split": {
"bootmagic": {
"matrix": [4, 5]
},
"enabled": true,
"encoder": {
"right": {
"rotary": [
{"pin_a": "GP7", "pin_b": "GP8"}
]
}
},
"handedness": {
"pin": "GP1"
},
"matrix_pins": {
"right": {
"cols": ["GP9", "GP10", "GP11", "GP12", "GP13", "GP14"],
"rows": ["GP28", "GP27", "GP26", "GP15"]
}
},
"serial": {
"driver": "vendor",
"pin": "GP0"
}
},
"url": "https://github.com/erikpeyronson/erkbd",
"usb": {
"device_version": "1.0.0",
"pid": "0x1234",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT_split_3x6_5": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.4},
{"matrix": [0, 1], "x": 1, "y": 0.3},
{"matrix": [0, 2], "x": 2, "y": 0.1},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0.1},
{"matrix": [0, 5], "x": 5, "y": 0.2},
{"matrix": [4, 0], "x": 9, "y": 0.2},
{"matrix": [4, 1], "x": 10, "y": 0.1},
{"matrix": [4, 2], "x": 11, "y": 0},
{"matrix": [4, 3], "x": 12, "y": 0.1},
{"matrix": [4, 4], "x": 13, "y": 0.3},
{"matrix": [4, 5], "x": 14, "y": 0.4},
{"matrix": [1, 0], "x": 0, "y": 1.4},
{"matrix": [1, 1], "x": 1, "y": 1.3},
{"matrix": [1, 2], "x": 2, "y": 1.1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1.1},
{"matrix": [1, 5], "x": 5, "y": 1.2},
{"matrix": [5, 0], "x": 9, "y": 1.2},
{"matrix": [5, 1], "x": 10, "y": 1.1},
{"matrix": [5, 2], "x": 11, "y": 1},
{"matrix": [5, 3], "x": 12, "y": 1.1},
{"matrix": [5, 4], "x": 13, "y": 1.3},
{"matrix": [5, 5], "x": 14, "y": 1.4},
{"matrix": [2, 0], "x": 0, "y": 2.4},
{"matrix": [2, 1], "x": 1, "y": 2.3},
{"matrix": [2, 2], "x": 2, "y": 2.1},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2.1},
{"matrix": [2, 5], "x": 5, "y": 2.2},
{"matrix": [6, 0], "x": 9, "y": 2.2},
{"matrix": [6, 1], "x": 10, "y": 2.1},
{"matrix": [6, 2], "x": 11, "y": 2},
{"matrix": [6, 3], "x": 12, "y": 2.1},
{"matrix": [6, 4], "x": 13, "y": 2.3},
{"matrix": [6, 5], "x": 14, "y": 2.4},
{"matrix": [3, 1], "x": 3, "y": 3.4},
{"matrix": [3, 2], "x": 4, "y": 3.4},
{"matrix": [3, 3], "x": 5, "y": 3.5},
{"matrix": [3, 4], "x": 6, "y": 3.7},
{"matrix": [3, 5], "x": 6, "y": 2.7},
{"matrix": [7, 0], "x": 8, "y": 2.7},
{"matrix": [7, 1], "x": 8, "y": 3.7},
{"matrix": [7, 2], "x": 9, "y": 3.5},
{"matrix": [7, 3], "x": 10, "y": 3.4},
{"matrix": [7, 4], "x": 11, "y": 3.4}
]
}
}
}

View File

@ -0,0 +1,52 @@
// Copyright 2025 Qmk, Erik Peyronson @erikpeyronson
// SPDX-License-Identifier: GPL-3.0-or-later
// NOTE: This keymap is for debugging purposes to have firmware to test the matrix when building the keyboard. If you intend to build this keyboard
// you should copy this to your fork or userspace repository and create your own.
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x6_5(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_LCTL, 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_LBRC, KC_RBRC, KC_LGUI, KC_BSPC, KC_SPC, KC_SPC, KC_ENT, KC_RALT, KC_LPRN, KC_RPRN
)
};
// clang-format on
void keyboard_post_init_user(void) {
#ifdef CONSOLE_ENABLE
debug_enable = true;
debug_matrix = true;
#endif
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status of each key pressed
#ifdef CONSOLE_ENABLE
uprintf("KL: kc: 0x%04X, col: %2u, row: %2u, pressed: %u, time: %5u, int: %u, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
#endif
return true;
}
// This function prints which half the keyboard considers itself to be which is
// useful for verify if the handedness pin and display is correctly set up when building
#ifdef OLED_ENABLE
bool oled_task_user(void) {
if (is_keyboard_left()) {
oled_write_P(PSTR("left"), false);
} else {
oled_write_P(PSTR("right"), false);
}
return false;
}
#endif
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = {ENCODER_CCW_CW(KC_UP, KC_DOWN), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT)}
};
#endif

View File

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

View File

@ -0,0 +1,24 @@
{
"keyboard": "handwired/erikpeyronson/erkbd",
"keymap": "default",
"layout": "LAYOUT_split_3x6_5",
"layers": [
[
"KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSPC",
"KC_LCTL", "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_LBRC", "KC_RBRC", "KC_LGUI", "KC_BSPC", "KC_SPC", "KC_SPC", "KC_ENT", "KC_RALT", "KC_LPRN", "KC_RPRN"
]
],
"config": {
"features": {
"encoder_map": true
}
},
"encoders": [
[
{ "ccw": "KC_UP", "cw": "KC_DOWN" },
{ "ccw": "KC_RIGHT", "cw": "KC_LEFT" }
]
]
}

View File

@ -0,0 +1,28 @@
# handwired/erikpeyronson/erkbd
![Erkbd](https://i.imgur.com/VViiXIN.jpeg)
3D printed, handwired 44 key split keyboard featuring two encoders, two 1.3" 128x64 oled displays using the waveshare rp2040zero development board.
* Keyboard Maintainer: [Erik Peyronson](https://github.com/erikpeyronson)
* Hardware Supported: See keyboard repository on [github](https://github.com/erikpeyronson/erkbd)
* Hardware Availability: See keyboard repository on [github](https://github.com/erikpeyronson/erkbd)
Make example for this keyboard (after setting up your build environment):
make handwired/erikpeyronson/erkbd:default
Flashing example for this keyboard:
Enter bootloader, drag and drop .uft2 file on the removable storage
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**: For left half hold down the key at (0,0) in the matrix (correspons with the tab key) and plug in the keyboard.
For left half half the key is (4,5) (corresponds with the backspace key)
* **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
Enter the bootloader in 3 ways:

View File

@ -0,0 +1,21 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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 I2C_DRIVER I2CD0
#define I2C1_SDA_PIN GP0
#define I2C1_SCL_PIN GP1

View File

@ -0,0 +1,68 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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
#ifdef OLED_ENABLE
static void render_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80, 0x81, 0x82, 0x83, 0x84,
0xA0, 0xA1, 0xA2, 0xA3, 0xA4,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0x00, 0x0A, 0x0A
};
oled_write_P(qmk_logo, false);
}
static void render_mod_status(uint8_t modifiers) {
oled_write_P(PSTR("MODS:"), false);
oled_write_P(PSTR("S"), (modifiers & MOD_MASK_SHIFT));
oled_write_P(PSTR("C"), (modifiers & MOD_MASK_CTRL));
oled_write_P(PSTR("A"), (modifiers & MOD_MASK_ALT));
oled_write_ln_P(PSTR("G"), (modifiers & MOD_MASK_GUI));
oled_write_ln_P(PSTR(" "), false);
}
static void render_layer_state(void) {
oled_write_ln_P(PSTR(" "), false);
oled_write_P("BASE ", layer_state_is(0));
oled_write_P("LOWER", layer_state_is(1));
oled_write_P("RAISE", layer_state_is(2));
oled_write_P("NAV ", layer_state_is(3));
oled_write_ln_P(PSTR(" "), false);
}
static void render_capsword_state(bool on) {
oled_write_ln_P("CAPSW", on);
}
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
return OLED_ROTATION_270;
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
render_logo();
render_layer_state();
render_mod_status(get_mods() | get_oneshot_mods());
render_capsword_state(is_caps_word_on());
return false;
}
#endif

View File

@ -0,0 +1,21 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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 HAL_USE_I2C TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,72 @@
{
"manufacturer": "Grigory Avdyushin",
"keyboard_name": "franky36",
"maintainer": "Grigory Avdyushin",
"bootloader": "rp2040",
"caps_word": {
"both_shifts_turns_on": true
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"caps_word": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"oled": true
},
"matrix_pins": {
"cols": ["GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP26", "GP27", "GP28"],
"rows": ["GP5", "GP4", "GP3", "GP2"]
},
"processor": "RP2040",
"url": "https://github.com/avdyushin/franky36",
"usb": {
"device_version": "0.2.0",
"pid": "0x0001",
"vid": "0xFEED"
},
"community_layouts": ["split_3x5_3"],
"layouts": {
"LAYOUT_split_3x5_3": {
"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": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "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": [1, 6], "x": 6, "y": 1},
{"matrix": [1, 7], "x": 7, "y": 1},
{"matrix": [1, 8], "x": 8, "y": 1},
{"matrix": [1, 9], "x": 9, "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": [2, 6], "x": 6, "y": 2},
{"matrix": [2, 7], "x": 7, "y": 2},
{"matrix": [2, 8], "x": 8, "y": 2},
{"matrix": [2, 9], "x": 9, "y": 2},
{"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": [3, 6], "x": 6, "y": 3},
{"matrix": [3, 7], "x": 7, "y": 3}
]
}
}
}

View File

@ -0,0 +1,123 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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 my_layers {
_BASE = 0,
_LOWER,
_RAISE,
_NAV,
};
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
#define NAV MO(_NAV)
#define OSM_LSFT OSM(MOD_LSFT) // One Shot Right Shift
#define KC_SFT_Z SFT_T(KC_Z) // Left Shift when held, Z when tapped
#define KC_SFT_SL RSFT_T(KC_SLSH) // Right Shift when held, / when tapped
#define KC_SFT_BSLS RSFT_T(KC_BSLS) // Right Shift when held, \ when tapped
#define KC_LWR_SPC LT(_LOWER, KC_SPC) // Lower layer when held, Space when tapped
#define KC_RSE_BSPC LT(_RAISE, KC_BSPC) // Raise layer when held, Backspace when tapped
#define KC_NAV_A LT(_NAV,KC_A) // Navigation layer when held, A when tapped
#define KC_CMD_TAB CMD_T(KC_TAB) // Left Command when held, Tab when tapped
#define KC_CMD_ENT RCMD_T(KC_ENT) // Right Command when held, Enter when tapped
#define KC_CTL_ESC CTL_T(KC_ESC) // Left Control when held, Escape when tapped
#define KC_OPT_OSM_SFT ROPT_T(OSM_LSFT) // Right Option when held, One Shot Shift when tapped
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* Q W E R T Y U I O P
*
* A S D F G H J K L ;:
*
* /Z X C V B N M ,< .>/?
*
*
* CTLCMDSPC ENTCMDOPT
*
*/
[_BASE] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_NAV_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
KC_SFT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SFT_SL,
KC_CTL_ESC, KC_CMD_TAB, KC_LWR_SPC, KC_RSE_BSPC, KC_CMD_ENT, KC_ROPT
),
/*
*
* 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0)
*
* `~ '"
*
* -_ =+ [{ ]} \|
*
*
*
*
*/
[_LOWER] = LAYOUT_split_3x5_3(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_GRV, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_QUOT,
KC_LSFT, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_SFT_BSLS,
_______, _______, _______, _______, _______, _______
),
/*
*
* F1 F2 F3 F4 F5 F6 F7 F8 F9F10
*
*
*
*
*
*
*
*
*/
[_RAISE] = LAYOUT_split_3x5_3(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
/*
*
* HOM END
*
*
*
* PUP PDN
*
*
*
*
*/
[_NAV] = LAYOUT_split_3x5_3(
_______, _______, _______, _______, _______, KC_HOME, _______, _______, KC_END, _______,
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______,
_______, _______, _______, _______, _______, KC_PGUP, _______, _______, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______
)
};

View File

@ -0,0 +1,24 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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
#include_next <mcuconf.h>
#undef RP_I2C_USE_I2C0
#define RP_I2C_USE_I2C0 TRUE
#undef RP_I2C_USE_I2C1
#define RP_I2C_USE_I2C1 FALSE

View File

@ -0,0 +1,25 @@
# franky36
Franky36 is 36 key compact handwired split keyboard that uses single RP2040-Zero controller.
* Keyboard Maintainer: [Grigory Avdyushin](https://github.com/avdyushin)
* Hardware Supported: RP2040-Zero
* Hardware Availability: Handwired [franky36](https://github.com/avdyushin/franky36)
Make example for this keyboard (after setting up your build environment):
make franky36:default
Flashing example for this keyboard:
make franky36: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 down the reset button on the controller and plug in the keyboard
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define ADC_PIN A0
#define ADC_PIN A5
#define SOLENOID_PINS { B12, B13, B14, B15 }
#define SOLENOID_PINS_ACTIVE_STATE { high, high, low }

View File

@ -3,17 +3,17 @@
"processor": "STM32F446",
"bootloader": "stm32-dfu",
"matrix_pins": {
"cols": ["A2"],
"cols": ["A0"],
"rows": ["A1"]
},
"backlight": {
"pin": "B8"
},
"ws2812": {
"pin": "A0"
"pin": "A4"
},
"apa102": {
"data_pin": "A0",
"data_pin": "A4",
"clock_pin": "B13"
}
}

View File

@ -1,5 +1,5 @@
# STM32 Nucleo-L432 onekey
To trigger keypress, short together pins *A1* and *A2*.
To trigger keypress, short together pins *A0* and *A1*. Note that the pin numbering is relative to the MCU, so that A0 and A1 refer to PA0 and PA1 on the MCU (which are also labelled A0 and A1 on the board, but this isn't true for the other PAx pins).
You'll also need to connect `VIN`, `GND`, USB `D+` to `PA12`/`D2`, and USB `D-` to `PA11`/`D10`.

View File

@ -0,0 +1,188 @@
{
"manufacturer": "DIY (open source)",
"keyboard_name": "Large Lad",
"maintainer": "Hyphen-ated",
"bootmagic": {
"matrix": [11, 12]
},
"development_board": "blackpill_f411",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "B7", "pin_b": "A0"}
]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"encoder": true
},
"matrix_pins": {
"cols": ["A2", "A1", "C13", "C14", "C15", "A5", "A6", "B0", "B3", "B8", "A15", "A8", "B15"],
"rows": ["B5", "B6", "B4", "B9", "A4", "A3", "A7", "B1", "B10", "B12", "B13", "B14"]
},
"url": "https://github.com/Hyphen-ated/large-lad-keyboard",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "L1", "matrix": [11, 12], "x": 0, "y": 0},
{"label": "L2", "matrix": [11, 11], "x": 1, "y": 0},
{"label": "L3", "matrix": [11, 6], "x": 2, "y": 0},
{"label": "F13", "matrix": [11, 5], "x": 5.25, "y": 0},
{"label": "F14", "matrix": [11, 4], "x": 6.25, "y": 0},
{"label": "F15", "matrix": [11, 3], "x": 7.25, "y": 0},
{"label": "F16", "matrix": [11, 2], "x": 8.25, "y": 0},
{"label": "F17", "matrix": [11, 1], "x": 9.75, "y": 0},
{"label": "F18", "matrix": [11, 0], "x": 10.75, "y": 0},
{"label": "F19", "matrix": [0, 12], "x": 11.75, "y": 0},
{"label": "F20", "matrix": [0, 11], "x": 12.75, "y": 0},
{"label": "F21", "matrix": [0, 10], "x": 14.25, "y": 0},
{"label": "F22", "matrix": [0, 9], "x": 15.25, "y": 0},
{"label": "F23", "matrix": [0, 8], "x": 16.25, "y": 0},
{"label": "F24", "matrix": [0, 7], "x": 17.25, "y": 0},
{"label": "R1", "matrix": [0, 6], "x": 18.5, "y": 0},
{"label": "R2", "matrix": [0, 5], "x": 19.5, "y": 0},
{"label": "R3", "matrix": [0, 4], "x": 20.5, "y": 0},
{"label": "R4", "matrix": [0, 3], "x": 21.75, "y": 0},
{"label": "R5", "matrix": [0, 2], "x": 22.75, "y": 0},
{"label": "R6", "matrix": [0, 1], "x": 23.75, "y": 0},
{"label": "R7", "matrix": [0, 0], "x": 24.75, "y": 0},
{"label": "L4", "matrix": [11, 7], "x": 0, "y": 1},
{"label": "L5", "matrix": [10, 12], "x": 1, "y": 1},
{"label": "L6", "matrix": [10, 11], "x": 2, "y": 1},
{"label": "Esc", "matrix": [10, 6], "x": 3.25, "y": 1},
{"label": "F1", "matrix": [10, 5], "x": 5.25, "y": 1},
{"label": "F2", "matrix": [10, 4], "x": 6.25, "y": 1},
{"label": "F3", "matrix": [10, 3], "x": 7.25, "y": 1},
{"label": "F4", "matrix": [10, 2], "x": 8.25, "y": 1},
{"label": "F5", "matrix": [10, 1], "x": 9.75, "y": 1},
{"label": "F6", "matrix": [10, 0], "x": 10.75, "y": 1},
{"label": "F7", "matrix": [1, 12], "x": 11.75, "y": 1},
{"label": "F8", "matrix": [1, 11], "x": 12.75, "y": 1},
{"label": "F9", "matrix": [1, 10], "x": 14.25, "y": 1},
{"label": "F10", "matrix": [1, 9], "x": 15.25, "y": 1},
{"label": "F11", "matrix": [1, 8], "x": 16.25, "y": 1},
{"label": "F12", "matrix": [1, 7], "x": 17.25, "y": 1},
{"label": "PrtSc", "matrix": [1, 6], "x": 18.5, "y": 1},
{"label": "Scroll Lock", "matrix": [1, 5], "x": 19.5, "y": 1},
{"label": "Pause", "matrix": [1, 4], "x": 20.5, "y": 1},
{"label": "R8", "matrix": [1, 3], "x": 21.75, "y": 1},
{"label": "R9", "matrix": [1, 2], "x": 22.75, "y": 1},
{"label": "R10", "matrix": [1, 1], "x": 23.75, "y": 1},
{"label": "R11", "matrix": [1, 0], "x": 24.75, "y": 1},
{"label": "L7", "matrix": [11, 8], "x": 0, "y": 2.25},
{"label": "L8", "matrix": [10, 7], "x": 1, "y": 2.25},
{"label": "L9", "matrix": [9, 12], "x": 2, "y": 2.25},
{"label": "~", "matrix": [9, 11], "x": 3.25, "y": 2.5},
{"label": "!", "matrix": [9, 6], "x": 4.25, "y": 2.5},
{"label": "@", "matrix": [9, 5], "x": 5.25, "y": 2.5},
{"label": "#", "matrix": [9, 4], "x": 6.25, "y": 2.5},
{"label": "$", "matrix": [9, 3], "x": 7.25, "y": 2.5},
{"label": "%", "matrix": [9, 2], "x": 8.25, "y": 2.5},
{"label": "^", "matrix": [9, 1], "x": 9.25, "y": 2.5},
{"label": "&", "matrix": [9, 0], "x": 10.25, "y": 2.5},
{"label": "*", "matrix": [2, 12], "x": 11.25, "y": 2.5},
{"label": "(", "matrix": [2, 11], "x": 12.25, "y": 2.5},
{"label": ")", "matrix": [2, 10], "x": 13.25, "y": 2.5},
{"label": "_", "matrix": [2, 9], "x": 14.25, "y": 2.5},
{"label": "+", "matrix": [2, 8], "x": 15.25, "y": 2.5},
{"label": "Backspace", "matrix": [2, 7], "x": 16.25, "y": 2.5, "w": 2},
{"label": "Insert", "matrix": [2, 6], "x": 18.5, "y": 2.5},
{"label": "Home", "matrix": [2, 5], "x": 19.5, "y": 2.5},
{"label": "PgUp", "matrix": [2, 4], "x": 20.5, "y": 2.5},
{"label": "Num Lock", "matrix": [2, 3], "x": 21.75, "y": 2.5},
{"label": "/", "matrix": [2, 2], "x": 22.75, "y": 2.5},
{"label": "*", "matrix": [2, 1], "x": 23.75, "y": 2.5},
{"label": "-", "matrix": [2, 0], "x": 24.75, "y": 2.5},
{"label": "L10", "matrix": [10, 8], "x": 0, "y": 3.25},
{"label": "L11", "matrix": [9, 7], "x": 1, "y": 3.25},
{"label": "L12", "matrix": [8, 12], "x": 2, "y": 3.25},
{"label": "Tab", "matrix": [8, 11], "x": 3.25, "y": 3.5, "w": 1.5},
{"label": "Q", "matrix": [8, 6], "x": 4.75, "y": 3.5},
{"label": "W", "matrix": [8, 5], "x": 5.75, "y": 3.5},
{"label": "E", "matrix": [8, 4], "x": 6.75, "y": 3.5},
{"label": "R", "matrix": [8, 3], "x": 7.75, "y": 3.5},
{"label": "T", "matrix": [8, 2], "x": 8.75, "y": 3.5},
{"label": "Y", "matrix": [8, 1], "x": 9.75, "y": 3.5},
{"label": "U", "matrix": [8, 0], "x": 10.75, "y": 3.5},
{"label": "I", "matrix": [3, 12], "x": 11.75, "y": 3.5},
{"label": "O", "matrix": [3, 11], "x": 12.75, "y": 3.5},
{"label": "P", "matrix": [3, 10], "x": 13.75, "y": 3.5},
{"label": "{", "matrix": [3, 9], "x": 14.75, "y": 3.5},
{"label": "}", "matrix": [3, 8], "x": 15.75, "y": 3.5},
{"label": "|", "matrix": [3, 7], "x": 16.75, "y": 3.5, "w": 1.5},
{"label": "Delete", "matrix": [3, 6], "x": 18.5, "y": 3.5},
{"label": "End", "matrix": [3, 5], "x": 19.5, "y": 3.5},
{"label": "PgDn", "matrix": [3, 4], "x": 20.5, "y": 3.5},
{"label": "7", "matrix": [3, 3], "x": 21.75, "y": 3.5},
{"label": "8", "matrix": [3, 2], "x": 22.75, "y": 3.5},
{"label": "9", "matrix": [3, 1], "x": 23.75, "y": 3.5},
{"label": "+", "matrix": [3, 0], "x": 24.75, "y": 3.5, "h": 2},
{"label": "L13", "matrix": [9, 8], "x": 0, "y": 4.25},
{"label": "L14", "matrix": [8, 7], "x": 1, "y": 4.25},
{"label": "L15", "matrix": [7, 12], "x": 2, "y": 4.25},
{"label": "Caps Lock", "matrix": [7, 6], "x": 3.25, "y": 4.5, "w": 1.75},
{"label": "A", "matrix": [7, 5], "x": 5, "y": 4.5},
{"label": "S", "matrix": [7, 4], "x": 6, "y": 4.5},
{"label": "D", "matrix": [7, 3], "x": 7, "y": 4.5},
{"label": "F", "matrix": [7, 2], "x": 8, "y": 4.5},
{"label": "G", "matrix": [7, 1], "x": 9, "y": 4.5},
{"label": "H", "matrix": [7, 0], "x": 10, "y": 4.5},
{"label": "J", "matrix": [4, 12], "x": 11, "y": 4.5},
{"label": "K", "matrix": [4, 11], "x": 12, "y": 4.5},
{"label": "L", "matrix": [4, 10], "x": 13, "y": 4.5},
{"label": ":", "matrix": [4, 9], "x": 14, "y": 4.5},
{"label": "\"", "matrix": [4, 8], "x": 15, "y": 4.5},
{"label": "Enter", "matrix": [4, 7], "x": 16, "y": 4.5, "w": 2.25},
{"label": "4", "matrix": [4, 3], "x": 21.75, "y": 4.5},
{"label": "5", "matrix": [4, 2], "x": 22.75, "y": 4.5},
{"label": "6", "matrix": [4, 1], "x": 23.75, "y": 4.5},
{"label": "L16", "matrix": [8, 8], "x": 0, "y": 5.5},
{"label": "L17", "matrix": [7, 7], "x": 1, "y": 5.5},
{"label": "L18", "matrix": [6, 12], "x": 2, "y": 5.5},
{"label": "Shift", "matrix": [7, 11], "x": 3.25, "y": 5.5, "w": 2.25},
{"label": "Z", "matrix": [6, 5], "x": 5.5, "y": 5.5},
{"label": "X", "matrix": [6, 3], "x": 6.5, "y": 5.5},
{"label": "C", "matrix": [6, 2], "x": 7.5, "y": 5.5},
{"label": "V", "matrix": [6, 1], "x": 8.5, "y": 5.5},
{"label": "B", "matrix": [6, 0], "x": 9.5, "y": 5.5},
{"label": "N", "matrix": [5, 12], "x": 10.5, "y": 5.5},
{"label": "M", "matrix": [5, 11], "x": 11.5, "y": 5.5},
{"label": "<", "matrix": [5, 10], "x": 12.5, "y": 5.5},
{"label": ">", "matrix": [5, 9], "x": 13.5, "y": 5.5},
{"label": "?", "matrix": [5, 8], "x": 14.5, "y": 5.5},
{"label": "Shift", "matrix": [5, 7], "x": 15.5, "y": 5.5, "w": 2.75},
{"label": "Up", "matrix": [4, 5], "x": 19.5, "y": 5.5},
{"label": "1", "matrix": [5, 3], "x": 21.75, "y": 5.5},
{"label": "2", "matrix": [5, 2], "x": 22.75, "y": 5.5},
{"label": "3", "matrix": [5, 1], "x": 23.75, "y": 5.5},
{"label": "Enter", "matrix": [4, 0], "x": 24.75, "y": 5.5, "h": 2},
{"label": "L19", "matrix": [7, 8], "x": 0, "y": 6.5},
{"label": "L20", "matrix": [8, 9], "x": 1, "y": 6.5},
{"label": "L21", "matrix": [7, 9], "x": 2, "y": 6.5},
{"label": "Ctrl", "matrix": [6, 11], "x": 3.25, "y": 6.5, "w": 1.25},
{"label": "Win", "matrix": [6, 6], "x": 4.5, "y": 6.5, "w": 1.25},
{"label": "Alt", "matrix": [6, 4], "x": 5.75, "y": 6.5, "w": 1.25},
{"label": "Space", "matrix": [6, 10], "x": 7, "y": 6.5, "w": 6.25},
{"label": "Alt", "matrix": [6, 9], "x": 13.25, "y": 6.5, "w": 1.25},
{"label": "Win", "matrix": [6, 8], "x": 14.5, "y": 6.5, "w": 1.25},
{"label": "Menu", "matrix": [6, 7], "x": 15.75, "y": 6.5, "w": 1.25},
{"label": "Ctrl", "matrix": [5, 6], "x": 17, "y": 6.5, "w": 1.25},
{"label": "Left", "matrix": [4, 6], "x": 18.5, "y": 6.5},
{"label": "Down", "matrix": [5, 5], "x": 19.5, "y": 6.5},
{"label": "Right", "matrix": [4, 4], "x": 20.5, "y": 6.5},
{"label": "0", "matrix": [5, 4], "x": 21.75, "y": 6.5, "w": 2},
{"label": ".", "matrix": [5, 0], "x": 23.75, "y": 6.5}
]
}
}
}

View File

@ -0,0 +1,42 @@
// Copyright 2024 Hyphen-ated (@Hyphen-ated)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* F13F14F15F16 F17F18F19F20 F21F22F23F24
*
* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 PScScrPse
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = Backsp InsHomPgU Num / * -
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD 7 8 9
* +
* Caps A S D F G H J K L ; ' Enter 4 5 6
*
* Shift Z X C V B N M , . / Shift 1 2 3
* Ent
* CtrlGUI Alt Alt GUIMenuCtrl 0 .
*
*/
[0] = LAYOUT(
KC_NO,KC_NO,KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO,KC_NO,KC_NO, 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_NO, KC_NO, KC_NO, KC_NO,
KC_NO,KC_NO,KC_NO, 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_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_NO,KC_NO,KC_NO, 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_NO,KC_NO,KC_NO, 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_NO,KC_NO,KC_NO, 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_P1, KC_P2, KC_P3, KC_PENT,
KC_NO,KC_NO,KC_NO, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
)
};
// encoder controls volume by default
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
};
#endif

View File

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

View File

@ -0,0 +1,23 @@
# large_lad
![large_lad](https://i.imgur.com/CQWAD2X.jpg)
Starts with the standard US 104 key layout and adds more keys on top and on the left. Total of 148 keys, one of which is a rotary encoder. Includes two rows of function keys and a 3x7 grid of keys on the left. No LEDs.
* Keyboard Maintainer: [Hyphen-ated](https://github.com/Hyphen-ated)
* Hardware Supported: Custom open source PCB.
* Hardware Availability: DIY. PCB and plate design files available at https://github.com/Hyphen-ated/large-lad-keyboard
Make example for this keyboard (after setting up your build environment):
make large_lad:default
Flashing example for this keyboard:
make large_lad: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
To enter the bootloader, there's two buttons to press on the blackpill board. Press and hold BOOT, press and release NRST, then release BOOT. Sometimes this randomly fails and you have to try again.

View File

@ -9,10 +9,10 @@
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"nkro": true,
"rgblight": true,
"key_lock": true,
"leader": true
"mousekey": true,
"nkro": true,
"rgblight": true
},
"qmk": {
"locking": {

View File

@ -1,3 +1,18 @@
/* Copyright 2019 Max Rumpf (@Maxr1998)
*
* 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 RSPC_KEYS KC_RSFT, KC_RALT, KC_7

View File

@ -1,3 +1,18 @@
/* Copyright 2019 Max Rumpf (@Maxr1998)
*
* 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
#include "keymap_german.h"
@ -35,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_PLUS, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, SC_RSPC,
KC_LCTL, KC_LGUI, KC_LALT, QK_LEAD, KC_SC, KC_SPC, KC_ALGR, KC_FN, KC_LEFT, KC_DOWN, KC_RGHT
KC_LCTL, KC_LGUI, KC_LALT, KC_BTN1, KC_SC, KC_SPC, KC_ALGR, KC_FN, KC_LEFT, KC_DOWN, KC_RGHT
),
/* Special characters
@ -77,7 +92,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, DE_UDIA, KC_F9, DE_ODIA, KC_PSCR, KC_DEL,
QK_LOCK, DE_ADIA, DE_SS, _______, _______, G_1, _______, RGB_M_P, RGB_M_SW,RGB_M_SN,_______, _______,
_______, _______, _______, _______, _______, _______, _______, UG_HUED, UG_TOGG, UG_HUEU, KC_PGUP, _______,
XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_END
XXXXXXX, _______, XXXXXXX, KC_BTN2, XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_END
),
/* Gaming
@ -128,13 +143,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
break;
}
return true;
};
void leader_end_user(void) {
if (leader_sequence_two_keys(KC_G, KC_P)) {
SEND_STRING("git push");
}
if (leader_sequence_three_keys(KC_G, KC_F, KC_P)) {
SEND_STRING("git push --force-with-lease");
}
}

View File

@ -1,3 +1,18 @@
/* Copyright 2019 Max Rumpf (@Maxr1998)
*
* 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 "quantum.h"
const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {50, 50, 50};

View File

@ -0,0 +1,6 @@
// Copyright 2025 Dasky (@daskygit)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "keyboards/mechboards/common/rgb_effects.h"

View File

@ -0,0 +1,171 @@
{
"manufacturer": "Mechboards",
"keyboard_name": "CRKBD Pro",
"maintainer": "dasky",
"build": {
"lto": true
},
"development_board": "promicro",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "B6", "pin_b": "B2"}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"oled": true,
"os_detection": true,
"rgb_matrix": true,
"wpm": true
},
"matrix_pins": {
"cols": ["F4", "F5", "F6", "F7", "B1", "B3"],
"rows": ["D4", "C6", "D7", "E6"]
},
"rgb_matrix": {
"animations": {
"cycle_left_right": true
},
"default": {
"animation": "cycle_left_right"
},
"driver": "ws2812",
"layout": [
{"x": 85, "y": 16, "flags": 2},
{"x": 50, "y": 13, "flags": 2},
{"x": 16, "y": 20, "flags": 2},
{"x": 16, "y": 38, "flags": 2},
{"x": 50, "y": 48, "flags": 2},
{"x": 85, "y": 52, "flags": 2},
{"matrix": [3, 5], "x": 95, "y": 63, "flags": 1},
{"matrix": [2, 5], "x": 85, "y": 39, "flags": 4},
{"matrix": [1, 5], "x": 85, "y": 21, "flags": 4},
{"matrix": [0, 5], "x": 85, "y": 4, "flags": 4},
{"matrix": [0, 4], "x": 68, "y": 2, "flags": 4},
{"matrix": [1, 4], "x": 68, "y": 19, "flags": 4},
{"matrix": [2, 4], "x": 68, "y": 37, "flags": 4},
{"matrix": [3, 4], "x": 80, "y": 58, "flags": 1},
{"matrix": [3, 3], "x": 60, "y": 55, "flags": 1},
{"matrix": [2, 3], "x": 50, "y": 35, "flags": 4},
{"matrix": [1, 3], "x": 50, "y": 13, "flags": 4},
{"matrix": [0, 3], "x": 50, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 33, "y": 3, "flags": 4},
{"matrix": [1, 2], "x": 33, "y": 20, "flags": 4},
{"matrix": [2, 2], "x": 33, "y": 37, "flags": 4},
{"matrix": [2, 1], "x": 16, "y": 42, "flags": 4},
{"matrix": [1, 1], "x": 16, "y": 24, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 7, "flags": 4},
{"matrix": [0, 0], "x": 0, "y": 7, "flags": 1},
{"matrix": [1, 0], "x": 0, "y": 24, "flags": 1},
{"matrix": [2, 0], "x": 0, "y": 41, "flags": 1},
{"x": 139, "y": 16, "flags": 2},
{"x": 174, "y": 13, "flags": 2},
{"x": 208, "y": 20, "flags": 2},
{"x": 208, "y": 38, "flags": 2},
{"x": 174, "y": 48, "flags": 2},
{"x": 139, "y": 52, "flags": 2},
{"matrix": [7, 5], "x": 129, "y": 63, "flags": 1},
{"matrix": [6, 5], "x": 139, "y": 39, "flags": 4},
{"matrix": [5, 5], "x": 139, "y": 21, "flags": 4},
{"matrix": [4, 5], "x": 139, "y": 4, "flags": 4},
{"matrix": [4, 4], "x": 156, "y": 2, "flags": 4},
{"matrix": [5, 4], "x": 156, "y": 19, "flags": 4},
{"matrix": [6, 4], "x": 156, "y": 37, "flags": 4},
{"matrix": [7, 4], "x": 144, "y": 58, "flags": 1},
{"matrix": [7, 3], "x": 164, "y": 55, "flags": 1},
{"matrix": [6, 3], "x": 174, "y": 35, "flags": 4},
{"matrix": [5, 3], "x": 174, "y": 13, "flags": 4},
{"matrix": [4, 3], "x": 174, "y": 0, "flags": 4},
{"matrix": [4, 2], "x": 191, "y": 3, "flags": 4},
{"matrix": [5, 2], "x": 191, "y": 20, "flags": 4},
{"matrix": [6, 2], "x": 191, "y": 37, "flags": 4},
{"matrix": [6, 1], "x": 208, "y": 42, "flags": 4},
{"matrix": [5, 1], "x": 208, "y": 24, "flags": 4},
{"matrix": [4, 1], "x": 208, "y": 7, "flags": 4},
{"matrix": [4, 0], "x": 224, "y": 7, "flags": 1},
{"matrix": [5, 0], "x": 224, "y": 24, "flags": 1},
{"matrix": [6, 0], "x": 224, "y": 41, "flags": 1}
],
"max_brightness": 120,
"split_count": [27, 27]
},
"rgblight": {
"led_count": 54,
"max_brightness": 120,
"split_count": [27, 27]
},
"split": {
"enabled": true,
"serial": {
"pin": "D2"
},
"transport": {
"sync": {
"matrix_state": true,
"oled": true,
"wpm": true
}
}
},
"url": "mechboards.co.uk",
"usb": {
"device_version": "1.0.0",
"pid": "0x0003",
"vid": "0x7171"
},
"ws2812": {
"pin": "D3"
},
"layouts": {
"LAYOUT_split_3x6_3": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.25},
{"matrix": [0, 1], "x": 1, "y": 0.25},
{"matrix": [0, 2], "x": 2, "y": 0.125},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0.125},
{"matrix": [0, 5], "x": 5, "y": 0.25},
{"matrix": [4, 5], "x": 8, "y": 0.25},
{"matrix": [4, 4], "x": 9, "y": 0.125},
{"matrix": [4, 3], "x": 10, "y": 0},
{"matrix": [4, 2], "x": 11, "y": 0.125},
{"matrix": [4, 1], "x": 12, "y": 0.25},
{"matrix": [4, 0], "x": 13, "y": 0.25},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.125},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1.125},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [5, 5], "x": 8, "y": 1.25},
{"matrix": [5, 4], "x": 9, "y": 1.125},
{"matrix": [5, 3], "x": 10, "y": 1},
{"matrix": [5, 2], "x": 11, "y": 1.125},
{"matrix": [5, 1], "x": 12, "y": 1.25},
{"matrix": [5, 0], "x": 13, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25},
{"matrix": [2, 1], "x": 1, "y": 2.25},
{"matrix": [2, 2], "x": 2, "y": 2.125},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2.125},
{"matrix": [2, 5], "x": 5, "y": 2.25},
{"matrix": [6, 5], "x": 8, "y": 2.25},
{"matrix": [6, 4], "x": 9, "y": 2.125},
{"matrix": [6, 3], "x": 10, "y": 2},
{"matrix": [6, 2], "x": 11, "y": 2.125},
{"matrix": [6, 1], "x": 12, "y": 2.25},
{"matrix": [6, 0], "x": 13, "y": 2.25},
{"matrix": [3, 3], "x": 3.5, "y": 3.25},
{"matrix": [3, 4], "x": 4.5, "y": 3.5},
{"matrix": [3, 5], "x": 5.5, "y": 3.75},
{"matrix": [7, 5], "x": 7.5, "y": 3.75},
{"matrix": [7, 4], "x": 8.5, "y": 3.5},
{"matrix": [7, 3], "x": 9.5, "y": 3.25}
]
}
}
}

View File

@ -0,0 +1,47 @@
// Copyright 2025 Dasky (@daskygit)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x6_3(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_LCTL, 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_ESC,
KC_LGUI, MO(1), KC_SPC, KC_ENT, MO(2), KC_RALT
),
[1] = LAYOUT_split_3x6_3(
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX,
KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LGUI, _______, KC_SPC, KC_ENT, MO(3), KC_RALT
),
[2] = LAYOUT_split_3x6_3(
KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
KC_LGUI, MO(3), KC_SPC, KC_ENT, _______, KC_RALT
),
[3] = LAYOUT_split_3x6_3(
QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
RM_TOGG, RM_HUEU, RM_SATU, RM_VALU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
RM_NEXT, RM_HUED, RM_SATD, RM_VALD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT)},
[1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS)},
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS)},
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS)}
};
#endif
// clang-format on

View File

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

View File

@ -0,0 +1 @@
include keyboards/mechboards/common/post_rules.mk

View File

@ -0,0 +1,15 @@
// Copyright 2025 Dasky (@daskygit)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
#ifdef OLED_ENABLE
void render_logo(void) {
static const char PROGMEM pro_logo[] = {
252, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 31, 31, 31, 31, 31, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 252, 0, 0, 0, 248, 248, 24, 24, 24, 24, 24, 24, 0, 0, 248, 248, 24, 24, 24, 24, 248, 240, 0, 0, 248, 248, 0, 0, 0, 128, 248, 248, 0, 0, 248, 248, 24, 24, 24, 24, 248, 240, 0, 0, 248, 248, 24, 24, 24, 24, 248, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 7, 7, 7, 7, 7, 255, 7, 7, 7, 7, 7, 255, 7, 7, 7, 7, 7, 255, 7, 7, 7, 7, 7, 255, 7, 7, 7, 7, 7, 255, 255, 255, 4, 4, 4, 4, 4, 255,
7, 7, 7, 7, 7, 255, 7, 7, 7, 7, 7, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 6, 6, 6, 6, 255, 251, 0, 0, 255, 255, 6, 6, 15, 31, 249, 240, 0, 0, 255, 255, 6, 6, 6, 6, 255, 251, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 65, 65, 65, 65, 65, 255, 255, 255, 255, 255, 255, 255, 65, 65, 65, 65, 65, 255, 255, 255, 255, 255, 255, 255, 65, 65, 65, 65, 65, 255, 255, 255, 65, 65, 65, 65, 65, 255, 127, 127, 127, 127, 127, 255, 65, 65, 65, 65, 65, 255, 255, 255, 255, 255, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 0, 0, 0, 0, 3, 3, 0, 0, 3, 3, 0, 0,
0, 0, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 3, 3, 3, 3, 3, 3, 227, 241, 48, 176, 176, 112, 240, 48, 176, 176, 112, 240, 112, 176, 176, 112, 240, 224, 0, 0, 63, 127, 255, 255, 255, 240, 240, 240, 240, 240, 255, 255, 255, 255, 255, 255, 255, 240, 240, 240, 240, 240, 255, 255, 255, 255, 255, 255, 255, 240, 240, 240, 240, 240, 255, 255, 255, 240, 240, 240, 240, 240, 255, 240, 240, 240, 240, 240, 255, 240, 240, 240, 240, 240, 255, 255, 255, 127, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 63, 48, 61, 61, 62, 63, 48, 61, 61, 50, 63, 56, 55, 55, 56, 63, 31, 0, 0,
};
oled_write_raw_P(pro_logo, sizeof(pro_logo));
}
#endif

View File

@ -0,0 +1,25 @@
# CRKBD Pro
A refreshed CRKBD (Corne) PCB with RGB, battery, power switch and encoder support.
* Keyboard Maintainer: [dasky](https://github.com/daskygit)
* Hardware Supported: Controllers using promicro footprint.
* Hardware Availability: https://mechboards.co.uk
Make example for this keyboard (after setting up your build environment):
qmk compile -kb mechboards/crkbd/pro -km default
Flashing example for this keyboard:
qmk flash -kb mechboards/crkbd/pro -km default
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 top left key/encoder or the top right key/encoder depending on which side you're connecting to usb.
* **Physical reset button**: Double press the button below the TRRS socket.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -49,7 +49,16 @@
"driver": "snled27351",
"max_brightness": 180,
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
@ -60,12 +69,29 @@
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_rain": true,
"pixel_flow": true,
"pixel_fractal": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"multisplash": true
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"layout":[
{ "flags": 4, "matrix": [0, 0], "x": 0, "y": 0 },

View File

@ -26,5 +26,5 @@
/* PMW33XX Settings */
#define PMW33XX_CS_PIN B0
#define ENCODER_A_PINS { F0 }
#define ENCODER_B_PINS { F4 }
#define ENCODER_A_PINS { F4 }
#define ENCODER_B_PINS { F0 }

View File

@ -0,0 +1,17 @@
/*
Copyright 2024 Salane
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 RP2040_FLASH_GENERIC_03H

View File

@ -0,0 +1,143 @@
{
"keyboard_name": "Starry FRL",
"manufacturer": "Salane",
"url": "",
"maintainer": "Mai The San",
"processor": "RP2040",
"bootloader": "rp2040",
"usb": {
"vid": "0x534C",
"pid": "0x0A01",
"device_version": "0.0.1"
},
"matrix_pins": {
"rows": ["GP25", "GP0", "GP18", "GP23", "GP24"],
"cols": ["GP27", "GP26", "GP14", "GP13", "GP12", "GP11", "GP10", "GP9", "GP8", "GP7", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP22", "GP21", "GP20"]
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"console": false,
"command": false,
"nkro": false,
"rgblight": true,
"encoder": true
},
"encoder": {
"rotary": [
{"pin_a": "GP29", "pin_b": "GP28"}
]
},
"rgblight": {
"led_count": 2,
"saturation_steps": 8,
"brightness_steps": 8,
"sleep": true,
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"static_gradient": true,
"twinkle": true
}
},
"ws2812": {
"pin": "GP19",
"driver": "vendor"
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "K02", "matrix": [0, 2], "x": 2.25, "y": 0},
{"label": "K03", "matrix": [0, 3], "x": 3.25, "y": 0},
{"label": "K04", "matrix": [0, 4], "x": 4.25, "y": 0},
{"label": "K05", "matrix": [0, 5], "x": 5.25, "y": 0},
{"label": "K06", "matrix": [0, 6], "x": 6.25, "y": 0},
{"label": "K07", "matrix": [0, 7], "x": 7.25, "y": 0},
{"label": "K08", "matrix": [0, 8], "x": 8.25, "y": 0},
{"label": "K09", "matrix": [0, 9], "x": 9.25, "y": 0},
{"label": "K0A", "matrix": [0, 10], "x": 10.25, "y": 0},
{"label": "K0B", "matrix": [0, 11], "x": 11.25, "y": 0},
{"label": "K0C", "matrix": [0, 12], "x": 12.25, "y": 0},
{"label": "K0D", "matrix": [0, 13], "x": 13.25, "y": 0},
{"label": "K0E", "matrix": [0, 14], "x": 14.25, "y": 0},
{"label": "K0F", "matrix": [0, 15], "x": 15.25, "y": 0},
{"label": "K2F", "matrix": [2, 15], "x": 16.25, "y": 0},
{"label": "K0G", "matrix": [0, 16], "x": 17.5, "y": 0},
{"label": "K0H", "matrix": [0, 17], "x": 18.5, "y": 0},
{"label": "K0I", "matrix": [0, 18], "x": 19.5, "y": 0},
{"label": "K12", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
{"label": "K13", "matrix": [1, 3], "x": 3.75, "y": 1},
{"label": "K14", "matrix": [1, 4], "x": 4.75, "y": 1},
{"label": "K15", "matrix": [1, 5], "x": 5.75, "y": 1},
{"label": "K16", "matrix": [1, 6], "x": 6.75, "y": 1},
{"label": "K17", "matrix": [1, 7], "x": 7.75, "y": 1},
{"label": "K18", "matrix": [1, 8], "x": 8.75, "y": 1},
{"label": "K19", "matrix": [1, 9], "x": 9.75, "y": 1},
{"label": "K1A", "matrix": [1, 10], "x": 10.75, "y": 1},
{"label": "K1B", "matrix": [1, 11], "x": 11.75, "y": 1},
{"label": "K1C", "matrix": [1, 12], "x": 12.75, "y": 1},
{"label": "K1D", "matrix": [1, 13], "x": 13.75, "y": 1},
{"label": "K1E", "matrix": [1, 14], "x": 14.75, "y": 1},
{"label": "K1F", "matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
{"label": "K1G", "matrix": [1, 16], "x": 17.5, "y": 1},
{"label": "K1H", "matrix": [1, 17], "x": 18.5, "y": 1},
{"label": "K1I", "matrix": [1, 18], "x": 19.5, "y": 1},
{"label": "K21", "matrix": [2, 1], "x": 0.25, "y": 1.25, "w": 1.5, "h": 1.5},
{"label": "K22", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
{"label": "K23", "matrix": [2, 3], "x": 4, "y": 2},
{"label": "K24", "matrix": [2, 4], "x": 5, "y": 2},
{"label": "K25", "matrix": [2, 5], "x": 6, "y": 2},
{"label": "K26", "matrix": [2, 6], "x": 7, "y": 2},
{"label": "K27", "matrix": [2, 7], "x": 8, "y": 2},
{"label": "K28", "matrix": [2, 8], "x": 9, "y": 2},
{"label": "K29", "matrix": [2, 9], "x": 10, "y": 2},
{"label": "K2A", "matrix": [2, 10], "x": 11, "y": 2},
{"label": "K2B", "matrix": [2, 11], "x": 12, "y": 2},
{"label": "K2C", "matrix": [2, 12], "x": 13, "y": 2},
{"label": "K2D", "matrix": [2, 13], "x": 14, "y": 2},
{"label": "K2E", "matrix": [2, 14], "x": 15, "y": 2, "w": 2.25},
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "K31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 1.25},
{"label": "K33", "matrix": [3, 3], "x": 3.5, "y": 3},
{"label": "K34", "matrix": [3, 4], "x": 4.5, "y": 3},
{"label": "K35", "matrix": [3, 5], "x": 5.5, "y": 3},
{"label": "K36", "matrix": [3, 6], "x": 6.5, "y": 3},
{"label": "K37", "matrix": [3, 7], "x": 7.5, "y": 3},
{"label": "K38", "matrix": [3, 8], "x": 8.5, "y": 3},
{"label": "K39", "matrix": [3, 9], "x": 9.5, "y": 3},
{"label": "K3A", "matrix": [3, 10], "x": 10.5, "y": 3},
{"label": "K3B", "matrix": [3, 11], "x": 11.5, "y": 3},
{"label": "K3C", "matrix": [3, 12], "x": 12.5, "y": 3},
{"label": "K3D", "matrix": [3, 13], "x": 13.5, "y": 3},
{"label": "K3E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
{"label": "K3F", "matrix": [3, 15], "x": 16.25, "y": 3},
{"label": "K3H", "matrix": [3, 17], "x": 18.5, "y": 3},
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "K41", "matrix": [4, 1], "x": 1, "y": 4},
{"label": "K42", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
{"label": "K43", "matrix": [4, 3], "x": 3.75, "y": 4},
{"label": "K44", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
{"label": "K47", "matrix": [4, 7], "x": 6.25, "y": 4, "w": 3},
{"label": "K49", "matrix": [4, 9], "x": 9.25, "y": 4},
{"label": "K4B", "matrix": [4, 11], "x": 10.25, "y": 4, "w": 2},
{"label": "K4C", "matrix": [4, 12], "x": 12.25, "y": 4},
{"label": "K4D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
{"label": "K4E", "matrix": [4, 14], "x": 14.75, "y": 4},
{"label": "K4F", "matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
{"label": "K4G", "matrix": [4, 16], "x": 17.5, "y": 4},
{"label": "K4H", "matrix": [4, 17], "x": 18.5, "y": 4},
{"label": "K4I", "matrix": [4, 18], "x": 19.5, "y": 4}
]
}
}
}

View File

@ -0,0 +1,46 @@
/* Copyright 2023 SawnsProjects
*
* 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 {
_BASE,
_FN
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
KC_F1, KC_F2, 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_BSPC, KC_INS, KC_HOME, KC_PGUP,
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_MUTE, 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_F3, KC_F4, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(_FN), KC_UP,
KC_F5, KC_F6, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN] = LAYOUT(
KC_F7, KC_F8, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, UG_PREV, UG_TOGG, UG_NEXT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_BASE] = { ENCODER_CCW_CW(KC_PGDN, KC_PGUP) },
[_FN] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
};
#endif // ENCODER_MAP_ENABLE

View File

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

View File

@ -0,0 +1,29 @@
# Starry FRL
![Starry FRL](https://i.imgur.com/eRYlEe7.jpeg)
This firmware support for both Solder and Hotswap PCB of Starry FRL
**Firmware files are SPECIFIC to each board. Firmware files from one, will not work on the other.** Please use the `uf2` appropriate for your board.
* Keyboard Maintainer: [Mai The San](https://github.com/MaiTheSan)
* Hardware Supported: Starry FRL
* Hardware Availability: [Waifu.works Discord](https://discord.gg/waifuworks)
Make examples for this keyboard (after setting up your build environment):
make salane/starryfrl:default
Flashing example for this keyboard:
make salane/starryfrl:default:flash
## 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**: Press the key `BOOT` in the back of PCB and plug in keyboard
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
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).

View File

@ -4,7 +4,7 @@
"url": "https://github.com/nrtkbb/Keyboards/tree/master/uzu42",
"maintainer": "nrtkbb",
"usb": {
"vid": "0xFEED",
"vid": "0x6E74",
"pid": "0x3060",
"device_version": "0.0.1"
},

View File

@ -48,8 +48,8 @@
{"x": 19.5, "y": 1.25},
{"x": 20.5, "y": 1.25},
{"x": 21.5, "y": 1.25},
{"x": 0, "y": 2.25, "w": 1.5},
{"x": 0, "y": 2.25, "w": 1.5},
{"x": 1.5, "y": 2.25},
{"x": 2.5, "y": 2.25},
{"x": 3.5, "y": 2.25},
@ -62,7 +62,7 @@
{"x": 10.5, "y": 2.25},
{"x": 11.5, "y": 2.25},
{"x": 12.5, "y": 2.25},
{"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"x": 15.25, "y": 2.25},
{"x": 16.25, "y": 2.25},
{"x": 17.25, "y": 2.25},
@ -84,6 +84,7 @@
{"x": 10.75, "y": 3.25},
{"x": 11.75, "y": 3.25},
{"x": 12.75, "y": 3.25},
{"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"x": 18.5, "y": 3.25},
{"x": 19.5, "y": 3.25},
{"x": 20.5, "y": 3.25},
@ -106,7 +107,7 @@
{"x": 19.5, "y": 4.25},
{"x": 20.5, "y": 4.25},
{"x": 21.5, "y": 4.25, "h": 2},
{"x": 0, "y": 5.25, "w": 1.25},
{"x": 1.25, "y": 5.25, "w": 1.25},
{"x": 2.5, "y": 5.25, "w": 1.25},

View File

@ -44,8 +44,8 @@
{"x": 19.5, "y": 1.25},
{"x": 20.5, "y": 1.25},
{"x": 21.5, "y": 1.25},
{"x": 0, "y": 2.25, "w": 1.5},
{"x": 0, "y": 2.25, "w": 1.5},
{"x": 1.5, "y": 2.25},
{"x": 2.5, "y": 2.25},
{"x": 3.5, "y": 2.25},
@ -58,7 +58,6 @@
{"x": 10.5, "y": 2.25},
{"x": 11.5, "y": 2.25},
{"x": 12.5, "y": 2.25},
{"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"x": 15.25, "y": 2.25},
{"x": 16.25, "y": 2.25},
{"x": 17.25, "y": 2.25},
@ -80,6 +79,7 @@
{"x": 10.75, "y": 3.25},
{"x": 11.75, "y": 3.25},
{"x": 12.75, "y": 3.25},
{"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"x": 18.5, "y": 3.25},
{"x": 19.5, "y": 3.25},
{"x": 20.5, "y": 3.25},
@ -102,7 +102,7 @@
{"x": 19.5, "y": 4.25},
{"x": 20.5, "y": 4.25},
{"x": 21.5, "y": 4.25, "h": 2},
{"x": 0, "y": 5.25, "w": 1.25},
{"x": 1.25, "y": 5.25, "w": 1.25},
{"x": 2.5, "y": 5.25, "w": 1.25},

View File

@ -10,7 +10,7 @@ from qmk.info import info_json, get_modules
from qmk.json_schema import json_load
from qmk.keyboard import keyboard_completer, keyboard_folder
from qmk.commands import dump_lines, parse_configurator_json
from qmk.path import normpath, FileType
from qmk.path import normpath, unix_style_path, FileType
from qmk.constants import GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE
from qmk.community_modules import find_module_path, load_module_jsons
@ -63,7 +63,7 @@ def generate_modules_rules(keyboard, filename):
lines.append('')
lines.append('OPT_DEFS += -DCOMMUNITY_MODULES_ENABLE=TRUE')
for module in modules:
module_path = find_module_path(module)
module_path = unix_style_path(find_module_path(module))
if not module_path:
raise FileNotFoundError(f"Module '{module}' not found.")
lines.append('')

View File

@ -3,7 +3,7 @@
import logging
import os
import argparse
from pathlib import Path
from pathlib import Path, PureWindowsPath, PurePosixPath
from qmk.constants import MAX_KEYBOARD_SUBFOLDERS, QMK_FIRMWARE, QMK_USERSPACE, HAS_QMK_USERSPACE
from qmk.errors import NoSuchKeyboardError
@ -146,6 +146,28 @@ def normpath(path):
return Path(os.environ['ORIG_CWD']) / path
def unix_style_path(path):
"""Converts a Windows-style path with drive letter to a Unix path.
Path().as_posix() normally returns the path with drive letter and forward slashes, so is inappropriate for `Makefile` paths.
Passes through unadulterated if the path is not a Windows-style path.
Args:
path
The path to convert.
Returns:
The input path converted to Unix format.
"""
if isinstance(path, PureWindowsPath):
p = list(path.parts)
p[0] = f'/{p[0][0].lower()}' # convert from `X:/` to `/x`
path = PurePosixPath(*p)
return path
class FileType(argparse.FileType):
def __init__(self, *args, **kwargs):
# Use UTF8 by default for stdin

View File

@ -7,7 +7,7 @@
ASSERT_COMMUNITY_MODULES_MIN_API_VERSION(1, 0, 0);
uint32_t delayed_hello_world(uint32_t trigger_time, void *cb_arg) {
printf("Hello, world! I'm a QMK based keyboard! The keymap array size is %d bytes.\n", (int)hello_world_introspection().total_size);
dprintf("Hello, world! I'm a QMK based keyboard! The keymap array size is %d bytes.\n", (int)hello_world_introspection().total_size);
return 0;
}

View File

@ -0,0 +1,10 @@
{
"module_name": "Super Alt Tab",
"maintainer": "QMK Maintainers",
"keycodes": [
{
"key": "COMMUNITY_MODULE_SUPER_ALT_TAB",
"aliases": ["CM_S_AT"]
}
]
}

View File

@ -0,0 +1,50 @@
// Copyright 2025 Christopher Courtney, aka Drashna Jael're (@drashna)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
ASSERT_COMMUNITY_MODULES_MIN_API_VERSION(1, 0, 0);
static bool is_alt_tab_active = false;
static uint16_t alt_tab_timer = 0;
#ifndef COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT
# define COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT 1000
#endif // COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT
#ifndef COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER
# define COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER MOD_LALT
#endif // COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER
#ifndef COMMUNITY_MODULE_SUPER_ALT_TAB_KEY
# define COMMUNITY_MODULE_SUPER_ALT_TAB_KEY KC_TAB
#endif // COMMUNITY_MODULE_SUPER_ALT_TAB_KEY
bool process_record_super_alt_tab(uint16_t keycode, keyrecord_t *record) {
if (!process_record_super_alt_tab_kb(keycode, record)) {
return false;
}
switch (keycode) { // This will do most of the grunt work with the keycodes.
case COMMUNITY_MODULE_SUPER_ALT_TAB:
if (record->event.pressed) {
if (!is_alt_tab_active) {
is_alt_tab_active = true;
register_mods(COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER);
}
alt_tab_timer = timer_read();
register_code(COMMUNITY_MODULE_SUPER_ALT_TAB_KEY);
} else {
unregister_code(COMMUNITY_MODULE_SUPER_ALT_TAB_KEY);
}
break;
}
return true;
}
void housekeeping_task_super_alt_tab(void) {
if (is_alt_tab_active) {
if (timer_elapsed(alt_tab_timer) > COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT) {
unregister_mods(COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER);
is_alt_tab_active = false;
}
}
}

View File

@ -78,7 +78,7 @@ PICOSDKINTRINSICSSRC = $(PICOSDKROOT)/src/rp2_common/pico_divider/divider.S \
$(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S
PICOSDKINTRINSICSINC = $(PICOSDKROOT)/src/common/pico_base/include \
$(PICOSDKROOT)/src/rp2_common/pico_platfrom/include \
$(PICOSDKROOT)/src/rp2_common/pico_platform/include \
$(PICOSDKROOT)/src/rp2_common/hardware_divider/include
# integer division intrinsics utilizing the RP2040 hardware divider

View File

@ -4,7 +4,7 @@
#include <stdint.h>
/* Remove these once we transitioned to C23 across all platfroms */
/* Remove these once we transitioned to C23 across all platforms */
#define UINT32_WIDTH 32
#define UINT64_WIDTH 64