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

This commit is contained in:
Nick Brassel 2025-05-13 10:04:14 +10:00
commit 92bc5ec044
No known key found for this signature in database
118 changed files with 6887 additions and 257 deletions

View File

@ -39,7 +39,7 @@ jobs:
qmk format-text -a
git diff
- uses: rlespinasse/github-slug-action@v3.x
- uses: rlespinasse/github-slug-action@v5
- name: Become QMK Bot
run: |

View File

@ -26,7 +26,7 @@ jobs:
util/regen.sh
git diff
- uses: rlespinasse/github-slug-action@v3.x
- uses: rlespinasse/github-slug-action@v5
- name: Become QMK Bot
run: |

View File

@ -1,7 +1,7 @@
{
"license": "GPL-2.0-or-later",
"devDependencies": {
"vite": "^5.4.15",
"vite": "^5.4.18",
"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.15:
version "5.4.15"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.15.tgz#2941547f10ebb4bf9b0fa0da863c06711eb7e5e5"
integrity sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==
vite@^5.2.9, vite@^5.4.18:
version "5.4.18"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.18.tgz#b5af357f9d5ebb2e0c085779b7a37a77f09168a4"
integrity sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.43"

View File

@ -18,6 +18,18 @@ export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
```
### Install Using uv {#install-using-uv}
If you have installed [uv](https://docs.astral.sh/uv/), the QMK CLI can be installed and managed as a uv tool:
```
uv tool install qmk
export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
```
This installation can be updated via `uv tool upgrade qmk`. See [Upgrading tools](https://docs.astral.sh/uv/guides/tools/#upgrading-tools) for more information.
### Install Using pip {#install-using-easy_install-or-pip}
If your system is not listed above you can install QMK manually. First ensure that you have Python 3.7 (or later) installed and have installed pip. Then install QMK with this command:

View File

@ -0,0 +1,67 @@
/* Copyright 2024 Vinod Chowl (@vchowl)
*
* 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.0 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
#define LED_LAYER_0 B3
#define LED_LAYER_1 B4
#define LED_LAYER_2 B5
#define LED_LAYER_3 B6
#define LED_PINS_COUNT 4
pin_t pins[LED_PINS_COUNT] = {LED_LAYER_0, LED_LAYER_1, LED_LAYER_2, LED_LAYER_3};
// Function to turn on all LEDs
void turn_on_all_leds(void) {
for (int i = 0; i < LED_PINS_COUNT; i++) {
gpio_write_pin_high(pins[i]); // Turn on LED
}
}
// Function to turn off all LEDs
void turn_off_all_leds(void) {
for (int i = 0; i < LED_PINS_COUNT; i++) {
gpio_write_pin_low(pins[i]); // Turn off LED
}
}
void update_leds_for_layer(uint8_t layer) {
turn_off_all_leds();
gpio_write_pin_high(pins[layer]);
}
void keyboard_post_init_kb(void) {
for (int i = 0; i < LED_PINS_COUNT; i++) {
gpio_set_pin_output(pins[i]);
gpio_write_pin_low(pins[i]);
}
// Blink all LEDs
turn_on_all_leds();
wait_ms(500); // Keep LEDs on for 500ms
turn_off_all_leds();
update_leds_for_layer(0); // Update LEDs to indicate the default layer
keyboard_post_init_user();
}
layer_state_t layer_state_set_kb(layer_state_t state) {
uint8_t layer = get_highest_layer(state);
update_leds_for_layer(layer);
return layer_state_set_user(state);
}

View File

@ -0,0 +1,5 @@
// Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define DYNAMIC_KEYMAP_MACRO_COUNT 36

View File

@ -0,0 +1,40 @@
{
"manufacturer": "Amptrics Technologies",
"keyboard_name": "Amptrics 0422",
"maintainer": "vchowl",
"bootloader": "stm32-dfu",
"diode_direction": "ROW2COL",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["C8", "C7", "C6"],
"rows": ["A14", "A13", "A10", "A9"]
},
"processor": "STM32F072",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x01A6",
"vid": "0x616D"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
{"matrix": [3, 2], "x": 2, "y": 3}
]
}
}
}

View File

@ -0,0 +1,58 @@
/* Copyright 2024 Vinod Chowl (@vchowl)
*
* 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.0 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] = {
/*
*
* Tog
*
* 7 8 9
*
* 4 5 6
*
* 1 2 3
*
*/
[0] = LAYOUT(
TO(1),
KC_7, KC_8, KC_9,
KC_4, KC_5, KC_6,
KC_1, KC_2, KC_3
),
[1] = LAYOUT(
TO(2),
KC_A, KC_B, KC_C,
KC_D, KC_E, KC_F,
KC_G, KC_H, KC_I
),
[2] = LAYOUT(
TO(3),
KC_J, KC_K, KC_L,
KC_M, KC_N, KC_O,
KC_P, KC_Q, KC_R
),
[3] = LAYOUT(
TO(0),
KC_S, KC_T, KC_U,
KC_V, KC_W, KC_X,
KC_Y, KC_Z, KC_ENT
)
};

View File

@ -0,0 +1,25 @@
# Amptrics 0422 Programmable Keypad
![magtray4x3](https://i.imgur.com/G5QMlpn_d.jpeg)
* Keyboard Maintainer: [vchowl](https://github.com/vchowl)
* Hardware Supported: STM32F072RBT6
* Hardware Availability: Not yet available.
Make example for this keyboard (after setting up your build environment):
make amptrics/0422:default
Flashing example for this keyboard:
make amptrics/0422: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

@ -4,7 +4,7 @@ ARMV = 6
USE_FPU = no
MCU_FAMILY = HT32
MCU_SERIES = HT32F523xx
MCU_LDSCRIPT = HT32F52342_ANNEPRO2
MCU_LDSCRIPT = HT32F52342_ANNEPRO2_C15
MCU_STARTUP = ht32f523xx
BOARD = ANNEPRO2_C15

View File

@ -4,7 +4,7 @@ ARMV = 6
USE_FPU = no
MCU_FAMILY = HT32
MCU_SERIES = HT32F523xx
MCU_LDSCRIPT = HT32F52342_ANNEPRO2
MCU_LDSCRIPT = HT32F52352_ANNEPRO2_C18
MCU_STARTUP = ht32f523xx
BOARD = ANNEPRO2_C18

View File

@ -0,0 +1,92 @@
/*
* Copyright (c) 2013-2016 Fabio UJonathan A. Kollaschtzig, http://fabioutzig.com
* (c) 2020 Yaotian Feng (Codetector) <codetector@codetector.cn>
* (c) 2025 Michał Kopeć <michal@nozomi.space>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/*
* HT32F52342 w/ Anne Pro 2 bootloader memory setup.
*/
MEMORY {
flash0 : org = 0x00004000, len = 64k - 16k /* firmware */
flash1 : org = 0x00000000, len = 0
flash2 : org = 0x00000000, len = 0
flash3 : org = 0x00000000, len = 0
flash4 : org = 0x00000000, len = 0
flash5 : org = 0x00000000, len = 0
flash6 : org = 0x00000000, len = 0
flash7 : org = 0x00000000, len = 0
ram0 : org = 0x20000000, len = 16k /* RAM */
ram1 : org = 0x00000000, len = 0
ram2 : org = 0x00000000, len = 0
ram3 : org = 0x00000000, len = 0
ram4 : org = 0x00000000, len = 0
ram5 : org = 0x00000000, len = 0
ram6 : org = 0x00000000, len = 0
ram7 : org = 0x00000000, len = 0
}
/* For each data/text section two region are defined, a virtual region
and a load region (_LMA suffix).*/
/* Flash region to be used for exception vectors.*/
REGION_ALIAS("VECTORS_FLASH", flash0);
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
/* Flash region to be used for constructors and destructors.*/
REGION_ALIAS("XTORS_FLASH", flash0);
REGION_ALIAS("XTORS_FLASH_LMA", flash0);
/* Flash region to be used for code text.*/
REGION_ALIAS("TEXT_FLASH", flash0);
REGION_ALIAS("TEXT_FLASH_LMA", flash0);
/* Flash region to be used for read only data.*/
REGION_ALIAS("RODATA_FLASH", flash0);
REGION_ALIAS("RODATA_FLASH_LMA", flash0);
/* Flash region to be used for various.*/
REGION_ALIAS("VARIOUS_FLASH", flash0);
REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
/* Flash region to be used for RAM(n) initialization data.*/
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
/* RAM region to be used for Main stack. This stack accommodates the processing
of all exceptions and interrupts.*/
REGION_ALIAS("MAIN_STACK_RAM", ram0);
/* RAM region to be used for the process stack. This is the stack used by
the main() function.*/
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
/* RAM region to be used for data segment.*/
REGION_ALIAS("DATA_RAM", ram0);
REGION_ALIAS("DATA_RAM_LMA", flash0);
/* RAM region to be used for BSS segment.*/
REGION_ALIAS("BSS_RAM", ram0);
/* RAM region to be used for the default heap.*/
REGION_ALIAS("HEAP_RAM", ram0);
/* Generic rules inclusion.*/
INCLUDE rules.ld

View File

@ -0,0 +1,37 @@
{
"manufacturer": "Binepad",
"keyboard_name": "KN01",
"maintainer": "Binpad",
"bootloader": "stm32duino",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "B3", "pin_b": "B4"}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true
},
"matrix_pins": {
"cols": ["A15"],
"rows": ["A8"]
},
"processor": "STM32F103",
"url": "http://binepad.com",
"usb": {
"device_version": "1.0.0",
"pid": "0x4040",
"vid": "0x4249"
},
"community_layouts": ["ortho_1x1"],
"layouts": {
"LAYOUT_ortho_1x1": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "w": 2, "h": 2}
]
}
}
}

View File

@ -0,0 +1,29 @@
{
"config": {
"features": {
"encoder_map": true
}
},
"encoders": [
[
{
"ccw": "KC_VOLD",
"cw": "KC_VOLU"
}
],
[
{
"ccw": "KC_MS_WH_DOWN",
"cw": "KC_MS_WH_UP"
}
]
],
"keyboard": "binepad/kn01",
"keymap": "default",
"layers": [
["LT(1, KC_MUTE)"],
["_______"]
],
"layout": "LAYOUT_ortho_1x1",
"version": 1
}

View File

@ -0,0 +1,29 @@
# BINEPAD NEOKNOB KN01
![Binepad NeoKnob KN01](https://i.imgur.com/N8GXq7P.png)
The KN01 is a multifunction knob, which can be rotated, pressed, and rotated while pressed.
* Keyboard Maintainer: [Binpad](https://github.com/binepad)
* Hardware Supported: **NEOKNOB KN01**
* Hardware Availability: [Binepad.com](https://www.binepad.com/products/kn01)
Make example for this keyboard (after setting up your build environment):
make binepad/kn01:default
Flashing example for this keyboard:
make binepad/kn01: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 knob while plugging in the keyboard's USB cable
* **Physical reset button**: Briefly press the button on the underside of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1,69 @@
{
"manufacturer": "Binepad",
"keyboard_name": "KnobX1",
"maintainer": "binepad",
"bootloader": "stm32duino",
"bootloader_instructions": "Hold down the layer button (small button on the bottom left) and plug in the keyboard.",
"diode_direction": "COL2ROW",
"eeprom": {
"wear_leveling": {
"backing_size": 1024
}
},
"encoder": {
"rotary": [
{"pin_a": "B12", "pin_b": "B13", "resolution": 2}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"rgblight": true
},
"matrix_pins": {
"direct": [
["A7", "A15"]
]
},
"processor": "STM32F103",
"rgblight": {
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"gradient": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"twinkle": true
},
"default": {
"hue": 198,
"speed": 2,
"val": 204
},
"driver": "ws2812",
"led_count": 2,
"sleep": true
},
"url": "https://binepad.com/products/knobx1",
"usb": {
"device_version": "1.0.0",
"pid": "0x4249",
"vid": "0x5831"
},
"ws2812": {
"pin": "C13"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0, "w": 3, "h": 3}
]
}
}
}

View File

@ -0,0 +1,22 @@
{
"config": {
"features": {
"encoder_map": true
}
},
"encoders": [
[
{
"ccw": "KC_VOLD",
"cw": "KC_VOLU"
}
]
],
"keyboard": "binepad/knobx1",
"keymap": "default",
"layers": [
["X1_LYRU", "KC_MUTE"]
],
"layout": "LAYOUT",
"version": 1
}

View File

@ -0,0 +1,76 @@
// (c) 2025 Binepad (@binpad)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "knobx1.h"
#ifdef DYNAMIC_KEYMAP_LAYER_COUNT
# define X1_KEYMAP_LAYER_COUNT DYNAMIC_KEYMAP_LAYER_COUNT
#else
# define X1_KEYMAP_LAYER_COUNT 4
#endif
void keyboard_pre_init_kb(void) {
const pin_t indicator_leds[4] = {IND1_LED, IND2_LED, IND3_LED, IND4_LED};
for (int i = 0; i < 4; i++) {
gpio_set_pin_output(indicator_leds[i]); // Set Indicators as output
gpio_write_pin_low(indicator_leds[i]); // Set initial indicator low / OFF
}
// Call the user pre-init function if needed
// Do it after ._kb incase the user wants to change pin stuff
keyboard_pre_init_user();
}
layer_state_t layer_state_set_kb(layer_state_t state) {
state = layer_state_set_user(state);
uint8_t layer = get_highest_layer(state);
x1_layer_led(layer);
return state;
}
void matrix_init_kb(void) {
// Direct PINS use; gpio -> switch -> ground.
// Setting Row 0 to ground makes it work like a direct pin
gpio_set_pin_output(ROW0_PIN); // Set Col0 as an output
gpio_write_pin_low(ROW0_PIN); // Set Col0 to low / ground
matrix_init_user();
}
bool process_x1_layer_up(keyrecord_t *record) {
if (record->event.pressed) {
uint8_t current_layer = get_highest_layer(layer_state);
// Cycle through layers
uint8_t next_layer = (current_layer + 1) % X1_KEYMAP_LAYER_COUNT;
layer_move(next_layer);
x1_layer_led(next_layer); // Update LED indicators
}
return false;
}
bool process_x1_layer_down(keyrecord_t *record) {
if (record->event.pressed) {
uint8_t current_layer = get_highest_layer(layer_state);
// Reverse through layers
uint8_t prev_layer = (current_layer == 0) ? (X1_KEYMAP_LAYER_COUNT - 1) : (current_layer - 1);
layer_move(prev_layer);
x1_layer_led(prev_layer);
}
return false;
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
switch (keycode) {
case X1_LAYER_SELECTOR_UP:
return process_x1_layer_up(record);
case X1_LAYER_SELECTOR_DOWN:
return process_x1_layer_down(record);
default:
return true;
}
}

View File

@ -0,0 +1,49 @@
// (c) 2025 Binepad (@binpad)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "quantum.h"
// PCB has a 1x2 matrix. Set the ROW0 to ground for faster direct pin access.
#define ROW0_PIN B8
#define IND1_LED A6
#define IND2_LED A5
#define IND3_LED A4
#define IND4_LED A3
// clang-format off
enum x1_keycodes {
X1_LAYER_SELECTOR_UP = QK_USER,
X1_LAYER_SELECTOR_DOWN
};
// clang-format on
#define X1_LYRU X1_LAYER_SELECTOR_UP
#define X1_LYRD X1_LAYER_SELECTOR_DOWN
// clang-format off
static inline void x1_led_1(bool on) { gpio_write_pin(IND1_LED, on); }
static inline void x1_led_2(bool on) { gpio_write_pin(IND2_LED, on); }
static inline void x1_led_3(bool on) { gpio_write_pin(IND3_LED, on); }
static inline void x1_led_4(bool on) { gpio_write_pin(IND4_LED, on); }
static inline void x1_led_1_on(void) { gpio_write_pin_high(IND1_LED); }
static inline void x1_led_2_on(void) { gpio_write_pin_high(IND2_LED); }
static inline void x1_led_3_on(void) { gpio_write_pin_high(IND3_LED); }
static inline void x1_led_4_on(void) { gpio_write_pin_high(IND4_LED); }
static inline void x1_led_1_off(void) { gpio_write_pin_low(IND1_LED); }
static inline void x1_led_2_off(void) { gpio_write_pin_low(IND2_LED); }
static inline void x1_led_3_off(void) { gpio_write_pin_low(IND3_LED); }
static inline void x1_led_4_off(void) { gpio_write_pin_low(IND4_LED); }
// clang-format on
static inline void x1_layer_led(uint8_t lyr) {
gpio_write_pin(IND1_LED, lyr >= 0);
gpio_write_pin(IND2_LED, lyr >= 1);
gpio_write_pin(IND3_LED, lyr >= 2);
gpio_write_pin(IND4_LED, lyr >= 3);
}
bool process_x1_layer_up(keyrecord_t *record);
bool process_x1_layer_down(keyrecord_t *record);

View File

@ -0,0 +1,26 @@
# Binepad KnobX1
![Binepad KnobX1](https://i.imgur.com/9HeFQXP.png)
*A fully customizable knob designed to enhance your PC experience*
* Keyboard Maintainer: [binepad](https://github.com/binepad)
* Hardware Supported: *Binepad knobX1*
* Hardware Availability: [binepad.com](https://binepad.com/products/knobx1)
Make example for this keyboard (after setting up your build environment):
make binepad/knobx1:default
Flashing example for this keyboard:
make binepad/knobx1: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 layer button (small button on the bottom left) and plug in the keyboard.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1,25 @@
/* Copyright 2024 Cipulot
*
* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
// PWM driver with direct memory access (DMA) support
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 1
#define WS2812_PWM_PAL_MODE 2
#define WS2812_DMA_STREAM STM32_DMA1_STREAM5
#define WS2812_DMA_CHANNEL 6

View File

@ -0,0 +1,22 @@
/* Copyright 2024 Cipulot
*
* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_PAL TRUE
#define HAL_USE_PWM TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,255 @@
{
"manufacturer": "Cipulot",
"keyboard_name": "OK-1",
"maintainer": "Cipulot",
"bootloader": "stm32-dfu",
"build": {
"lto": true
},
"diode_direction": "COL2ROW",
"features": {
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["B10", "B2", "B1", "B0", "A7", "A6", "A5", "A1", "A0", "F1", "F0", "C15", "A4", "A3"],
"rows": ["B11", "A2", "B9", "B8", "B7", "B6"]
},
"processor": "STM32F072",
"qmk": {
"locking": {
"enabled": true,
"resync": true
}
},
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"fractal": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"default": {
"animation": "rainbow_moving_chevron"
},
"driver": "ws2812",
"layout": [
{"matrix": [0, 13], "x": 205, "y": 0, "flags": 1},
{"matrix": [0, 12], "x": 187, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 172, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 157, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 142, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 127, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 112, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 97, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 82, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 67, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 52, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 37, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 22, "y": 0, "flags": 4},
{"matrix": [0, 0], "x": 4, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 0, "y": 13, "flags": 4},
{"matrix": [1, 1], "x": 15, "y": 13, "flags": 4},
{"matrix": [1, 2], "x": 30, "y": 13, "flags": 4},
{"matrix": [1, 3], "x": 45, "y": 13, "flags": 4},
{"matrix": [1, 4], "x": 60, "y": 13, "flags": 4},
{"matrix": [1, 5], "x": 75, "y": 13, "flags": 4},
{"matrix": [1, 6], "x": 90, "y": 13, "flags": 4},
{"matrix": [1, 7], "x": 105, "y": 13, "flags": 4},
{"matrix": [1, 8], "x": 119, "y": 13, "flags": 4},
{"matrix": [1, 9], "x": 134, "y": 13, "flags": 4},
{"matrix": [1, 10], "x": 149, "y": 13, "flags": 4},
{"matrix": [1, 11], "x": 164, "y": 13, "flags": 4},
{"matrix": [1, 12], "x": 179, "y": 13, "flags": 4},
{"matrix": [1, 13], "x": 202, "y": 13, "flags": 1},
{"matrix": [2, 13], "x": 205, "y": 26, "flags": 4},
{"matrix": [2, 12], "x": 187, "y": 26, "flags": 4},
{"matrix": [2, 11], "x": 172, "y": 26, "flags": 4},
{"matrix": [2, 10], "x": 157, "y": 26, "flags": 4},
{"matrix": [2, 9], "x": 142, "y": 26, "flags": 4},
{"matrix": [2, 8], "x": 127, "y": 26, "flags": 4},
{"matrix": [2, 7], "x": 112, "y": 26, "flags": 4},
{"matrix": [2, 6], "x": 97, "y": 26, "flags": 4},
{"matrix": [2, 5], "x": 82, "y": 26, "flags": 4},
{"matrix": [2, 4], "x": 67, "y": 26, "flags": 4},
{"matrix": [2, 3], "x": 52, "y": 26, "flags": 4},
{"matrix": [2, 2], "x": 37, "y": 26, "flags": 4},
{"matrix": [2, 1], "x": 22, "y": 26, "flags": 4},
{"matrix": [2, 0], "x": 4, "y": 26, "flags": 1},
{"matrix": [3, 0], "x": 6, "y": 38, "flags": 8},
{"matrix": [3, 1], "x": 26, "y": 38, "flags": 4},
{"matrix": [3, 2], "x": 41, "y": 38, "flags": 4},
{"matrix": [3, 3], "x": 56, "y": 38, "flags": 4},
{"matrix": [3, 4], "x": 71, "y": 38, "flags": 4},
{"matrix": [3, 5], "x": 86, "y": 38, "flags": 4},
{"matrix": [3, 6], "x": 101, "y": 38, "flags": 4},
{"matrix": [3, 7], "x": 116, "y": 38, "flags": 4},
{"matrix": [3, 8], "x": 131, "y": 38, "flags": 4},
{"matrix": [3, 9], "x": 146, "y": 38, "flags": 4},
{"matrix": [3, 10], "x": 161, "y": 38, "flags": 4},
{"matrix": [3, 11], "x": 175, "y": 38, "flags": 4},
{"matrix": [3, 12], "x": 200, "y": 38, "flags": 1},
{"matrix": [4, 12], "x": 209, "y": 51, "flags": 1},
{"matrix": [4, 11], "x": 189, "y": 51, "flags": 1},
{"matrix": [4, 10], "x": 168, "y": 51, "flags": 4},
{"matrix": [4, 9], "x": 153, "y": 51, "flags": 4},
{"matrix": [4, 8], "x": 138, "y": 51, "flags": 4},
{"matrix": [4, 7], "x": 123, "y": 51, "flags": 4},
{"matrix": [4, 6], "x": 108, "y": 51, "flags": 4},
{"matrix": [4, 5], "x": 93, "y": 51, "flags": 4},
{"matrix": [4, 4], "x": 78, "y": 51, "flags": 4},
{"matrix": [4, 3], "x": 63, "y": 51, "flags": 4},
{"matrix": [4, 2], "x": 49, "y": 51, "flags": 4},
{"matrix": [4, 1], "x": 34, "y": 51, "flags": 4},
{"matrix": [4, 0], "x": 9, "y": 51, "flags": 4},
{"matrix": [5, 0], "x": 0, "y": 64, "flags": 1},
{"matrix": [5, 1], "x": 15, "y": 64, "flags": 1},
{"matrix": [5, 2], "x": 30, "y": 64, "flags": 1},
{"matrix": [5, 3], "x": 47, "y": 64, "flags": 1},
{"matrix": [5, 6], "x": 103, "y": 64, "flags": 4},
{"matrix": [5, 9], "x": 159, "y": 64, "flags": 1},
{"matrix": [5, 10], "x": 177, "y": 64, "flags": 1},
{"matrix": [5, 11], "x": 194, "y": 64, "flags": 1},
{"matrix": [5, 12], "x": 209, "y": 64, "flags": 1},
{"matrix": [5, 13], "x": 224, "y": 64, "flags": 1}
],
"sleep": true
},
"usb": {
"device_version": "0.0.1",
"pid": "0x6BCA",
"shared_endpoint": {
"keyboard": true
},
"vid": "0x6369"
},
"ws2812": {
"driver": "pwm",
"pin": "B13"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
{"matrix": [0, 1], "x": 1.5, "y": 0},
{"matrix": [0, 2], "x": 2.5, "y": 0},
{"matrix": [0, 3], "x": 3.5, "y": 0},
{"matrix": [0, 4], "x": 4.5, "y": 0},
{"matrix": [0, 5], "x": 5.5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [0, 8], "x": 8.5, "y": 0},
{"matrix": [0, 9], "x": 9.5, "y": 0},
{"matrix": [0, 10], "x": 10.5, "y": 0},
{"matrix": [0, 11], "x": 11.5, "y": 0},
{"matrix": [0, 12], "x": 12.5, "y": 0},
{"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
{"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": [1, 10], "x": 10, "y": 1},
{"matrix": [1, 11], "x": 11, "y": 1},
{"matrix": [1, 12], "x": 12, "y": 1},
{"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2},
{"matrix": [2, 2], "x": 2.5, "y": 2},
{"matrix": [2, 3], "x": 3.5, "y": 2},
{"matrix": [2, 4], "x": 4.5, "y": 2},
{"matrix": [2, 5], "x": 5.5, "y": 2},
{"matrix": [2, 6], "x": 6.5, "y": 2},
{"matrix": [2, 7], "x": 7.5, "y": 2},
{"matrix": [2, 8], "x": 8.5, "y": 2},
{"matrix": [2, 9], "x": 9.5, "y": 2},
{"matrix": [2, 10], "x": 10.5, "y": 2},
{"matrix": [2, 11], "x": 11.5, "y": 2},
{"matrix": [2, 12], "x": 12.5, "y": 2},
{"matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3},
{"matrix": [3, 2], "x": 2.75, "y": 3},
{"matrix": [3, 3], "x": 3.75, "y": 3},
{"matrix": [3, 4], "x": 4.75, "y": 3},
{"matrix": [3, 5], "x": 5.75, "y": 3},
{"matrix": [3, 6], "x": 6.75, "y": 3},
{"matrix": [3, 7], "x": 7.75, "y": 3},
{"matrix": [3, 8], "x": 8.75, "y": 3},
{"matrix": [3, 9], "x": 9.75, "y": 3},
{"matrix": [3, 10], "x": 10.75, "y": 3},
{"matrix": [3, 11], "x": 11.75, "y": 3},
{"matrix": [3, 12], "x": 12.75, "y": 3, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
{"matrix": [4, 1], "x": 2.25, "y": 4},
{"matrix": [4, 2], "x": 3.25, "y": 4},
{"matrix": [4, 3], "x": 4.25, "y": 4},
{"matrix": [4, 4], "x": 5.25, "y": 4},
{"matrix": [4, 5], "x": 6.25, "y": 4},
{"matrix": [4, 6], "x": 7.25, "y": 4},
{"matrix": [4, 7], "x": 8.25, "y": 4},
{"matrix": [4, 8], "x": 9.25, "y": 4},
{"matrix": [4, 9], "x": 10.25, "y": 4},
{"matrix": [4, 10], "x": 11.25, "y": 4},
{"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.75},
{"matrix": [4, 12], "x": 14, "y": 4},
{"matrix": [5, 0], "x": 0, "y": 5},
{"matrix": [5, 1], "x": 1, "y": 5},
{"matrix": [5, 2], "x": 2, "y": 5},
{"matrix": [5, 3], "x": 3, "y": 5, "w": 1.25},
{"matrix": [5, 6], "x": 4.25, "y": 5, "w": 6.25},
{"matrix": [5, 9], "x": 10.5, "y": 5, "w": 1.25},
{"matrix": [5, 10], "x": 11.75, "y": 5, "w": 1.25},
{"matrix": [5, 11], "x": 13, "y": 5},
{"matrix": [5, 12], "x": 14, "y": 5},
{"matrix": [5, 13], "x": 15, "y": 5}
]
}
}
}

View File

@ -0,0 +1,90 @@
/* Copyright 2024 Cipulot
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers{
_MAC_BASE,
_MAC_FN,
_WIN_BASE,
_WIN_FN
};
enum custom_keycodes {
SNIP = SAFE_RANGE,
};
// clang-format on
#define MAC PDF(_MAC_BASE)
#define WIN PDF(_WIN_BASE)
#define MACFN MO(_MAC_FN)
#define WINFN MO(_WIN_FN)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[_MAC_BASE] = LAYOUT(
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_DEL,
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_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, KC_UP,
MACFN, KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, KC_LEFT, KC_DOWN, KC_RIGHT
),
[_MAC_FN] = LAYOUT(
_______, KC_BRID, KC_BRIU, KC_MCTL, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, SNIP,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, WIN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RM_VALU,
_______, _______, _______, _______, _______, _______, _______, RM_PREV, RM_VALD, RM_PREV
),
[_WIN_BASE] = LAYOUT(
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_DEL,
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_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, KC_UP,
WINFN, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT
),
[_WIN_FN] = LAYOUT(
_______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, SNIP,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, MAC, _______, _______, _______, _______, RM_VALU,
_______, _______, _______, _______, _______, _______, _______, RM_PREV, RM_VALD, RM_PREV
),
// clang-format on
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case SNIP:
if (record->event.pressed) {
if (IS_LAYER_ON(_WIN_FN)) {
tap_code(KC_PSCR);
} else if (IS_LAYER_ON(_MAC_FN)) {
tap_code16(LSFT(LGUI(KC_3)));
}
}
return false;
default:
return true;
}
}

View File

@ -0,0 +1,22 @@
/* Copyright 2024 Cipulot
*
* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_PWM_USE_TIM1
#define STM32_PWM_USE_TIM1 TRUE

View File

@ -0,0 +1,25 @@
# OK-1
OK-1 is a low profile keyboard.
* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
* Hardware Supported: OK-1
* Hardware Availability: TBD
Make example for this keyboard (after setting up your build environment):
make cipulot/ok_1:default
Flashing example for this keyboard:
make cipulot/ok_1: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:
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is configured.
* **Physical reset button**: Long press the reset button soldered on the PCB.
* **Bootmagic reset**: Hold down the top left key and plug in the controller.

View File

@ -0,0 +1,2 @@
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF

View File

@ -21,8 +21,8 @@
},
"encoder": {
"rotary": [
{"pin_a": "F5", "pin_b": "F6"},
{"pin_a": "E6", "pin_b": "F0"},
{"pin_a": "F5", "pin_b": "F6", "resolution": 4},
{"pin_a": "E6", "pin_b": "F0", "resolution": 4},
{"pin_a": "B3", "pin_b": "B2", "resolution": 2}
]
},

View File

@ -11,14 +11,14 @@ enum my_layers {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
KC_PSCR, KC_CUT, KC_COPY, KC_PSTE, MS_BTN3, RM_TOGG,
KC_CALC, KC_UNDO, KC_MPLY, KC_MNXT, KC_MUTE,
KC_ESC, C(KC_X), C(KC_C), C(KC_V), MS_BTN3, RM_TOGG,
KC_PSCR,C(KC_Z), KC_CALC, KC_MNXT, KC_MPLY,
MO(1), KC_LGUI, KC_DEL, KC_APP
),
[_RGBL] = LAYOUT(
RM_NEXT, RM_SATU, KC_INS, KC_DEL, _______, _______,
RM_PREV, RM_SATD, KC_PGUP, KC_HOME, _______,
RM_NEXT, RM_SATU, KC_INS, KC_DEL, _______, _______,
RM_PREV, RM_SATD, KC_PGUP, KC_HOME, KC_MUTE,
_______, QK_BOOT, KC_PGDN, KC_END
),
};

View File

@ -0,0 +1,95 @@
{
"manufacturer": "GreenKeys",
"keyboard_name": "Gravity-45",
"maintainer": "takashicompany",
"processor": "RP2040",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["GP14", "GP15", "GP26", "GP27", "GP28", "GP29", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0"],
"rows": ["GP10", "GP11", "GP12", "GP13"]
},
"rgblight": {
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"static_gradient": true,
"twinkle": true
},
"led_count": 1,
"max_brightness": 120
},
"url": "https://green-keys.info",
"usb": {
"device_version": "1.0.0",
"pid": "0x9121",
"vid": "0x1209"
},
"ws2812": {
"driver": "vendor",
"pin": "GP8"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 9.5, "y": 0},
{"matrix": [0, 7], "x": 10.5, "y": 0},
{"matrix": [0, 8], "x": 11.5, "y": 0},
{"matrix": [0, 9], "x": 12.5, "y": 0},
{"matrix": [0, 10], "x": 13.5, "y": 0},
{"matrix": [0, 11], "x": 14.5, "y": 0},
{"matrix": [1, 0], "x": 0.25, "y": 1},
{"matrix": [1, 1], "x": 1.25, "y": 1},
{"matrix": [1, 2], "x": 2.25, "y": 1},
{"matrix": [1, 3], "x": 3.25, "y": 1},
{"matrix": [1, 4], "x": 4.25, "y": 1},
{"matrix": [1, 5], "x": 5.25, "y": 1},
{"matrix": [3, 11], "x": 7.625, "y": 1.5},
{"matrix": [1, 6], "x": 9.75, "y": 1},
{"matrix": [1, 7], "x": 10.75, "y": 1},
{"matrix": [1, 8], "x": 11.75, "y": 1},
{"matrix": [1, 9], "x": 12.75, "y": 1},
{"matrix": [1, 10], "x": 13.75, "y": 1},
{"matrix": [1, 11], "x": 14.75, "y": 1},
{"matrix": [2, 0], "x": 0.5, "y": 2},
{"matrix": [2, 1], "x": 1.5, "y": 2},
{"matrix": [2, 2], "x": 2.5, "y": 2},
{"matrix": [2, 3], "x": 3.5, "y": 2},
{"matrix": [2, 4], "x": 4.5, "y": 2},
{"matrix": [2, 5], "x": 5.5, "y": 2},
{"matrix": [2, 6], "x": 10, "y": 2},
{"matrix": [2, 7], "x": 11, "y": 2},
{"matrix": [2, 8], "x": 12, "y": 2},
{"matrix": [2, 9], "x": 13, "y": 2},
{"matrix": [2, 10], "x": 14, "y": 2},
{"matrix": [2, 11], "x": 15, "y": 2},
{"matrix": [3, 2], "x": 2.5, "y": 3},
{"matrix": [3, 3], "x": 3.5, "y": 3, "w": 1.25},
{"matrix": [3, 4], "x": 4.75, "y": 3, "w": 1.25},
{"matrix": [3, 5], "x": 6, "y": 3, "w": 1.25},
{"matrix": [3, 6], "x": 9.75, "y": 3, "w": 1.25},
{"matrix": [3, 7], "x": 11, "y": 3, "w": 1.25},
{"matrix": [3, 8], "x": 12.25, "y": 3, "w": 1.25},
{"matrix": [3, 9], "x": 13.5, "y": 3, "w": 1.25}
]
}
}
}

View File

@ -0,0 +1,70 @@
// Copyright 2025 takashicompany (@takashicompany)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, LT(7, KC_Q), KC_W, KC_E, LT(6, KC_R), KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_LCTL, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, RGB_TOG, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_ENT,
KC_LSFT, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC, KC_DEL,
KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_RALT, KC_RGUI
),
[1] = LAYOUT(
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
KC_TRNS, LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_TRNS, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3, KC_TRNS,
KC_TRNS, LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3), KC_TRNS,
KC_TRNS, KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_TRNS, KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3), KC_TRNS,
KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_TRNS, LT(7, KC_Q), KC_W, KC_E, LT(6, KC_R), KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS,
KC_TRNS, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_TRNS, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_TRNS,
KC_TRNS, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC, KC_TRNS,
KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(5, KC_SPC), LT(4, KC_LNG1), KC_RALT, KC_RGUI
),
[4] = LAYOUT(
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
KC_TRNS, KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_TRNS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3, KC_TRNS,
KC_TRNS, LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[5] = LAYOUT(
KC_TRNS, KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS, KC_TRNS,
KC_TRNS, KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_TRNS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[6] = LAYOUT(
KC_TRNS, KC_ESC, KC_TAB, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_TRNS,
KC_TRNS, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_TRNS, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_TRNS,
KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[7] = LAYOUT(
KC_TRNS, KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
KC_TRNS, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), MO(9), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[8] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, DF(0), DF(3), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1,37 @@
# Gravity-45
![green_keys/gravity_45](https://i.imgur.com/FTyC65h.jpeg)
Gravity-45 is a 45-key integrated keyboard.
It uses the Waveshare RP2040-Zero MCU.
Keyswitch sockets are used for easy keyswitch replacement.
The tight PCB outline lines allow for easy case design.
---
Gravity-45 は 45キーの一体型のキーボードだ。
MCUにはWaveshare RP2040-Zeroを採用している。
キースイッチソケットを使用するためキースイッチの交換が容易に行える。
PCBの外形線がタイトなので、ケースの設計が容易だ。
* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
* Hardware Supported: PCB, Waveshare RP2040-Zero
* Hardware Availability: [GreenKeys](https://green-keys.info/)
Make example for this keyboard (after setting up your build environment):
make green_keys/gravity_45:default
Flashing example for this keyboard:
make green_keys/gravity_45: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,107 @@
{
"manufacturer": "Henning Cordes",
"keyboard_name": "epssp75",
"maintainer": "hen-des",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP16", "GP17", "GP18", "GP19", "GP20", "GP21", "GP22"],
"rows": ["GP1", "GP2", "GP3", "GP4", "GP5"]
},
"processor": "RP2040",
"url": "https://hen-des.github.io/epssp75/",
"usb": {
"device_version": "1.0.0",
"pid": "0x0075",
"vid": "0x6863"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [0, 9], "x": 8.5, "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},
{"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [0, 15], "x": 15, "y": 0},
{"matrix": [0, 16], "x": 16, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
{"matrix": [1, 6], "x": 6, "y": 1},
{"matrix": [1, 8], "x": 7.25, "y": 1, "w": 2.5},
{"matrix": [1, 10], "x": 10, "y": 1},
{"matrix": [1, 11], "x": 11, "y": 1},
{"matrix": [1, 12], "x": 12, "y": 1},
{"matrix": [1, 13], "x": 13, "y": 1},
{"matrix": [1, 14], "x": 14, "y": 1},
{"matrix": [1, 15], "x": 15, "y": 1},
{"matrix": [1, 16], "x": 16, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
{"matrix": [2, 6], "x": 6, "y": 2, "h": 2},
{"matrix": [2, 7], "x": 7, "y": 2},
{"matrix": [2, 8], "x": 8, "y": 2},
{"matrix": [2, 9], "x": 9, "y": 2},
{"matrix": [2, 10], "x": 10, "y": 2, "h": 2},
{"matrix": [2, 11], "x": 11, "y": 2},
{"matrix": [2, 12], "x": 12, "y": 2},
{"matrix": [2, 13], "x": 13, "y": 2},
{"matrix": [2, 14], "x": 14, "y": 2},
{"matrix": [2, 15], "x": 15, "y": 2},
{"matrix": [2, 16], "x": 16, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
{"matrix": [3, 2], "x": 2, "y": 3},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3},
{"matrix": [3, 5], "x": 5, "y": 3},
{"matrix": [3, 7], "x": 7, "y": 3},
{"matrix": [3, 8], "x": 8, "y": 3},
{"matrix": [3, 9], "x": 9, "y": 3},
{"matrix": [3, 11], "x": 11, "y": 3},
{"matrix": [3, 12], "x": 12, "y": 3},
{"matrix": [3, 13], "x": 13, "y": 3},
{"matrix": [3, 14], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 15, "y": 3},
{"matrix": [3, 16], "x": 16, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4},
{"matrix": [4, 1], "x": 1, "y": 4},
{"matrix": [4, 2], "x": 2, "y": 4},
{"matrix": [4, 3], "x": 3, "y": 4},
{"matrix": [4, 5], "x": 4, "y": 4, "w": 2},
{"matrix": [4, 6], "x": 6, "y": 4, "h": 2},
{"matrix": [4, 10], "x": 10, "y": 4, "h": 2},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 2},
{"matrix": [4, 13], "x": 13, "y": 4},
{"matrix": [4, 14], "x": 14, "y": 4},
{"matrix": [4, 15], "x": 15, "y": 4},
{"matrix": [4, 16], "x": 16, "y": 4}
]
}
}
}

View File

@ -0,0 +1,21 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F22, KC_RBRC, KC_PSCR, KC_F23, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F20, KC_ENT, KC_F21, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_DEL, KC_HOME, KC_UP, KC_END, KC_BSPC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LEFT, KC_DOWN, KC_RGHT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_NUBS, KC_SPC, KC_LSFT, KC_ENT, KC_SPC, KC_RALT, MO(1), RGUI_T(KC_APP), KC_RCTL
),
[1] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F22, KC_PAUS, KC_PSCR, KC_F23, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TAB, KC_PGUP, LCTL(KC_LEFT), KC_UP, LCTL(KC_RGHT), KC_PGDN, KC_F20, KC_ENT, KC_F21, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
KC_CAPS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_DEL, KC_HOME, KC_VOLU, KC_END, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_RSFT, LCA(KC_F2), KC_TAB, KC_F2, KC_F5, KC_F23, KC_MUTE, KC_VOLD, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_NUBS, KC_SPC, KC_LSFT, KC_ENT, KC_SPC, KC_RALT, _______, KC_APP, KC_RCTL
)
};

View File

@ -0,0 +1,18 @@
# epssp75
Ergonomic PSeudo SPlit 75-key Keyboard. Desinged after two years of working with a [Truly Ergonomic CLEAVE Keyboard](https://trulyergonomic.com) and also inspired by the [Redox Keyboard](https://github.com/mattdibi/redox-keyboard).
I am using and the [NOTED](https://neo-layout.org/Layouts/noted/) layout and the [ReNeo](https://neo-layout.org/Einrichtung/reneo/) software which offers additional possible key functions and layers.
* Keyboard Maintainer: [Henning Cordes](https://github.com/hen-des)
* Files: [https://github.com/hen-des/epssp75](https://github.com/hen-des/epssp75)
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).
Detailed [description](https://hen-des.github.io/epssp75/index.html) and expiriences of the conception and manufacturing.
## 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 button on the back of the PCB - some may have pads you must short instead

View File

@ -0,0 +1,94 @@
{
"keyboard_name": "LuMaWing",
"manufacturer": "Lucas Mateijsen",
"url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBB80",
"pid": "0x050D",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"command": true,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false
},
"qmk": {
"locking": {
"enabled": true,
"resync": true
}
},
"matrix_pins": {
"cols": ["B1", "B3", "B2", "B6", "B5", "B4", "E6", "D7", "C6", "D4", "D0", "D1", "D2", "D3"],
"rows": ["F4", "F5", "F6", "F7"]
},
"diode_direction": "COL2ROW",
"development_board": "promicro",
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [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},
{"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": [1, 10], "x": 10, "y": 1},
{"matrix": [1, 11], "x": 11, "y": 1},
{"matrix": [1, 12], "x": 12, "y": 1},
{"matrix": [1, 13], "x": 13, "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": [2, 10], "x": 10, "y": 2},
{"matrix": [2, 11], "x": 11, "y": 2},
{"matrix": [2, 12], "x": 12, "y": 2},
{"matrix": [2, 13], "x": 13, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
{"matrix": [3, 2], "x": 2, "y": 3},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3},
{"matrix": [3, 6], "x": 5, "y": 3, "w": 2},
{"matrix": [3, 7], "x": 7, "y": 3, "w": 2},
{"matrix": [3, 9], "x": 9, "y": 3},
{"matrix": [3, 10], "x": 10, "y": 3},
{"matrix": [3, 11], "x": 11, "y": 3},
{"matrix": [3, 12], "x": 12, "y": 3},
{"matrix": [3, 13], "x": 13, "y": 3}
]
}
}
}

View File

@ -0,0 +1,70 @@
/* Copyright 2021 Richard Nunez <l.mateijsen@outlook.com>
*
* 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
#define KC_COPY LCTL(KC_C)
#define KC_CUT LCTL(KC_X)
#define KC_PSTE LCTL(KC_V)
#define KC_UNDO LCTL(KC_Z)
#define KC_AGIN LCTL(KC_Y)
enum layer_names {
_COLEMAKDH,
_QWERTY,
_NUMBERS,
_FUNCTIONAL,
_ADMIN
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_COLEMAKDH] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_B, XXXXXXX, XXXXXXX, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_G, XXXXXXX, XXXXXXX, KC_M, KC_N, KC_E, KC_I, KC_O, KC_BSPC,
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, XXXXXXX, XXXXXXX, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, MO(3), KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RGUI, XXXXXXX, KC_ENT
),
[_QWERTY] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_DEL,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, MO(3), KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RGUI, XXXXXXX, KC_ENT
),
[_NUMBERS] = LAYOUT(
KC_ESC, 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,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_QUOT, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
_______, XXXXXXX, XXXXXXX, _______, MO(4), _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
),
[_FUNCTIONAL] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, KC_AGIN, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
_______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX
),
[_ADMIN] = LAYOUT(
QK_BOOT, DF(0), DF(1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
_______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
)
};

View File

@ -0,0 +1,15 @@
# LuMaWing handwired
Custom handwired LuMaWing keyboard.
* Keyboard Maintainer: [Lucas Mateijsen](https://github.com/LucasMateijsen/)
* Hardware Supported: Handwired LuMaWing 14x4 ortho keyboard Pro-Micro
* Hardware Availability:
Make example for this keyboard (after setting up your build environment):
make handwired/ortho4x14: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).
To get into the Bootloader, simply hold down the top-left key (pos 0, 0) and power the board.

View File

@ -0,0 +1,18 @@
// Copyright 2023 Jason Hazel (@jasonhazel)
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#define SPI_DRIVER SPID1
#define SPI_SCK_PIN A5
#define SPI_SCK_PAL_MODE 0
#define SPI_MOSI_PIN A7
#define SPI_MOSI_PAL_MODE 0
#define SPI_MISO_PIN A6
#define SPI_MISO_PAL_MODE 0
#define CIRQUE_PINNACLE_SPI_DIVISOR 8
#define CIRQUE_PINNACLE_SPI_CS_PIN A4
#define POINTING_DEVICE_CS_PIN A4
#define CIRQUE_PINNACLE_DIAMETER_MM 35
#define POINTING_DEVICE_ROTATION_90

View File

@ -0,0 +1,10 @@
// Copyright 2023 Jason Hazel (@jasonhazel)
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#define HAL_USE_SPI TRUE
#define SPI_USE_WAIT TRUE
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
#include_next <halconf.h>

View File

@ -0,0 +1,67 @@
{
"manufacturer": "Hazel",
"keyboard_name": "Bad Wings v2",
"maintainer": "jasonhazel",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"pointing_device": true
},
"matrix_pins": {
"cols": ["F1", "F0", "C15", "C14", "C13"],
"rows": ["B11", "B10", "B2", "B1", "B3", "B4", "B5", "B6"]
},
"processor": "STM32F072",
"url": "https://github.com/hazels-garage/bad-wings/tree/master/v2",
"usb": {
"device_version": "1.0.0",
"pid": "0x4258",
"vid": "0x4A48"
},
"community_layouts": ["split_3x5_3"],
"layouts": {
"LAYOUT_split_3x5_3": {
"layout": [
{"label": "00", "matrix": [0, 0], "x": 0, "y": 0.75, "w": 1},
{"label": "01", "matrix": [0, 1], "x": 1, "y": 0.5, "w": 1},
{"label": "02", "matrix": [0, 2], "x": 2, "y": 0, "w": 1},
{"label": "03", "matrix": [0, 3], "x": 3, "y": 0.25, "w": 1},
{"label": "04", "matrix": [0, 4], "x": 4, "y": 0.36, "w": 1},
{"label": "44", "matrix": [4, 4], "x": 8, "y": 0.36, "w": 1},
{"label": "43", "matrix": [4, 3], "x": 9, "y": 0.25, "w": 1},
{"label": "42", "matrix": [4, 2], "x": 10, "y": 0, "w": 1},
{"label": "41", "matrix": [4, 1], "x": 11, "y": 0.5, "w": 1},
{"label": "40", "matrix": [4, 0], "x": 12, "y": 0.75, "w": 1},
{"label": "10", "matrix": [1, 0], "x": 0, "y": 1.75, "w": 1},
{"label": "11", "matrix": [1, 1], "x": 1, "y": 1.5, "w": 1},
{"label": "12", "matrix": [1, 2], "x": 2, "y": 1, "w": 1},
{"label": "13", "matrix": [1, 3], "x": 3, "y": 1.25, "w": 1},
{"label": "14", "matrix": [1, 4], "x": 4, "y": 1.36, "w": 1},
{"label": "54", "matrix": [5, 4], "x": 8, "y": 1.36, "w": 1},
{"label": "53", "matrix": [5, 3], "x": 9, "y": 1.25, "w": 1},
{"label": "52", "matrix": [5, 2], "x": 10, "y": 1, "w": 1},
{"label": "51", "matrix": [5, 1], "x": 11, "y": 1.5, "w": 1},
{"label": "50", "matrix": [5, 0], "x": 12, "y": 1.75, "w": 1},
{"label": "20", "matrix": [2, 0], "x": 0, "y": 2.75, "w": 1},
{"label": "21", "matrix": [2, 1], "x": 1, "y": 2.5, "w": 1},
{"label": "22", "matrix": [2, 2], "x": 2, "y": 2, "w": 1},
{"label": "23", "matrix": [2, 3], "x": 3, "y": 2.25, "w": 1},
{"label": "24", "matrix": [2, 4], "x": 4, "y": 2.36, "w": 1},
{"label": "64", "matrix": [6, 4], "x": 8, "y": 2.36, "w": 1},
{"label": "63", "matrix": [6, 3], "x": 9, "y": 2.25, "w": 1},
{"label": "62", "matrix": [6, 2], "x": 10, "y": 2, "w": 1},
{"label": "61", "matrix": [6, 1], "x": 11, "y": 2.5, "w": 1},
{"label": "60", "matrix": [6, 0], "x": 12, "y": 2.75, "w": 1},
{"label": "32", "matrix": [3, 2], "x": 3, "y": 3.25, "w": 1},
{"label": "33", "matrix": [3, 3], "x": 4, "y": 3.36, "w": 1},
{"label": "34", "matrix": [3, 4], "x": 5, "y": 3.47, "w": 1},
{"label": "74", "matrix": [7, 4], "x": 7, "y": 3.47, "w": 1},
{"label": "73", "matrix": [7, 3], "x": 8, "y": 3.36, "w": 1},
{"label": "72", "matrix": [7, 2], "x": 9, "y": 3.25, "w": 1}
]
}
}
}

View File

@ -0,0 +1,11 @@
// Copyright 2023 Jason Hazel (@jasonhazel)
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#define PERMISSIVE_HOLD
#define ONESHOT_TAP_TOGGLE 10
#define ONESHOT_TIMEOUT 500
#define CIRQUE_PINNACLE_TAP_ENABLE
#define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_ABSOLUTE_MODE
#define CIRQUE_DEVICE_GESTURES_SCROLL_ENABLE

View File

@ -0,0 +1,32 @@
{
"keyboard": "hazel/bad_wings_v2",
"keymap": "default",
"layout": "LAYOUT_split_3x5_3",
"layers": [
[
"KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P",
"KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_QUOT",
"KC_Z", "LGUI_T(KC_X)", "LALT_T(KC_C)", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH",
"KC_LCTL", "OSL(1)", "OSM(MOD_LSFT)", "LT(3,KC_SPC)", "LT(2,KC_BSPC)", "KC_ENT"
],
[
"KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_RBRC", "KC_RCBR", "KC_RPRN", "KC_GT", "KC_NO",
"KC_GRV", "KC_TILD", "KC_UNDS", "KC_EQL", "KC_NO", "KC_LBRC", "KC_LCBR", "KC_LPRN", "KC_LT", "KC_BSLS",
"KC_NO", "KC_NO", "KC_PLUS", "KC_MINS", "KC_NO", "KC_NO", "KC_NO", "KC_COLN", "KC_DOT", "KC_SCLN",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
],
[
"KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_PIPE", "KC_NO",
"KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0",
"KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
],
[
"KC_ESC", "KC_F1", "KC_F4", "KC_F7", "KC_F10", "KC_NO", "KC_HOME", "KC_UP", "KC_END", "KC_NO",
"KC_TAB", "KC_F2", "KC_F5", "KC_F8", "KC_F11", "KC_NO", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_NO",
"KC_NO", "KC_F3", "KC_F6", "KC_F9", "KC_F12", "KC_NO", "KC_MRWD", "KC_MPLY", "KC_MFFD", "KC_DEL",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
]
],
"author": "Jason Hazel"
}

View File

@ -0,0 +1,9 @@
// Copyright 2022 Kyle McCreery (@kylemccreery)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef STM32_SPI_USE_SPI1
#define STM32_SPI_USE_SPI1 TRUE

View File

@ -0,0 +1,27 @@
# Bad Wings v2
![Bad Wings v2](https://i.imgur.com/8uCHotK.jpeg)
36 key unibody split
* Keyboard Maintainer: [Jason Hazel](https://github.com/jasonhazel)
* Hardware Supported: Bad Wings v2
* Hardware Availability: [Hazel's Garage GitHub](https://github.com/hazels-garage/bad-wings/tree/master/v2)
Make example for this keyboard (after setting up your build environment):
make hazel/bad_wings_v2:default
Flashing example for this keyboard:
make hazel/bad_wings_v2: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 top-left key and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi

20
keyboards/jcpm2/config.h Normal file
View File

@ -0,0 +1,20 @@
/* Copyright 2025 Jeremy Cook Consulting LLC <info@jeremyscook.com>
*
* 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.
*
* If you did not receive a copy of the GNU General Public License
* along with this program, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define OLED_DISPLAY_128X64
#define OLED_TIMEOUT 2000000

46
keyboards/jcpm2/jcpm2.c Normal file
View File

@ -0,0 +1,46 @@
/* Copyright 2025 Jeremy Cook Consulting LLC <info@jeremyscook.com>
*
* 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"
#ifdef OLED_ENABLE
static uint32_t logo_timer = 0;
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
logo_timer = timer_read();
return OLED_ROTATION_180;
}
static void render_logo(void) {
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
};
oled_write_P(qmk_logo, false);
}
bool oled_task_kb(void) {
if (timer_elapsed32(logo_timer) < 1000) {
render_logo();
return false;
}
if (!oled_task_user()) {
return false;
}
return true;
}
#endif

View File

@ -0,0 +1,79 @@
{
"manufacturer": "jeremyscook",
"keyboard_name": "jcpm2",
"maintainer": "jeremyscook",
"development_board": "promicro",
"encoder": {
"rotary": [
{"pin_a": "D2", "pin_b": "D3"}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"oled": true,
"rgb_matrix": true
},
"matrix_pins": {
"direct": [
["D4", null, "F4", "B3"],
["B4", null, "F5", "B2"],
["B1", "F7", "F6", "B6"]
]
},
"rgb_matrix": {
"animations": {
"digital_rain": true,
"hue_breathing": true,
"typing_heatmap": true
},
"default": {
"animation": "typing_heatmap",
"val": 180
},
"driver": "ws2812",
"layout": [
{"matrix": [2, 0], "x": 0, "y": 64, "flags": 4},
{"matrix": [2, 1], "x": 75, "y": 64, "flags": 4},
{"matrix": [2, 2], "x": 150, "y": 64, "flags": 4},
{"matrix": [1, 2], "x": 150, "y": 32, "flags": 4},
{"matrix": [0, 2], "x": 150, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 224, "y": 0, "flags": 4},
{"matrix": [1, 3], "x": 224, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 224, "y": 64, "flags": 4},
{"x": 224, "y": 0, "flags": 2},
{"x": 224, "y": 64, "flags": 2},
{"x": 112, "y": 64, "flags": 2},
{"x": 0, "y": 64, "flags": 2}
],
"sleep": true
},
"url": "https://github.com/JeremySCook/JC-Pro-Macro-2",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"ws2812": {
"pin": "C6"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "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}
]
}
}
}

View File

@ -0,0 +1,132 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// Define the layers
enum layer_names {
_LAYER0,
_LAYER0_MOD,
_LAYER1,
_LAYER2
};
#define UNDERGLOW 60
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* E n 6 7
*
* B n 5 8
*
* 2 3 4 9
*
*/
[_LAYER0] = LAYOUT( // default
KC_MUTE, LSFT(KC_COMM), LSFT(KC_DOT),
DF(_LAYER1), KC_J, KC_L,
KC_MPRV, KC_MPLY, KC_MNXT, TG(_LAYER0_MOD) // btm-right one shot mod layer
),
[_LAYER0_MOD] = LAYOUT( // default MOD
_______, RM_VALU, RM_NEXT, // _______ transparent, goes to above layer
_______, RM_VALD, RM_TOGG,
LCTL(LGUI(KC_SPC)), _______, _______, TG(_LAYER0_MOD)
),
[_LAYER1] = LAYOUT( // FCPX
LSFT(LGUI(KC_B)), LGUI(KC_B), LGUI(KC_EQL),
DF(_LAYER2), LALT(KC_K), LGUI(KC_MINS),
KC_J, KC_K, KC_L, KC_BSPC
),
[_LAYER2] = LAYOUT( // KICAD
KC_E, KC_ESC, KC_M,
DF(_LAYER0), LGUI(KC_Z), KC_X,
KC_V, KC_D, KC_U, KC_BSPC
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_LAYER0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, // default
[_LAYER0_MOD] = { ENCODER_CCW_CW(_______, _______) }, // default MOD
[_LAYER1] = { ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, // FCPX
[_LAYER2] = { ENCODER_CCW_CW(KC_R, S(KC_R)) } // KICAD
};
#endif
#ifdef OLED_ENABLE
// Function to display the current layer and information on the OLED
bool oled_task_user(void) {
switch (get_highest_layer(layer_state | default_layer_state)) {
case _LAYER0:
oled_write_ln_P(PSTR("(VOL- VOL+) LAYER0"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("MUTE SLOW FAST"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("LAYR RSET 10BK 10FW"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("MREV MPLA MFWD +OPT"), false);
break;
case _LAYER0_MOD:
oled_write_ln_P(PSTR("____ ____ 0-MOD"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("____ BRI+ ANIM"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("____ ____ BRI- TOGG"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("EMOJ ____ ____ -OPT"), false);
break;
case _LAYER1:
oled_write_ln_P(PSTR("(FRA- FRA+) FCPX"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("XXXX BRAK ZOM+"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("LAYR RSET KFRA ZOM-"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("BACK STOP FORW DELT"), false);
break;
case _LAYER2:
oled_write_ln_P(PSTR("(RO L RO R) KICAD"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("EDIT ESCP MOVE"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("LAYR RSET UNDO TRAK"), false);
oled_write_ln_P(PSTR(""), false);
oled_write_ln_P(PSTR("VIA DRAG SALL DELT"), false);
break;
}
return false;
}
#endif
bool rgb_matrix_indicators_user(void) {
switch(get_highest_layer(layer_state|default_layer_state)) {
case _LAYER2:
rgb_matrix_set_color(11, 0, 0, UNDERGLOW);
rgb_matrix_set_color(10, 0, 0, UNDERGLOW);
rgb_matrix_set_color(9, 0, 0, UNDERGLOW);
rgb_matrix_set_color(8, 0, 0, UNDERGLOW);
break;
case _LAYER1:
rgb_matrix_set_color(11, 0, UNDERGLOW, 0);
rgb_matrix_set_color(10, 0, UNDERGLOW, 0);
rgb_matrix_set_color(9, 0, UNDERGLOW, 0);
rgb_matrix_set_color(8, 0, UNDERGLOW, 0);
break;
case _LAYER0_MOD:
rgb_matrix_set_color(11, UNDERGLOW/2, 0, UNDERGLOW/2);
rgb_matrix_set_color(10, UNDERGLOW/2, 0, UNDERGLOW/2);
rgb_matrix_set_color(9, UNDERGLOW/2, 0, UNDERGLOW/2);
rgb_matrix_set_color(8, UNDERGLOW/2, 0, UNDERGLOW/2);
break;
case _LAYER0:
rgb_matrix_set_color(11, UNDERGLOW, 0, 0);
rgb_matrix_set_color(10, UNDERGLOW, 0, 0);
rgb_matrix_set_color(9, UNDERGLOW, 0, 0);
rgb_matrix_set_color(8, UNDERGLOW, 0, 0);
break;
default:
break;
}
return false;
}

View File

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

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

@ -0,0 +1,27 @@
# jcpm2
![jcpm2](https://i.imgur.com/EM5JoGC.jpeg)
An 8-key macro pad with rotary encoder, RGB backlighting and underlighting. Made and sold by JCC LLC.
* Keyboard Maintainer: [jeremyscook](https://github.com/jeremyscook)
* Hardware Supported: JCPM2 PCB, Pro Micro
* Hardware Availability: [Tindie.com](https://www.tindie.com/products/25414)
Make example for this keyboard (after setting up your build environment):
make jcpm2:default
Flashing example for this keyboard:
make jcpm2: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 rotary encoder and plug in the keyboard
* **Physical reset button**: Double-click the small inside button on top of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1,8 @@
// Copyright 2023 @ Keychron(https://www.keychron.com)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <board.h>
#undef STM32_HSECLK
#define STM32_HSECLK 16000000U

View File

@ -0,0 +1,23 @@
/* Copyright 2023 @ Keychron(https://www.keychron.com)
*
* 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
/* I2C Driver Configuration */
#define I2C1_SCL_PIN B8
#define I2C1_SDA_PIN B9
#define I2C1_CLOCK_SPEED 400000
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2

View File

@ -0,0 +1,21 @@
/* Copyright 2020 QMK
*
* 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,73 @@
{
"manufacturer": "Keychron",
"keyboard_name": "Lemokey X0",
"maintainer": "lalalademaxiya1",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"eeprom": {
"wear_leveling": {
"backing_size": 4096
}
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "A3"
},
"matrix_pins": {
"cols": ["C6", "C7", "C8", "A14", "A15", "C10", "C11"],
"rows": ["C12", "D2", "B3", "B4", "B5", "B6"]
},
"processor": "STM32F401",
"url": "https://www.lemokey.com/products/lemokey-x0-qmk-wired-mechanical-gaming-keypad",
"usb": {
"device_version": "1.1.0",
"pid": "0x0200",
"vid": "0x362D"
},
"layouts": {
"LAYOUT": {
"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, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
{"matrix": [1, 3], "x": 3, "y": 1.25},
{"matrix": [1, 4], "x": 4, "y": 1.25},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [1, 6], "x": 6, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
{"matrix": [2, 3], "x": 3.5, "y": 2.25},
{"matrix": [2, 4], "x": 4.5, "y": 2.25},
{"matrix": [2, 5], "x": 5.5, "y": 2.25, "w": 1.5},
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
{"matrix": [3, 3], "x": 3.75, "y": 3.25},
{"matrix": [3, 4], "x": 4.75, "y": 3.25},
{"matrix": [3, 5], "x": 5.75, "y": 3.25, "w": 1.25},
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
{"matrix": [4, 5], "x": 5.25, "y": 4.25, "w": 1.75},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"matrix": [5, 2], "x": 2.75, "y": 5.25},
{"matrix": [5, 3], "x": 3.75, "y": 5.25},
{"matrix": [5, 4], "x": 4.75, "y": 5.25},
{"matrix": [5, 5], "x": 6, "y": 5.25}
]
}
}
}

View File

@ -0,0 +1,25 @@
/* Copyright 2020 QMK
*
* 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 STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 8
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE

View File

@ -0,0 +1,23 @@
# Lemokey X0
![Lemokey X0](https://i.imgur.com/ntROq41.jpeg)
A one-handed gaming keypad.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Lemokey X0
* Hardware Availability: [Keychron](https://www.lemokey.com/products/lemokey-x0-qmk-wired-mechanical-gaming-keypad)
Make example for this keyboard (after setting up your build environment):
make keychron/x0/red:default
Flashing example for this keyboard:
make keychron/x0/red: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, hold down the key located at **K00**, labelled and commonly programmed as **Esc**, while plugging in the keyboard.

View File

@ -0,0 +1,25 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* 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
#ifdef LED_MATRIX_ENABLE
# define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
# define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_6_CHANNEL
# define SNLED27351_CURRENT_TUNE \
{ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60 }
#endif

View File

@ -0,0 +1,60 @@
{
"features": {
"led_matrix": true
},
"led_matrix": {
"animations": {
"band_pinwheel": true,
"band_spiral": true,
"breathing": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_up_down": true,
"dual_beacon": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"wave_left_right": true,
"wave_up_down": true
},
"driver": "snled27351",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 1], "x": 37, "y": 0, "flags": 1},
{"matrix": [0, 2], "x": 75, "y": 0, "flags": 1},
{"matrix": [0, 3], "x": 112, "y": 0, "flags": 1},
{"matrix": [0, 4], "x": 149, "y": 0, "flags": 1},
{"matrix": [0, 5], "x": 187, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 0, "y": 13, "flags": 1},
{"matrix": [1, 1], "x": 37, "y": 13, "flags": 4},
{"matrix": [1, 2], "x": 75, "y": 13, "flags": 4},
{"matrix": [1, 3], "x": 112, "y": 13, "flags": 4},
{"matrix": [1, 4], "x": 149, "y": 13, "flags": 4},
{"matrix": [1, 5], "x": 187, "y": 13, "flags": 4},
{"matrix": [1, 6], "x": 224, "y": 13, "flags": 4},
{"matrix": [2, 0], "x": 0, "y": 26, "flags": 1},
{"matrix": [2, 1], "x": 37, "y": 26, "flags": 4},
{"matrix": [2, 2], "x": 75, "y": 26, "flags": 4},
{"matrix": [2, 3], "x": 112, "y": 26, "flags": 4},
{"matrix": [2, 4], "x": 149, "y": 26, "flags": 4},
{"matrix": [2, 5], "x": 187, "y": 26, "flags": 4},
{"matrix": [3, 0], "x": 0, "y": 38, "flags": 1},
{"matrix": [3, 1], "x": 37, "y": 38, "flags": 4},
{"matrix": [3, 2], "x": 75, "y": 38, "flags": 4},
{"matrix": [3, 3], "x": 112, "y": 38, "flags": 4},
{"matrix": [3, 4], "x": 149, "y": 38, "flags": 4},
{"matrix": [3, 5], "x": 187, "y": 38, "flags": 4},
{"matrix": [4, 0], "x": 0, "y": 51, "flags": 1},
{"matrix": [4, 2], "x": 75, "y": 51, "flags": 4},
{"matrix": [4, 3], "x": 112, "y": 51, "flags": 4},
{"matrix": [4, 4], "x": 149, "y": 51, "flags": 4},
{"matrix": [4, 5], "x": 187, "y": 51, "flags": 4},
{"matrix": [5, 0], "x": 0, "y": 64, "flags": 1},
{"matrix": [5, 2], "x": 75, "y": 64, "flags": 1},
{"matrix": [5, 3], "x": 112, "y": 64, "flags": 1},
{"matrix": [5, 4], "x": 149, "y": 64, "flags": 1}
],
"sleep": true
}
}

View File

@ -0,0 +1,41 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layers {
WIN_BASE,
WIN_FN,
};
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[WIN_BASE] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V,
KC_LCTL, KC_LALT, MO(WIN_FN), MO(WIN_FN), KC_SPC),
[WIN_FN] = LAYOUT(
_______, KC_BRID, KC_BRIU, LGUI(KC_TAB), LGUI(KC_E), _______,
_______, _______, _______, _______, _______, _______, _______,
LM_TOGG, LM_PREV, LM_BRIU, LM_NEXT, _______, _______,
_______, LM_SPDD, LM_BRID, LM_SPDU, _______, _______,
_______, _______, _______, _______, NK_TOGG,
_______, _______, _______, _______, _______),
};

View File

@ -0,0 +1,61 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* 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"
#ifdef LED_MATRIX_ENABLE
// clang-format off
const snled27351_led_t PROGMEM g_snled27351_leds[LED_MATRIX_LED_COUNT] = {
/* Refer to SNLED27351 manual for these locations
* driver
* | LED address
* | | */
{0, CB6_CA1 },
{0, CB6_CA2 },
{0, CB6_CA3 },
{0, CB6_CA4 },
{0, CB6_CA5 },
{0, CB6_CA6 },
{0, CB5_CA1 },
{0, CB5_CA2 },
{0, CB5_CA3 },
{0, CB5_CA4 },
{0, CB5_CA5 },
{0, CB5_CA6 },
{0, CB5_CA7 },
{0, CB4_CA1 },
{0, CB4_CA2 },
{0, CB4_CA3 },
{0, CB4_CA4 },
{0, CB4_CA5 },
{0, CB4_CA6 },
{0, CB3_CA1 },
{0, CB3_CA2 },
{0, CB3_CA3 },
{0, CB3_CA4 },
{0, CB3_CA5 },
{0, CB3_CA6 },
{0, CB2_CA1 },
{0, CB2_CA3 },
{0, CB2_CA4 },
{0, CB2_CA5 },
{0, CB2_CA6 },
{0, CB1_CA1 },
{0, CB1_CA3 },
{0, CB1_CA4 },
{0, CB1_CA5 },
};
#endif

View File

@ -0,0 +1,600 @@
{
"keyboard_name": "Keycult 60",
"manufacturer": "Yiancar-Designs",
"url": "https://yiancar-designs.com",
"maintainer": "Yiancar-Designs",
"usb": {
"vid": "0x8968",
"pid": "0x6339",
"device_version": "1.0.0"
},
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"nkro": true
},
"indicators": {
"caps_lock": "B6",
"on_state": 0
},
"matrix_pins": {
"cols": ["A1", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "B2", "B10", "B11", "B12", "B13", "B14"],
"rows": ["A2", "B9", "B8", "B5", "B4"]
},
"diode_direction": "COL2ROW",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
"60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan"
],
"layouts": {
"LAYOUT_all": {
"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},
{"matrix": [2, 12], "x": 14, "y": 0},
{"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": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"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, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"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": {
"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, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"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_split_bs_rshift": {
"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},
{"matrix": [2, 12], "x": 14, "y": 0},
{"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, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"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, 12], "x": 12.25, "y": 3, "w": 2.75},
{"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, 6], "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}
]
},
"LAYOUT_60_iso": {
"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": [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": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"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, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_split_bs_rshift": {
"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},
{"matrix": [2, 12], "x": 14, "y": 0},
{"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": [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": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"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, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_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": [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": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"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, 12], "x": 12.25, "y": 3, "w": 2.75},
{"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, 6], "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}
]
},
"LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"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},
{"matrix": [2, 12], "x": 14, "y": 0},
{"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, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "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, 6], "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,21 @@
/* Copyright 2025 Yiancar-Designs
*
* 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"
void led_init_ports(void) {
// Set our LED pins as open drain outputs
gpio_set_pin_output_open_drain(LED_CAPS_LOCK_PIN);
}

View File

@ -0,0 +1,32 @@
/* Copyright 2025 Yiancar-Designs
*
* 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( /* Base */
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_DEL,
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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL),
[1] = LAYOUT_all( /* FN */
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_TRNS,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

@ -0,0 +1,32 @@
# Keycult 60
This is a standard 60% layout PCB.
* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
* Hardware Supported: A 60% keyboard with STM32F072CB
* Hardware Availability: https://novelkeys.com/
## Instructions
### Build
Make example for this keyboard (after setting up your build environment):
make keycult/keycult60: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).
### Reset
- Unplug
- Hold Escape
- Plug In
- Unplug
- Release Escape
### Flash
- Unplug
- Hold Escape
- Plug In
- Flash using QMK Toolbox or CLI (`make keycult/keycult60:<keymap>:flash`)

View File

@ -0,0 +1,2 @@
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF

View File

@ -49,7 +49,8 @@
"pin": "A7"
},
"layout_aliases": {
"LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift"
"LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift",
"LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_60_ansi": {
@ -250,7 +251,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_tsangan_hhkb": {
"LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@ -312,7 +313,7 @@
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12, "y": 4},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}

View File

@ -0,0 +1,10 @@
{
"manufacturer": "mzmkb",
"maintainer": "mizma",
"bootloader": "rp2040",
"processor": "RP2040",
"split": {
"enabled": true
},
"url": "https://github.com/mizma/slimdash"
}

View File

@ -0,0 +1,41 @@
# Slimdash
![mzmkb/slimdash/rev1](https://i.imgur.com/ymf8ROw.jpeg)
__SlimDash__ is a slim low profile split ortho-staggered keyboard inspired by omkbd/ErgoDash
with following key highlights:
* Ortho-Staggered Split keyboard layout
* Slim body (20-22mm depending on key caps and rubber feet used)
* Rigid body structure
* Per-Key RGB LED Matrix lighting
* USB-C connector
* Easy build utilizing PCBA service for the harder SMT components
* Keyboard Maintainer: [mizma](https://github.com/mizma)
* Hardware Supported: [SlimDash](https://github.com/mizma/SlimDash/)
* Hardware Availability: Build your own using design data at [SlimDash](https://github.com/mizma/SlimDash/)
Make example for this keyboard (after setting up your build environment):
make mzmkb/slimdash/rev1:default
Flashing example for this keyboard:
make mzmkb/slimdash/rev1:default:flash
You may also enter Bootloader on your keyboard, and copy the `mzmkb_slimdash_*_*.uf2`
file into the `RPI-RP2` drive shown in your PC.
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:
* __Reset button__: Double-tap the RESET button on the side of the keyboard near
TRRS jack.
* __Physical reset button__: Hold BOOT_SW and press RESET on the side of the keyboard
near TRRS jack.
* __Keycode in layout__: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1,28 @@
/* Copyright 2025 mizma (@mizma)
*
* 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
// Make it easier to enter the bootloader
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
// UART1, communication between the two halves
#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode
#define SERIAL_USART_TX_PIN GP17 // USART TX pin
#define SERIAL_USART_RX_PIN GP18 // USART RX pin
#define SERIAL_PIO_USE_PIO1 // Use PIO1 as PIO0 is used for WS2812 driver

View File

@ -0,0 +1,239 @@
{
"keyboard_name": "slimdash rev1.0",
"diode_direction": "COL2ROW",
"features": {
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
},
"matrix_pins": {
"cols": ["GP0", "GP1", "GP3", "GP5", "GP8", "GP7", "GP9"],
"rows": ["GP2", "GP4", "GP6", "GP11", "GP10"]
},
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"solid_color": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "ws2812",
"layout": [
{"matrix": [3, 6], "x": 105, "y": 51, "flags": 4},
{"matrix": [4, 6], "x": 105, "y": 64, "flags": 4},
{"matrix": [4, 5], "x": 90, "y": 51, "flags": 4},
{"matrix": [4, 4], "x": 75, "y": 51, "flags": 4},
{"matrix": [4, 3], "x": 45, "y": 51, "flags": 4},
{"matrix": [4, 2], "x": 30, "y": 51, "flags": 4},
{"matrix": [4, 1], "x": 15, "y": 51, "flags": 4},
{"matrix": [4, 0], "x": 0, "y": 51, "flags": 4},
{"matrix": [3, 0], "x": 0, "y": 38, "flags": 4},
{"matrix": [3, 1], "x": 15, "y": 38, "flags": 4},
{"matrix": [3, 2], "x": 30, "y": 38, "flags": 4},
{"matrix": [3, 3], "x": 45, "y": 38, "flags": 4},
{"matrix": [3, 4], "x": 60, "y": 38, "flags": 4},
{"matrix": [3, 5], "x": 75, "y": 38, "flags": 4},
{"matrix": [2, 6], "x": 90, "y": 26, "flags": 4},
{"matrix": [1, 6], "x": 90, "y": 13, "flags": 4},
{"matrix": [2, 5], "x": 75, "y": 26, "flags": 4},
{"matrix": [2, 4], "x": 60, "y": 26, "flags": 4},
{"matrix": [2, 3], "x": 45, "y": 26, "flags": 4},
{"matrix": [2, 2], "x": 30, "y": 26, "flags": 4},
{"matrix": [2, 1], "x": 15, "y": 26, "flags": 4},
{"matrix": [2, 0], "x": 0, "y": 26, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 13, "flags": 4},
{"matrix": [1, 1], "x": 15, "y": 13, "flags": 4},
{"matrix": [1, 2], "x": 30, "y": 13, "flags": 4},
{"matrix": [1, 3], "x": 45, "y": 13, "flags": 4},
{"matrix": [1, 4], "x": 60, "y": 13, "flags": 4},
{"matrix": [1, 5], "x": 75, "y": 13, "flags": 4},
{"matrix": [0, 6], "x": 90, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 75, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 60, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 45, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 30, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 15, "y": 0, "flags": 4},
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [8, 6], "x": 119, "y": 51, "flags": 4},
{"matrix": [9, 6], "x": 119, "y": 64, "flags": 4},
{"matrix": [9, 5], "x": 134, "y": 51, "flags": 4},
{"matrix": [9, 4], "x": 149, "y": 51, "flags": 4},
{"matrix": [9, 3], "x": 179, "y": 51, "flags": 4},
{"matrix": [9, 2], "x": 194, "y": 51, "flags": 4},
{"matrix": [9, 1], "x": 209, "y": 51, "flags": 4},
{"matrix": [9, 0], "x": 224, "y": 51, "flags": 4},
{"matrix": [8, 0], "x": 224, "y": 38, "flags": 4},
{"matrix": [8, 1], "x": 209, "y": 38, "flags": 4},
{"matrix": [8, 2], "x": 194, "y": 38, "flags": 4},
{"matrix": [8, 3], "x": 179, "y": 38, "flags": 4},
{"matrix": [8, 4], "x": 164, "y": 38, "flags": 4},
{"matrix": [8, 5], "x": 149, "y": 38, "flags": 4},
{"matrix": [7, 6], "x": 134, "y": 26, "flags": 4},
{"matrix": [6, 6], "x": 134, "y": 13, "flags": 4},
{"matrix": [7, 5], "x": 149, "y": 26, "flags": 4},
{"matrix": [7, 4], "x": 164, "y": 26, "flags": 4},
{"matrix": [7, 3], "x": 179, "y": 26, "flags": 4},
{"matrix": [7, 2], "x": 194, "y": 26, "flags": 4},
{"matrix": [7, 1], "x": 209, "y": 26, "flags": 4},
{"matrix": [7, 0], "x": 224, "y": 26, "flags": 4},
{"matrix": [6, 0], "x": 224, "y": 13, "flags": 4},
{"matrix": [6, 1], "x": 209, "y": 13, "flags": 4},
{"matrix": [6, 2], "x": 194, "y": 13, "flags": 4},
{"matrix": [6, 3], "x": 179, "y": 13, "flags": 4},
{"matrix": [6, 4], "x": 164, "y": 13, "flags": 4},
{"matrix": [6, 5], "x": 149, "y": 13, "flags": 4},
{"matrix": [5, 6], "x": 134, "y": 0, "flags": 4},
{"matrix": [5, 5], "x": 149, "y": 0, "flags": 4},
{"matrix": [5, 4], "x": 164, "y": 0, "flags": 4},
{"matrix": [5, 3], "x": 179, "y": 0, "flags": 4},
{"matrix": [5, 2], "x": 194, "y": 0, "flags": 4},
{"matrix": [5, 1], "x": 209, "y": 0, "flags": 4},
{"matrix": [5, 0], "x": 224, "y": 0, "flags": 4}
],
"max_brightness": 128,
"sleep": true,
"split_count": [35, 35]
},
"split": {
"matrix_pins": {
"right": {
"cols": ["GP0", "GP1", "GP3", "GP5", "GP8", "GP7", "GP9"],
"rows": ["GP2", "GP4", "GP6", "GP11", "GP10"]
}
},
"serial": {
"driver": "vendor"
},
"transport": {
"sync": {
"matrix_state": true
}
}
},
"usb": {
"device_version": "1.0.0",
"pid": "0x7344",
"vid": "0x4D5A"
},
"ws2812": {
"driver": "vendor",
"pin": "GP20"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.375},
{"matrix": [0, 1], "x": 1, "y": 0.375},
{"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": [0, 6], "x": 6, "y": 0.75},
{"matrix": [5, 6], "x": 11.5, "y": 0.75},
{"matrix": [5, 5], "x": 12.5, "y": 0.25},
{"matrix": [5, 4], "x": 13.5, "y": 0.125},
{"matrix": [5, 3], "x": 14.5, "y": 0},
{"matrix": [5, 2], "x": 15.5, "y": 0.125},
{"matrix": [5, 1], "x": 16.5, "y": 0.375},
{"matrix": [5, 0], "x": 17.5, "y": 0.375},
{"matrix": [1, 0], "x": 0, "y": 1.375},
{"matrix": [1, 1], "x": 1, "y": 1.375},
{"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": [1, 6], "x": 6, "y": 1.75},
{"matrix": [6, 6], "x": 11.5, "y": 1.75},
{"matrix": [6, 5], "x": 12.5, "y": 1.25},
{"matrix": [6, 4], "x": 13.5, "y": 1.125},
{"matrix": [6, 3], "x": 14.5, "y": 1},
{"matrix": [6, 2], "x": 15.5, "y": 1.125},
{"matrix": [6, 1], "x": 16.5, "y": 1.375},
{"matrix": [6, 0], "x": 17.5, "y": 1.375},
{"matrix": [2, 0], "x": 0, "y": 2.375},
{"matrix": [2, 1], "x": 1, "y": 2.375},
{"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": [2, 6], "x": 6, "y": 2.75},
{"matrix": [7, 6], "x": 11.5, "y": 2.75},
{"matrix": [7, 5], "x": 12.5, "y": 2.25},
{"matrix": [7, 4], "x": 13.5, "y": 2.125},
{"matrix": [7, 3], "x": 14.5, "y": 2},
{"matrix": [7, 2], "x": 15.5, "y": 2.125},
{"matrix": [7, 1], "x": 16.5, "y": 2.375},
{"matrix": [7, 0], "x": 17.5, "y": 2.375},
{"matrix": [3, 0], "x": 0, "y": 3.375},
{"matrix": [3, 1], "x": 1, "y": 3.375},
{"matrix": [3, 2], "x": 2, "y": 3.125},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3.125},
{"matrix": [3, 5], "x": 5, "y": 3.25},
{"matrix": [3, 6], "x": 7.25, "y": 4},
{"matrix": [8, 6], "x": 10.25, "y": 4},
{"matrix": [8, 5], "x": 12.5, "y": 3.25},
{"matrix": [8, 4], "x": 13.5, "y": 3.125},
{"matrix": [8, 3], "x": 14.5, "y": 3},
{"matrix": [8, 2], "x": 15.5, "y": 3.125},
{"matrix": [8, 1], "x": 16.5, "y": 3.375},
{"matrix": [8, 0], "x": 17.5, "y": 3.375},
{"matrix": [4, 0], "x": 0, "y": 4.375},
{"matrix": [4, 1], "x": 1, "y": 4.375},
{"matrix": [4, 2], "x": 2, "y": 4.125},
{"matrix": [4, 3], "x": 3, "y": 4},
{"matrix": [4, 4], "x": 5.25, "y": 5},
{"matrix": [4, 5], "x": 6.25, "y": 4, "h": 2},
{"matrix": [4, 6], "x": 7.25, "y": 5},
{"matrix": [9, 6], "x": 10.25, "y": 5},
{"matrix": [9, 5], "x": 11.25, "y": 4, "h": 2},
{"matrix": [9, 4], "x": 12.25, "y": 5},
{"matrix": [9, 3], "x": 14.5, "y": 4},
{"matrix": [9, 2], "x": 15.5, "y": 4.125},
{"matrix": [9, 1], "x": 16.5, "y": 4.375},
{"matrix": [9, 0], "x": 17.5, "y": 4.375}
]
}
}
}

View File

@ -0,0 +1,126 @@
/* Copyright 2025 mizma (@mizma)
*
* 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_names {
_QWERTY,
_GAMEMODE,
_LOWER,
_RAISE
};
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
#define GAMEM TG(_GAMEMODE)
#define EISU LALT(KC_GRV)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,------------------------------------------------. .------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LCTL | A | S | D | F | G | Del | | Ins | H | J | K | L | ; | ' |
* |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
* | LSFT | Z | X | C | V | B | | N | M | , | . | / | RSFT |
* |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
* | RM_DN| RM_UP| GAMEM| GUI | | | LALT | | RALT | | | HOME | END |PageUp|PageDn|
* .---------------------------. .------| Space|------| |------| Enter|------. .---------------------------.
* | Lower| | LSFT | | RCTL | | Raise|
* .--------------------. .--------------------.
*/
[_QWERTY] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_DEL , KC_INS, 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_LALT, KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
RM_VALD, RM_VALU, GAMEM, KC_LGUI, LOWER, KC_SPC, KC_LSFT, KC_RCTL, KC_ENT, RAISE, KC_HOME, KC_END, KC_PGUP, KC_PGDN
),
/* Game Mode Toggle: sample toggle layer. turn off GUI key and add arrows
* ,------------------------------------------------. .------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
* | | | | | | | | | | | | | |
* |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
* | | | | NOOP | | | | | | | | | | | |
* .---------------------------. .------| |------| |------| |------. .---------------------------.
* | | | | | | | |
* .--------------------. .--------------------.
*/
[_GAMEMODE] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_NO, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Lower: NUMPAD, App/Media keys and RGM Matrix
* ,------------------------------------------------. .------------------------------------------------.
* | ` | | | | | Mute | Vol- | | Vol+ | | NumL | / | * | - | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | | | | |RGBTGL| | BrDn | | BrUp | | 7 | 8 | 9 | + | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | CAPS | | |RM_HUD|RM_HUU| |RM_PRV| |RM_NXT| | 4 | 5 | 6 | , | |
* |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
* | | | |RM_SPD|RM_SPU| | | | 1 | 2 | 3 | = | |
* |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
* | | | | | | | | | | | | 0 | . | | |
* .---------------------------. .------| |------| |------| PENT |------. .---------------------------.
* | | | | | | | |
* .--------------------. .--------------------.
*/
[_LOWER] = LAYOUT(
KC_GRV, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, _______,
_______, _______, _______, _______, RM_TOGG, _______, KC_BRID, KC_BRIU, _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______,
KC_CAPS, _______, _______, RM_HUED, RM_HUEU, _______, RM_PREV, RM_NEXT, _______, KC_P4, KC_P5, KC_P6, KC_PCMM, _______,
_______, _______, _______, RM_SPDD, RM_SPDU, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PEQL, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_PENT, _______, KC_P0, KC_PDOT, _______, _______
),
/* Raise: Functions and Mouse
* ,------------------------------------------------. .------------------------------------------------.
* | ` | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | | | |WheelL|WheelR| | | | | | | Pause|ScrolL| PrnSc| F12 |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | CAPS | |Mouse3|Mouse2|Mouse1|WheelU| | | | | | | | | |
* |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
* | |Accel0|Accel1|Accel2| |WheelD| |MouseL|MouseD|MouseU|MouseR| | |
* |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
* | | | | | | | | | | | | | | | |
* .---------------------------. .------| |------| |------| |------. .---------------------------.
* | | | | | | | |
* .--------------------. .--------------------.
*/
[_RAISE] = LAYOUT(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
_______, _______, _______, MS_WHLL, MS_WHLR, _______, _______, _______, _______, _______, KC_PAUS, KC_SCRL, KC_PSCR, KC_F12,
KC_CAPS, _______, MS_BTN3, MS_BTN2, MS_BTN1, MS_WHLU, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
_______, MS_ACL0, MS_ACL1, MS_ACL2, _______, MS_WHLD, _______, _______, MS_LEFT, MS_DOWN, MS_UP, MS_RGHT, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@ -67,7 +67,7 @@ enum sofle_layers {
_DEFAULTS = 0,
_QWERTY = 0,
_COLEMAK,
_COLEMAKDH,
_COLEMAKDH,
_LOWER,
_RAISE,
_ADJUST,
@ -87,231 +87,62 @@ enum custom_keycodes {
#define KC_COLEMAKDH PDF(_COLEMAKDH)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* QWERTY
* ,-----------------------------------------. ,-----------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | TAB | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* |LShift| A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
* |------+------+------+------+------+------| MUTE | |DISCORD|------+------+------+------+------+------|
* | LCTR | Z | X | C | V | B |-------| |-------| N | M | , | . | / |LShift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE |RAISE | RCTR | RAlt |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_QWERTY] = LAYOUT(
//,------------------------------------------------. ,---------------------------------------------------.
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_SWITCH,KC_6), KC_7, KC_8, KC_9, KC_0, KC_GRV,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
LT(_NUMPAD,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_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_D_MUTE,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
KC_BSPC, KC_LGUI, KC_LOWER, KC_SPC, KC_ENT , KC_SPC, KC_ENT , KC_RAISE, KC_RCTL, KC_RALT
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
[_QWERTY] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_SWITCH,KC_6), KC_7, KC_8, KC_9, KC_0, KC_GRV,
LT(_NUMPAD,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_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_D_MUTE, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT,
KC_BSPC, KC_LGUI, KC_LOWER, KC_SPC, KC_ENT, KC_SPC, KC_ENT, KC_RAISE,KC_RCTL, KC_RALT
),
/*
* COLEMAK
* ,-----------------------------------------. ,-----------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | TAB | Q | W | F | P | G | | J | L | U | Y | ; | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* |LShift| A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' |
* |------+------+------+------+------+------| MUTE | |DISCORD|------+------+------+------+------+------|
* | LCTR | Z | X | C | V | B |-------| |-------| K | M | , | . | / |LShift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE |RAISE | RCTR | RAlt |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_COLEMAK] = LAYOUT(
//,------------------------------------------------. ,---------------------------------------------------.
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_SWITCH,KC_6), KC_7, KC_8, KC_9, KC_0, KC_TRNS,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
KC_TRNS, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TRNS,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
KC_TRNS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_TRNS,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRNS, KC_TRNS,KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
_______, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_SWITCH,KC_6), KC_7, KC_8, KC_9, KC_0, _______,
_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______,
_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______,
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/*
* COLEMAK-DH
* ,-----------------------------------------. ,-----------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | TAB | Q | W | F | P | B | | J | L | U | Y | ; | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* |LShift| A | R | S | T | G |-------. ,-------| M | N | E | I | O | ' |
* |------+------+------+------+------+------| MUTE | |DISCORD|------+------+------+------+------+------|
* | LCTR | Z | X | C | D | V |-------| |-------| K | H | , | . | / |LShift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE |RAISE | RCTR | RAlt |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_COLEMAKDH] = LAYOUT(
//,------------------------------------------------. ,---------------------------------------------------.
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_SWITCH,KC_6), KC_7, KC_8, KC_9, KC_0, KC_TRNS,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
KC_TRNS, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TRNS,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
KC_TRNS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_TRNS,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
KC_TRNS, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_TRNS, KC_TRNS,KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
_______, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_SWITCH,KC_6), KC_7, KC_8, KC_9, KC_0, _______,
_______, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______,
_______, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, _______,
_______, KC_Z, KC_X, KC_C, KC_D, KC_V, _______, _______, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* LOWER
* ,-----------------------------------------. ,-----------------------------------------.
* | trans| F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | trans| ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | |
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
* | trans| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE |RAISE | RCTR | RAlt |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_LOWER] = LAYOUT(
//,------------------------------------------------. ,---------------------------------------------------.
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
_______, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_PGUP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_DEL,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
_______, KC_NO, KC_NO, KC_NO, KC_WH_D, KC_PGDN,_______, _______,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12,
_______, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, KC_PGUP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, KC_DEL,
_______, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D, KC_PGDN, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* RAISE
* ,----------------------------------------. ,-----------------------------------------.
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
* |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_RAISE] = LAYOUT(
//,------------------------------------------------. ,---------------------------------------------------.
_______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
_______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_CIRC, KC_AMPR,KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
_______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
_______,KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX,_______, _______,KC_UNDS, KC_PLUS,KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
_______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
_______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* ADJUST
* ,-----------------------------------------. ,-----------------------------------------.
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | QK_BOOT| | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* |UG_TOGG|hue^ |sat ^ | bri ^| |COLEMAK|-------. ,-------|desk <| | |desk >| | |
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
* | mode | hue dn|sat d|bri dn| |QWERTY|-------| |-------| | PREV | PLAY | NEXT | | |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_ADJUST] = LAYOUT(
//,------------------------------------------------. ,---------------------------------------------------.
EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
QK_BOOT, XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
UG_TOGG, UG_HUEU,UG_SATU, UG_VALU, KC_COLEMAKDH,KC_COLEMAK, C(G(KC_LEFT)),KC_NO,KC_NO,C(G(KC_RGHT)),XXXXXXX, XXXXXXX,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
UG_NEXT, UG_HUED,UG_SATD, UG_VALD, XXXXXXX,KC_QWERTY,XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
[_ADJUST] = LAYOUT(
EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
UG_TOGG, UG_HUEU, UG_SATU, UG_VALU,KC_COLEMAKDH,KC_COLEMAK, C(G(KC_LEFT)), XXXXXXX, XXXXXXX,C(G(KC_RGHT)),XXXXXXX,XXXXXXX,
UG_NEXT, UG_HUED, UG_SATD, UG_VALD, XXXXXXX,KC_QWERTY,XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* NUMPAD
* ,-----------------------------------------. ,-----------------------------------------.
* | trans| | | | | | | |NumLck| | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ` | | | | | | | ^ | 7 | 8 | 9 | * | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | trans| | | | | |-------. ,-------| - | 4 | 5 | 6 | | | |
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
* | trans| | | | | |-------| |-------| + | 1 | 2 | 3 | \ | Shift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE | 0 | . | RAlt |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_NUMPAD] = LAYOUT(
//,------------------------------------------------. ,---------------------------------------------------.
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_NUM, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CIRC, KC_P7, KC_P8, KC_P9, KC_ASTR, XXXXXXX,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_P4, KC_P5, KC_P6, KC_EQL, KC_PIPE,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,_______, _______,KC_PLUS, KC_P1, KC_P2, KC_P3, KC_SLSH, _______,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
_______, OSM(MOD_MEH), _______, _______, _______, _______, _______, KC_P0, KC_PDOT, _______
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_NUM, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CIRC, KC_P7, KC_P8, KC_P9, KC_ASTR, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_P4, KC_P5, KC_P6, KC_EQL, KC_PIPE,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_PLUS, KC_P1, KC_P2, KC_P3, KC_SLSH, _______,
_______, OSM(MOD_MEH), _______, _______, _______, _______, _______, KC_P0, KC_PDOT, _______
),
/* SWITCH
* ,-----------------------------------------. ,-----------------------------------------.
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | qwer | cole |col_dh| low | raise| adj | |numpad| | | | |QK_BOOT |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | | | | | |-------. ,-------| | | | | |EE_CLR|
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
* | SLEEP| | | | | |-------| |-------| | | | | | |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE | 0 | . | RAlt |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
// layer switcher
[_SWITCH] = LAYOUT(
//,------------------------------------------------. ,---------------------------------------------------.
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
TO(0), TO(1), TO(2), TO(3), TO(4), TO(5), TO(6), KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
KC_NO, KC_NO, KC_BRIU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, EE_CLR,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
KC_SYSTEM_SLEEP,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
),
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
TO(0), TO(1), TO(2), TO(3), TO(4), TO(5), TO(6), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT,
XXXXXXX, XXXXXXX, KC_BRIU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EE_CLR,
KC_SYSTEM_SLEEP,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
};
#ifdef RGBLIGHT_ENABLE

View File

@ -0,0 +1 @@
POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c

View File

@ -8,6 +8,10 @@
# include "print.h"
#endif // CONSOLE_ENABLE
#ifdef POINTING_DEVICE_ENABLE
# include "drivers/sensors/cirque_pinnacle_gestures.h"
#endif // POINTING_DEVICE_ENABLE
#if defined(POINTING_DEVICE_ENABLE) || defined(SPLEEB_ENCODER_MODE_MAP_ENABLE)
typedef union {
uint16_t raw;

View File

@ -54,31 +54,16 @@
]
],
"config": {
"features": {
"oled": true,
"rgb_matrix": true,
"rgblight": false
"mousekey": {
"interval": 16,
"time_to_max": 40,
"delay": 100,
"wheel_delay": 100
},
"encoder": {
"enabled": true
},
"rgblight": {
"hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"sleep": true
"tapping": {
"term": 200,
"permissive_hold": true,
"force_hold": true
}
},
"mouse_key": {
"enabled": true,
"interval": 16,
"time_to_max": 40,
"delay": 100,
"wheel_delay": 100
},
"tapping": {
"term": 200,
"permissive_hold": true,
"force_hold": true
}
}

View File

@ -0,0 +1,80 @@
{
"manufacturer": "splitkb.com",
"maintainer": "splitkb",
"url": "https://splitkb.com",
"usb": {
"device_version": "1.0.0",
"vid": "0x8D1D"
},
"layout_aliases": {
"LAYOUT": "LAYOUT_split_4x6_5"
},
"layouts": {
"LAYOUT_split_4x6_5": {
"layout": [
{"label": "L06", "matrix": [0, 6], "x": 0, "y": 0.75},
{"label": "L05", "matrix": [0, 5], "x": 1, "y": 0.75},
{"label": "L04", "matrix": [0, 4], "x": 2, "y": 0.25},
{"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "L02", "matrix": [0, 2], "x": 4, "y": 0.25},
{"label": "L01", "matrix": [0, 1], "x": 5, "y": 0.5},
{"label": "R01", "matrix": [5, 1], "x": 10.5, "y": 0.5},
{"label": "R02", "matrix": [5, 2], "x": 11.5, "y": 0.25},
{"label": "R03", "matrix": [5, 3], "x": 12.5, "y": 0},
{"label": "R04", "matrix": [5, 4], "x": 13.5, "y": 0.25},
{"label": "R05", "matrix": [5, 5], "x": 14.5, "y": 0.75},
{"label": "R06", "matrix": [5, 6], "x": 15.5, "y": 0.75},
{"label": "L12", "matrix": [1, 6], "x": 0, "y": 1.75},
{"label": "L11", "matrix": [1, 5], "x": 1, "y": 1.75},
{"label": "L10", "matrix": [1, 4], "x": 2, "y": 1.25},
{"label": "L09", "matrix": [1, 3], "x": 3, "y": 1},
{"label": "L08", "matrix": [1, 2], "x": 4, "y": 1.25},
{"label": "L07", "matrix": [1, 1], "x": 5, "y": 1.5},
{"label": "R07", "matrix": [6, 1], "x": 10.5, "y": 1.5},
{"label": "R08", "matrix": [6, 2], "x": 11.5, "y": 1.25},
{"label": "R09", "matrix": [6, 3], "x": 12.5, "y": 1},
{"label": "R10", "matrix": [6, 4], "x": 13.5, "y": 1.25},
{"label": "R11", "matrix": [6, 5], "x": 14.5, "y": 1.75},
{"label": "R12", "matrix": [6, 6], "x": 15.5, "y": 1.75},
{"label": "L18", "matrix": [2, 6], "x": 0, "y": 2.75},
{"label": "L17", "matrix": [2, 5], "x": 1, "y": 2.75},
{"label": "L16", "matrix": [2, 4], "x": 2, "y": 2.25},
{"label": "L15", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "L14", "matrix": [2, 2], "x": 4, "y": 2.25},
{"label": "L13", "matrix": [2, 1], "x": 5, "y": 2.5},
{"label": "R13", "matrix": [7, 1], "x": 10.5, "y": 2.5},
{"label": "R14", "matrix": [7, 2], "x": 11.5, "y": 2.25},
{"label": "R15", "matrix": [7, 3], "x": 12.5, "y": 2},
{"label": "R16", "matrix": [7, 4], "x": 13.5, "y": 2.25},
{"label": "R17", "matrix": [7, 5], "x": 14.5, "y": 2.75},
{"label": "R18", "matrix": [7, 6], "x": 15.5, "y": 2.75},
{"label": "L26", "matrix": [3, 6], "x": 0, "y": 3.75},
{"label": "L25", "matrix": [3, 5], "x": 1, "y": 3.75},
{"label": "L24", "matrix": [3, 4], "x": 2, "y": 3.25},
{"label": "L23", "matrix": [3, 3], "x": 3, "y": 3},
{"label": "L22", "matrix": [3, 2], "x": 4, "y": 3.25},
{"label": "L21", "matrix": [3, 1], "x": 5, "y": 3.5},
{"label": "L20", "matrix": [4, 3], "x": 6, "y": 4},
{"label": "L19", "matrix": [3, 0], "x": 7, "y": 4.25},
{"label": "R19", "matrix": [8, 0], "x": 8.5, "y": 4.25},
{"label": "R20", "matrix": [9, 3], "x": 9.5, "y": 4},
{"label": "R21", "matrix": [8, 1], "x": 10.5, "y": 3.5},
{"label": "R22", "matrix": [8, 2], "x": 11.5, "y": 3.25},
{"label": "R23", "matrix": [8, 3], "x": 12.5, "y": 3},
{"label": "R24", "matrix": [8, 4], "x": 13.5, "y": 3.25},
{"label": "R26", "matrix": [8, 5], "x": 14.5, "y": 3.75},
{"label": "R27", "matrix": [8, 6], "x": 15.5, "y": 3.75},
{"label": "L31", "matrix": [4, 4], "x": 2.5, "y": 4.25},
{"label": "L30", "matrix": [4, 2], "x": 3.5, "y": 4.25},
{"label": "L29", "matrix": [4, 1], "x": 4.5, "y": 4.5},
{"label": "L28", "matrix": [4, 5], "x": 5.5, "y": 5},
{"label": "L27", "matrix": [4, 0], "x": 6.5, "y": 5.25},
{"label": "R27", "matrix": [9, 0], "x": 9, "y": 5.25},
{"label": "R28", "matrix": [9, 5], "x": 10, "y": 5},
{"label": "R29", "matrix": [9, 1], "x": 11, "y": 4.5},
{"label": "R30", "matrix": [9, 2], "x": 12, "y": 4.25},
{"label": "R31", "matrix": [9, 4], "x": 13, "y": 4.25}
]
}
}
}

View File

@ -0,0 +1,241 @@
// Copyright 2025 splitkb.com (support@splitkb.com)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layers {
_QWERTY = 0,
_DVORAK,
_COLEMAK_DH,
_NAV,
_SYM,
_FUNCTION,
_ADJUST,
};
// Aliases for readability
#define QWERTY DF(_QWERTY)
#define COLEMAK DF(_COLEMAK_DH)
#define DVORAK DF(_DVORAK)
#define SYM MO(_SYM)
#define NAV MO(_NAV)
#define FKEYS MO(_FUNCTION)
#define ADJUST MO(_ADJUST)
#define CTL_ESC MT(MOD_LCTL, KC_ESC)
#define CTL_QUOT MT(MOD_RCTL, KC_QUOTE)
#define CTL_MINS MT(MOD_RCTL, KC_MINUS)
#define ALT_ENT MT(MOD_LALT, KC_ENT)
// Note: LAlt/Enter (ALT_ENT) is not the same thing as the keyboard shortcut Alt+Enter.
// The notation `mod/tap` denotes a key that activates the modifier `mod` when held down, and
// produces the key `tap` when tapped (i.e. pressed and released).
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* Base Layer: QWERTY
*
* ,-------------------------------------------. ,-------------------------------------------.
* | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* |Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
* | | | Enter| | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_QWERTY] = LAYOUT(
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y, KC_U , KC_I , KC_O , KC_P , KC_BSPC,
CTL_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H, KC_J , KC_K , KC_L ,KC_SCLN,CTL_QUOT,
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_N, KC_M ,KC_COMM, KC_DOT ,KC_SLSH, KC_RSFT,
ADJUST , KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
),
/*
* Base Layer: Dvorak
*
* ,-------------------------------------------. ,-------------------------------------------.
* | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | Tab | ' " | , < | . > | P | Y | | F | G | C | R | L | Bksp |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* |Ctrl/Esc| A | O | E | U | I | | D | H | T | N | S |Ctrl/- _|
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | LShift | ; : | Q | J | K | X | [ { |CapsLk| |F-keys| ] } | B | M | W | V | Z | RShift |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
* | | | Enter| | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_DVORAK] = LAYOUT(
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
KC_TAB ,KC_QUOTE,KC_COMM, KC_DOT, KC_P , KC_Y , KC_F, KC_G , KC_C , KC_R , KC_L , KC_BSPC,
CTL_ESC , KC_A , KC_O , KC_E , KC_U , KC_I , KC_D, KC_H , KC_T , KC_N , KC_S , CTL_MINS,
KC_LSFT ,KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_B, KC_M , KC_W , KC_V , KC_Z , KC_RSFT,
ADJUST, KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
),
/*
* Base Layer: Colemak DH
*
* ,-------------------------------------------. ,-------------------------------------------.
* | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | Tab | Q | W | F | P | B | | J | L | U | Y | ; : | Bksp |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* |Ctrl/Esc| A | R | S | T | G | | M | N | E | I | O |Ctrl/' "|
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | LShift | Z | X | C | D | V | [ { |CapsLk| |F-keys| ] } | K | H | , < | . > | / ? | RShift |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
* | | | Enter| | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_COLEMAK_DH] = LAYOUT(
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_B , KC_J, KC_L , KC_U , KC_Y ,KC_SCLN, KC_BSPC,
CTL_ESC , KC_A , KC_R , KC_S , KC_T , KC_G , KC_M, KC_N , KC_E , KC_I , KC_O , CTL_QUOT,
KC_LSFT , KC_Z , KC_X , KC_C , KC_D , KC_V , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_K, KC_H ,KC_COMM, KC_DOT ,KC_SLSH, KC_RSFT,
ADJUST, KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
),
/*
* Nav Layer: Media, navigation
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | | | | | | PgUp | Home | | End | VolUp| Delete |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | GUI | Alt | Ctrl | Shift| | | PgDn | | | | VolDn| Insert |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | | | | | | |ScLck | | | | Pause|M Prev|M Play|M Next|VolMut| PrtSc |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_NAV] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_VOLU, KC_DEL,
_______, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_INS,
_______, _______, _______, _______, _______, _______, _______, KC_SCRL, _______, _______,KC_PAUSE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_PSCR,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/*
* Sym Layer: Numbers and symbols
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | | \ | : | ; | - | [ | { | | | | } | ] | _ | , | . | / | ? |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_SYM] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL ,
KC_TILD , KC_EXLM, KC_AT , KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS,
KC_PIPE , KC_BSLS, KC_COLN, KC_SCLN, KC_MINS, KC_LBRC, KC_LCBR, _______, _______, KC_RCBR, KC_RBRC, KC_UNDS, KC_COMM, KC_DOT, KC_SLSH, KC_QUES,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/*
* Function Layer: Function keys
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | F9 | F10 | F11 | F12 | | | | | | | | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | F5 | F6 | F7 | F8 | | | | Shift| Ctrl | Alt | GUI | |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | F1 | F2 | F3 | F4 | | | | | | | | | | | | |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_FUNCTION] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_F9 , KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______,
_______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , _______, _______, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, _______,
_______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/*
* Adjust Layer: Default layer settings, RGB
*
* ,-------------------------------------------. ,-------------------------------------------.
* | Reset | | | | | | | | | | | | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | |QWERTY| | | | | | | | | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | |Dvorak| | | | TOG | SAI | HUI | VAI | MOD | |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | | |Colmak| | | | | | | | | SAD | HUD | VAD | RMOD | |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_ADJUST] = LAYOUT(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, QWERTY , _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, DVORAK , _______, _______, RM_TOGG, RM_SATU, RM_HUEU, RM_VALU, RM_NEXT, _______,
_______, _______, _______, COLEMAK, _______, _______,_______, _______, _______, _______, _______, RM_SATD, RM_HUED, RM_VALD, RM_PREV, _______,
_______, _______, _______,_______, _______, _______, _______, _______, _______, _______
),
// /*
// * Layer template
// *
// * ,-------------------------------------------. ,-------------------------------------------.
// * | | | | | | | | | | | | | |
// * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// * | | | | | | | | | | | | | |
// * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// * | | | | | | | | | | | | | |
// * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// * | | | | | | | | | | | | | | | | | |
// * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// * | | | | | | | | | | | |
// * | | | | | | | | | | | |
// * `----------------------------------' `----------------------------------'
// */
// [_LAYERINDEX] = LAYOUT(
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
// ),
//
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_PGDN, KC_PGUP) },
[1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
[2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
[3] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
[4] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
[5] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
[6] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
};
#endif

View File

@ -0,0 +1,262 @@
# Halcyon Elora's Default Keymap
The default keymap contains 5 layers which allows it to include all keys found on an ANSI layout TKL keyboard plus media keys.
Hardware features of the Elora such as rotary encoders and underglow are also supported.
The Elora keymap is in essence identical to the Kyria keymap, just with an additional number row. A deep dive into the keymap is provided there.
The five different layers are the following:
1. Base layer (QWERTY, Colemak-DH or Dvorak)
2. Navigation layer
3. Symbols/Numbers layer
4. Function layer
5. Adjust layer
## Base layer(s)
```
Base Layer: -
,-------------------------------------------. ,-------------------------------------------.
| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| Tab | - | - | - | - | - | | - | - | - | - | - | Bksp |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|Ctrl/Esc| - | - | - | - | - | | - | - | - | - | - |Ctrl/ - |
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| LShift | - | - | - | - | - | [ { |CapsLk| |F-Keys| ] } | - | - | - | - | - | RShift |
`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
|Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
| | | Enter| | | | | | | | |
`----------------------------------' `----------------------------------'
```
Three different well-known keyboard layouts are provided to fill in the placeholder `-` keys: QWERTY, Colemak-DH, and Dvorak. The default layer can be changed at runtime, more info on that in the section on the [adjust layer](#adjust-layer).
For the rest of this write-up, the base layer will be assumed to be QWERTY and will be used as a reference to describe physical keys, e.g. “<kbd>B</kbd> key” vs, the much more verbose, “lower inner index key”.
```
Base Layer: QWERTY
,-------------------------------------------. ,-------------------------------------------.
| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
|Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
| | | Enter| | | | | | | | |
`----------------------------------' `----------------------------------'
```
Aside from variations in the alpha cluster, the rest of the base keys remain the same and are designed to feel familiar.
![Step-by-step animation of the transformation of an ortholinear TKL to a Kyria](https://i.imgur.com/uVDCOek.gif)
<details>
After making transformations to the classic ANSI US QWERTY TKL 60% to arrive to the layout of the Elora, as illustrated in the animation above, the result looks like this:
```
,-------------------------------------------. ,-------------------------------------------.
| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| Cap Lk | A | S | D | F | G | | H | J | K | L | ; : | ' " |
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| LShift | Z | X | C | V | B | | | | | | N | M | , < | . > | / ? | RShift |
`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
| LCtrl| LGUI | LAlt | Space| | | | Space| AltGr| RGUI | Menu |
| | | | | | | | | | | |
`----------------------------------' '----------------------------------'
```
First thing to notice is the presence of blank keys. To fill in the blank keys above the <kbd>Space</kbd> keys, we can take inspiration from other split keyboards featuring an extra inner index column on each half. A common mapping for those kind of keys are the bracket keys that got removed in the fourth step of the animated transformation. The thumb keys besides <kbd>Space</kbd>s is prime real estate for dedicated layer-switching keys. It doesn't matter on which side is assigned the sym-layer-switch key but it helps to keep the nav-layer-switch on the left in order to keep the arrow keys on the right side like on a classic keyboard, so we'll put nav on the left and sym on the right. We'll address the remaining blank thumb keys later.
The base layer is starting to form but there remains some flaws. One glaring issue is the position of Control. Control is a very commonly used function but the key on which it sits right now is way too tucked in under the hand to be able to press it comfortably with either the thumb or the pinky from resting position. In fact, installing a rotary encoder there is a common move among Elora users and I guarantee you that activating Control by holding down a rotary encoder does not spark joy. Instead, let's employ a popular trick that involves remapping the current Caps Lock key, which is positioned at a comfortable position on the keyboard, to Control.
We can go further though; a variant of this trick makes the Control key produce Escape when tapped. This is called a “modtap”. There is no use to tapping Control by itself without chording it with another key and there is no use to holding down the Esc key so why not combine the two into a single key?
All of this leaves us with three blank keys.
```
,-------------------------------------------. ,-------------------------------------------.
| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : | ' " |
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| LShift | Z | X | C | V | B | [ { | | | | ] } | N | M | , < | . > | / ? | RShift |
`--------+-------------+--------------------+------+------| |------+------+--------------------+------+---------------'
| | LGUI | LAlt | Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
| | | | | | | | | | | |
`----------------------------------' '----------------------------------'
```
These keys are not easily reachable while touch typing (that is, not reachable without picking up your hand) and should thus be associated with functions that you are not likely to be typed within a stream of text. The idea is that if you have to pick up your hand to hit a key, you want it to be at a time when you are likely to be pausing your interaction with the machine, rather than in the midst of a flurry of typing. They're thus well suited for accessing the adjust layer and the function layer. We can also toss in Caps Lock even though it is an editing-type function that gets used within a stream of text because shouting in ALL-CAPS should be a deliberate action.
```
,-------------------------------------------. ,-------------------------------------------.
| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : | ' " |
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
|Adjust| LGUI | LAlt | Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
| | | | | | | | | | | |
`----------------------------------' `----------------------------------'
```
The next glaring issue is the absence of an Enter key on the current base layer this far. Enter is a very frequently used key so it deserves to be placed at a good spot in the keymap. The best way to insert it in the keymap with minimal changes to the current layout is to use modtaps. A tempting solution is to turn the <kbd>RShift</kbd> key into a <kbd>RShift/Enter</kbd> modtap but that can result in chat messages sent too frustratingly early when you're not used to it. Using GUI is also sub-optimal because tapping the GUI modifier actually has a use as opposed to taps of the Control or the Shift key. Pressing and releasing the GUI key by itself opens the App menu in many desktop environments. The natural choice is thus <kbd>LAlt/Enter</kbd>. That way, Enter is 1u away from resting thumb position and is unlikely to get accidentally activated because Alt is very rarely used in the midst of prose.
Finally, we're one Quality-Of-Life update away from the actual base layer. <kbd>Ctrl/' "</kbd> not only preserves symmetry in the keymap with <kbd>Ctrl/Esc</kbd> but also helps balance the load between your pinkies and invites you to use both hands instead of contortions. Perhaps more importantly, it also frees you from the necessity of picking up your hand, breaking touch typing position and pressing a pinky key with your ring finger in order to execute Ctrl+A or Ctrl+Z. That becomes even more important on a board with such an aggressive pinky columnar stagger like the Elora.
```
,-------------------------------------------. ,-------------------------------------------.
| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
|Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
| | | Enter| | | | | | | | |
`----------------------------------' `----------------------------------'
```
</details>
## Navigation layer
```
Nav Layer: Media, navigation
,-------------------------------------------. ,-------------------------------------------.
| | | | | | | | | | | | | |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| | | | | | | | PgUp | Home | ↑ | End | VolUp| Delete |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| | GUI | Alt | Ctrl | Shift| | | PgDn | ← | ↓ | → | VolDn| Insert |
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| | | | | | | |ScLck | | | | Pause|M Prev|M Play|M Next|VolMut| PrtSc |
`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
| | | | | | | | | | | |
| | | | | | | | | | | |
`----------------------------------' `----------------------------------'
```
This is where you'll find all the keys that are generally between the main block of a classic keyboard and the numpad in addition to media controls and modifiers on easy access on the home row for fast and comfortable chording with navigation keys.
Useful mnemonics:
- “GACS” to remember the order of the modifiers on the left-hand home row
- <kbd>Scroll Lock</kbd> is on the same key as <kbd>Caps Lock</kbd> because they're both locks
- <kbd>Delete</kbd> is on the same key as <kbd>Backspace</kbd> because they both erase characters
- <kbd>Home</kbd> is the leftmost position on the current line so it is above <kbd></kbd>. Same logic applies for <kbd>End</kbd>.
- <kbd>Media Previous</kbd> = ⏮, <kbd>Media Next</kbd> = ⏭
- <kbd>Page Up</kbd>, <kbd>Page Down</kbd> and <kbd>Volume Up</kbd>, <kbd>Volume Down</kbd> are positioned like the main <kbd>Up</kbd> and <kbd>Down</kbd> keys.
## Sym layer
```
Sym Layer: Numbers, symbols
,-------------------------------------------. ,-------------------------------------------.
| | | | | | | | | | | | | |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| | | \ | : | ; | - | [ | { | | | | } | ] | _ | , | . | / | ? |
`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
| | | | | | | | | | | |
| | | | | | | | | | | |
`----------------------------------' `----------------------------------'
```
The top row is the unshifted num row, the home row of the layer is the shifted num row and the bottom row contains the hyphen `-` and the underscore `_` on the best lower row spot because of how frequent they are as well as redundant symbols that are already present on the base layer but are reproduced here to avoid juggling back and forth between base, shift, and sym when typing a string of symbols.
The layout of the first two rows needs no introduction, you're already used to them but it's worth looking into the structure of the bottom row.
The two halves are mirrored in a sense. On the right, you can find <kbd>,</kbd> <kbd>.</kbd> <kbd>/</kbd> at their usual spots with the addition of <kbd>Shift</kbd>+<kbd>/</kbd>=<kbd>?</kbd> to the right of the <kbd>/</kbd> key to remove the need to press simultaneously <kbd>Sym</kbd> and a <kbd>Shift</kbd> key to access `?`.
Now, if you look at the left side, you'll notice that the mirror of <kbd>,</kbd> is <kbd>;</kbd>, the mirror of <kbd>.</kbd> is <kbd>:</kbd> and the mirror of <kbd>/</kbd> is <kbd>\\</kbd>. The same logic used for <kbd>Shift</kbd>+<kbd>/</kbd>=<kbd>?</kbd> also applies to <kbd>Shift</kbd>+<kbd>\\</kbd>=<kbd>|</kbd>.
In case you wish to combine <kbd>Shift</kbd> with a symbol key anyways, you can hold down <kbd>Shift</kbd> on the base layer with your pinky, activate <kbd>Sym</kbd> with your right thumb and while still holding down the <kbd>Shift</kbd> key, tap your desired symbol key. Same thing if you need <kbd>Ctrl</kbd>+<kbd>Digit</kbd>.
## Function layer
```
Function Layer: Function keys
,-------------------------------------------. ,-------------------------------------------.
| | | | | | | | | | | | | |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| | F9 | F10 | F11 | F12 | | | | | | | | |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| | F5 | F6 | F7 | F8 | | | | Shift| Ctrl | Alt | GUI | |
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| | F1 | F2 | F3 | F4 | | | | | | | | | | | | |
`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
| | | | | | | | | | | |
| | | | | | | | | | | |
`----------------------------------' `----------------------------------'
```
In a similar fashion to the nav layer, pressing down `FKEYS` with the right thumb enables a numpad of function keys on the opposite hand and modifiers on the right-hand home row. Once again, mirror symmetry is leveraged in this keymap for the order of the right-hand modifiers.
The <kbd>Alt</kbd> modifier, despite being situated on the right half of the keyboard is *not* `KC_RALT`, it is `KC_LALT`. `KC_RALT` is actually the <kbd>AltGr</kbd> key which generally acts very differently to the left <kbd>Alt</kbd> key. Keyboard shortcuts involving <kbd>AltGr</kbd>+<kbd>F#</kbd> are rare and infrequent as opposed to the much more common <kbd>Alt</kbd>+<kbd>F#</kbd> shortcuts. Consequently, `KC_LALT` was chosen for the function layer.
Since there are more than 10 function keys, the cluster of F-keys does not follow the usual 3×3+1 numpad arrangement.
## Adjust layer
```
Adjust Layer: Default layer settings, RGB
,-------------------------------------------. ,-------------------------------------------.
| | | | | | | | | | | | | |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| | | |QWERTY| | | | | | | | | |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| | | |Dvorak| | | | TOG | SAI | HUI | VAI | MOD | |
|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
| | | |Colmak| | | | | | | | | SAD | HUD | VAD | RMOD | |
`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
| | | | | | | | | | | |
| | | | | | | | | | | |
`----------------------------------' `----------------------------------'
```
Default layer settings on the left and various RGB underglow controls on the right.
The default layer settings are lined up on the middle finger column because the home middle finger key is <kbd>D</kbd> on QWERTY (like the “D” in “Dvorak”) and the lower middle finger key is <kbd>C</kbd> on QWERTY (like the “C” in “Colemak”). I can hear you say that “QWERTY” doesn't start with “E” but Dvorak and Colemak were already aligned in a column so the QWERTY may as well join the formation.
NOTE: The default layer settings set by those keys are *NOT* stored in EEPROM and thus do not persist through boots. If you wish to change the default layer in a non-volatile manner, either change the order of the layers in the firmware, for example like so if you want to set Dvorak as the new default:
```c
enum layers {
_DVORAK = 0,
_QWERTY,
_COLEMAK_DH,
_NAV,
_SYM,
_FUNCTION,
_ADJUST
};
```
or re-define the `QWERTY`, `COLEMAK` and `DVORAK` keys to point to custom keycodes starting on `SAFE_RANGE` and calling the `set_single_persistent_default_layer` function inside of `process_record_user`.
## Hardware Features
### Rotary Encoder
The left rotary encoder is programmed to control the volume whereas the right encoder sends <kbd>PgUp</kbd> or <kbd>PgDn</kbd> on every turn.
## Going further…
This default keymap can be used as is, unchanged, as a daily driver for your Elora but you're invited to treat your keymap like a bonsai. At the beginning, it's just like the default keymap but from time to time, you can tweak it a little. Cut a little key here, let another combo grow there. Slowly but surely it will be a unique keymap that will fit you like a glove.
Check out the #keymap-ideas channel on the official SplitKB Discord server for inspiration.

View File

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

View File

@ -0,0 +1,31 @@
# Halcyon Elora
![splitkb/halcyon/elora](https://i.imgur.com/TbFWzsh.png)
The Halcyon Elora rev2 is the second Elora revision and the second keyboard in our Halcyon range. Similar to Aurora, all keyboards in the series share the same feature set. The key highlights:
- Halcyon keyboards come preassembled! You won't need a soldering iron.
- You'll be able to install [VIK](https://github.com/sadekbaroudi/vik) modules.
- It'll come fully documented, which includes the unboxing, assembly (with only a screwdriver), first installation and some advanced use cases.
- Both the connection to the host device as well as the interconnect between the keyboard halves use USB C.
- The controller has full ESD protection on all USB C ports, as well as all switch matrix GPIO!
- The controller is interchangable. If part of your keyboard ever breaks, we can replace just the bits that need replacing.
* Keyboard Maintainer: [splitkb.com](https://github.com/splitkb.com)
* Hardware Availability: [splitkb.com](https://splitkb.com).
Make example for this keyboard (after setting up your build environment):
make splitkb/halcyon/elora/rev2:default
The keyboard can be flashed by copying the resulting `.uf2` file onto the `RPI-RP2` flash drive.
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:
* **Reset button**: Double-tap the reset button at the top of the controller, right above the USB-C port.
* **Bootloader reset**: Hold down the "Boot" button and plug in the keyboard.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.

View File

@ -0,0 +1,32 @@
// Copyright 2025 splitkb.com (support@splitkb.com)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
// Make it easier to enter the bootloader
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
// UART1, communication between the two halves
#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
#define SERIAL_USART_TX_PIN GP28 // USART TX pin
#define SERIAL_USART_RX_PIN GP29 // USART RX pin
#define SERIAL_PIO_USE_PIO1 // Use PIO1 as PIO0 is used for WS2812 driver
// VBUS detection
#define USB_VBUS_PIN GP1
//// VIK
// GPIO1 = GP27
// GPIO2 = GP26
// CS = GP13
#define I2C_DRIVER I2C0
#define I2C1_SDA_PIN GP16
#define I2C1_SCL_PIN GP17
#define SPI_DRIVER SPID1
#define SPI_SCK_PIN GP14
#define SPI_MOSI_PIN GP15
#define SPI_MISO_PIN GP12

View File

@ -0,0 +1,14 @@
// Copyright 2025 splitkb.com (support@splitkb.com)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
//// VIK
#define HAL_USE_I2C TRUE
#define HAL_USE_SPI TRUE
#define SPI_USE_WAIT TRUE
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
#include_next <halconf.h>

View File

@ -0,0 +1,177 @@
{
"keyboard_name": "Halcyon Elora rev2",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP22", "pin_b": "GP18", "resolution": 2}
]
},
"features": {
"encoder": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["GP24", "GP19", "GP20", "GP25", "GP4", "GP9", "GP10"],
"rows": ["GP8", "GP11", "GP7", "GP6", "GP5"]
},
"processor": "RP2040",
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"solid_color": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "ws2812",
"layout": [
{"x": 75, "y": 2, "flags": 2},
{"x": 50, "y": 1, "flags": 2},
{"x": 14, "y": 4, "flags": 2},
{"x": 25, "y": 45, "flags": 2},
{"x": 58, "y": 49, "flags": 2},
{"x": 94, "y": 53, "flags": 2},
{"matrix": [4, 0], "x": 94, "y": 64, "flags": 4},
{"matrix": [4, 5], "x": 79, "y": 61, "flags": 4},
{"matrix": [4, 1], "x": 65, "y": 55, "flags": 4},
{"matrix": [4, 2], "x": 51, "y": 52, "flags": 4},
{"matrix": [4, 4], "x": 36, "y": 52, "flags": 4},
{"matrix": [3, 0], "x": 101, "y": 52, "flags": 4},
{"matrix": [4, 3], "x": 87, "y": 49, "flags": 4},
{"matrix": [3, 1], "x": 72, "y": 43, "flags": 4},
{"matrix": [3, 2], "x": 58, "y": 40, "flags": 4},
{"matrix": [3, 3], "x": 43, "y": 37, "flags": 4},
{"matrix": [3, 4], "x": 29, "y": 40, "flags": 4},
{"matrix": [3, 5], "x": 14, "y": 46, "flags": 4},
{"matrix": [3, 6], "x": 0, "y": 46, "flags": 4},
{"matrix": [2, 1], "x": 72, "y": 30, "flags": 4},
{"matrix": [2, 2], "x": 58, "y": 27, "flags": 4},
{"matrix": [2, 3], "x": 43, "y": 24, "flags": 4},
{"matrix": [2, 4], "x": 29, "y": 27, "flags": 4},
{"matrix": [2, 5], "x": 14, "y": 34, "flags": 4},
{"matrix": [2, 6], "x": 0, "y": 34, "flags": 4},
{"matrix": [1, 1], "x": 72, "y": 18, "flags": 4},
{"matrix": [1, 2], "x": 58, "y": 15, "flags": 4},
{"matrix": [1, 3], "x": 43, "y": 12, "flags": 4},
{"matrix": [1, 4], "x": 29, "y": 15, "flags": 4},
{"matrix": [1, 5], "x": 14, "y": 21, "flags": 4},
{"matrix": [1, 6], "x": 0, "y": 21, "flags": 4},
{"matrix": [0, 1], "x": 72, "y": 6, "flags": 4},
{"matrix": [0, 2], "x": 48, "y": 3, "flags": 4},
{"matrix": [0, 3], "x": 43, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 29, "y": 3, "flags": 4},
{"matrix": [0, 5], "x": 14, "y": 9, "flags": 4},
{"matrix": [0, 6], "x": 0, "y": 9, "flags": 4},
{"x": 149, "y": 2, "flags": 2},
{"x": 174, "y": 1, "flags": 2},
{"x": 210, "y": 4, "flags": 2},
{"x": 199, "y": 45, "flags": 2},
{"x": 166, "y": 49, "flags": 2},
{"x": 130, "y": 53, "flags": 2},
{"matrix": [9, 0], "x": 130, "y": 64, "flags": 4},
{"matrix": [9, 5], "x": 145, "y": 61, "flags": 4},
{"matrix": [9, 1], "x": 159, "y": 55, "flags": 4},
{"matrix": [9, 2], "x": 173, "y": 52, "flags": 4},
{"matrix": [9, 4], "x": 188, "y": 52, "flags": 4},
{"matrix": [8, 0], "x": 123, "y": 52, "flags": 4},
{"matrix": [9, 3], "x": 137, "y": 49, "flags": 4},
{"matrix": [8, 1], "x": 152, "y": 43, "flags": 4},
{"matrix": [8, 2], "x": 166, "y": 40, "flags": 4},
{"matrix": [8, 3], "x": 181, "y": 37, "flags": 4},
{"matrix": [8, 4], "x": 195, "y": 40, "flags": 4},
{"matrix": [8, 5], "x": 210, "y": 46, "flags": 4},
{"matrix": [8, 6], "x": 224, "y": 46, "flags": 4},
{"matrix": [7, 1], "x": 152, "y": 30, "flags": 4},
{"matrix": [7, 2], "x": 166, "y": 27, "flags": 4},
{"matrix": [7, 3], "x": 181, "y": 24, "flags": 4},
{"matrix": [7, 4], "x": 195, "y": 27, "flags": 4},
{"matrix": [7, 5], "x": 210, "y": 34, "flags": 4},
{"matrix": [7, 6], "x": 224, "y": 34, "flags": 4},
{"matrix": [6, 1], "x": 152, "y": 18, "flags": 4},
{"matrix": [6, 2], "x": 166, "y": 15, "flags": 4},
{"matrix": [6, 3], "x": 181, "y": 12, "flags": 4},
{"matrix": [6, 4], "x": 195, "y": 15, "flags": 4},
{"matrix": [6, 5], "x": 210, "y": 21, "flags": 4},
{"matrix": [6, 6], "x": 224, "y": 21, "flags": 4},
{"matrix": [5, 1], "x": 152, "y": 6, "flags": 4},
{"matrix": [5, 2], "x": 166, "y": 3, "flags": 4},
{"matrix": [5, 3], "x": 181, "y": 0, "flags": 4},
{"matrix": [5, 4], "x": 195, "y": 3, "flags": 4},
{"matrix": [5, 5], "x": 210, "y": 9, "flags": 4},
{"matrix": [5, 6], "x": 224, "y": 9, "flags": 4}
],
"max_brightness": 128,
"sleep": true,
"split_count": [37, 37]
},
"split": {
"enabled": true,
"handedness": {
"pin": "GP23"
},
"matrix_pins": {
"right": {
"cols": ["GP10", "GP9", "GP4", "GP25", "GP20", "GP19", "GP24"],
"rows": ["GP8", "GP11", "GP7", "GP6", "GP5"]
}
},
"serial": {
"driver": "vendor"
},
"transport": {
"sync": {
"matrix_state": true
}
}
},
"usb": {
"pid": "0xA392"
},
"ws2812": {
"driver": "vendor",
"pin": "GP3"
}
}

View File

@ -0,0 +1,14 @@
// Copyright 2025 splitkb.com (support@splitkb.com)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
//// VIK
#undef RP_I2C_USE_I2C0
#define RP_I2C_USE_I2C0 TRUE
#undef RP_SPI_USE_SPI1
#define RP_SPI_USE_SPI1 TRUE

View File

@ -0,0 +1,28 @@
// Copyright 2025 splitkb.com (support@splitkb.com)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false;
}
if (index == 0) {
// Volume control
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
} else if (index == 1) {
// Page up/Page down
if (clockwise) {
tap_code(KC_PGDN);
} else {
tap_code(KC_PGUP);
}
}
return false;
}
#endif

View File

@ -0,0 +1,73 @@
{
"manufacturer": "takashicompany",
"keyboard_name": "MirageiX",
"maintainer": "takashicompany",
"development_board": "promicro",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6"]
},
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0065",
"vid": "0x7463"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 1.25},
{"matrix": [1, 0], "x": 1, "y": 1.25},
{"matrix": [2, 0], "x": 2, "y": 0.25},
{"matrix": [3, 0], "x": 3, "y": 0},
{"matrix": [4, 0], "x": 4, "y": 0.25},
{"matrix": [5, 0], "x": 5, "y": 0.5},
{"matrix": [0, 3], "x": 8, "y": 0.5},
{"matrix": [1, 3], "x": 9, "y": 0.25},
{"matrix": [2, 3], "x": 10, "y": 0},
{"matrix": [3, 3], "x": 11, "y": 0.25},
{"matrix": [4, 3], "x": 12, "y": 1.25},
{"matrix": [5, 3], "x": 13, "y": 1.25},
{"matrix": [0, 1], "x": 0, "y": 2.25},
{"matrix": [1, 1], "x": 1, "y": 2.25},
{"matrix": [2, 1], "x": 2, "y": 1.25},
{"matrix": [3, 1], "x": 3, "y": 1},
{"matrix": [4, 1], "x": 4, "y": 1.25},
{"matrix": [5, 1], "x": 5, "y": 1.5},
{"matrix": [0, 4], "x": 8, "y": 1.5},
{"matrix": [1, 4], "x": 9, "y": 1.25},
{"matrix": [2, 4], "x": 10, "y": 1},
{"matrix": [3, 4], "x": 11, "y": 1.25},
{"matrix": [4, 4], "x": 12, "y": 2.25},
{"matrix": [5, 4], "x": 13, "y": 2.25},
{"matrix": [0, 2], "x": 0, "y": 3.25},
{"matrix": [1, 2], "x": 1, "y": 3.25},
{"matrix": [2, 2], "x": 2, "y": 2.25},
{"matrix": [3, 2], "x": 3, "y": 2},
{"matrix": [4, 2], "x": 4, "y": 2.25},
{"matrix": [5, 2], "x": 5, "y": 2.5},
{"matrix": [0, 5], "x": 8, "y": 2.5},
{"matrix": [1, 5], "x": 9, "y": 2.25},
{"matrix": [2, 5], "x": 10, "y": 2},
{"matrix": [3, 5], "x": 11, "y": 2.25},
{"matrix": [4, 5], "x": 12, "y": 3.25},
{"matrix": [5, 5], "x": 13, "y": 3.25},
{"matrix": [6, 0], "x": 2.5, "y": 4},
{"matrix": [6, 1], "x": 3.5, "y": 4},
{"matrix": [6, 2], "x": 4.5, "y": 4},
{"matrix": [6, 3], "x": 5.5, "y": 4},
{"matrix": [7, 2], "x": 7.5, "y": 4},
{"matrix": [7, 3], "x": 8.5, "y": 4},
{"matrix": [7, 4], "x": 9.5, "y": 4},
{"matrix": [7, 5], "x": 10.5, "y": 4}
]
}
}
}

View File

@ -0,0 +1,70 @@
// Copyright 2025 takashicompany (@takashicompany)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, LT(7, KC_Q), KC_W, KC_E, LT(6, KC_R), KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_LCTL, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_ENT,
KC_LSFT, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC, KC_DEL,
KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_RALT, KC_RGUI
),
[1] = LAYOUT(
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
KC_TRNS, LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3, KC_TRNS,
KC_TRNS, LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3), KC_TRNS,
KC_TRNS, KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3), KC_TRNS,
KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_TRNS, LT(7, KC_Q), KC_W, KC_E, LT(6, KC_R), KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS,
KC_TRNS, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_TRNS,
KC_TRNS, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC, KC_TRNS,
KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(5, KC_SPC), LT(4, KC_LNG1), KC_RALT, KC_RGUI
),
[4] = LAYOUT(
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
KC_TRNS, KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3, KC_TRNS,
KC_TRNS, LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[5] = LAYOUT(
KC_TRNS, KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS, KC_TRNS,
KC_TRNS, KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[6] = LAYOUT(
KC_TRNS, KC_ESC, KC_TAB, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_TRNS,
KC_TRNS, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_TRNS,
KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[7] = LAYOUT(
KC_TRNS, KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
KC_TRNS, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), MO(9), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[8] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, DF(0), DF(3), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1,39 @@
# MirageiX
![takashicompany/mirageix](https://i.imgur.com/93krKWQ.jpeg)
MirageiX is a 44-key integrated keyboard.
The PCB has been trimmed to the limit to create a visual appearance in which only the keycaps seem to float.
By using a transparent acrylic case, you can enjoy a mirage-like keyboard expression.
The key layout is based on the TRON keyboard layout, making typing smoother than it looks.
Keyswitches are fixed with sockets, allowing easy replacement of keyswitches.
MirageiXは44キーの一体型キーボードです。
PCBを極限まで切り詰めたことでキーキャップのみが浮き出るようなビジュアルを実現しました。
透明なアクリルケースを用いることで蜃気楼のようなキーボード表現が楽しめます。
キー配列もTRONというキーボードの配置を参考にしているため、見た目以上にスムーズなタイピングを実現します。
キースイッチはソケットで固定されるため、キースイッチの交換を容易に行えます。
* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
* Hardware Supported: MirageiX PCB, Pro Micro
* Hardware Availability: https://github.com/takashicompany/mirageix
Make example for this keyboard (after setting up your build environment):
make takashicompany/mirageix:default
Flashing example for this keyboard:
make takashicompany/mirageix: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

33
keyboards/typek/config.h Normal file
View File

@ -0,0 +1,33 @@
/*
Copyright 2022 Gondolindrim
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 WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
/* LED MAP
0 , 1 , 2 Three indicators
3 , 4 , 5 Three RGBs on left side
66, 67, 68 Three RGBs on right side
35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6 Left RGB wing (30 LEDs)
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65 Right RGB wing (30 LEDs)
*/

21
keyboards/typek/halconf.h Normal file
View File

@ -0,0 +1,21 @@
/* Copyright 2020 QMK
*
* 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_PWM TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,197 @@
{
"manufacturer": "gok",
"keyboard_name": "TypeK-S Rev. Zeta-RC2",
"maintainer": "Gondolindrim",
"bootloader": "stm32-dfu",
"build": {
"lto": true
},
"diode_direction": "COL2ROW",
"eeprom": {
"wear_leveling": {
"backing_size": 4096
}
},
"features": {
"bootmagic": true,
"nkro": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["A3", "B12", "A0", "A10", "B0", "B1", "B10", "B3", "C15", "C14", "C13", "B9", "B8", "B5"],
"rows": ["A7", "A8", "A15", "A1", "A2"]
},
"processor": "STM32F411",
"rgblight": {
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"rgb_test": true,
"snake": true,
"static_gradient": true,
"twinkle": true
},
"default": {
"animation": "rainbow_swirl",
"val": 200
},
"led_count": 69,
"led_map": [0, 1, 2, 3, 4, 5, 66, 67, 68, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65]
},
"url": "https://www.gok.design/type-k",
"usb": {
"device_version": "6.2.0",
"pid": "0x8475",
"vid": "0x7179"
},
"ws2812": {
"driver": "pwm",
"pin": "B15"
},
"layouts": {
"LAYOUT_all": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0.75, "y": 0},
{"label": "`~", "matrix": [0, 1], "x": 2.5, "y": 0},
{"label": "1!", "matrix": [0, 2], "x": 3.5, "y": 0},
{"label": "2@", "matrix": [0, 3], "x": 5, "y": 0},
{"label": "3#", "matrix": [0, 4], "x": 6, "y": 0},
{"label": "4$", "matrix": [0, 5], "x": 7, "y": 0},
{"label": "5%", "matrix": [0, 6], "x": 8, "y": 0},
{"label": "7&", "matrix": [0, 7], "x": 12.75, "y": 0},
{"label": "8*", "matrix": [0, 8], "x": 13.75, "y": 0},
{"label": "9(", "matrix": [0, 9], "x": 14.75, "y": 0},
{"label": "0)", "matrix": [0, 10], "x": 15.75, "y": 0},
{"label": "-_", "matrix": [0, 11], "x": 17, "y": 0},
{"label": "=+", "matrix": [0, 12], "x": 18, "y": 0},
{"label": "\\|", "matrix": [0, 13], "x": 19, "y": 0},
{"label": "Page Up", "matrix": [1, 0], "x": 0.5, "y": 1},
{"label": "Tab", "matrix": [1, 1], "x": 2.25, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 2], "x": 3.75, "y": 1},
{"label": "W", "matrix": [1, 3], "x": 5.5, "y": 1},
{"label": "E", "matrix": [1, 4], "x": 6.5, "y": 1},
{"label": "R", "matrix": [1, 5], "x": 7.5, "y": 1},
{"label": "T", "matrix": [1, 6], "x": 8.5, "y": 1},
{"label": "Y", "matrix": [1, 7], "x": 12, "y": 1},
{"label": "U", "matrix": [1, 8], "x": 13, "y": 1},
{"label": "I", "matrix": [1, 9], "x": 14, "y": 1},
{"label": "O", "matrix": [1, 10], "x": 15, "y": 1},
{"label": "P", "matrix": [1, 11], "x": 16.75, "y": 1},
{"label": "[{", "matrix": [1, 12], "x": 17.75, "y": 1},
{"label": "]}", "matrix": [1, 13], "x": 18.75, "y": 1},
{"label": "Page Down", "matrix": [2, 0], "x": 0.25, "y": 2},
{"label": "Caps Lock", "matrix": [2, 1], "x": 2.25, "y": 2, "w": 1.75},
{"label": "A", "matrix": [2, 2], "x": 4, "y": 2},
{"label": "S", "matrix": [2, 3], "x": 5.75, "y": 2},
{"label": "D", "matrix": [2, 4], "x": 6.75, "y": 2},
{"label": "F", "matrix": [2, 5], "x": 7.75, "y": 2},
{"label": "G", "matrix": [2, 6], "x": 8.75, "y": 2},
{"label": "H", "matrix": [2, 7], "x": 12.25, "y": 2},
{"label": "J", "matrix": [2, 8], "x": 13.25, "y": 2},
{"label": "K", "matrix": [2, 9], "x": 14.25, "y": 2},
{"label": "L", "matrix": [2, 10], "x": 15.25, "y": 2},
{"label": ";:", "matrix": [2, 11], "x": 17.25, "y": 2},
{"label": "\"", "matrix": [2, 12], "x": 18.25, "y": 2},
{"label": "Del", "matrix": [2, 13], "x": 20, "y": 0},
{"label": "End", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "Shift", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
{"label": "Z", "matrix": [3, 2], "x": 3.75, "y": 3},
{"label": "X", "matrix": [3, 3], "x": 6, "y": 3},
{"label": "C", "matrix": [3, 4], "x": 7, "y": 3},
{"label": "V", "matrix": [3, 5], "x": 8, "y": 3},
{"label": "B", "matrix": [3, 6], "x": 9, "y": 3},
{"label": "B", "matrix": [3, 7], "x": 11.75, "y": 3},
{"label": "N", "matrix": [3, 8], "x": 12.75, "y": 3},
{"label": "M", "matrix": [3, 9], "x": 13.75, "y": 3},
{"label": ",<", "matrix": [3, 10], "x": 14.75, "y": 3},
{"label": ".>", "matrix": [3, 11], "x": 17, "y": 3},
{"label": "/?", "matrix": [3, 12], "x": 18, "y": 3},
{"label": "Shift", "matrix": [3, 13], "x": 19, "y": 3, "w": 1.25},
{"label": "Control", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [4, 2], "x": 6, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [4, 4], "x": 7.5, "y": 4, "w": 2},
{"label": "Left GUI", "matrix": [4, 5], "x": 9.5, "y": 4},
{"label": "^6", "matrix": [4, 6], "x": 9, "y": 0},
{"label": "Space", "matrix": [4, 7], "x": 11.25, "y": 4},
{"label": "Space", "matrix": [4, 8], "x": 12.25, "y": 4, "w": 2},
{"label": "Alt", "matrix": [4, 9], "x": 14.25, "y": 4, "w": 1.5},
{"label": "Backspace", "matrix": [4, 10], "x": 19.75, "y": 1, "w": 1.5},
{"label": "Enter", "matrix": [4, 11], "x": 19.25, "y": 2, "w": 2.25},
{"label": "MO(1)", "matrix": [4, 12], "x": 20.25, "y": 3},
{"label": "Control", "matrix": [4, 13], "x": 19.25, "y": 4, "w": 1.5}
]
},
"LAYOUT_nosplits": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0.75, "y": 0},
{"label": "`~", "matrix": [0, 1], "x": 2.5, "y": 0},
{"label": "1!", "matrix": [0, 2], "x": 3.5, "y": 0},
{"label": "2@", "matrix": [0, 3], "x": 5, "y": 0},
{"label": "3#", "matrix": [0, 4], "x": 6, "y": 0},
{"label": "4$", "matrix": [0, 5], "x": 7, "y": 0},
{"label": "5%", "matrix": [0, 6], "x": 8, "y": 0},
{"label": "7&", "matrix": [0, 7], "x": 12.75, "y": 0},
{"label": "8*", "matrix": [0, 8], "x": 13.75, "y": 0},
{"label": "9(", "matrix": [0, 9], "x": 14.75, "y": 0},
{"label": "0)", "matrix": [0, 10], "x": 15.75, "y": 0},
{"label": "-_", "matrix": [0, 11], "x": 17, "y": 0},
{"label": "=+", "matrix": [0, 12], "x": 18, "y": 0},
{"label": "Backspace", "matrix": [0, 13], "x": 19, "y": 0, "w": 2},
{"label": "Page Up", "matrix": [1, 0], "x": 0.5, "y": 1},
{"label": "Tab", "matrix": [1, 1], "x": 2.25, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 2], "x": 3.75, "y": 1},
{"label": "W", "matrix": [1, 3], "x": 5.5, "y": 1},
{"label": "E", "matrix": [1, 4], "x": 6.5, "y": 1},
{"label": "R", "matrix": [1, 5], "x": 7.5, "y": 1},
{"label": "T", "matrix": [1, 6], "x": 8.5, "y": 1},
{"label": "Y", "matrix": [1, 7], "x": 12, "y": 1},
{"label": "U", "matrix": [1, 8], "x": 13, "y": 1},
{"label": "I", "matrix": [1, 9], "x": 14, "y": 1},
{"label": "O", "matrix": [1, 10], "x": 15, "y": 1},
{"label": "P", "matrix": [1, 11], "x": 16.75, "y": 1},
{"label": "[{", "matrix": [1, 12], "x": 17.75, "y": 1},
{"label": "]}", "matrix": [1, 13], "x": 18.75, "y": 1},
{"label": "Page Down", "matrix": [2, 0], "x": 0.25, "y": 2},
{"label": "Caps Lock", "matrix": [2, 1], "x": 2.25, "y": 2, "w": 1.75},
{"label": "A", "matrix": [2, 2], "x": 4, "y": 2},
{"label": "S", "matrix": [2, 3], "x": 5.75, "y": 2},
{"label": "D", "matrix": [2, 4], "x": 6.75, "y": 2},
{"label": "F", "matrix": [2, 5], "x": 7.75, "y": 2},
{"label": "G", "matrix": [2, 6], "x": 8.75, "y": 2},
{"label": "H", "matrix": [2, 7], "x": 12.25, "y": 2},
{"label": "J", "matrix": [2, 8], "x": 13.25, "y": 2},
{"label": "K", "matrix": [2, 9], "x": 14.25, "y": 2},
{"label": "L", "matrix": [2, 10], "x": 15.25, "y": 2},
{"label": ";:", "matrix": [2, 11], "x": 17.25, "y": 2},
{"label": "\"", "matrix": [2, 12], "x": 18.25, "y": 2},
{"label": "End", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "Shift", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
{"label": "Z", "matrix": [3, 2], "x": 3.75, "y": 3},
{"label": "X", "matrix": [3, 3], "x": 6, "y": 3},
{"label": "C", "matrix": [3, 4], "x": 7, "y": 3},
{"label": "V", "matrix": [3, 5], "x": 8, "y": 3},
{"label": "B", "matrix": [3, 6], "x": 9, "y": 3},
{"label": "B", "matrix": [3, 7], "x": 11.75, "y": 3},
{"label": "N", "matrix": [3, 8], "x": 12.75, "y": 3},
{"label": "M", "matrix": [3, 9], "x": 13.75, "y": 3},
{"label": ",<", "matrix": [3, 10], "x": 14.75, "y": 3},
{"label": ".>", "matrix": [3, 11], "x": 17, "y": 3},
{"label": "/?", "matrix": [3, 12], "x": 18, "y": 3},
{"label": "Shift", "matrix": [3, 13], "x": 19, "y": 3, "w": 2.25},
{"label": "Control", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [4, 2], "x": 6, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [4, 4], "x": 7.5, "y": 4, "w": 3},
{"label": "^6", "matrix": [4, 6], "x": 9, "y": 0},
{"label": "Space", "matrix": [4, 8], "x": 11.25, "y": 4, "w": 3},
{"label": "Alt", "matrix": [4, 9], "x": 14.25, "y": 4, "w": 1.5},
{"label": "Backspace", "matrix": [4, 10], "x": 19.75, "y": 1, "w": 1.5},
{"label": "Enter", "matrix": [4, 11], "x": 19.25, "y": 2, "w": 2.25},
{"label": "Control", "matrix": [4, 13], "x": 19.25, "y": 4, "w": 1.5}
]
}
}
}

View File

@ -0,0 +1,34 @@
/* Copyright 2023 Gondolindrim
*
* 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( /* Base */
KC_ESC , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL, KC_BSLS,
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_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_DEL ,
MO(1) , KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
KC_LCTL, KC_LALT, KC_SPC , KC_LGUI, KC_6 , KC_SPC , KC_SPC , KC_RALT, KC_BSPC, KC_ENT , MO(1) , KC_RCTL
),
[1] = LAYOUT_all(
QK_BOOT, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_TRNS,
KC_HOME, KC_TRNS, KC_TRNS, KC_UP , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_END , KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

21
keyboards/typek/mcuconf.h Normal file
View File

@ -0,0 +1,21 @@
/* Copyright 2020 QMK
*
* 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 STM32_PWM_USE_TIM1
#define STM32_PWM_USE_TIM1 TRUE

30
keyboards/typek/readme.md Normal file
View File

@ -0,0 +1,30 @@
# gok TypeK QMK Firmware Folder
![TK](https://i.imgur.com/0ZEbEZt.jpg)
## Introduction
This is the QMK Firmware repository for the Type K, the tented ergo by Gok. The TypeK went through GB on August, 2023. It is supported by a proprietary PCB ecosystem.
## How to flash
### Enter bootloader
The DFU state in the bootloader can be accessed in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key, escape in the default keymap) and plug in the keyboard;
* **Physical reset button**: press the button on the front of the PCB, next to caps lock, for at least five seconds;
* **Keycode in layout**: Press the key mapped to `RESET`; in the default layout, that is top left key ('escape') in layer 1.
### How to compile and flash
After setting up your build environment, you can compile the Iron 165R2 default keymap by using one of the options below.
make typek:default
And use dfu-util in the command line or through a GUI like QMK toolbox to upload the firmware to the PCB. To directly flash the PCB after it is put into a DFU state, use:
make typek: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).

44
keyboards/typek/typek.c Normal file
View File

@ -0,0 +1,44 @@
/* Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
*
* 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"
// This function gets called when caps, num, scroll change
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if (res) {
led_state.caps_lock? rgblight_setrgb_at(RGB_RED, 0) : rgblight_setrgb_at(RGB_OFF, 0);
}
return res;
}
// This function is called when layers change
layer_state_t layer_state_set_kb(layer_state_t state) {
state = layer_state_set_user(state);
switch(get_highest_layer(state)) {
case 1:
rgblight_setrgb_at(RGB_GREEN, 1);
break;
case 2:
rgblight_setrgb_at(RGB_BLUE, 2);
break;
default:
rgblight_setrgb_at(RGB_OFF, 1);
rgblight_setrgb_at(RGB_OFF, 2);
break;
}
return state;
}

View File

@ -0,0 +1,20 @@
/*
Copyright 2024 Joseph Williams IV "IV Works" <josephawilliamsiv@gmail.com>
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 WS2812_EXTERNAL_PULLUP

Some files were not shown because too many files have changed in this diff Show More