Compare commits

...

10 Commits

Author SHA1 Message Date
Arne Moerman
dc49a1cc1b Add Cheapino keyboard support with multiple keymaps and configurations
Some checks failed
CI / Check Vial UIDs (push) Has been cancelled
CI / Build default keymaps for Vial (push) Has been cancelled
CI / Build Vial keymaps (push) Has been cancelled
- Created default keymap for Cheapino keyboard with basic layout.
- Added Lars keymap with custom mouse settings and underglow configuration.
- Implemented TheArne4 keymap tailored for azerty-be layout.
- Introduced Tompi keymap with extensive layer definitions.
- Added VIA and VIAL support with respective keymaps and configurations.
- Implemented custom matrix handling in matrix.c for improved performance.
- Added mcuconf.h for MCU configuration.
- Created README.md for project documentation and setup instructions.
- Updated rules.mk to include necessary features and source files.
2026-02-26 10:58:03 +01:00
Ivan Gromov
1d9c72972d Add kt60HS-T v3 (#999) 2026-02-23 22:20:21 -06:00
Ivan Gromov
0a0ebacf13 Add kt356 Mini (#998) 2026-02-23 22:19:39 -06:00
Ivan Gromov
e5d212c60b Add imi60-HS (#997) 2026-02-23 22:19:27 -06:00
Maryam Sheikh
72fb6f1fed Add support for the Keychron C2 V2 White (#987)
This adds support for the Keychron C2 V2 White. The RGB version is not
supported due to not owning an RGB C2 V2.

One thing this is missing is backlight controls, since the Keychron C2
V2 White uses LED Matrix (https://docs.qmk.fm/features/led_matrix).
While this is a feature in upstream QMK, and seems to be here, I'm not
sure if Vial explicitly supports LED Matrix in the GUI. LED Matrix is
not to be confused with RGB Matrix (the former being with single-color
LEDs and not RGB LEDs).

Signed-off-by: Maryam Sheikh <mahid@standingpad.org>
2026-02-22 01:17:08 -06:00
Will Fuller
2c19604a9c Port YMDK SP64 (#990)
* Add matrix_is_on function, to fix 'undefined reference' build error

* Add Vial keymap
2026-02-22 01:16:56 -06:00
Minseo Kim
7e78fe2e8b Add Vial support for swagkeys/eave (#995) 2026-02-22 01:15:08 -06:00
Grigory Avdyushin
e988c64064 Franky36 vial keymap added (#993) 2026-02-21 20:56:35 -06:00
ivan
c0ac784c45 added vial keymap to obiwanstenobit keyboard (#992) 2026-02-21 20:56:23 -06:00
dkleber89
70a3043ba3 Update keymap and led indicator of sharkoon skiller sgk50 s2 to streamline to other 96% ISO keyboards (#991) 2026-02-21 20:55:48 -06:00
81 changed files with 5275 additions and 36 deletions

View File

@@ -0,0 +1,75 @@
#include "wait.h"
#include "quantum.h"
// This is to keep state between callbacks, when it is 0 the
// initial RGB flash is finished
uint8_t _hue_countdown = 50;
// These are to keep track of user selected color, so we
// can restore it after RGB flash
uint8_t _hue;
uint8_t _saturation;
uint8_t _value;
// Do a little 2.5 seconds display of the different colors
// Use the deferred executor so the LED flash dance does not
// stop us from using the keyboard.
// https://docs.qmk.fm/#/custom_quantum_functions?id=deferred-executor-registration
uint32_t flash_led(uint32_t next_trigger_time, void *cb_arg) {
rgblight_sethsv(_hue_countdown * 5, 230, 70);
_hue_countdown--;
if (_hue_countdown == 0) {
// Finished, reset to user chosen led color
rgblight_sethsv(_hue, _saturation, _value);
return 0;
} else {
return 50;
}
}
void keyboard_post_init_user(void) {
//debug_enable=true;
//debug_matrix=true;
//debug_keyboard=true;
//debug_mouse=true;
// Store user selected rgb hsv:
_hue = rgblight_get_hue();
_saturation = rgblight_get_sat();
_value = rgblight_get_val();
// Flash a little on start
// defer_exec(50, flash_led, NULL);
}
// Make the builtin RGB led show different colors per layer:
uint8_t get_hue(uint8_t layer) {
switch (layer) {
case 13:
return 0;
case 12:
return 20;
case 5:
return 43;
case 4:
return 43;
case 3:
return 170;
case 2:
return 213;
case 1:
return 128;
case 0:
return 85;
default:
return 255;
}
}
layer_state_t layer_state_set_user(layer_state_t state) {
uint8_t sat = rgblight_get_sat();
uint8_t val = rgblight_get_val();
uint8_t hue = get_hue(get_highest_layer(state));
rgblight_sethsv(hue, sat, val);
return state;
}

View File

@@ -0,0 +1,26 @@
// Copyright 2023 Thomas Haukland (@tompi)
// Copyright 2026 Arne Moerman (@thearne4)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
#define WS2812_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the WS2812 implementation uses the PIO0 peripheral
#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_RGB
// Pick good defaults for enabling homerow modifiers
#define TAPPING_TERM 230
#define WS2812_DI_PIN GP16 // The pin connected to the data pin of the LEDs
#define RGBLIGHT_LED_COUNT 1 // The number of LEDs connected
// Max number of threads
#define MAX_DEFERRED_EXECUTORS 32
// #define DEBUG_MATRIX_SCAN_RATE
// Avoid very bright default LED
#define RGBLIGHT_DEFAULT_HUE 128 // Sets the default hue value, if none has been set
#define RGBLIGHT_DEFAULT_SAT 128 // Sets the default saturation value, if none has been set
#define RGBLIGHT_DEFAULT_VAL 32 // Sets the default brightness value, if none has been set

View File

@@ -0,0 +1,63 @@
#include "matrix.h"
#include "quantum.h"
#define COL_SHIFTER ((uint16_t)1)
#define ENC_ROW 3
#define ENC_A_COL 2
#define ENC_B_COL 4
#define ENC_BUTTON_COL 0
static bool colABPressed = false;
static bool encoderPressed = false;
void clicked(void) {
tap_code(KC_MPLY);
}
void turned(bool clockwise) {
if (IS_LAYER_ON(6)) {
tap_code(clockwise ? KC_VOLU : KC_VOLD);
} else if (IS_LAYER_ON(3)) {
tap_code16(clockwise ? LCTL(KC_TAB) : LCTL(LSFT(KC_TAB)));
} else if (IS_LAYER_ON(5)) {
tap_code16(clockwise ? LGUI(KC_Y) : LGUI(KC_Z));
} else {
tap_code16(clockwise ? KC_PGDN : KC_PGUP);
}
}
void fix_encoder_action(matrix_row_t current_matrix[]) {
matrix_row_t encoder_row = current_matrix[ENC_ROW];
if (encoder_row & (COL_SHIFTER << ENC_BUTTON_COL)) {
encoderPressed = true;
} else {
// Only trigger click on release
if (encoderPressed) {
encoderPressed = false;
clicked();
}
}
// Check which way the encoder is turned:
bool colA = encoder_row & (COL_SHIFTER << ENC_A_COL);
bool colB = encoder_row & (COL_SHIFTER << ENC_B_COL);
if (colA && colB) {
colABPressed = true;
} else if (colA) {
if (colABPressed) {
// A+B followed by A means clockwise
colABPressed = false;
turned(true);
}
} else if (colB) {
if (colABPressed) {
// A+B followed by B means counter-clockwise
colABPressed = false;
turned(false);
}
}
current_matrix[ENC_ROW] = 0;
}

View File

@@ -0,0 +1,5 @@
//
// Created by Thomas Haukland on 25/03/2023.
//
void fix_encoder_action(matrix_row_t current_matrix[]);

View File

@@ -0,0 +1,128 @@
//
// Created by Thomas Haukland on 2024-05-05.
//
#include "matrix.h"
#include "quantum.h"
#include "print.h"
// This is just to be able to declare constants as they appear in the qmk console
#define rev(b) \
((b & 1) << 15) | \
((b & (1 << 1)) << 13) | \
((b & (1 << 2)) << 11) | \
((b & (1 << 3)) << 9) | \
((b & (1 << 4)) << 7) | \
((b & (1 << 5)) << 5) | \
((b & (1 << 6)) << 3) | \
((b & (1 << 7)) << 1) | \
((b & (1 << 8)) >> 1) | \
((b & (1 << 9)) >> 3) | \
((b & (1 << 10)) >> 5) | \
((b & (1 << 11)) >> 7) | \
((b & (1 << 12)) >> 9) | \
((b & (1 << 13)) >> 11) | \
((b & (1 << 14)) >> 13) | \
b >> 15
/* This is for debugging the matrix rows
void printBits(uint16_t n)
{
long i;
for (i = 15; i >= 0; i--) {
if ((n & (1 << i)) != 0) {
printf("1");
}
else {
printf("0");
}
}
printf("\n");
}
*/
bool bit_pattern_set(uint16_t number, uint16_t bitPattern) {
return !(~number & bitPattern);
}
void fix_ghosting_instance(
matrix_row_t current_matrix[],
unsigned short row_num_with_possible_error_cause,
uint16_t possible_error_cause,
unsigned short row_num_with_possible_error,
uint16_t possible_error,
uint16_t error_fix) {
if (bit_pattern_set(current_matrix[row_num_with_possible_error_cause], possible_error_cause)) {
if (bit_pattern_set(current_matrix[row_num_with_possible_error], possible_error)) {
current_matrix[row_num_with_possible_error] = current_matrix[row_num_with_possible_error] ^ error_fix;
}
}
}
void fix_ghosting_column(
matrix_row_t matrix[],
uint16_t possible_error_cause,
uint16_t possible_error,
uint16_t error_fix) {
// First the right side
for (short i = 0; i<3; i++) {
fix_ghosting_instance(matrix, i, possible_error_cause, (i+1)%3, possible_error, error_fix);
fix_ghosting_instance(matrix, i, possible_error_cause, (i+2)%3, possible_error, error_fix);
}
// Then exactly same procedure on the left side
for (short i = 0; i<3; i++) {
fix_ghosting_instance(matrix, i+4, possible_error_cause<<6, 4+((i+1)%3), possible_error<<6, error_fix<<6);
fix_ghosting_instance(matrix, i+4, possible_error_cause<<6, 4+((i+2)%3), possible_error<<6, error_fix<<6);
}
}
// For QWERTY layout, key combo a+s+e also outputs q. This suppresses the q, and other similar ghosts
// These are observed ghosts(following a pattern). TODO: need to fix this for v3
// Might need to add 2 diodes(one in each direction) for every row, to increase voltage drop.
void fix_ghosting(matrix_row_t matrix[]) {
fix_ghosting_column(matrix,
rev(0B0110000000000000),
rev(0B1010000000000000),
rev(0B0010000000000000));
fix_ghosting_column(matrix,
rev(0B0110000000000000),
rev(0B0101000000000000),
rev(0B0100000000000000));
fix_ghosting_column(matrix,
rev(0B0001100000000000),
rev(0B0010100000000000),
rev(0B0000100000000000));
fix_ghosting_column(matrix,
rev(0B0001100000000000),
rev(0B0001010000000000),
rev(0B0001000000000000));
fix_ghosting_column(matrix,
rev(0B1000010000000000),
rev(0B1000100000000000),
rev(0B1000000000000000));
fix_ghosting_column(matrix,
rev(0B1000010000000000),
rev(0B0100010000000000),
rev(0B0000010000000000));
fix_ghosting_column(matrix,
rev(0B1001000000000000),
rev(0B0101000000000000),
rev(0B0001000000000000));
fix_ghosting_column(matrix,
rev(0B1001000000000000),
rev(0B1010000000000000),
rev(0B1000000000000000));
fix_ghosting_column(matrix,
rev(0B0100100000000000),
rev(0B0100010000000000),
rev(0B0100000000000000));
fix_ghosting_column(matrix,
rev(0B0100100000000000),
rev(0B1000100000000000),
rev(0B0000100000000000));
}

View File

@@ -0,0 +1,5 @@
//
// Created by Thomas Haukland on 2024-05-05.
//
void fix_ghosting(matrix_row_t current_matrix[]);

View File

@@ -0,0 +1,4 @@
#pragma once
#include_next <halconf.h>

View File

@@ -0,0 +1,96 @@
{
"manufacturer": "Arne Moerman",
"keyboard_name": "Cheapino2",
"maintainer": "tompi",
"bootloader": "rp2040",
"diode_direction": "ROW2COL",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"via": true,
"vial": true
},
"community_layouts": ["split_3x5_3"],
"matrix_pins": {
"cols": [
"GP6",
"GP6",
"GP5",
"GP5",
"GP4",
"GP4",
"GP14",
"GP14",
"GP15",
"GP15",
"GP26",
"GP26"
],
"rows": ["GP3", "GP1", "GP2", "GP0", "GP27", "GP28", "GP29", "GP8"]
},
"processor": "RP2040",
"url": "",
"usb": {
"device_version": "1.0.1",
"pid": "0x10B8",
"vid": "0xFEE3",
"force_nkro": false
},
"layouts": {
"LAYOUT_split_3x5_3": {
"layout": [
{ "matrix": [4, 10], "x": 0, "y": 0.25 },
{ "matrix": [4, 9], "x": 1, "y": 0.125 },
{ "matrix": [4, 8], "x": 2, "y": 0 },
{ "matrix": [4, 7], "x": 3, "y": 0.125 },
{ "matrix": [4, 6], "x": 4, "y": 0.25 },
{ "matrix": [0, 0], "x": 7, "y": 0.25 },
{ "matrix": [0, 1], "x": 8, "y": 0.125 },
{ "matrix": [0, 2], "x": 9, "y": 0 },
{ "matrix": [0, 3], "x": 10, "y": 0.125 },
{ "matrix": [0, 4], "x": 11, "y": 0.25 },
{ "matrix": [5, 10], "x": 0, "y": 1.25 },
{ "matrix": [5, 9], "x": 1, "y": 1.125 },
{ "matrix": [5, 8], "x": 2, "y": 1 },
{ "matrix": [5, 7], "x": 3, "y": 1.125 },
{ "matrix": [5, 6], "x": 4, "y": 1.25 },
{ "matrix": [1, 0], "x": 7, "y": 1.25 },
{ "matrix": [1, 1], "x": 8, "y": 1.125 },
{ "matrix": [1, 2], "x": 9, "y": 1 },
{ "matrix": [1, 3], "x": 10, "y": 1.125 },
{ "matrix": [1, 4], "x": 11, "y": 1.25 },
{ "matrix": [6, 10], "x": 0, "y": 2.25 },
{ "matrix": [6, 9], "x": 1, "y": 2.125 },
{ "matrix": [6, 8], "x": 2, "y": 2 },
{ "matrix": [6, 7], "x": 3, "y": 2.125 },
{ "matrix": [6, 6], "x": 4, "y": 2.25 },
{ "matrix": [2, 0], "x": 7, "y": 2.25 },
{ "matrix": [2, 1], "x": 8, "y": 2.125 },
{ "matrix": [2, 2], "x": 9, "y": 2 },
{ "matrix": [2, 3], "x": 10, "y": 2.125 },
{ "matrix": [2, 4], "x": 11, "y": 2.25 },
{ "matrix": [6, 11], "x": 2.5, "y": 3.25 },
{ "matrix": [5, 11], "x": 3.5, "y": 3.5 },
{ "matrix": [4, 11], "x": 4.5, "y": 3.75 },
{ "matrix": [0, 5], "x": 6.5, "y": 3.75 },
{ "matrix": [1, 5], "x": 7.5, "y": 3.5 },
{ "matrix": [2, 5], "x": 8.5, "y": 3.25 }
]
}
}
}

View File

@@ -0,0 +1,163 @@
{
"version": 1,
"notes": "Cheapino default keymap",
"documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"keyboard": "bastardkb/skeletyl/blackpill",
"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_SCLN",
"KC_Z",
"KC_X",
"KC_C",
"KC_V",
"KC_B",
"KC_N",
"KC_M",
"KC_COMM",
"KC_DOT",
"KC_SLSH",
"KC_LGUI",
"KC_SPC",
"MO(1)",
"MO(2)",
"KC_ENT",
"KC_RALT"
],
[
"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_LEFT",
"KC_DOWN",
"KC_UP",
"KC_RGHT",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_LGUI",
"KC_SPC",
"KC_TRNS",
"MO(3)",
"KC_ENT",
"KC_RALT"
],
[
"KC_EXLM",
"KC_AT",
"KC_HASH",
"KC_DLR",
"KC_PERC",
"KC_CIRC",
"KC_AMPR",
"KC_ASTR",
"KC_LPRN",
"KC_RPRN",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_MINS",
"KC_EQL",
"KC_LBRC",
"KC_RBRC",
"KC_BSLS",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_UNDS",
"KC_PLUS",
"KC_LCBR",
"KC_RCBR",
"KC_PIPE",
"KC_LGUI",
"KC_SPC",
"MO(3)",
"KC_TRNS",
"KC_ENT",
"KC_RALT"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"RGB_HUI",
"RGB_SAI",
"RGB_VAI",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"RGB_HUD",
"RGB_SAD",
"RGB_VAD",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_LGUI",
"KC_SPC",
"KC_TRNS",
"KC_TRNS",
"KC_ENT",
"KC_RALT"
]
],
"author": ""
}

View File

@@ -0,0 +1,51 @@
/*
Copyright 2020 Pierre Chevalier <pierrechevalier83@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
// Set the mouse settings to a comfortable speed/accuracy trade-off,
// assuming a screen refresh rate of 60 Htz or higher
// The default is 50. This makes the mouse ~3 times faster and more accurate
#define MOUSEKEY_INTERVAL 16
// The default is 20. Since we made the mouse about 3 times faster with the previous setting,
// give it more time to accelerate to max speed to retain precise control over short distances.
#define MOUSEKEY_TIME_TO_MAX 40
// The default is 300. Let's try and make this as low as possible while keeping the cursor responsive
#define MOUSEKEY_DELAY 100
// It makes sense to use the same delay for the mouseweel
#define MOUSEKEY_WHEEL_DELAY 100
// The default is 100
#define MOUSEKEY_WHEEL_INTERVAL 50
// The default is 40
#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
// Pick good defaults for enabling homerow modifiers
#undef TAPPING_TERM
#define TAPPING_TERM 200
// #define PERMISSIVE_HOLD
#define TAPPING_FORCE_HOLD
//#define RETRO_TAPPING
// Underglow configuration
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#endif
//#define UNICODE_SELECTED_MODES UC_MAC

View File

@@ -0,0 +1,125 @@
{
"version": 1,
"notes": "My awesome keymap",
"documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"keyboard": "bastardkb/skeletyl/blackpill",
"keymap": "default",
"layout": "LAYOUT_split_3x5_3",
"layers": [
[
"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",
"LSFT_T(KC_Z)",
"LCTL_T(KC_X)",
"RALT_T(KC_C)",
"KC_D",
"KC_V",
"KC_K",
"KC_H",
"RALT_T(KC_COMM)",
"LCTL_T(KC_DOT)",
"LSFT_T(KC_SLSH)",
"TO(1)",
"KC_BSPC",
"KC_TAB",
"KC_LGUI",
"KC_SPC",
"KC_ENT"
],
[
"KC_TRNS",
"KC_7",
"KC_8",
"KC_9",
"KC_TRNS",
"KC_QUOT",
"KC_MINS",
"KC_EQL",
"KC_ASTR",
"KC_CIRC",
"KC_TRNS",
"KC_4",
"KC_5",
"KC_6",
"KC_0",
"KC_BSLS",
"KC_LPRN",
"KC_RPRN",
"KC_LBRC",
"KC_RBRC",
"KC_LSFT",
"KC_1",
"KC_2",
"KC_3",
"KC_TRNS",
"KC_PIPE",
"KC_GRV",
"KC_LALT",
"KC_LCTL",
"KC_RSFT",
"TO(2)",
"KC_BSPC",
"KC_TAB",
"KC_DEL",
"TO(0)",
"KC_ENT"
],
[
"KC_TRNS",
"KC_TRNS",
"KC_PGUP",
"KC_TRNS",
"KC_TRNS",
"ANY(UC(0xE6))",
"ANY(UC(0xF8))",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_LEFT",
"KC_UP",
"KC_DOWN",
"KC_RGHT",
"KC_TRNS",
"KC_TRNS",
"KC_LGUI",
"ANY(UC(0xE5))",
"LCTL(KC_LALT)",
"LCA(KC_LSFT)",
"KC_TRNS",
"KC_HOME",
"KC_PGDN",
"KC_END",
"KC_TRNS",
"KC_TRNS",
"KC_RBRC",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TAB",
"KC_DEL",
"TO(0)",
"KC_TRNS"
]
],
"author": "thomas.haukland@gmail.com"
}

View File

@@ -0,0 +1,239 @@
{
"documentation": "\"This file is a QMK Configurator export. It is based around Windows being set to azerty-be . You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"notes": "TheArne4 keymap",
"version": 1,
"keyboard": "bastardkb/skeletyl/blackpill",
"keymap": "thearne4",
"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",
"LGUI_T(KC_A)",
"LALT_T(KC_S)",
"LSFT_T(KC_D)",
"LCTL_T(KC_F)",
"KC_G",
"KC_H",
"LCTL_T(KC_J)",
"RSFT_T(KC_K)",
"LALT_T(KC_L)",
"LGUI_T(KC_SCLN)",
"KC_Z",
"KC_X",
"KC_C",
"KC_V",
"LT(5,KC_B)",
"LT(1,KC_N)",
"KC_M",
"KC_COMM",
"KC_DOT",
"KC_SLSH",
"LT(4,KC_ESC)",
"LT(3,KC_ENT)",
"LT(2,KC_TAB)",
"LT(2,KC_BSPC)",
"LT(3,KC_SPC)",
"LT(4,KC_DEL)"
],
[
"KC_A",
"KC_Z",
"KC_F",
"KC_P",
"KC_B",
"KC_J",
"KC_L",
"KC_U",
"KC_Y",
"KC_SLSH",
"LGUI_T(KC_Q)",
"LALT_T(KC_R)",
"LSFT(KC_S)",
"LCTL(KC_T)",
"KC_G",
"KC_SCLN",
"RCTL_T(KC_N)",
"RSFT_T(KC_E)",
"LALT_T(KC_I)",
"RGUI_T(KC_O)",
"KC_W",
"KC_X",
"KC_C",
"KC_D",
"RALT_T(KC_V)",
"RALT_T(KC_K)",
"KC_H",
"KC_M",
"KC_COMM",
"KC_DOT",
"LT(4,KC_ESC)",
"LT(3,KC_ENT)",
"LT(2,KC_TAB)",
"LT(2,KC_BSPC)",
"LT(3,KC_SPC)",
"LT(4,KC_DEL)"
],
[
"KC_F1",
"KC_F2",
"KC_F3",
"KC_F4",
"KC_F5",
"KC_F6",
"KC_F7",
"KC_F8",
"KC_F9",
"KC_F10",
"LGUI_T(KC_1)",
"LALT_T(KC_2)",
"LSFT_T(KC_3)",
"LCTL_T(KC_4)",
"KC_5",
"KC_6",
"RCTL_T(KC_7)",
"RSFT_T(KC_8)",
"LALT_T(KC_9)",
"RGUI_T(KC_0)",
"KC_GRV",
"KC_LBRC",
"KC_RBRC",
"KC_QUOT",
"RALT_T(KC_NUHS)",
"RALT_T(KC_CAPS)",
"KC_MINS",
"KC_EQL",
"KC_F11",
"KC_F12",
"KC_ESC",
"KC_ENT",
"KC_TAB",
"KC_BSPC",
"KC_SPC",
"KC_DEL"
],
[
"LSFT(KC_NUBS)",
"RALT(KC_1)",
"RALT(KC_LBRC)",
"RALT(KC_RBRC)",
"RALT(KC_NUBS)",
"KC_INS",
"KC_HOME",
"KC_UP",
"KC_PGUP",
"KC_PAUS",
"LGUI_T(KC_NUBS)",
"LALT_T(KC_1)",
"LSFT_T(KC_5)",
"LCTL_T(KC_MINS)",
"RALT(KC_2)",
"KC_HASH",
"KC_LEFT",
"KC_DOWN",
"KC_RGHT",
"KC_SCRL",
"RALT(KC_QUOT)",
"RALT(KC_NUHS)",
"RALT(KC_9)",
"RALT(KC_0)",
"RALT(KC_3)",
"RSFT(KC_RBRC)",
"KC_QUOT",
"RSFT(KC_EQL)",
"KC_PGDN",
"TO(5)",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO"
],
[
"KC_WBAK",
"MS_WHLU",
"MS_UP",
"MS_BTN2",
"KC_WFWD",
"KC_PAST",
"KC_P7",
"KC_P8",
"KC_P9",
"KC_PPLS",
"MS_WHLL",
"MS_LEFT",
"MS_BTN1",
"MS_RGHT",
"MS_WHLR",
"KC_PSLS",
"KC_P4",
"KC_P5",
"KC_P6",
"KC_PMNS",
"KC_TRNS",
"MS_WHLD",
"MS_DOWN",
"MS_BTN3",
"TO(0)",
"KC_P0",
"KC_P1",
"KC_P2",
"KC_P3",
"KC_PDOT",
"KC_ESC",
"KC_ENT",
"KC_TAB",
"KC_BSPC",
"KC_SPC",
"KC_DEL"
],
[
"KC_F13",
"KC_F14",
"KC_F15",
"KC_F16",
"KC_F17",
"KC_F18",
"KC_F19",
"KC_F20",
"KC_F21",
"KC_F22",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_MSTP",
"KC_MPLY",
"KC_VOLU",
"KC_MUTE",
"KC_NO",
"TO(4)",
"KC_NO",
"KC_CALC",
"KC_MAIL",
"TO(0)",
"KC_MPRV",
"KC_MNXT",
"KC_VOLD",
"KC_F23",
"KC_F24",
"KC_ESC",
"KC_ENT",
"KC_TAB",
"KC_BSPC",
"KC_SPC",
"KC_DEL"
]
],
"author": "cheapino@arnemoerman.be"
}

View File

@@ -0,0 +1,277 @@
{
"version": 1,
"notes": "Tompi keymap",
"documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"keyboard": "bastardkb/skeletyl/blackpill",
"keymap": "tompi",
"layout": "LAYOUT_split_3x5_3",
"layers": [
[
"KC_Q",
"KC_W",
"KC_F",
"KC_P",
"KC_B",
"KC_J",
"KC_L",
"KC_U",
"KC_Y",
"KC_SCLN",
"LGUI_T(KC_A)",
"LALT_T(KC_R)",
"LCTL_T(KC_S)",
"LSFT_T(KC_T)",
"KC_G",
"KC_M",
"RSFT_T(KC_N)",
"LCTL_T(KC_E)",
"LALT_T(KC_I)",
"LGUI_T(KC_O)",
"KC_Z",
"KC_X",
"KC_C",
"KC_D",
"LT(5,KC_V)",
"LT(1,KC_K)",
"KC_H",
"KC_COMM",
"KC_DOT",
"KC_SLSH",
"LT(6,KC_ESC)",
"LT(3,KC_SPC)",
"LT(5,KC_TAB)",
"LT(1,KC_DEL)",
"LT(2,KC_BSPC)",
"LT(4,KC_ENT)"
],
[
"KC_VOLU",
"KC_WH_L",
"KC_NO",
"KC_WH_U",
"KC_WH_R",
"KC_NO",
"KC_NO",
"KC_NO",
"QK_CLEAR_EEPROM",
"ANY(QK_RBT)",
"KC_NO",
"KC_MS_L",
"KC_MS_U",
"KC_MS_R",
"KC_MUTE",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_VOLD",
"KC_MNXT",
"KC_MS_D",
"KC_WH_D",
"KC_MPLY",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_NO",
"KC_NO"
],
[
"NK_TOGG",
"KC_HOME",
"KC_DEL",
"KC_PGUP",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_LEFT",
"KC_UP",
"KC_RGHT",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_END",
"KC_DOWN",
"KC_PGDN",
"KC_NO",
"KC_NO",
"KC_BTN1",
"KC_BTN2",
"KC_BTN3",
"KC_BTN4",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_NO",
"KC_NO"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_WH_U",
"KC_AT",
"KC_UNDS",
"KC_PIPE",
"KC_GRV",
"KC_PERC",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"RGB_TOG",
"KC_HASH",
"KC_TAB",
"KC_EXLM",
"KC_DQUO",
"KC_DLR",
"KC_BTN4",
"KC_BTN3",
"KC_BTN2",
"KC_BTN1",
"KC_WH_D",
"KC_TILD",
"KC_QUOT",
"KC_BSLS",
"KC_SLSH",
"KC_AMPR",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO"
],
[
"KC_GRV",
"KC_CIRC",
"KC_LT",
"KC_GT",
"KC_SCLN",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_LCBR",
"KC_RCBR",
"KC_LPRN",
"KC_RPRN",
"KC_AT",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_MINS",
"KC_EXLM",
"KC_LBRC",
"KC_RBRC",
"KC_TRNS",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_NO"
],
[
"ANY(QK_RBT)",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_F7",
"KC_F8",
"KC_F9",
"KC_F10",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_NO",
"KC_F4",
"KC_F5",
"KC_F6",
"KC_F11",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_F1",
"KC_F2",
"KC_F3",
"KC_F12",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS"
],
[
"RGB_SPI",
"RGB_VAI",
"RGB_SAI",
"RGB_HUI",
"RGB_MOD",
"KC_PPLS",
"KC_7",
"KC_8",
"KC_9",
"KC_PAST",
"EE_CLR",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"RGB_TOG",
"KC_PMNS",
"KC_4",
"KC_5",
"KC_6",
"KC_PSLS",
"RGB_SPD",
"RGB_VAD",
"RGB_SAD",
"RGB_HUD",
"RGB_RMOD",
"KC_PDOT",
"KC_1",
"KC_2",
"KC_3",
"KC_PEQL",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_0",
"KC_COMM",
"KC_0"
]
],
"author": "thomas.haukland@gmail.com"
}

View File

@@ -0,0 +1,163 @@
{
"version": 1,
"notes": "Cheapino default keymap",
"documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"keyboard": "bastardkb/skeletyl/blackpill",
"keymap": "via",
"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",
"LGUI_T(KC_A)",
"LALT_T(KC_S)",
"LCTL_T(KC_D)",
"LSFT_T(KC_F)",
"KC_G",
"KC_H",
"RSFT_T(KC_J)",
"LCTL_T(KC_K)",
"LALT_T(KC_L)",
"LGUI_T(KC_SCLN)",
"KC_Z",
"KC_X",
"KC_C",
"KC_V",
"LT(5,KC_B)",
"LT(1,KC_N)",
"KC_M",
"KC_COMM",
"KC_DOT",
"KC_SLSH",
"LT(6,KC_ESC)",
"LT(3,KC_SPC)",
"LT(5,KC_TAB)",
"LT(1,KC_DEL)",
"LT(2,KC_BSPC)",
"LT(4,KC_ENT)"
],
[
"KC_VOLU",
"KC_WH_L",
"KC_MS_U",
"KC_WH_U",
"KC_WH_R",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"ANY(QK_RBT)",
"KC_MS_L",
"KC_BTN2",
"KC_BTN1",
"KC_MS_R",
"KC_MUTE",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_VOLD",
"KC_MNXT",
"KC_MS_D",
"KC_WH_D",
"KC_MPLY",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_NO",
"KC_NO"
],
[
"KC_NO",
"KC_HOME",
"KC_DEL",
"KC_PGUP",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_LEFT",
"KC_UP",
"KC_RGHT",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_END",
"KC_DOWN",
"KC_PGDN",
"KC_NO",
"KC_NO",
"KC_BTN1",
"KC_BTN2",
"KC_BTN3",
"KC_BTN4",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_NO",
"KC_NO"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_WH_U",
"KC_AT",
"KC_UNDS",
"KC_PIPE",
"KC_GRV",
"KC_PERC",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"RGB_TOG",
"KC_HASH",
"KC_TAB",
"KC_EXLM",
"KC_DQUO",
"KC_DLR",
"KC_BTN4",
"KC_BTN3",
"KC_BTN2",
"KC_BTN1",
"KC_WH_D",
"KC_TILD",
"KC_QUOT",
"KC_BSLS",
"KC_SLSH",
"KC_AMPR",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO"
]
],
"author": "thomas.haukland@gmail.com"
}

View File

@@ -0,0 +1,5 @@
#pragma once
#define VIAL_KEYBOARD_UID {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6}
#define VIAL_UNLOCK_COMBO_ROWS {0, 0}
#define VIAL_UNLOCK_COMBO_COLS {0, 1}

View File

@@ -0,0 +1,49 @@
{
"documentation": "\"This file is a QMK Configurator export. It is based around Windows being set to azerty-be . You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"notes": "TheArne4 keymap",
"version": 1,
"keyboard": "bastardkb/skeletyl/blackpill",
"keymap": "vial",
"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",
"LGUI_T(KC_A)",
"LALT_T(KC_S)",
"LSFT_T(KC_D)",
"LCTL_T(KC_F)",
"KC_G",
"KC_H",
"LCTL_T(KC_J)",
"RSFT_T(KC_K)",
"LALT_T(KC_L)",
"LGUI_T(KC_SCLN)",
"KC_Z",
"KC_X",
"KC_C",
"KC_V",
"RALT_T(KC_B)",
"RALT_T(KC_N)",
"KC_M",
"KC_COMM",
"KC_DOT",
"KC_SLSH",
"KC_ESC",
"KC_ENT",
"KC_TAB",
"KC_BSPC",
"KC_SPC",
"KC_DEL"
]
],
"author": "cheapino@arnemoerman.be"
}

View File

@@ -0,0 +1,18 @@
{
"name": "TheArne4 Cheapino2",
"vendorId": "0xFEE3",
"productId": "0x10B8",
"lighting": "vialrgb",
"matrix": {
"rows": 8,
"cols": 12
},
"layouts": {
"keymap": [
["0,0", "0,1", "0,2", "0,3", "0,4", {"x": 2}, "4,10", "4,9", "4,8", "4,7", "4,6"],
["1,0", "1,1", "1,2", "1,3", "1,4", {"x": 2}, "5,10", "5,9", "5,8", "5,7", "5,6"],
["2,0", "2,1", "2,2", "2,3", "2,4", {"x": 2}, "6,10", "6,9", "6,8", "6,7", "6,6"],
[{"x": 1.5}, "0,5", "1,5", "2,5", {"x": 1}, "6,11", "5,11", "4,11"]
]
}
}

152
keyboards/cheapino/matrix.c Normal file
View File

@@ -0,0 +1,152 @@
/*
Copyright 2012 Jun Wako <wakojun@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/>.
Copied from here: https://github.com/e3w2q/qmk_firmware/blob/762fe3e0a7cbea768245a75520f06ff5a2f00b9f/keyboards/2x3test/matrix.c
*/
/*
* scan matrix
*/
#include <stdint.h>
#include <stdbool.h>
#include "wait.h"
#include "util.h"
#include "matrix.h"
#include "config.h"
#include "quantum.h"
#include "debounce.h"
#include "encoder.h"
#include "ghosting.h"
#include "print.h"
// How long the scanning code waits for changed io to settle.
// Adjust from default 30 to weigh up for increased time spent ghost-hunting.
// (the rp2040 does not seem to have any problems with this value...)
#define MATRIX_IO_DELAY 25
#define COL_SHIFTER ((uint16_t)1)
static const pin_t row_pins[] = MATRIX_ROW_PINS;
static const pin_t col_pins[] = MATRIX_COL_PINS;
static matrix_row_t previous_matrix[MATRIX_ROWS];
static void select_row(uint8_t row) {
setPinOutput(row_pins[row]);
writePinLow(row_pins[row]);
}
static void unselect_row(uint8_t row) { setPinInputHigh(row_pins[row]); }
static void unselect_rows(void) {
for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
setPinInputHigh(row_pins[x]);
}
}
static void select_col(uint8_t col) {
setPinOutput(col_pins[col]);
writePinLow(col_pins[col]);
}
static void unselect_col(uint8_t col) {
setPinInputHigh(col_pins[col]);
}
static void unselect_cols(void) {
for (uint8_t x = 0; x < MATRIX_COLS/2; x++) {
setPinInputHigh(col_pins[x*2]);
}
}
static void read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
// Select row and wait for row selection to stabilize
select_row(current_row);
wait_us(MATRIX_IO_DELAY);
// For each col...
for (uint8_t col_index = 0; col_index < MATRIX_COLS / 2; col_index++) {
uint16_t column_index_bitmask = COL_SHIFTER << ((col_index * 2) + 1);
// Check row pin state
if (readPin(col_pins[col_index*2])) {
// Pin HI, clear col bit
current_matrix[current_row] &= ~column_index_bitmask;
} else {
// Pin LO, set col bit
current_matrix[current_row] |= column_index_bitmask;
}
}
// Unselect row
unselect_row(current_row);
}
static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
// Select col and wait for col selection to stabilize
select_col(current_col*2);
wait_us(MATRIX_IO_DELAY);
uint16_t column_index_bitmask = COL_SHIFTER << (current_col * 2);
// For each row...
for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) {
// Check row pin state
if (readPin(row_pins[row_index])) {
// Pin HI, clear col bit
current_matrix[row_index] &= ~column_index_bitmask;
} else {
// Pin LO, set col bit
current_matrix[row_index] |= column_index_bitmask;
}
}
// Unselect col
unselect_col(current_col*2);
}
void matrix_init_custom(void) {
// initialize key pins
unselect_cols();
unselect_rows();
debounce_init(MATRIX_ROWS);
}
void store_old_matrix(matrix_row_t current_matrix[]) {
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
previous_matrix[i] = current_matrix[i];
}
}
bool has_matrix_changed(matrix_row_t current_matrix[]) {
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
if (previous_matrix[i] != current_matrix[i]) return true;
}
return false;
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
store_old_matrix(current_matrix);
// Set row, read cols
for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
read_cols_on_row(current_matrix, current_row);
}
// Set col, read rows
for (uint8_t current_col = 0; current_col < MATRIX_COLS/2; current_col++) {
read_rows_on_col(current_matrix, current_col);
}
fix_encoder_action(current_matrix);
fix_ghosting(current_matrix);
return has_matrix_changed(current_matrix);
}

View File

@@ -0,0 +1,4 @@
#pragma once
#include_next <mcuconf.h>

View File

@@ -0,0 +1,28 @@
# cheapino
![cheapino](imgur.com image replace me!)
*A short description of the keyboard/project*
* Keyboard Maintainer: [Thomas Haukland](https://github.com/tompi)
* Keyboard Builder: [Arne Moerman](https://github.com/thearne4)
* Hardware Supported: *The PCBs, controllers supported*
* Hardware Availability: *Links to where you can find this hardware*
Make example for this keyboard (after setting up your build environment):
make cheapino:default
Flashing example for this keyboard:
make cheapino: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,8 @@
CAPS_WORD_ENABLE = yes
CUSTOM_MATRIX = lite
WS2812_DRIVER = vendor
RGBLIGHT_ENABLE = yes
DEFERRED_EXEC_ENABLE = yes
SRC += encoder.c
SRC += ghosting.c
SRC += matrix.c

View File

@@ -0,0 +1,22 @@
/* Copyright 2024-2026 Grigory Avdyushin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define ONESHOT_TIMEOUT 5000
#define TAPPING_TERM 180
#define VIAL_KEYBOARD_UID {0x5B, 0x8C, 0x96, 0xB0, 0x00, 0xD5, 0xF4, 0xC9}
#define VIAL_UNLOCK_COMBO_ROWS { 0, 1 }
#define VIAL_UNLOCK_COMBO_COLS { 0, 1 }

View File

@@ -0,0 +1,126 @@
/* Copyright 2024-2026 Grigory Avdyushin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum my_layers {
_BASE = 0,
_LOWER,
_RAISE,
_NAV,
};
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
#define NAV MO(_NAV)
#define OSM_LSFT OSM(MOD_LSFT) // One Shot Right Shift
#define KC_SFT_Z SFT_T(KC_Z) // Left Shift when held, Z when tapped
#define KC_SFT_SL RSFT_T(KC_SLSH) // Right Shift when held, / when tapped
#define KC_SFT_BSLS RSFT_T(KC_BSLS) // Right Shift when held, \ when tapped
#define KC_LWR_SPC LT(_LOWER, KC_SPC) // Lower layer when held, Space when tapped
#define KC_RSE_BSPC LT(_RAISE, KC_BSPC) // Raise layer when held, Backspace when tapped
#define KC_NAV_A LT(_NAV,KC_A) // Navigation layer when held, A when tapped
#define KC_CMD_TAB CMD_T(KC_TAB) // Left Command when held, Tab when tapped
#define KC_CMD_ENT RCMD_T(KC_ENT) // Right Command when held, Enter when tapped
#define KC_CTL_ESC CTL_T(KC_ESC) // Left Control when held, Escape when tapped
#define KC_OPT_OSM_SFT ROPT_T(OSM_LSFT) // Right Option when held, One Shot Shift when tapped
#define KC_OSM_CTL OSM(MOD_LCTL) // One Shot Modifier Ctrl, Shift, Alt
#define KC_OSM_MEH OSM(MOD_MEH) // One Shot Modifier Ctrl, Shift, Alt
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ;:│
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │⇧/Z│ X │ C │ V │ B │ │ N │ M │ ,<│ .>│⇧/?│
* └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
* ┌───┬───┬───┐ ┌───┬───┬───┐
* │CTL│CMD│SPC│ │ENT│CMD│MEH│
* └───┴───┴───┘ └───┴───┴───┘
*/
[_BASE] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_NAV_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
KC_SFT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SFT_SL,
KC_OSM_CTL, KC_CMD_TAB, KC_LWR_SPC, KC_RSE_BSPC, KC_CMD_ENT, KC_OSM_MEH
),
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ 1!│ 2@│ 3#│ 4$│ 5%│ │ 6^│ 7&│ 8*│ 9(│ 0)│
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ `~│ ~ │ | │ ( │ ) │ │ _ │ + │ { │ } │ '"│
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ ⇧ │ │ │ │ │ │ -_│ =+│ [{│ ]}│ \|│
* └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
* ┌───┬───┬───┐ ┌───┬───┬───┐
* │ │ │ │ │ │ │ │
* └───┴───┴───┘ └───┴───┴───┘
*/
[_LOWER] = LAYOUT_split_3x5_3(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_GRV, S(KC_GRV), S(KC_BSLS), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), KC_QUOT,
KC_LSFT, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_SFT_BSLS,
_______, _______, _______, _______, _______, _______
),
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ F1│ F2│ F3│ F4│ F5│ │ F6│ F7│ F8│ F9│F10│
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ │ │ │ │ │ │ │ │ │ │ │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ │ │ │ │ │ │ │ │ │ │ │
* └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
* ┌───┬───┬───┐ ┌───┬───┬───┐
* │ │ │ │ │ │ │ │
* └───┴───┴───┘ └───┴───┴───┘
*/
[_RAISE] = LAYOUT_split_3x5_3(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ │ │ │ │ │ │HOM│ │ │END│ │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ │ │ │ │ │ │ ← │ ↓ │ ↑ │ → │ │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ │ │ │ │ │ │PUP│ │ │PDN│ │
* └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
* ┌───┬───┬───┐ ┌───┬───┬───┐
* │ │ │ │ │ │ │ │
* └───┴───┴───┘ └───┴───┴───┘
*/
[_NAV] = LAYOUT_split_3x5_3(
_______, _______, _______, _______, _______, KC_HOME, _______, _______, KC_END, _______,
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______,
_______, _______, _______, _______, _______, KC_PGUP, _______, _______, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1,3 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
COMBO_ENABLE = yes

View File

@@ -0,0 +1,217 @@
{
"name": "franky36",
"vendorId": "0x1209",
"productId": "0x3336",
"matrix": {
"rows": 4,
"cols": 10
},
"layouts": {
"keymap": [
[
{
"x": 2
},
"0,2",
{
"x": 7.5
},
"0,7"
],
[
{
"y": -0.85,
"x": 1
},
"0,1",
{
"x": 1
},
"0,3",
{
"x": 5.5
},
"0,6",
{
"x": 1
},
"0,8"
],
[
{
"y": -0.9
},
"0,0",
{
"x": 3
},
"0,4",
{
"x": 3.5
},
"0,5",
{
"x": 3
},
"0,9"
],
[
{
"y": -0.25,
"x": 2
},
"1,2",
{
"x": 7.5
},
"1,7"
],
[
{
"y": -0.85,
"x": 1
},
"1,1",
{
"x": 1
},
"1,3",
{
"x": 5.5
},
"1,6",
{
"x": 1
},
"1,8"
],
[
{
"y": -0.9
},
"1,0",
{
"x": 3
},
"1,4",
{
"x": 3.5
},
"1,5",
{
"x": 3
},
"1,9"
],
[
{
"y": -0.25,
"x": 2
},
"2,2",
{
"x": 7.5
},
"2,7"
],
[
{
"y": -0.85,
"x": 1
},
"2,1",
{
"x": 1
},
"2,3",
{
"x": 5.5
},
"2,6",
{
"x": 1
},
"2,8"
],
[
{
"y": -0.9
},
"2,0",
{
"x": 3
},
"2,4",
{
"x": 3.5
},
"2,5",
{
"x": 3
},
"2,9"
],
[
{
"y": 0.15,
"x": 1,
"c": "#777777"
},
"3,2",
{
"x": 9.5,
"c": "#777777"
},
"3,7"
],
[
{
"r": 11,
"rx": 6.25,
"ry": 3.5,
"y": 0.41,
"x": -4,
"c": "#aaaaaa",
"w": 1.25
},
"3,3"
],
[
{
"r": 11,
"rx": 5.75,
"ry": 3.25,
"y": 0.4,
"x": -2,
"c": "#aaaaaa",
"w": 1.25
},
"3,4"
],
[
{
"r": -11,
"rx": 7,
"ry": 3.5,
"y": 0.25,
"x": 1.5,
"w": 1.25,
"c": "#aaaaaa"
},
"3,5"
],
[
{
"r": -11,
"rx": 7.25,
"ry": 3.5,
"y": 0.41,
"x": 2.75,
"w": 1.25,
"c": "#aaaaaa"
},
"3,6"
]
]
}
}

View File

@@ -0,0 +1,74 @@
{
"keyboard_name": "OWS",
"manufacturer": "ivndbt",
"url": "https://github.com/ivndbt/obiwanstenobit",
"maintainer": "ivndbt",
"usb": {
"vid": "0x6961",
"pid": "0x3033",
"device_version": "0.1.1"
},
"development_board": "promicro_rp2040",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["GP4", "GP5", "GP6", "GP8", "GP7", "GP22", "GP26", "GP21", "GP23", "GP20"],
"rows": ["GP9", "GP28", "GP27"]
},
"features": {
"bootmagic": true,
"nkro": true,
"steno": true,
"mousekey": false,
"extrakey": true
},
"host": {
"default": {
"nkro": true
}
},
"stenography": {
"enabled": true,
"protocol": "geminipr"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [2, 8], "x": 0, "y": 0},
{"matrix": [0, 9], "x": 1, "y": 0},
{"matrix": [0, 8], "x": 2, "y": 0},
{"matrix": [0, 7], "x": 3, "y": 0},
{"matrix": [0, 6], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 0], "x": 8, "y": 0},
{"matrix": [0, 1], "x": 9, "y": 0},
{"matrix": [0, 2], "x": 10, "y": 0},
{"matrix": [0, 3], "x": 11, "y": 0},
{"matrix": [0, 4], "x": 12, "y": 0},
{"matrix": [2, 3], "x": 13, "y": 0},
{"matrix": [2, 9], "x": 0, "y": 1},
{"matrix": [1, 9], "x": 1, "y": 1},
{"matrix": [1, 8], "x": 2, "y": 1},
{"matrix": [1, 7], "x": 3, "y": 1},
{"matrix": [1, 6], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
{"matrix": [1, 0], "x": 8, "y": 1},
{"matrix": [1, 1], "x": 9, "y": 1},
{"matrix": [1, 2], "x": 10, "y": 1},
{"matrix": [1, 3], "x": 11, "y": 1},
{"matrix": [1, 4], "x": 12, "y": 1},
{"matrix": [2, 4], "x": 13, "y": 1},
{"matrix": [2, 7], "x": 3, "y": 3},
{"matrix": [2, 6], "x": 4, "y": 3},
{"matrix": [2, 5], "x": 5, "y": 3},
{"matrix": [2, 0], "x": 8, "y": 3},
{"matrix": [2, 1], "x": 9, "y": 3},
{"matrix": [2, 2], "x": 10, "y": 3}
]
}
}
}

View File

@@ -0,0 +1,49 @@
// Copyright 2026 ivndbt
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// Layers declarations
enum layers {
_PLOVER,
_LOWER,
_RAISE,
_CONTROL,
_QWERTY
};
#define LOWER TL_LOWR
#define RAISE TL_UPPR
#define QWERTY TG(_QWERTY)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_PLOVER] = LAYOUT(
LOWER, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
RAISE, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
STN_N1, STN_A, STN_O, STN_E, STN_U, STN_N2
),
[_LOWER] = LAYOUT(
_______, _______, _______, _______, _______, KC_DEL, KC_ESC, _______, KC_UP, _______, KC_PGUP, _______,
_______, _______, _______, _______, _______, _______, KC_TAB, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______,
_______, _______, _______, KC_HOME, KC_END, _______
),
[_RAISE] = LAYOUT(
_______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, _______,
_______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
),
[_CONTROL] = LAYOUT(
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QWERTY,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_RBT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
[_QWERTY] = LAYOUT(
KC_BSPC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, QWERTY,
KC_SPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_Z, KC_ENT,
KC_X, KC_C, KC_V, KC_B, KC_N, KC_M
)
};

View File

@@ -0,0 +1,6 @@
# OWS usage
OWS is meant to be use with [Plover](https://opensteno.org/plover/) via the GeminiPR steno protocol.\
To get started, make sure to follow the setup guide described in the [Plover Wiki](https://plover.wiki/index.php/Setting_up_a_hobbyist_writer_with_Plover) for hobbyist writers.
For an in-depth look at its features, please visit the [project repository](https://github.com/ivndbt/obiwanstenobit).

View File

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

View File

@@ -0,0 +1,12 @@
// Copyright 2026 ivndbt
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define VIAL_KEYBOARD_UID {0xEC, 0x22, 0x9A, 0x6F, 0x66, 0xA1, 0xCB, 0xDF}
#define VIAL_UNLOCK_COMBO_ROWS {0, 0}
#define VIAL_UNLOCK_COMBO_COLS {0, 5}
#undef DYNAMIC_KEYMAP_LAYER_COUNT
#define DYNAMIC_KEYMAP_LAYER_COUNT 5

View File

@@ -0,0 +1,49 @@
// Copyright 2026 ivndbt
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// Layers declarations
enum layers {
_PLOVER,
_LOWER,
_RAISE,
_CONTROL,
_QWERTY
};
#define LOWER TL_LOWR
#define RAISE TL_UPPR
#define QWERTY TG(_QWERTY)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_PLOVER] = LAYOUT(
LOWER, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
RAISE, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
STN_N1, STN_A, STN_O, STN_E, STN_U, STN_N2
),
[_LOWER] = LAYOUT(
_______, _______, _______, _______, _______, KC_DEL, KC_ESC, _______, KC_UP, _______, KC_PGUP, _______,
_______, _______, _______, _______, _______, _______, KC_TAB, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______,
_______, _______, _______, KC_HOME, KC_END, _______
),
[_RAISE] = LAYOUT(
_______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, _______,
_______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
),
[_CONTROL] = LAYOUT(
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QWERTY,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_RBT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
[_QWERTY] = LAYOUT(
KC_BSPC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, QWERTY,
KC_SPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_Z, KC_ENT,
KC_X, KC_C, KC_V, KC_B, KC_N, KC_M
)
};

View File

@@ -0,0 +1,8 @@
# OWS usage with VIAL
OWS is meant to be use with [Plover](https://opensteno.org/plover/) via the GeminiPR steno protocol.\
To get started, make sure to follow the setup guide described in the [Plover Wiki](https://plover.wiki/index.php/Setting_up_a_hobbyist_writer_with_Plover) for hobbyist writers.
Compatibility with VIAL is provided to simplify key customization on the additional layers beyond the default Plover layout. **Editing the base layer through VIAL is not recommended**, as doing so may prevent you from reassigning the dedicated Plover keycodes without reflashing the firmware using QMK.
For an in-depth look at its features, please visit the [project repository](https://github.com/ivndbt/obiwanstenobit).

View File

@@ -0,0 +1,3 @@
TRI_LAYER_ENABLE = yes
VIA_ENABLE = yes
VIAL_ENABLE = yes

View File

@@ -0,0 +1,59 @@
{
"matrix": {
"rows": 3,
"cols": 10
},
"layouts": {
"keymap": [
[
"2,8",
"0,9",
"0,8",
"0,7",
"0,6",
"0,5",
{
"x": 1
},
"0,0",
"0,1",
"0,2",
"0,3",
"0,4",
"2,3"
],
[
"2,9",
"1,9",
"1,8",
"1,7",
"1,6",
"1,5",
{
"x": 1
},
"1,0",
"1,1",
"1,2",
"1,3",
"1,4",
"2,4"
],
[
{
"y": 1,
"x": 3
},
"2,7",
"2,6",
"2,5",
{
"x": 1
},
"2,0",
"2,1",
"2,2"
]
]
}
}

View File

@@ -0,0 +1,32 @@
# OWS
Open-source steno keyboard with a pseudo-split layout, designed to be compact, portable, and cost-effective.
![OWS](https://i.imgur.com/OKkenaR.jpeg "OWS v1 prototype")
* Keyboard maintainer: [ivndbt](https://github.com/ivndbt)
* Hardware supported: Pro Micro RP2040
* Hardware Availability: OWS is open-source, check the [project repository](https://github.com/ivndbt/obiwanstenobit)
Make example for this keyboard (after setting up your build environment):
make ivndbt/ows:default
Flashing example for this keyboard:
make ivndbt/ows: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
1. There are 4 ways to enter the bootloader:
* **Physical reset button**: Double tap the `RST` button located on the back of the Controller PCB.
* **Physical boot button**: Hold the `BOOT` button as you plug the RP2040
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the top-left key on the right-hand Main PCB) while plugging in the keyboard.
* **Keycode in layout**: Press the key assigned to `QK_BOOT` if it is available
2. Wait for the OS to detect the device
3. Copy the `.uf2` file to the new USB disk or flash via QMK CLI
4. Wait for the keyboard to become available

View File

@@ -0,0 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0x9B, 0xB2, 0x2D, 0x80, 0x32, 0x37, 0x16, 0x1C}
#define VIAL_UNLOCK_COMBO_ROWS { 0, 3 }
#define VIAL_UNLOCK_COMBO_COLS { 0, 13 }

View File

@@ -0,0 +1,65 @@
/* Copyright 2025 @ 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{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN,
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_104_ansi(
KC_ESC, KC_BRID, KC_BRIU, _______, _______, LM_BRID, LM_BRIU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, LM_NEXT,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
[MAC_FN] = LAYOUT_104_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_TOGG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
LM_TOGG, LM_NEXT, LM_BRIU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, LM_BRID, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
[WIN_BASE] = LAYOUT_104_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NO, BL_STEP,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
[WIN_FN] = LAYOUT_104_ansi(
_______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, LM_BRID, LM_BRIU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, LM_TOGG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
LM_TOGG, LM_NEXT, LM_BRIU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, LM_BRID, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
};
// clang-format on

View File

@@ -0,0 +1,271 @@
{
"name": "Keychron C1 Pro V2 ANSI White",
"vendorId": "0x3434",
"productId": "0x0519",
"matrix": {
"rows": 6,
"cols": 17
},
"customKeycodes": [
{
"name": "Mission Control",
"title": "Mission Control in macOS",
"shortName": "MCtrl"
},
{
"name": "Launch Pad",
"title": "Launch Pad in macOS",
"shortName": "LPad"
},
{
"name": "Left Option",
"title": "Left Option in macOS",
"shortName": "LOpt"
},
{
"name": "Right Option",
"title": "Right Option in macOS",
"shortName": "ROpt"
},
{
"name": "Left Cmd",
"title": "Left Command in macOS",
"shortName": "LCmd"
},
{
"name": "Right Cmd",
"title": "Right Command in macOS",
"shortName": "RCmd"
},
{
"name": "Siri",
"title": "Siri in macOS",
"shortName": "Siri"
},
{
"name": "Task View",
"title": "Task View in windows",
"shortName": "Task"
},
{
"name": "File Explorer",
"title": "File Explorer in windows",
"shortName": "File"
},
{
"name": "Screen Shot",
"title": "Screenshot in macOS",
"shortName": "SShot"
},
{
"name": "Cortana",
"title": "Cortana in windows",
"shortName": "Cortana"
}
],
"keycodes": ["qmk_lighting"],
"layouts": {
"keymap": [
[
{
"c": "#777777"
},
"0,0",
{
"x": 1,
"c": "#cccccc"
},
"0,1",
"0,2",
"0,3",
"0,4",
{
"x": 0.5,
"c": "#aaaaaa"
},
"0,5",
"0,6",
"0,7",
"0,8",
{
"x": 0.5,
"c": "#cccccc"
},
"0,9",
"0,10",
"0,11",
"0,12",
{
"x": 0.25,
"c": "#aaaaaa"
},
"0,14",
"0,15",
"0,16"
],
[
{
"y": 0.25
},
"1,0",
{
"c": "#cccccc"
},
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
"1,11",
"1,12",
{
"c": "#aaaaaa",
"w": 2
},
"1,13",
{
"x": 0.25
},
"1,14",
"1,15",
"1,16"
],
[
{
"w": 1.5
},
"2,0",
{
"c": "#cccccc"
},
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
"2,11",
"2,12",
{
"c": "#aaaaaa",
"w": 1.5
},
"2,13",
{
"x": 0.25
},
"2,14",
"2,15",
"2,16"
],
[
{
"w": 1.75
},
"3,0",
{
"c": "#cccccc"
},
"3,1",
"3,2",
"3,3",
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
"3,9",
"3,10",
"3,11",
{
"c": "#777777",
"w": 2.25
},
"3,13"
],
[
{
"c": "#aaaaaa",
"w": 2.25
},
"4,0",
{
"c": "#cccccc"
},
"4,2",
"4,3",
"4,4",
"4,5",
"4,6",
"4,7",
"4,8",
"4,9",
"4,10",
"4,11",
{
"c": "#aaaaaa",
"w": 2.75
},
"4,13",
{
"x": 1.25,
"c": "#777777"
},
"4,15"
],
[
{
"c": "#aaaaaa",
"w": 1.25
},
"5,0",
{
"w": 1.25
},
"5,1",
{
"w": 1.25
},
"5,2",
{
"c": "#cccccc",
"w": 6.25
},
"5,6",
{
"c": "#aaaaaa",
"w": 1.25
},
"5,10",
{
"w": 1.25
},
"5,11",
{
"w": 1.25
},
"5,12",
{
"w": 1.25
},
"5,13",
{
"x": 0.25,
"c": "#777777"
},
"5,14",
"5,15",
"5,16"
]
]
}
}

View File

@@ -0,0 +1,292 @@
{
"manufacturer": "La-Versa x keyten",
"keyboard_name": "imi60-HS",
"maintainer": "key10iq",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"usb": {
"vid": "0xEB69",
"pid": "0x6009",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"rows": ["B1", "B0", "A6", "A5", "B11"],
"cols": ["A3", "A4", "A7", "B2", "B10", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A14"]
},
"community_layouts": [
"60_ansi_wkl_split_bs_rshift",
"60_hhkb",
"60_ansi_tsangan_split_bs_rshift"
],
"layout_aliases": {
"LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_60_ansi_wkl_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, 13], "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, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 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, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_hhkb": {
"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, 13], "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, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"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, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4}
]
},
"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, 13], "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, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 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, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_tsangan_split_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": [2, 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, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 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, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -1,4 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
@@ -13,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, 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_TRNS,
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

View File

@@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0x4E, 0x5B, 0xA3, 0x4D, 0x62, 0x7F, 0x07, 0xF1}
#define VIAL_UNLOCK_COMBO_ROWS {0, 4}
#define VIAL_UNLOCK_COMBO_COLS {0, 13}

View File

@@ -1,4 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
@@ -13,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, 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_TRNS,
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes

View File

@@ -0,0 +1,220 @@
{
"name": "imi60-HS",
"vendorId": "0xEB69",
"productId": "0x6009",
"lighting": "none",
"matrix": {
"rows": 5,
"cols": 14
},
"layouts": {
"labels": [
"Split Backspace",
[
"Bottom Row",
"Tsangan",
"WKL",
"HHKB"
]
],
"keymap": [
[
{
"c": "#777777"
},
"0,0",
{
"c": "#cccccc"
},
"0,1",
"0,2",
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
"0,9",
"0,10",
"0,11",
"0,12",
{
"c": "#aaaaaa",
"w": 2
},
"2,13\n\n\n0,0",
{
"x": 0.25,
"c": "#cccccc"
},
"0,13\n\n\n0,1",
"2,13\n\n\n0,1"
],
[
{
"c": "#aaaaaa",
"w": 1.5
},
"1,0",
{
"c": "#cccccc"
},
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
"1,11",
"1,12",
{
"w": 1.5
},
"1,13"
],
[
{
"c": "#aaaaaa",
"w": 1.75
},
"2,0",
{
"c": "#cccccc"
},
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
"2,11",
{
"c": "#777777",
"w": 2.25
},
"2,12"
],
[
{
"c": "#aaaaaa",
"w": 2.25
},
"3,0",
{
"c": "#cccccc"
},
"3,1",
"3,2",
"3,3",
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
"3,9",
"3,10",
{
"c": "#aaaaaa",
"w": 1.75
},
"4,12",
"3,13"
],
[
{
"w": 1.5
},
"4,0\n\n\n1,0",
"4,1\n\n\n1,0",
{
"w": 1.5
},
"4,2\n\n\n1,0",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n1,0",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n1,0",
"4,11\n\n\n1,0",
{
"w": 1.5
},
"4,13\n\n\n1,0"
],
[
{
"y": 0.25,
"w": 1.5
},
"4,0\n\n\n1,1",
{
"d": true
},
"4,1\n\n\n1,1",
{
"w": 1.5
},
"4,2\n\n\n1,1",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n1,1",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n1,1",
{
"d": true
},
"4,11\n\n\n1,1",
{
"w": 1.5
},
"4,13\n\n\n1,1"
],
[
{
"w": 1.5,
"d": true
},
"4,0\n\n\n1,2",
"4,1\n\n\n1,2",
{
"w": 1.5
},
"4,2\n\n\n1,2",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n1,2",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n1,2",
"4,11\n\n\n1,2",
{
"w": 1.5,
"d": true
},
"4,13\n\n\n1,2"
]
]
}
}

View File

@@ -0,0 +1,27 @@
# keyten imi60-HS
imi60-HS - 60% Hot-Swap PCB compatible with keyboards by La-Versa: Animi, Mirimi, Otsukimi and Abyss
![imi60-HS](https://live.staticflickr.com/65535/54904885051_339dbff9d8_b.jpg)
* Keyboard Maintainer: [keyten](https://github.com/key10iq)
* Hardware Supported: keyten imi60-HS
* Hardware Availability: private GB
Make example for this keyboard (after setting up your build environment):
make keyten/imi60_hs:default
Flashing example for this keyboard:
make keyten/imi60_hs: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
* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
* Physical reset button: Hold the button on the back of the PCB

View File

@@ -0,0 +1,299 @@
{
"manufacturer": "keyten",
"keyboard_name": "kt356 Mini",
"maintainer": "key10iq",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"usb": {
"vid": "0xEB69",
"pid": "0x6008",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"rows": ["B4", "B5", "A6", "B10", "B11"],
"cols": ["A15", "F1", "F0", "C14", "A3", "C13", "B1", "B9", "A4", "B8", "B0", "B7", "A7", "B6"]
},
"indicators": {
"caps_lock": "A14"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
"60_ansi_tsangan_split_bs_rshift"
],
"layout_aliases": {
"LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift"
},
"layouts": {
"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": [2, 13], "w": 2, "x": 13, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "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, 12], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2.25, "y": 3 },
{ "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "matrix": [3, 7], "x": 8.25, "y": 3 },
{ "matrix": [3, 8], "x": 9.25, "y": 3 },
{ "matrix": [3, 9], "x": 10.25, "y": 3 },
{ "matrix": [3, 10], "x": 11.25, "y": 3 },
{ "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
{ "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
{ "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
{ "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
{ "matrix": [4, 11], "w": 1.25, "x": 12.5, "y": 4 },
{ "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"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, 13], "x": 14, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "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, 12], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2.25, "y": 3 },
{ "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "matrix": [3, 7], "x": 8.25, "y": 3 },
{ "matrix": [3, 8], "x": 9.25, "y": 3 },
{ "matrix": [3, 9], "x": 10.25, "y": 3 },
{ "matrix": [3, 10], "x": 11.25, "y": 3 },
{ "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
{ "matrix": [3, 13], "x": 14, "y": 3 },
{ "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
{ "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
{ "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
{ "matrix": [4, 11], "w": 1.25, "x": 12.5, "y": 4 },
{ "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"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": [2, 13], "w": 2, "x": 13, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "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, 12], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2.25, "y": 3 },
{ "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "matrix": [3, 7], "x": 8.25, "y": 3 },
{ "matrix": [3, 8], "x": 9.25, "y": 3 },
{ "matrix": [3, 9], "x": 10.25, "y": 3 },
{ "matrix": [3, 10], "x": 11.25, "y": 3 },
{ "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
{ "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
{ "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
{ "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
{ "matrix": [4, 11], "x": 12.5, "y": 4 },
{ "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
]
},
"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, 13], "x": 14, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "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, 12], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2.25, "y": 3 },
{ "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "matrix": [3, 7], "x": 8.25, "y": 3 },
{ "matrix": [3, 8], "x": 9.25, "y": 3 },
{ "matrix": [3, 9], "x": 10.25, "y": 3 },
{ "matrix": [3, 10], "x": 11.25, "y": 3 },
{ "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
{ "matrix": [3, 13], "x": 14, "y": 3 },
{ "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
{ "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
{ "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
{ "matrix": [4, 11], "x": 12.5, "y": 4 },
{ "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
]
}
}
}

View File

@@ -0,0 +1,24 @@
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_APP, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_split_bs_rshift(
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0x33, 0x15, 0xBE, 0xE4, 0xF9, 0x14, 0x61, 0x98}
#define VIAL_UNLOCK_COMBO_ROWS {0, 4}
#define VIAL_UNLOCK_COMBO_COLS {0, 13}

View File

@@ -0,0 +1,24 @@
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_APP, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_split_bs_rshift(
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes

View File

@@ -0,0 +1,208 @@
{
"name": "kt356 Mini",
"vendorId": "0xEB69",
"productId": "0x6008",
"lighting": "none",
"matrix": {
"rows": 5,
"cols": 14
},
"layouts": {
"labels": [
"Split Backspace",
"Split Right Shift",
[
"Bottom Row",
"Tsangan",
"ANSI"
]
],
"keymap": [
[
{
"c": "#777777"
},
"0,0",
{
"c": "#cccccc"
},
"0,1",
"0,2",
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
"0,9",
"0,10",
"0,11",
"0,12",
{
"c": "#aaaaaa",
"w": 2
},
"2,13\n\n\n0,0",
{
"x": 1,
"c": "#cccccc"
},
"0,13\n\n\n0,1",
{
"c": "#aaaaaa"
},
"2,13\n\n\n0,1"
],
[
{
"w": 1.5
},
"1,0",
{
"c": "#cccccc"
},
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
"1,11",
"1,12",
{
"w": 1.5
},
"1,13\n\n\n0,0",
{
"x": 1.5,
"c": "#aaaaaa",
"w": 1.5
},
"1,13\n\n\n0,1"
],
[
{
"w": 1.75
},
"2,0",
{
"c": "#cccccc"
},
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
"2,11",
{
"c": "#777777",
"w": 2.25
},
"2,12"
],
[
{
"c": "#aaaaaa",
"w": 2.25
},
"3,0",
{
"c": "#cccccc"
},
"3,1",
"3,2",
"3,3",
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
"3,9",
"3,10",
{
"c": "#aaaaaa",
"w": 2.75
},
"3,12\n\n\n1,0",
{
"x": 0.25,
"w": 1.75
},
"3,12\n\n\n1,1",
"3,13\n\n\n1,1"
],
[
{
"w": 1.5
},
"4,0\n\n\n2,0",
"4,1\n\n\n2,0",
{
"w": 1.5
},
"4,2\n\n\n2,0",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n2,0",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n2,0",
"4,11\n\n\n2,0",
{
"w": 1.5
},
"4,13\n\n\n2,0"
],
[
{
"y": 0.25,
"w": 1.25
},
"4,0\n\n\n2,1",
{
"w": 1.25
},
"4,1\n\n\n2,1",
{
"w": 1.25
},
"4,2\n\n\n2,1",
{
"c": "#cccccc",
"w": 6.25
},
"4,6\n\n\n2,1",
{
"c": "#aaaaaa",
"w": 1.25
},
"4,9\n\n\n2,1",
{
"w": 1.25
},
"4,10\n\n\n2,1",
{
"w": 1.25
},
"4,11\n\n\n2,1",
{
"w": 1.25
},
"4,13\n\n\n2,1"
]
]
}
}

View File

@@ -0,0 +1,27 @@
# keyten kt356 Mini
Replacement PCB for the OTD (and UTD) 356 Mini keyboard.
![kt356 Mini image](https://live.staticflickr.com/65535/54907825962_65a650ce4c_b.jpg)
* Keyboard Maintainer: [keyten](https://github.com/key10iq)
* Hardware Supported: keyten kt356 Mini
* Hardware Availability: private GB
Make example for this keyboard (after setting up your build environment):
make keyten/kt356_mini:default
Flashing example for this keyboard:
make keyten/kt356_mini: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
* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
* Physical reset button: Hold the button on the back of the PCB

View File

@@ -2,15 +2,16 @@
60% MX Hot-Swap Tsangan PCB
![kt60HS-T image](https://i.imgur.com/vM32aoX.jpeg)
![kt60HS-T image](https://live.staticflickr.com/65535/54942233930_c83933dd23_b.jpg)
Supports:
1. Split Backspace
2. Stepped Caps Lock
There are two versions of the PCB available.
There are three versions of the PCB available.
|Version| Features |
|-------|-------------------------------------------|
|v1 |Blue/Purple PCB / ARM STM32F401 controller |
|v2 |Purple PCB / ARM STM32F072 controller |
|Version| Features |
|-------|---------------------------------------------------------|
|v1 |Blue/Purple PCB / ARM STM32F401 controller |
|v2 |Purple PCB / ARM STM32F072 controller |
|v3 |Purple PCB / ARM STM32F072 controller, different routing |

View File

@@ -0,0 +1,23 @@
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0xDA, 0x36, 0x8F, 0x21, 0xC8, 0x47, 0xD6, 0xDA}
#define VIAL_UNLOCK_COMBO_ROWS {0, 4}
#define VIAL_UNLOCK_COMBO_COLS {0, 13}

View File

@@ -0,0 +1,23 @@
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes

View File

@@ -1,7 +1,7 @@
{
"name": "kt60HS-T",
"vendorId": "0xEB69",
"productId": "0x6007",
"productId": "0x6004",
"lighting": "none",
"matrix": {
"rows": 5,

View File

@@ -0,0 +1,23 @@
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,23 @@
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes

View File

@@ -0,0 +1,251 @@
{
"name": "kt60HS-T v2",
"vendorId": "0xEB69",
"productId": "0x6007",
"lighting": "none",
"matrix": {
"rows": 5,
"cols": 14
},
"layouts": {
"labels": [
"Split Backspace",
[
"Bottom Row",
"Tsangan",
"WKL",
"HHKB",
"10U"
]
],
"keymap": [
[
{
"c": "#777777"
},
"0,0",
{
"c": "#cccccc"
},
"0,1",
"0,2",
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
"0,9",
"0,10",
"0,11",
"0,12",
{
"c": "#aaaaaa",
"w": 2
},
"2,13\n\n\n0,0",
{
"x": 0.25,
"c": "#cccccc"
},
"0,13\n\n\n0,1",
"2,13\n\n\n0,1"
],
[
{
"c": "#aaaaaa",
"w": 1.5
},
"1,0",
{
"c": "#cccccc"
},
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
"1,11",
"1,12",
{
"w": 1.5
},
"1,13"
],
[
{
"c": "#aaaaaa",
"w": 1.75
},
"2,0",
{
"c": "#cccccc"
},
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
"2,11",
{
"c": "#777777",
"w": 2.25
},
"2,12"
],
[
{
"c": "#aaaaaa",
"w": 2.25
},
"3,0",
{
"c": "#cccccc"
},
"3,1",
"3,2",
"3,3",
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
"3,9",
"3,10",
{
"c": "#aaaaaa",
"w": 1.75
},
"4,12",
"3,13"
],
[
{
"w": 1.5
},
"4,0\n\n\n1,0",
"4,1\n\n\n1,0",
{
"w": 1.5
},
"4,2\n\n\n1,0",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n1,0",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n1,0",
"4,11\n\n\n1,0",
{
"w": 1.5
},
"4,13\n\n\n1,0"
],
[
{
"y": 0.25,
"w": 1.5
},
"4,0\n\n\n1,1",
{
"d": true
},
"4,1\n\n\n1,1",
{
"w": 1.5
},
"4,2\n\n\n1,1",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n1,1",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n1,1",
{
"d": true
},
"4,11\n\n\n1,1",
{
"w": 1.5
},
"4,13\n\n\n1,1"
],
[
{
"w": 1.5,
"d": true
},
"4,0\n\n\n1,2",
"4,1\n\n\n1,2",
{
"w": 1.5
},
"4,2\n\n\n1,2",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n1,2",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n1,2",
"4,11\n\n\n1,2",
{
"w": 1.5,
"d": true
},
"4,13\n\n\n1,2"
],
[
{
"w": 1.5
},
"4,0\n\n\n1,3",
"4,1\n\n\n1,3",
{
"w": 1.5,
"d": true
},
"4,2\n\n\n1,3",
{
"x": -1.5,
"c": "#cccccc",
"w": 10
},
"4,6\n\n\n1,3",
{
"x": -1.5,
"c": "#aaaaaa",
"w": 1.5,
"d": true
},
"4,10\n\n\n1,3",
"4,11\n\n\n1,3",
{
"w": 1.5
},
"4,13\n\n\n1,3"
]
]
}
}

View File

@@ -0,0 +1,282 @@
{
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["A3", "A4", "B12", "B15", "A7", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A14"],
"rows": ["B13", "B14", "A5", "A6", "B0"]
},
"processor": "STM32F072",
"usb": {
"device_version": "3.0.0",
"pid": "0x6010"
},
"community_layouts": [
"60_ansi_wkl_split_bs_rshift",
"60_hhkb",
"60_ansi_tsangan_split_bs_rshift"
],
"layout_aliases": {
"LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_60_ansi_wkl_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, 13], "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, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 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, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_hhkb": {
"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, 13], "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, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"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, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4}
]
},
"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, 13], "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, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 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, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_tsangan_split_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": [2, 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, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 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, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,23 @@
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0xE9, 0x80, 0x97, 0x7B, 0x40, 0x78, 0xCE, 0x17}
#define VIAL_UNLOCK_COMBO_ROWS {0, 4}
#define VIAL_UNLOCK_COMBO_COLS {0, 13}

View File

@@ -0,0 +1,23 @@
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes

View File

@@ -0,0 +1,251 @@
{
"name": "kt60HS-T v3",
"vendorId": "0xEB69",
"productId": "0x6010",
"lighting": "none",
"matrix": {
"rows": 5,
"cols": 14
},
"layouts": {
"labels": [
"Split Backspace",
[
"Bottom Row",
"Tsangan",
"WKL",
"HHKB",
"10U"
]
],
"keymap": [
[
{
"c": "#777777"
},
"0,0",
{
"c": "#cccccc"
},
"0,1",
"0,2",
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
"0,9",
"0,10",
"0,11",
"0,12",
{
"c": "#aaaaaa",
"w": 2
},
"2,13\n\n\n0,0",
{
"x": 0.25,
"c": "#cccccc"
},
"0,13\n\n\n0,1",
"2,13\n\n\n0,1"
],
[
{
"c": "#aaaaaa",
"w": 1.5
},
"1,0",
{
"c": "#cccccc"
},
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
"1,11",
"1,12",
{
"w": 1.5
},
"1,13"
],
[
{
"c": "#aaaaaa",
"w": 1.75
},
"2,0",
{
"c": "#cccccc"
},
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
"2,11",
{
"c": "#777777",
"w": 2.25
},
"2,12"
],
[
{
"c": "#aaaaaa",
"w": 2.25
},
"3,0",
{
"c": "#cccccc"
},
"3,1",
"3,2",
"3,3",
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
"3,9",
"3,10",
{
"c": "#aaaaaa",
"w": 1.75
},
"4,12",
"3,13"
],
[
{
"w": 1.5
},
"4,0\n\n\n1,0",
"4,1\n\n\n1,0",
{
"w": 1.5
},
"4,2\n\n\n1,0",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n1,0",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n1,0",
"4,11\n\n\n1,0",
{
"w": 1.5
},
"4,13\n\n\n1,0"
],
[
{
"y": 0.25,
"w": 1.5
},
"4,0\n\n\n1,1",
{
"d": true
},
"4,1\n\n\n1,1",
{
"w": 1.5
},
"4,2\n\n\n1,1",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n1,1",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n1,1",
{
"d": true
},
"4,11\n\n\n1,1",
{
"w": 1.5
},
"4,13\n\n\n1,1"
],
[
{
"w": 1.5,
"d": true
},
"4,0\n\n\n1,2",
"4,1\n\n\n1,2",
{
"w": 1.5
},
"4,2\n\n\n1,2",
{
"c": "#cccccc",
"w": 7
},
"4,6\n\n\n1,2",
{
"c": "#aaaaaa",
"w": 1.5
},
"4,10\n\n\n1,2",
"4,11\n\n\n1,2",
{
"w": 1.5,
"d": true
},
"4,13\n\n\n1,2"
],
[
{
"w": 1.5
},
"4,0\n\n\n1,3",
"4,1\n\n\n1,3",
{
"w": 1.5,
"d": true
},
"4,2\n\n\n1,3",
{
"x": -1.5,
"c": "#cccccc",
"w": 10
},
"4,6\n\n\n1,3",
{
"x": -1.5,
"c": "#aaaaaa",
"w": 1.5,
"d": true
},
"4,10\n\n\n1,3",
"4,11\n\n\n1,3",
{
"w": 1.5
},
"4,13\n\n\n1,3"
]
]
}
}

View File

@@ -0,0 +1,27 @@
# keyten kt60HS-T V3
60% MX Hot-Swap Tsangan PCB
![kt60HS-T image](https://live.staticflickr.com/65535/54942233930_c83933dd23_b.jpg)
* Keyboard Maintainer: [keyten](https://github.com/key10iq)
* Hardware Supported: keyten kt60HS-T V3
* Hardware Availability: private GB
Make example for this keyboard (after setting up your build environment):
make keyten/kt60hs_t/v3:default
Flashing example for this keyboard:
make keyten/kt60hs_t/v3: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
* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
* Physical reset button: Hold the button on the back of the PCB

View File

@@ -5,9 +5,9 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
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_HOME, KC_END, KC_PGUP, KC_PGDN, KC_PSCR,
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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NONUS_HASH, KC_P7, KC_P8, KC_P9, KC_PPLS,
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_NONUS_HASH, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
@@ -15,26 +15,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
static const uint8_t numblock[] = {
72,
73,
74,
75,
44,
43,
42,
41,
38,
39,
40,
12,
11,
10,
9,
7,
8
};
static const uint8_t arrow[] = {
13,
4,
@@ -48,9 +28,11 @@ bool rgb_matrix_indicators_user() {
}
if (host_keyboard_led_state().num_lock) {
for (uint8_t i = 0; i < sizeof(numblock)/sizeof(numblock[0]); i++) {
rgb_matrix_set_color(numblock[i], 30, 30, 0);
}
rgb_matrix_set_color(72, 30, 30, 0);
}
if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(97, 30, 30, 0);
}
return true;

View File

@@ -0,0 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0x89, 0x2A, 0x89, 0xB2, 0x3A, 0x40, 0x7A, 0x9D}
// Esc + Enter
#define VIAL_UNLOCK_COMBO_ROWS { 0, 2 }
#define VIAL_UNLOCK_COMBO_COLS { 0, 12 }

View File

@@ -0,0 +1,36 @@
/*
Copyright 2024 Swagkeys
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_65_ansi(
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_BSLS, 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_HOME,
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_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT_65_ansi(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, UG_TOGG, UG_NEXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

@@ -0,0 +1,10 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
RGBLIGHT_ENABLE = yes
LTO_ENABLE = yes
TAP_DANCE_ENABLE = no
COMBO_ENABLE = no
KEY_OVERRIDE_ENABLE = no
REPEAT_KEY_ENABLE = no

View File

@@ -0,0 +1,180 @@
{
"name": "Swagkeys Eave",
"vendorId": "0x4A16",
"productId": "0x4A16",
"matrix": {
"rows": 5,
"cols": 16
},
"keycodes": ["qmk_lighting"],
"menus": ["qmk_rgblight"],
"layouts": {
"labels": ["Split Backspace"],
"keymap": [
[
{
"x": 13
},
"0,14\n\n\n0,1",
"0,15\n\n\n0,1"
],
[
{
"c": "#777777"
},
"0,0",
{
"c": "#cccccc"
},
"0,1",
"0,2",
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
"0,9",
"0,10",
"0,11",
"0,12",
{
"c": "#aaaaaa",
"w": 2
},
"0,13\n\n\n0,0",
{
"c": "#cccccc"
},
"1,14"
],
[
{
"c": "#aaaaaa",
"w": 1.5
},
"1,0",
{
"c": "#cccccc"
},
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
"1,11",
"1,12",
{
"c": "#aaaaaa",
"w": 1.5
},
"1,13",
{
"c": "#cccccc"
},
"1,15"
],
[
{
"c": "#aaaaaa",
"w": 1.75
},
"2,0",
{
"c": "#cccccc"
},
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
"2,11",
{
"c": "#777777",
"w": 2.25
},
"2,12",
{
"c": "#cccccc"
},
"2,15"
],
[
{
"c": "#aaaaaa",
"w": 2.25
},
"3,0",
{
"c": "#cccccc"
},
"3,1",
"3,2",
"3,3",
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
"3,9",
"3,10",
{
"c": "#aaaaaa",
"w": 1.75
},
"3,11",
{
"c": "#cccccc"
},
"3,14",
"3,15"
],
[
{
"c": "#aaaaaa",
"w": 1.25
},
"4,0",
{
"w": 1.25
},
"4,1",
{
"w": 1.25
},
"4,2",
{
"c": "#cccccc",
"w": 6.25
},
"4,5",
{
"c": "#aaaaaa",
"w": 1.25
},
"4,9",
{
"w": 1.25
},
"4,10",
{
"x": 0.5,
"c": "#cccccc"
},
"4,11",
"4,14",
"4,15"
]
]
}
}

View File

@@ -0,0 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0xF7, 0x20, 0x5E, 0xE3, 0x8E, 0x8D, 0x0F, 0xC9}
#define VIAL_UNLOCK_COMBO_ROWS { 5, 4 }
#define VIAL_UNLOCK_COMBO_COLS { 0, 13 }
#define DYNAMIC_KEYMAP_LAYER_COUNT 4

View File

@@ -0,0 +1,73 @@
#include QMK_KEYBOARD_H
enum layer_names {
BASE, // default layer
_FN, // function layer
_FX, // media keys
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
* │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ BkSp │
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
* │ Tab │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
* │ Caps │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ Enter │
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
* │ LShift │ Z │ X │ C │ V │ B │ │ N │ M │ < │ > │ ? │ Sft │ Up │ Fn │
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
* │ Ctrl │ Win │ Alt │ │ Fn │ │ │ Alt │ Win │ Lft │ Dwn │ Rgt │
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
*/
[BASE] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPC,
KC_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_QUOTE, KC_ENTER,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_F3,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(_FN), KC_SPACE, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT
),
/* Function
*
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
* │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
* │ │ │ │ │ │ │ │ │ │ │ │ │
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
*/
[_FN] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Media
*
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
* │ │ │ │ │ │ │ │ │ │ │ │ │
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
*/
[_FX] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1,23 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
LTO_ENABLE = yes
CONSOLE_ENABLE = no
COMMAND_ENABLE = no
MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
SPACE_CADET_ENABLE = yes
GRAVE_ESC_ENABLE = yes
MAGIC_ENABLE = yes
QMK_SETTINGS = no
TAP_DANCE_ENABLE = yes
COMBO_ENABLE = yes
KEY_OVERRIDE_ENABLE = no
CAPS_WORD_ENABLE = yes
AUTOSHIFT_ENABLE = no
KEY_LOCK_ENABLE = no
REPEAT_KEY_ENABLE = no

View File

@@ -0,0 +1,109 @@
{
"name": "SP64",
"vendorId": "0x594D",
"productId": "0x5364",
"lighting": "qmk_backlight_rgblight",
"matrix": {
"rows": 6,
"cols": 15
},
"layouts": {
"keymap": [
[
"5,0",
"5,1",
"5,2",
"5,3",
"5,4",
"5,5",
"1,5",
{ "x": 1 },
"4,7",
"4,8",
"4,9",
"4,10",
"4,11",
"4,12",
{ "w": 2 },
"4,13"
],
[
{ "w": 1.5 },
"4,0",
"4,1",
"4,2",
"4,3",
"4,4",
"4,5",
{ "x": 1 },
"5,7",
"3,7",
"3,8",
"3,9",
"3,10",
"3,11",
"3,12",
{ "w": 1.5 },
"3,13"
],
[
{ "w": 1.75 },
"3,0",
"3,1",
"3,2",
"3,3",
"3,4",
"3,5",
{ "x": 1 },
"2,7",
"2,8",
"2,9",
"2,10",
"2,11",
"2,12",
{ "w": 2.25 },
"2,13"
],
[
{ "w": 2 },
"2,0",
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
{ "x": 1 },
"1,7",
"1,8",
"1,9",
"1,10",
"1,11",
"1,12",
"1,13",
"0,13"
],
[
{ "w": 1.25 },
"1,0",
{ "w": 1 },
"1,1",
{ "w": 1.25 },
"1,2",
{ "w": 2.25 },
"1,3",
{ "w": 1 },
"1,4",
{ "x": 1, "w": 2.75 },
"0,7",
{ "w": 1.25 },
"0,8",
{ "w": 1.25 },
"0,9",
{ "w": 1 },
"0,10",
"0,11",
"0,12"
]
]
}
}

View File

@@ -77,6 +77,11 @@ void matrix_init(void)
matrix_init_kb();
}
bool matrix_is_on(uint8_t row, uint8_t col)
{
return (matrix[row] & ((matrix_row_t)1<<col));
}
uint8_t matrix_scan(void)
{
#ifdef RIGHT_HALF