Compare commits

..

36 Commits

Author SHA1 Message Date
Joel Challis
cf5ce64b1b Workaround for resolving keyboard alias for config file values (#25228) 2025-05-05 10:22:51 +10:00
Christopher Hoage
60ac859852 Fix Spleeb compile when pointing device is enabled (#25016) 2025-05-01 18:52:36 -07:00
takashicompany
45091b0473 [Keyboard] Add Gravity-45(#25206)
* add gravity-45

* readme.md

* fix readme

* Update keyboards/green_keys/gravity_45/keyboard.json

Co-authored-by: jack <0x6a73@protonmail.com>

* run qmk format-json -i keyboards/green_keys/gravity_45/keyboard.json

* add url

* Update keyboards/green_keys/gravity_45/keyboard.json

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

* Update keyboard.json

* Update keyboard.json

* Update keyboards/green_keys/gravity_45/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-30 12:08:37 -06:00
vchowl
4e2191ce20 Amptrics 0420 keyboard addition (#24744)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2025-04-27 23:08:13 -07:00
josephawilliamsiv
3de04e0386 Add Umbra keyboard (#24569)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-27 23:02:30 -07:00
Cipulot
2e648d7e48 Addition of OK-1 (#24646)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-27 22:55:51 -07:00
hen-des
1fd0139b91 Added new keyboard epssp75 (#24756)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-27 22:28:22 -07:00
mizma
3478ae5795 [Keyboard] mzmkb/slimdash/rev1 (#24804)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2025-04-27 22:26:47 -07:00
VeyPatch
01354fffb4 [Keyboard] Add splitkb.com's Halcyon Elora rev2 (#24790)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-27 22:25:09 -07:00
Jeremy Cook
92c4f0095d Add jcpm2 (JC Pro Macro 2) (#24816)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2025-04-27 21:03:50 -07:00
LucasMateijsen
ac8b914a11 Add handwired 4x14 LuMaWing keyboard (#24885) 2025-04-27 20:58:47 -07:00
Matheus Marques
de598ac8f0 [Keymap] Sofle RGB - fixed stuck on numpad layer and layout comments (#24942) 2025-04-27 11:42:11 -07:00
takashicompany
a07360e0f1 Add new keyboard MirageiX (#25054)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2025-04-27 11:19:19 -07:00
Michał Kopeć
ca425971d5 keyboards/annepro2/ld: Add per-variant linker scripts (#24999)
C18 has an MCU with 16K SRAM, up from C15's 8K.

Split the linker script into C15 and C18 variants to make use of the
larger RAM capacity of C18.
2025-04-26 01:40:17 +01:00
Aidan Gauland
3319474c5c Add Lemokey X0 keyboard (#24994) 2025-04-26 01:31:25 +01:00
Álvaro A. Volpato
12d70ab1a4 First TypeK support (#22876) 2025-04-26 01:28:49 +01:00
dependabot[bot]
e5466df800 Bump vite from 5.4.15 to 5.4.18 in /builddefs/docsgen (#25192)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 12:25:47 +10:00
Joel Challis
da2e897f55 Update 'qmk generate-api' to only publish pure DD keymaps (#24782) 2025-04-23 12:10:14 +10:00
Joel Challis
c6a93b5a56 Bump rlespinasse/github-slug-action from 3 to 5 (#25021) 2025-04-23 12:03:02 +10:00
Nick Brassel
9f04023d35 Decrease firmware size for anavi/macropad8. (#25185)
Preparation for bootstrapper.
2025-04-22 14:14:28 +10:00
CJ Pais
ebfa3cdd5c Add handwired/footy (#25151)
Co-authored-by: jack <jack@pngu.org>
2025-04-21 16:56:10 -07:00
Nick Brassel
53f1f3b6d7 Fix for .clangd. (#25180) 2025-04-22 00:02:47 +10:00
Jan Bláha
a1cb822861 DOCS: qmk-hid missing in bootloaders list? (#25177) 2025-04-20 19:41:30 +10:00
Joel Challis
edf34315af Fix 'Would you like to clone the submodules?' prompt under msys (#24958) 2025-04-20 08:09:54 +10:00
lsh4711
800bc78d26 Fix missing and extra commas in JSON schema (#25057) 2025-04-18 19:05:25 +10:00
JamesWilson1996
576325e2f4 [Keyboard] Add voidhhkb-hotswap (#25007)
* Added files for voidhhkb-hotswap

* Updated keyboard name to resolve build errors

* Implement suggestions from PR. Use 60_hhkb community layout.

* Update keyboards/void/voidhhkb_hotswap/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Apply suggestions from code review

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: jack <jack@pngu.org>
2025-04-17 12:50:41 -06:00
ClownFish
7641359240 [Docs] Unify lighting step descriptions (#25167)
unify lighting step descriptions and defaults across docs
2025-04-17 10:23:16 -06:00
Nick Brassel
e83b709169 [Keyboard] Kobold r1 (#25161)
* Kobold r1

* Apply suggestions from code review

Co-authored-by: jack <jack@pngu.org>

* `board_init` => `early_hardware_init_post`.

---------

Co-authored-by: jack <jack@pngu.org>
2025-04-16 20:41:20 -06:00
Daniel Reisch
80612c8ec0 Added Keyboard LumPy27 (#24967)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-14 10:27:52 -07:00
Andrew Kannan
af141d1a5c Add Link keyboard (#25058)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-14 09:52:51 -07:00
suikagiken
1388daa0cc [Keyboard] Add suika83opti (#24991) 2025-04-13 10:20:42 -06:00
Sylvain Huguet
d99eb01ee4 Update shuguet/shu89 (#24780)
* Update keyboard.json

Update mod keys location in RGB layout.

* Update keyboard.json

* Update keyboards/shuguet/shu89/keyboard.json

Co-authored-by: Ryan <fauxpark@gmail.com>

---------

Co-authored-by: Ryan <fauxpark@gmail.com>
2025-04-13 10:19:12 -06:00
Olivier Mehani
e17878ad15 kradoindustries_promenade: add LAYOUT_1x2u (#25090) 2025-04-13 10:14:34 -06:00
Luis Garcia
daf6968947 fix: Fix startup sound for Preonic (#25132) (#25133)
Add `AUDIO_INIT_DELAY ` to config.h to resolve
2025-04-11 17:26:13 +01:00
Luis Garcia
f549b30760 chore: Allow disabling underglow on Work Louder devices (#25123) (#25120)
* Allow disabling Underglow on Work Louder devices

Allows disabling Underglow on Work Louder devices by using `RGBLIGHT_ENABLE = no` on rules.mk

* Update keyboards/work_louder/rgb_functions.c

Suggested by @zvecr on review.

Co-authored-by: Joel Challis <git@zvecr.com>

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2025-04-10 23:26:11 -06:00
Nick Brassel
a0f40d9410 Include math.h where necessary. (#25122) 2025-04-09 15:28:30 +01:00
139 changed files with 6924 additions and 272 deletions

View File

@@ -1,4 +1,4 @@
CompileFlags:
Add: [-Wno-unknown-attributes, -Wno-maybe-uninitialized, -Wno-unknown-warning-option]
Remove: [-W*, -mmcu=*, -mcpu=*, -mfpu=*, -mfloat-abi=*, -mno-unaligned-access, -mno-thumb-interwork, -mcall-prologues]
Remove: [-W*, -mmcu=*, -mcpu=*, -mfpu=*, -mfloat-abi=*, -mno-unaligned-access, -mno-thumb-interwork, -mcall-prologues, -D__has_include*]
Compiler: clang

View File

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

View File

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

View File

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

View File

@@ -766,10 +766,10 @@ tabbable@^6.2.0:
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
vite@^5.2.9, vite@^5.4.15:
version "5.4.15"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.15.tgz#2941547f10ebb4bf9b0fa0da863c06711eb7e5e5"
integrity sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==
vite@^5.2.9, vite@^5.4.18:
version "5.4.18"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.18.tgz#b5af357f9d5ebb2e0c085779b7a37a77f09168a4"
integrity sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.43"

View File

@@ -3,7 +3,7 @@
"$id": "qmk.community_module.v1",
"title": "Community Module Information",
"type": "object",
"required": ["module_name", "maintainer"]
"required": ["module_name", "maintainer"],
"properties": {
"module_name": {"$ref": "qmk.definitions.v1#/text_identifier"},
"maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"},
@@ -12,6 +12,6 @@
"format": "uri"
},
"keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"},
"features": {"$ref": "qmk.keyboard.v1#/definitions/features_config"},
"features": {"$ref": "qmk.keyboard.v1#/definitions/features_config"}
}
}

View File

@@ -30,12 +30,12 @@
"properties": {
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
}
}
},
"features_config": {
"$ref": "qmk.definitions.v1#/boolean_array",
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"},
"not": {"required": ["lto"]}
},
}
},
"type": "object",
"not": {"required": ["vendorId", "productId"]}, // reject via keys...
@@ -354,7 +354,7 @@
"axis_resolution": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"axes": {
"type": "object",
"propertyNames": {"enum": ["x", "y", "z", "rx", "ry", "rz"]}
"propertyNames": {"enum": ["x", "y", "z", "rx", "ry", "rz"]},
"additionalProperties": {
"oneOf": [
{

View File

@@ -8,7 +8,7 @@
],
"properties": {
"userspace_version": {
"type": "string",
},
"type": "string"
}
}
}

View File

@@ -9,7 +9,7 @@
{"$ref": "qmk.definitions.v1#/keyboard_keymap_tuple"},
{"$ref": "qmk.definitions.v1#/json_file_path"}
]
},
}
},
"required": [
"userspace_version",

View File

@@ -10,7 +10,7 @@
{"$ref": "qmk.definitions.v1#/keyboard_keymap_env"},
{"$ref": "qmk.definitions.v1#/json_file_path"}
]
},
}
},
"required": [
"userspace_version",

View File

@@ -401,6 +401,7 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
* `atmel-dfu`
* `lufa-dfu`
* `qmk-dfu`
* `qmk-hid`
* `halfkay`
* `caterina`
* `bootloadhid`

View File

@@ -227,6 +227,8 @@ For inspiration and examples, check out the built-in effects under `quantum/led_
#define LED_MATRIX_DEFAULT_MODE LED_MATRIX_SOLID // Sets the default mode, if none has been set
#define LED_MATRIX_DEFAULT_VAL LED_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
#define LED_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set
#define LED_MATRIX_VAL_STEP 8 // The value by which to increment the brightness per adjustment action
#define LED_MATRIX_SPD_STEP 16 // The value by which to increment the animation speed per adjustment action
#define LED_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL // Sets the default LED flags, if none has been set
#define LED_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR

View File

@@ -378,6 +378,10 @@ These are defined in [`color.h`](https://github.com/qmk/qmk_firmware/blob/master
#define RGB_MATRIX_DEFAULT_SAT 255 // Sets the default saturation value, if none has been set
#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
#define RGB_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set
#define RGB_MATRIX_HUE_STEP 8 // The value by which to increment the hue per adjustment action
#define RGB_MATRIX_SAT_STEP 16 // The value by which to increment the saturation per adjustment action
#define RGB_MATRIX_VAL_STEP 16 // The value by which to increment the brightness per adjustment action
#define RGB_MATRIX_SPD_STEP 16 // The value by which to increment the animation speed per adjustment action
#define RGB_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL // Sets the default LED flags, if none has been set
#define RGB_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR

View File

@@ -97,9 +97,9 @@ Your RGB lighting can be configured by placing these `#define`s in your `config.
|Define |Default |Description |
|---------------------------|----------------------------|---------------------------------------------------------------------------------------------------------------------------|
|`RGBLIGHT_HUE_STEP` |`8` |The number of steps to cycle through the hue by |
|`RGBLIGHT_SAT_STEP` |`17` |The number of steps to increment the saturation by |
|`RGBLIGHT_VAL_STEP` |`17` |The number of steps to increment the brightness by |
|`RGBLIGHT_HUE_STEP` |`8` |The value by which to increment the hue per adjustment action |
|`RGBLIGHT_SAT_STEP` |`17` |The value by which to increment the saturation per adjustment action |
|`RGBLIGHT_VAL_STEP` |`17` |The value by which to increment the brightness per adjustment action |
|`RGBLIGHT_LIMIT_VAL` |`255` |The maximum brightness level |
|`RGBLIGHT_SLEEP` |*Not defined* |If defined, the RGB lighting will be switched off when the host goes to sleep |
|`RGBLIGHT_SPLIT` |*Not defined* |If defined, synchronization functionality for split keyboards is added |

View File

@@ -413,7 +413,7 @@ Configures the [LED Matrix](features/led_matrix) feature.
* Default: `16`
* `led_process_limit` <Badge type="info">Number</Badge>
* Limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness).
* Default: `led_count / 5`
* Default: `(led_count + 4) / 5`
* `max_brightness` <Badge type="info">Number</Badge>
* The maximum value which brightness is scaled to, from 0 to 255.
* Default: `255`
@@ -424,7 +424,7 @@ Configures the [LED Matrix](features/led_matrix) feature.
* Turn off the LEDs when the host goes to sleep.
* Default: `false`
* `speed_steps` <Badge type="info">Number</Badge>
* The number of speed adjustment steps.
* The value by which to increment the speed.
* Default: `16`
* `split_count` <Badge type="info">Array: Number</Badge>
* For split keyboards, the number of LEDs on each half.
@@ -433,7 +433,7 @@ Configures the [LED Matrix](features/led_matrix) feature.
* The LED activity timeout in milliseconds.
* Default: `0` (no timeout)
* `val_steps` <Badge type="info">Number</Badge>
* The number of brightness adjustment steps.
* The value by which to increment the brightness.
* Default: `8`
## Matrix {#matrix}
@@ -549,7 +549,7 @@ Configures the [RGB Lighting](features/rgblight) feature.
}
```
* `brightness_steps` <Badge type="info">Number</Badge>
* The number of brightness adjustment steps.
* The value by which to increment the brightness.
* Default: `17`
* `default`
* `animation` <Badge type="info">String</Badge>
@@ -574,7 +574,7 @@ Configures the [RGB Lighting](features/rgblight) feature.
* The driver to use. Must be one of `apa102`, `custom`, `ws2812`.
* Default: `"ws2812"`
* `hue_steps` <Badge type="info">Number</Badge>
* The number of hue adjustment steps.
* The value by which to increment the hue.
* Default: `8`
* `layers`
* `blink` <Badge type="info">Boolean</Badge>
@@ -593,7 +593,7 @@ Configures the [RGB Lighting](features/rgblight) feature.
* The maximum value which the HSV "V" component is scaled to, from 0 to 255.
* Default: `255`
* `saturation_steps` <Badge type="info">Number</Badge>
* The number of saturation adjustment steps.
* The value by which to increment the suturation.
* Default: `17`
* `sleep` <Badge type="info">Boolean</Badge>
* Turn off the LEDs when the host goes to sleep.
@@ -645,7 +645,7 @@ Configures the [RGB Matrix](features/rgb_matrix) feature.
* `driver` <Badge type="info">String</Badge> <Badge>Required</Badge>
* The driver to use. Must be one of `aw20216s`, `custom`, `is31fl3218`, `is31fl3236`, `is31fl3729`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`, `snled27351`, `ws2812`.
* `hue_steps` <Badge type="info">Number</Badge>
* The number of hue adjustment steps.
* The value by which to increment the hue.
* Default: `8`
* `layout` <Badge type="info">Array: Object</Badge> <Badge>Required</Badge>
* List of LED configuration dictionaries. Each dictionary contains:
@@ -664,7 +664,7 @@ Configures the [RGB Matrix](features/rgb_matrix) feature.
* Default: `16`
* `led_process_limit` <Badge type="info">Number</Badge>
* Limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness).
* Default: `led_count / 5`
* Default: `(led_count + 4) / 5`
* `max_brightness` <Badge type="info">Number</Badge>
* The maximum value which the HSV "V" component is scaled to, from 0 to 255.
* Default: `255`
@@ -672,13 +672,13 @@ Configures the [RGB Matrix](features/rgb_matrix) feature.
* Animations react to keyup instead of keydown.
* Default: `false`
* `sat_steps` <Badge type="info">Number</Badge>
* The number of saturation adjustment steps.
* The value by which to increment the saturation.
* Default: `16`
* `sleep` <Badge type="info">Boolean</Badge>
* Turn off the LEDs when the host goes to sleep.
* Default: `false`
* `speed_steps` <Badge type="info">Number</Badge>
* The number of speed adjustment steps.
* The value by which to increment the speed.
* Default: `16`
* `split_count` <Badge type="info">Array: Number</Badge>
* For split keyboards, the number of LEDs on each half.
@@ -687,7 +687,7 @@ Configures the [RGB Matrix](features/rgb_matrix) feature.
* The LED activity timeout in milliseconds.
* Default: `0` (no timeout)
* `val_steps` <Badge type="info">Number</Badge>
* The number of brightness adjustment steps.
* The value by which to increment the brightness.
* Default: `16`
## Secure {#secure}

View File

@@ -0,0 +1,67 @@
/* Copyright 2024 Vinod Chowl (@vchowl)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2.0 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#define LED_LAYER_0 B3
#define LED_LAYER_1 B4
#define LED_LAYER_2 B5
#define LED_LAYER_3 B6
#define LED_PINS_COUNT 4
pin_t pins[LED_PINS_COUNT] = {LED_LAYER_0, LED_LAYER_1, LED_LAYER_2, LED_LAYER_3};
// Function to turn on all LEDs
void turn_on_all_leds(void) {
for (int i = 0; i < LED_PINS_COUNT; i++) {
gpio_write_pin_high(pins[i]); // Turn on LED
}
}
// Function to turn off all LEDs
void turn_off_all_leds(void) {
for (int i = 0; i < LED_PINS_COUNT; i++) {
gpio_write_pin_low(pins[i]); // Turn off LED
}
}
void update_leds_for_layer(uint8_t layer) {
turn_off_all_leds();
gpio_write_pin_high(pins[layer]);
}
void keyboard_post_init_kb(void) {
for (int i = 0; i < LED_PINS_COUNT; i++) {
gpio_set_pin_output(pins[i]);
gpio_write_pin_low(pins[i]);
}
// Blink all LEDs
turn_on_all_leds();
wait_ms(500); // Keep LEDs on for 500ms
turn_off_all_leds();
update_leds_for_layer(0); // Update LEDs to indicate the default layer
keyboard_post_init_user();
}
layer_state_t layer_state_set_kb(layer_state_t state) {
uint8_t layer = get_highest_layer(state);
update_leds_for_layer(layer);
return layer_state_set_user(state);
}

View File

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

View File

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

View File

@@ -0,0 +1,58 @@
/* Copyright 2024 Vinod Chowl (@vchowl)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2.0 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┐
* │Tog│
* ├───┼───┬───┐
* │ 7 │ 8 │ 9 │
* ├───┼───┼───┤
* │ 4 │ 5 │ 6 │
* ├───┼───┼───┤
* │ 1 │ 2 │ 3 │
* └───┴───┴───┘
*/
[0] = LAYOUT(
TO(1),
KC_7, KC_8, KC_9,
KC_4, KC_5, KC_6,
KC_1, KC_2, KC_3
),
[1] = LAYOUT(
TO(2),
KC_A, KC_B, KC_C,
KC_D, KC_E, KC_F,
KC_G, KC_H, KC_I
),
[2] = LAYOUT(
TO(3),
KC_J, KC_K, KC_L,
KC_M, KC_N, KC_O,
KC_P, KC_Q, KC_R
),
[3] = LAYOUT(
TO(0),
KC_S, KC_T, KC_U,
KC_V, KC_W, KC_X,
KC_Y, KC_Z, KC_ENT
)
};

View File

@@ -0,0 +1,25 @@
# Amptrics 0422 Programmable Keypad
![magtray4x3](https://i.imgur.com/G5QMlpn_d.jpeg)
* Keyboard Maintainer: [vchowl](https://github.com/vchowl)
* Hardware Supported: STM32F072RBT6
* Hardware Availability: Not yet available.
Make example for this keyboard (after setting up your build environment):
make amptrics/0422:default
Flashing example for this keyboard:
make amptrics/0422:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -23,7 +23,6 @@
"rainbow_swirl": true,
"snake": true,
"knight": true,
"christmas": true,
"static_gradient": true,
"rgb_test": true,
"alternating": true,

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,27 @@
/* Copyright 2024 CannonKeys */
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
/* VBUS-routed pin for upstream detection */
#define USB_VBUS_PIN GP27
#define SPLIT_HAND_PIN_LOW_IS_LEFT
// Configure full duplex split comms over PIO
#define SERIAL_USART_FULL_DUPLEX
#define SERIAL_USART_TX_PIN GP28
#define SERIAL_USART_RX_PIN GP29
#define SERIAL_USART_PIN_SWAP
/* RP2040- and hardware-specific config */
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
/* I2C for OLEDs */
#define I2C_DRIVER I2CD1
#define I2C1_SDA_PIN GP14
#define I2C1_SCL_PIN GP15
#define OLED_DISPLAY_64X128

View File

@@ -0,0 +1,7 @@
// Copyright 2024 Andrew Kannan
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View File

@@ -0,0 +1,135 @@
{
"manufacturer": "CannonKeys",
"keyboard_name": "Link",
"maintainer": "awkannan",
"bootloader": "rp2040",
"bootmagic": {
"matrix": [0, 5]
},
"build": {
"debounce_type": "asym_eager_defer_pk"
},
"diode_direction": "COL2ROW",
"dynamic_keymap": {
"layer_count": 6
},
"encoder": {
"rotary": [
{"pin_a": "GP12", "pin_b": "GP13", "resolution": 2}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"oled": true
},
"matrix_pins": {
"cols": ["GP17", "GP18", "GP19", "GP20", "GP21", "GP24"],
"rows": ["GP25", "GP26", "GP16", "GP11", "GP10"]
},
"processor": "RP2040",
"qmk": {
"tap_keycode_delay": 10
},
"split": {
"bootmagic": {
"matrix": [5, 5]
},
"enabled": true,
"handedness": {
"pin": "GP8"
},
"matrix_pins": {
"right": {
"cols": ["GP16", "GP11", "GP10", "GP3", "GP2", "GP1"],
"rows": ["GP9", "GP0", "GP17", "GP18", "GP19"]
}
},
"serial": {
"driver": "vendor"
},
"transport": {
"sync": {
"layer_state": true,
"matrix_state": true,
"oled": true,
"wpm": true
}
}
},
"url": "https://cannonkeys.com/",
"usb": {
"device_version": "0.0.1",
"pid": "0x0038",
"vid": "0xCA04"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 5], "x": 0, "y": 0},
{"matrix": [0, 4], "x": 1, "y": 0},
{"matrix": [0, 3], "x": 2, "y": 0},
{"matrix": [0, 2], "x": 3, "y": 0},
{"matrix": [0, 1], "x": 4, "y": 0},
{"matrix": [0, 0], "x": 5, "y": 0},
{"matrix": [5, 0], "x": 11, "y": 0},
{"matrix": [5, 1], "x": 12, "y": 0},
{"matrix": [5, 2], "x": 13, "y": 0},
{"matrix": [5, 3], "x": 14, "y": 0},
{"matrix": [5, 4], "x": 15, "y": 0},
{"matrix": [5, 5], "x": 16, "y": 0},
{"matrix": [1, 5], "x": 0, "y": 1},
{"matrix": [1, 4], "x": 1, "y": 1},
{"matrix": [1, 3], "x": 2, "y": 1},
{"matrix": [1, 2], "x": 3, "y": 1},
{"matrix": [1, 1], "x": 4, "y": 1},
{"matrix": [1, 0], "x": 5, "y": 1},
{"matrix": [6, 0], "x": 11, "y": 1},
{"matrix": [6, 1], "x": 12, "y": 1},
{"matrix": [6, 2], "x": 13, "y": 1},
{"matrix": [6, 3], "x": 14, "y": 1},
{"matrix": [6, 4], "x": 15, "y": 1},
{"matrix": [6, 5], "x": 16, "y": 1},
{"matrix": [2, 5], "x": 0, "y": 2},
{"matrix": [2, 4], "x": 1, "y": 2},
{"matrix": [2, 3], "x": 2, "y": 2},
{"matrix": [2, 2], "x": 3, "y": 2},
{"matrix": [2, 1], "x": 4, "y": 2},
{"matrix": [2, 0], "x": 5, "y": 2},
{"matrix": [7, 0], "x": 11, "y": 2},
{"matrix": [7, 1], "x": 12, "y": 2},
{"matrix": [7, 2], "x": 13, "y": 2},
{"matrix": [7, 3], "x": 14, "y": 2},
{"matrix": [7, 4], "x": 15, "y": 2},
{"matrix": [7, 5], "x": 16, "y": 2},
{"matrix": [3, 5], "x": 0, "y": 3},
{"matrix": [3, 4], "x": 1, "y": 3},
{"matrix": [3, 3], "x": 2, "y": 3},
{"matrix": [3, 2], "x": 3, "y": 3},
{"matrix": [3, 1], "x": 4, "y": 3},
{"matrix": [3, 0], "x": 5, "y": 3},
{"matrix": [4, 5], "x": 6, "y": 3},
{"matrix": [9, 5], "x": 10, "y": 3},
{"matrix": [8, 0], "x": 11, "y": 3},
{"matrix": [8, 1], "x": 12, "y": 3},
{"matrix": [8, 2], "x": 13, "y": 3},
{"matrix": [8, 3], "x": 14, "y": 3},
{"matrix": [8, 4], "x": 15, "y": 3},
{"matrix": [8, 5], "x": 16, "y": 3},
{"matrix": [4, 4], "x": 2, "y": 4},
{"matrix": [4, 3], "x": 3, "y": 4},
{"matrix": [4, 2], "x": 4, "y": 4},
{"matrix": [4, 1], "x": 5, "y": 4},
{"matrix": [4, 0], "x": 6, "y": 4, "h": 1.5},
{"matrix": [9, 0], "x": 10, "y": 4, "h": 1.5},
{"matrix": [9, 1], "x": 11, "y": 4},
{"matrix": [9, 2], "x": 12, "y": 4},
{"matrix": [9, 3], "x": 13, "y": 4},
{"matrix": [9, 4], "x": 14, "y": 4}
]
}
}
}

View File

@@ -0,0 +1,31 @@
// Copyright 2025 Andrew Kannan (awkannan)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
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_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LGUI, KC_LALT, KC_LCTL, MO(1), KC_ENT, KC_SPC, MO(2), KC_RCTL, KC_RALT, KC_RGUI
),
[1] = LAYOUT(
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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12,
KC_WREF, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
KC_TRNS, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_DOT, KC_COLN, KC_BSLS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_INS, KC_DEL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_PGUP, KC_MPRV, KC_MNXT, KC_PSCR, 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,93 @@
// Copyright 2025 Andrew Kannan (awkannan)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
#ifdef OLED_ENABLE
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
if (is_keyboard_master()) {
return OLED_ROTATION_0;
} else {
return OLED_ROTATION_90;
}
return rotation;
}
static void render_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
};
oled_write_P(qmk_logo, false);
}
void print_status_narrow(void) {
oled_write_P(PSTR("\n\n"), false);
switch (get_highest_layer(layer_state)) {
case 0:
oled_write_ln_P(PSTR("Qwrt"), false);
break;
case 1:
oled_write_ln_P(PSTR("Clmk"), false);
break;
default:
oled_write_P(PSTR("Mod\n"), false);
break;
}
oled_write_P(PSTR("\n\n"), false);
oled_write_ln_P(PSTR("LAYER"), false);
switch (get_highest_layer(layer_state)) {
case 0:
case 1:
oled_write_P(PSTR("Base\n"), false);
break;
case 2:
oled_write_P(PSTR("Raise"), false);
break;
case 3:
oled_write_P(PSTR("Lower"), false);
break;
default:
oled_write_ln_P(PSTR("Undef"), false);
}
oled_write_P(PSTR("\n\n"), false);
led_t led_usb_state = host_keyboard_led_state();
oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
if (is_keyboard_master()) {
print_status_narrow();
} else {
render_logo();
}
return true;
}
#endif
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false;
}
if (index == 0) {
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
} else if (index == 1) {
if (clockwise) {
tap_code(KC_PGDN);
} else {
tap_code(KC_PGUP);
}
}
return true;
}
#endif

View File

@@ -0,0 +1,27 @@
# Link
The Link is a Sofle58 inspired Ergo Split keyboard from CannonKeys.
It uses 1.3" SH1107 screens and ALPS EC11 compatible encoders.
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
* Hardware Supported: RP2040
* Hardware Availability: [CannonKeys](https://cannonkeys.com)
Make example for this keyboard (after setting up your build environment):
make cannonkeys/link:default
Flashing example for this keyboard:
make cannonkeys/link:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the top-most and outer-most key in the matrix and plug in the keyboard
* **Physical reset button**: Hold the "BOOTMODE" button on the back of the PCB and briefly press the "RESET" button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,25 @@
/* Copyright 2024 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// PWM driver with direct memory access (DMA) support
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 1
#define WS2812_PWM_PAL_MODE 2
#define WS2812_DMA_STREAM STM32_DMA1_STREAM5
#define WS2812_DMA_CHANNEL 6

View File

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

View File

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

View File

@@ -0,0 +1,90 @@
/* Copyright 2024 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers{
_MAC_BASE,
_MAC_FN,
_WIN_BASE,
_WIN_FN
};
enum custom_keycodes {
SNIP = SAFE_RANGE,
};
// clang-format on
#define MAC PDF(_MAC_BASE)
#define WIN PDF(_WIN_BASE)
#define MACFN MO(_MAC_FN)
#define WINFN MO(_WIN_FN)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[_MAC_BASE] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MACFN, KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, KC_LEFT, KC_DOWN, KC_RIGHT
),
[_MAC_FN] = LAYOUT(
_______, KC_BRID, KC_BRIU, KC_MCTL, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, SNIP,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, WIN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RM_VALU,
_______, _______, _______, _______, _______, _______, _______, RM_PREV, RM_VALD, RM_PREV
),
[_WIN_BASE] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
WINFN, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT
),
[_WIN_FN] = LAYOUT(
_______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, SNIP,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, MAC, _______, _______, _______, _______, RM_VALU,
_______, _______, _______, _______, _______, _______, _______, RM_PREV, RM_VALD, RM_PREV
),
// clang-format on
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case SNIP:
if (record->event.pressed) {
if (IS_LAYER_ON(_WIN_FN)) {
tap_code(KC_PSCR);
} else if (IS_LAYER_ON(_MAC_FN)) {
tap_code16(LSFT(LGUI(KC_3)));
}
}
return false;
default:
return true;
}
}

View File

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

View File

@@ -0,0 +1,25 @@
# OK-1
OK-1 is a low profile keyboard.
* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
* Hardware Supported: OK-1
* Hardware Availability: TBD
Make example for this keyboard (after setting up your build environment):
make cipulot/ok_1:default
Flashing example for this keyboard:
make cipulot/ok_1:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is configured.
* **Physical reset button**: Long press the reset button soldered on the PCB.
* **Bootmagic reset**: Hold down the top left key and plug in the controller.

View File

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

View File

@@ -0,0 +1,55 @@
{
"manufacturer": "djreisch",
"keyboard_name": "LumPy27",
"maintainer": "djreisch",
"board": "GENERIC_RP_RP2040",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true
},
"matrix_pins": {
"cols": ["GP0", "GP1", "GP2", "GP3", "GP4", "GP5"],
"rows": ["GP14", "GP15", "GP16", "GP17", "GP18"]
},
"processor": "RP2040",
"usb": {
"device_version": "1.0.0",
"pid": "0x2326",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
{"matrix": [3, 2], "x": 2, "y": 3},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3},
{"matrix": [3, 5], "x": 5, "y": 3},
{"matrix": [4, 3], "x": 3, "y": 4},
{"matrix": [4, 4], "x": 4, "y": 4},
{"matrix": [4, 5], "x": 5, "y": 4}
]
}
}
}

View File

@@ -0,0 +1,76 @@
/* Copyright 2024 Daniel Reisch (djreisch)
*
* 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 custom_keycodes { MACRO_GG = QK_USER };
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
Main
,-----------------------------------------.
| ESC | 1 | 2 | 3 | 4 | 5 |
|------+------+------+------+------+------|
| Tab | G | Q | W | E | R |
|------+------+------+------+------+------|
| LSHIFT | A | S | D | F |
|------+------+------+------+------+------|
| LCTL | B | Z | X | C | V |-------|
`-----------------------------------------/ /
| LAlt | FN | / Space /
| | |/ /
`---------------------'
*/
[0] = LAYOUT(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5,
KC_TAB, KC_G, KC_Q, KC_W, KC_E, KC_R,
KC_LSFT, KC_A, KC_S, KC_D, KC_F,
KC_LCTL, KC_B, KC_Z, KC_X, KC_C, KC_V,
KC_LALT, MO(1), KC_SPACE),
/*
Alt
,-----------------------------------------.
| ESC | 0 | 9 | 8 | 7 | 6 |
|------+------+------+------+------+------|
| F1 | F2 | F3 | F4 | F5 | F6 |
|------+------+------+------+------+------|
| LSHIFT | A | S | Y | H |
|------+------+------+------+------+------|
| LCTL | B | Z | X | C | M |-------|
`-----------------------------------------/ /
| LAlt | FN | / Enter /
| | |/ /
`---------------------'
*/
[1] = LAYOUT(KC_ESC, KC_0, KC_9, KC_8, KC_7, KC_6,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
KC_LSFT, KC_A, KC_S, KC_Y, KC_H,
KC_LCTL, MACRO_GG, KC_Z, KC_X, KC_C, KC_M,
KC_LALT, KC_TRNS, KC_ENTER)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case MACRO_GG:
if (record->event.pressed) {
// when keycode MACRO_GG is pressed, press shift+enter, send string "gg" and press enter
SEND_STRING(SS_DOWN(X_LSFT) SS_DELAY(10) SS_TAP(X_ENTER) SS_UP(X_LSFT) "gg" SS_TAP(X_ENTER));
}
break;
}
return true;
}

View File

@@ -0,0 +1,29 @@
# LumPy27
The Lightweight User-Modifiable Pi/Python keyboard is a 26-key ergonomic gaming keyboard running on an RP2040. Originally designed to run CircuitPython and KMK, since QMK supports the RP2040 bootloader this is now an additional option for firmware.
Q: Why is it named the LumPy27 even though it has 26 keys?
A: When originally designing the PCB and coming up with a name, I miscounted the switches. With the name emblazoned on the silkscreen I figured it sounded better than LumPy26.
Q: Why are the keys in the wrong place?
A: For certain games I found it easier instead of remapping them to just change where they are. That's why keys like B and G are not in the right spots.
* Keyboard Maintainer: [djreisch](https://github.com/djreisch)
* Hardware Availability: [DuckyDebug.org](https://duckydebug.org/products/lumpy27-ergonomic-gaming-keyboard)
qmk compile example for this keyboard (after setting up your build environment):
qmk compile -kb djreisch/lumpy27 -km default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 2 ways:
* **Bootloader Reset**: Hold down the bootload button and press the reset button
* **Bootloader Power On**: Hold down the bootloader button and plug in the keyboard

View File

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

View File

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

View File

@@ -0,0 +1,37 @@
# Gravity-45
![green_keys/gravity_45](https://i.imgur.com/FTyC65h.jpeg)
Gravity-45 is a 45-key integrated keyboard.
It uses the Waveshare RP2040-Zero MCU.
Keyswitch sockets are used for easy keyswitch replacement.
The tight PCB outline lines allow for easy case design.
---
Gravity-45 は 45キーの一体型のキーボードだ。
MCUにはWaveshare RP2040-Zeroを採用している。
キースイッチソケットを使用するためキースイッチの交換が容易に行える。
PCBの外形線がタイトなので、ケースの設計が容易だ。
* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
* Hardware Supported: PCB, Waveshare RP2040-Zero
* Hardware Availability: [GreenKeys](https://green-keys.info/)
Make example for this keyboard (after setting up your build environment):
make green_keys/gravity_45:default
Flashing example for this keyboard:
make green_keys/gravity_45:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,5 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U

View File

@@ -0,0 +1,35 @@
{
"manufacturer": "CJ Pais",
"keyboard_name": "Footy",
"maintainer": "cjpais",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true
},
"bootmagic": {
"matrix": [0, 1]
},
"matrix_pins": {
"cols": ["GP11", "GP10", "GP15"],
"rows": ["GP14"]
},
"processor": "RP2040",
"url": "https://workshop.cjpais.com/projects/footy",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
"vid": "0x636A"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0}
]
}
}
}

View File

@@ -0,0 +1,10 @@
{
"keyboard": "handwired/footy",
"keymap": "default",
"layout": "LAYOUT",
"layers": [
[
"KC_A", "KC_B", "KC_C"
]
]
}

View File

@@ -0,0 +1,15 @@
{
"keyboard": "handwired/footy",
"keymap": "handy",
"layout": "LAYOUT",
"layers": [
[
"KC_NO", "MT(MOD_RCTL | MOD_RGUI, KC_NO)", "KC_NO"
]
],
"config": {
"tapping": {
"term": 50
}
}
}

View File

@@ -0,0 +1,15 @@
{
"keyboard": "handwired/footy",
"keymap": "superwhisper",
"layout": "LAYOUT",
"layers": [
[
"KC_NO", "LOPT(KC_SPACE)", "KC_NO"
]
],
"config": {
"tapping": {
"term": 50
}
}
}

View File

@@ -0,0 +1,42 @@
# Footy
![Footy Foot Pedal](https://i.imgur.com/ZdvlgRB.jpeg)
*Footy is a foot pedal intended to be used with a speech to text application like 'handy' or superwhisper. Initially developed as an assistive technology device for those with limited typing abilities.*
* Keyboard Maintainer: [CJ Pais](https://github.com/cjpais)
* Hardware Supported: [Keebio Stampy](https://keeb.io/products/stampy-rp2040-usb-c-controller-board-for-handwiring)
* Hardware Availability: [3D printed case](https://makerworld.com/en/models/1185240-footy)
Make example for this keyboard (after setting up your build environment):
make handwired/footy:default
Flashing example for this keyboard (enter the bootloader first):
make handwired/footy:default:flash
or drag and drop .uf2 file on the removable storage
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader:
* **Physical reset button**: Briefly double press the button on the back of the PCB
## Keymaps
Right now there are two primary keymaps, one for 'handy' and one for 'superwhisper'.
Handy's default keymap is for the center switch to be RCTRL + RGUI.
Superwhisper's default keymap is for the center switch to be LOPT + SPACE.
You can build either of these firmware images by running the following commands:
```
make handwired/footy:handy
make handwired/footy:superwhisper
```

View File

@@ -0,0 +1,107 @@
{
"manufacturer": "Henning Cordes",
"keyboard_name": "epssp75",
"maintainer": "hen-des",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP16", "GP17", "GP18", "GP19", "GP20", "GP21", "GP22"],
"rows": ["GP1", "GP2", "GP3", "GP4", "GP5"]
},
"processor": "RP2040",
"url": "https://hen-des.github.io/epssp75/",
"usb": {
"device_version": "1.0.0",
"pid": "0x0075",
"vid": "0x6863"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [0, 9], "x": 8.5, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [0, 15], "x": 15, "y": 0},
{"matrix": [0, 16], "x": 16, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
{"matrix": [1, 6], "x": 6, "y": 1},
{"matrix": [1, 8], "x": 7.25, "y": 1, "w": 2.5},
{"matrix": [1, 10], "x": 10, "y": 1},
{"matrix": [1, 11], "x": 11, "y": 1},
{"matrix": [1, 12], "x": 12, "y": 1},
{"matrix": [1, 13], "x": 13, "y": 1},
{"matrix": [1, 14], "x": 14, "y": 1},
{"matrix": [1, 15], "x": 15, "y": 1},
{"matrix": [1, 16], "x": 16, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
{"matrix": [2, 6], "x": 6, "y": 2, "h": 2},
{"matrix": [2, 7], "x": 7, "y": 2},
{"matrix": [2, 8], "x": 8, "y": 2},
{"matrix": [2, 9], "x": 9, "y": 2},
{"matrix": [2, 10], "x": 10, "y": 2, "h": 2},
{"matrix": [2, 11], "x": 11, "y": 2},
{"matrix": [2, 12], "x": 12, "y": 2},
{"matrix": [2, 13], "x": 13, "y": 2},
{"matrix": [2, 14], "x": 14, "y": 2},
{"matrix": [2, 15], "x": 15, "y": 2},
{"matrix": [2, 16], "x": 16, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
{"matrix": [3, 2], "x": 2, "y": 3},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3},
{"matrix": [3, 5], "x": 5, "y": 3},
{"matrix": [3, 7], "x": 7, "y": 3},
{"matrix": [3, 8], "x": 8, "y": 3},
{"matrix": [3, 9], "x": 9, "y": 3},
{"matrix": [3, 11], "x": 11, "y": 3},
{"matrix": [3, 12], "x": 12, "y": 3},
{"matrix": [3, 13], "x": 13, "y": 3},
{"matrix": [3, 14], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 15, "y": 3},
{"matrix": [3, 16], "x": 16, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4},
{"matrix": [4, 1], "x": 1, "y": 4},
{"matrix": [4, 2], "x": 2, "y": 4},
{"matrix": [4, 3], "x": 3, "y": 4},
{"matrix": [4, 5], "x": 4, "y": 4, "w": 2},
{"matrix": [4, 6], "x": 6, "y": 4, "h": 2},
{"matrix": [4, 10], "x": 10, "y": 4, "h": 2},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 2},
{"matrix": [4, 13], "x": 13, "y": 4},
{"matrix": [4, 14], "x": 14, "y": 4},
{"matrix": [4, 15], "x": 15, "y": 4},
{"matrix": [4, 16], "x": 16, "y": 4}
]
}
}
}

View File

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

View File

@@ -0,0 +1,18 @@
# epssp75
Ergonomic PSeudo SPlit 75-key Keyboard. Desinged after two years of working with a [Truly Ergonomic CLEAVE Keyboard](https://trulyergonomic.com) and also inspired by the [Redox Keyboard](https://github.com/mattdibi/redox-keyboard).
I am using and the [NOTED](https://neo-layout.org/Layouts/noted/) layout and the [ReNeo](https://neo-layout.org/Einrichtung/reneo/) software which offers additional possible key functions and layers.
* Keyboard Maintainer: [Henning Cordes](https://github.com/hen-des)
* Files: [https://github.com/hen-des/epssp75](https://github.com/hen-des/epssp75)
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
Detailed [description](https://hen-des.github.io/epssp75/index.html) and expiriences of the conception and manufacturing.
## Bootloader
Enter the bootloader in 2 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead

View File

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

View File

@@ -0,0 +1,70 @@
/* Copyright 2021 Richard Nunez <l.mateijsen@outlook.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#define KC_COPY LCTL(KC_C)
#define KC_CUT LCTL(KC_X)
#define KC_PSTE LCTL(KC_V)
#define KC_UNDO LCTL(KC_Z)
#define KC_AGIN LCTL(KC_Y)
enum layer_names {
_COLEMAKDH,
_QWERTY,
_NUMBERS,
_FUNCTIONAL,
_ADMIN
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_COLEMAKDH] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_B, XXXXXXX, XXXXXXX, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_G, XXXXXXX, XXXXXXX, KC_M, KC_N, KC_E, KC_I, KC_O, KC_BSPC,
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, XXXXXXX, XXXXXXX, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, MO(3), KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RGUI, XXXXXXX, KC_ENT
),
[_QWERTY] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_DEL,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, MO(3), KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RGUI, XXXXXXX, KC_ENT
),
[_NUMBERS] = LAYOUT(
KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_QUOT, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
_______, XXXXXXX, XXXXXXX, _______, MO(4), _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
),
[_FUNCTIONAL] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, KC_AGIN, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
_______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX
),
[_ADMIN] = LAYOUT(
QK_BOOT, DF(0), DF(1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
_______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
)
};

View File

@@ -0,0 +1,15 @@
# LuMaWing handwired
Custom handwired LuMaWing keyboard.
* Keyboard Maintainer: [Lucas Mateijsen](https://github.com/LucasMateijsen/)
* Hardware Supported: Handwired LuMaWing 14x4 ortho keyboard Pro-Micro
* Hardware Availability:
Make example for this keyboard (after setting up your build environment):
make handwired/ortho4x14:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
To get into the Bootloader, simply hold down the top-left key (pos 0, 0) and power the board.

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

@@ -0,0 +1,20 @@
/* Copyright 2025 Jeremy Cook Consulting LLC <info@jeremyscook.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* If you did not receive a copy of the GNU General Public License
* along with this program, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define OLED_DISPLAY_128X64
#define OLED_TIMEOUT 2000000

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

@@ -0,0 +1,46 @@
/* Copyright 2025 Jeremy Cook Consulting LLC <info@jeremyscook.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#ifdef OLED_ENABLE
static uint32_t logo_timer = 0;
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
logo_timer = timer_read();
return OLED_ROTATION_180;
}
static void render_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
};
oled_write_P(qmk_logo, false);
}
bool oled_task_kb(void) {
if (timer_elapsed32(logo_timer) < 1000) {
render_logo();
return false;
}
if (!oled_task_user()) {
return false;
}
return true;
}
#endif

View File

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

View File

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

View File

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

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

@@ -0,0 +1,27 @@
# jcpm2
![jcpm2](https://i.imgur.com/EM5JoGC.jpeg)
An 8-key macro pad with rotary encoder, RGB backlighting and underlighting. Made and sold by JCC LLC.
* Keyboard Maintainer: [jeremyscook](https://github.com/jeremyscook)
* Hardware Supported: JCPM2 PCB, Pro Micro
* Hardware Availability: [Tindie.com](https://www.tindie.com/products/25414)
Make example for this keyboard (after setting up your build environment):
make jcpm2:default
Flashing example for this keyboard:
make jcpm2:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the rotary encoder and plug in the keyboard
* **Physical reset button**: Double-click the small inside button on top of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

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

View File

@@ -0,0 +1,23 @@
/* Copyright 2023 @ Keychron(https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* I2C Driver Configuration */
#define I2C1_SCL_PIN B8
#define I2C1_SDA_PIN B9
#define I2C1_CLOCK_SPEED 400000
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,23 @@
# Lemokey X0
![Lemokey X0](https://i.imgur.com/ntROq41.jpeg)
A one-handed gaming keypad.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Lemokey X0
* Hardware Availability: [Keychron](https://www.lemokey.com/products/lemokey-x0-qmk-wired-mechanical-gaming-keypad)
Make example for this keyboard (after setting up your build environment):
make keychron/x0/red:default
Flashing example for this keyboard:
make keychron/x0/red:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
To enter the bootloader, hold down the key located at **K00**, labelled and commonly programmed as **Esc**, while plugging in the keyboard.

View File

@@ -0,0 +1,25 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifdef LED_MATRIX_ENABLE
# define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
# define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_6_CHANNEL
# define SNLED27351_CURRENT_TUNE \
{ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60 }
#endif

View File

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

View File

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

View File

@@ -0,0 +1,61 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#ifdef LED_MATRIX_ENABLE
// clang-format off
const snled27351_led_t PROGMEM g_snled27351_leds[LED_MATRIX_LED_COUNT] = {
/* Refer to SNLED27351 manual for these locations
* driver
* | LED address
* | | */
{0, CB6_CA1 },
{0, CB6_CA2 },
{0, CB6_CA3 },
{0, CB6_CA4 },
{0, CB6_CA5 },
{0, CB6_CA6 },
{0, CB5_CA1 },
{0, CB5_CA2 },
{0, CB5_CA3 },
{0, CB5_CA4 },
{0, CB5_CA5 },
{0, CB5_CA6 },
{0, CB5_CA7 },
{0, CB4_CA1 },
{0, CB4_CA2 },
{0, CB4_CA3 },
{0, CB4_CA4 },
{0, CB4_CA5 },
{0, CB4_CA6 },
{0, CB3_CA1 },
{0, CB3_CA2 },
{0, CB3_CA3 },
{0, CB3_CA4 },
{0, CB3_CA5 },
{0, CB3_CA6 },
{0, CB2_CA1 },
{0, CB2_CA3 },
{0, CB2_CA4 },
{0, CB2_CA5 },
{0, CB2_CA6 },
{0, CB1_CA1 },
{0, CB1_CA3 },
{0, CB1_CA4 },
{0, CB1_CA5 },
};
#endif

View File

@@ -201,6 +201,81 @@
{"matrix": [4, 13], "x":13.5, "y":4, "w":1.5}
]
},
"LAYOUT_1x2u": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0, "w":1.5},
{"matrix": [0, 1], "x":1.5, "y":0},
{"matrix": [0, 2], "x":2.5, "y":0},
{"matrix": [0, 3], "x":3.5, "y":0},
{"matrix": [0, 4], "x":4.5, "y":0},
{"matrix": [0, 5], "x":5.5, "y":0},
{"matrix": [0, 6], "x":6.5, "y":0},
{"matrix": [0, 7], "x":7.5, "y":0},
{"matrix": [0, 8], "x":8.5, "y":0},
{"matrix": [0, 9], "x":9.5, "y":0},
{"matrix": [0, 10], "x":10.5, "y":0},
{"matrix": [0, 11], "x":11.5, "y":0},
{"matrix": [0, 12], "x":12.5, "y":0},
{"matrix": [0, 13], "x":13.5, "y":0, "w":1.5},
{"matrix": [1, 0], "x":0, "y":1, "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, "h":1.5},
{"matrix": [1, 7], "x":7.5, "y":1, "h":1.5},
{"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.5},
{"matrix": [2, 1], "x":1.5, "y":2},
{"matrix": [2, 2], "x":2.5, "y":2},
{"matrix": [2, 3], "x":3.5, "y":2},
{"matrix": [2, 4], "x":4.5, "y":2},
{"matrix": [2, 5], "x":5.5, "y":2},
{"matrix": [2, 8], "x":8.5, "y":2},
{"matrix": [2, 9], "x":9.5, "y":2},
{"matrix": [2, 10], "x":10.5, "y":2},
{"matrix": [2, 11], "x":11.5, "y":2},
{"matrix": [2, 12], "x":12.5, "y":2},
{"matrix": [2, 13], "x":13.5, "y":2, "w":1.5},
{"matrix": [3, 0], "x":0, "y":3, "w":1.5},
{"matrix": [3, 1], "x":1.5, "y":3},
{"matrix": [3, 2], "x":2.5, "y":3},
{"matrix": [3, 3], "x":3.5, "y":3},
{"matrix": [3, 4], "x":4.5, "y":3},
{"matrix": [3, 5], "x":5.5, "y":3},
{"matrix": [3, 6], "x":6.5, "y":2.5, "h":1.5},
{"matrix": [3, 7], "x":7.5, "y":2.5, "h":1.5},
{"matrix": [3, 8], "x":8.5, "y":3},
{"matrix": [3, 9], "x":9.5, "y":3},
{"matrix": [3, 10], "x":10.5, "y":3},
{"matrix": [3, 11], "x":11.5, "y":3},
{"matrix": [3, 12], "x":12.5, "y":3},
{"matrix": [3, 13], "x":13.5, "y":3, "w":1.5},
{"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},
{"matrix": [4, 3], "x":3.5, "y":4},
{"matrix": [4, 4], "x":4.5, "y":4},
{"matrix": [4, 5], "x":5.5, "y":4},
{"matrix": [4, 6], "x":6.5, "y":4, "w":2},
{"matrix": [4, 8], "x":8.5, "y":4},
{"matrix": [4, 9], "x":9.5, "y":4},
{"matrix": [4, 10], "x":10.5, "y":4},
{"matrix": [4, 11], "x":11.5, "y":4},
{"matrix": [4, 12], "x":12.5, "y":4},
{"matrix": [4, 13], "x":13.5, "y":4, "w":1.5}
]
},
"LAYOUT_2x3u": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0, "w":1.5},

View File

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

View File

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

View File

@@ -0,0 +1,28 @@
/* Copyright 2025 mizma (@mizma)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// Make it easier to enter the bootloader
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
// UART1, communication between the two halves
#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode
#define SERIAL_USART_TX_PIN GP17 // USART TX pin
#define SERIAL_USART_RX_PIN GP18 // USART RX pin
#define SERIAL_PIO_USE_PIO1 // Use PIO1 as PIO0 is used for WS2812 driver

View File

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

View File

@@ -0,0 +1,126 @@
/* Copyright 2025 mizma (@mizma)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layer_names {
_QWERTY,
_GAMEMODE,
_LOWER,
_RAISE
};
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
#define GAMEM TG(_GAMEMODE)
#define EISU LALT(KC_GRV)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,------------------------------------------------. .------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LCTL | A | S | D | F | G | Del | | Ins | H | J | K | L | ; | ' |
* |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
* | LSFT | Z | X | C | V | B | | N | M | , | . | / | RSFT |
* |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
* | RM_DN| RM_UP| GAMEM| GUI | | | LALT | | RALT | | | HOME | END |PageUp|PageDn|
* .---------------------------. .------| Space|------| |------| Enter|------. .---------------------------.
* | Lower| | LSFT | | RCTL | | Raise|
* .--------------------. .--------------------.
*/
[_QWERTY] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_DEL , KC_INS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
RM_VALD, RM_VALU, GAMEM, KC_LGUI, LOWER, KC_SPC, KC_LSFT, KC_RCTL, KC_ENT, RAISE, KC_HOME, KC_END, KC_PGUP, KC_PGDN
),
/* Game Mode Toggle: sample toggle layer. turn off GUI key and add arrows
* ,------------------------------------------------. .------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
* | | | | | | | | | | | | | |
* |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
* | | | | NOOP | | | | | | | | ← | ↓ | ↑ | → |
* .---------------------------. .------| |------| |------| |------. .---------------------------.
* | | | | | | | |
* .--------------------. .--------------------.
*/
[_GAMEMODE] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_NO, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Lower: NUMPAD, App/Media keys and RGM Matrix
* ,------------------------------------------------. .------------------------------------------------.
* | ` | | | | | Mute | Vol- | | Vol+ | | NumL | / | * | - | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | | | | |RGBTGL| | BrDn | | BrUp | | 7 | 8 | 9 | + | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | CAPS | | |RM_HUD|RM_HUU| |RM_PRV| |RM_NXT| | 4 | 5 | 6 | , | |
* |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
* | | | |RM_SPD|RM_SPU| | | | 1 | 2 | 3 | = | |
* |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
* | | | | | | | | | | | | 0 | . | | |
* .---------------------------. .------| |------| |------| PENT |------. .---------------------------.
* | | | | | | | |
* .--------------------. .--------------------.
*/
[_LOWER] = LAYOUT(
KC_GRV, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, _______,
_______, _______, _______, _______, RM_TOGG, _______, KC_BRID, KC_BRIU, _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______,
KC_CAPS, _______, _______, RM_HUED, RM_HUEU, _______, RM_PREV, RM_NEXT, _______, KC_P4, KC_P5, KC_P6, KC_PCMM, _______,
_______, _______, _______, RM_SPDD, RM_SPDU, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PEQL, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_PENT, _______, KC_P0, KC_PDOT, _______, _______
),
/* Raise: Functions and Mouse
* ,------------------------------------------------. .------------------------------------------------.
* | ` | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | | | |WheelL|WheelR| | | | | | | Pause|ScrolL| PrnSc| F12 |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | CAPS | |Mouse3|Mouse2|Mouse1|WheelU| | | | ← | ↓ | ↑ | → | | |
* |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
* | |Accel0|Accel1|Accel2| |WheelD| |MouseL|MouseD|MouseU|MouseR| | |
* |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
* | | | | | | | | | | | | | | | |
* .---------------------------. .------| |------| |------| |------. .---------------------------.
* | | | | | | | |
* .--------------------. .--------------------.
*/
[_RAISE] = LAYOUT(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
_______, _______, _______, MS_WHLL, MS_WHLR, _______, _______, _______, _______, _______, KC_PAUS, KC_SCRL, KC_PSCR, KC_F12,
KC_CAPS, _______, MS_BTN3, MS_BTN2, MS_BTN1, MS_WHLU, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
_______, MS_ACL0, MS_ACL1, MS_ACL2, _______, MS_WHLD, _______, _______, MS_LEFT, MS_DOWN, MS_UP, MS_RGHT, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -20,6 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define AUDIO_VOICES
#define AUDIO_PIN C6
#define AUDIO_INIT_DELAY
/*
* Feature disable options
* These options are also useful to firmware size reduction.

View File

@@ -13,6 +13,7 @@ This is the modified version of [calculator by MWWorks](https://github.com/MWWor
Feel free to fix it! I think it needs to detect the precision of the two operands and then figure out what the precision of the result should be
*/
#include <math.h>
#include "rubi.h"
static uint8_t calc_current_operand = 0;

View File

@@ -217,34 +217,34 @@
{"matrix": [0, 8], "x": 80, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 104, "y": 0, "flags": 4},
{"matrix": [1, 4], "x": 16, "y": 13, "flags": 4},
{"matrix": [1, 4], "x": 0, "y": 13, "flags": 4},
{"matrix": [2, 4], "x": 20, "y": 13, "flags": 4},
{"matrix": [1, 5], "x": 32, "y": 13, "flags": 4},
{"matrix": [1, 6], "x": 48, "y": 13, "flags": 4},
{"matrix": [1, 7], "x": 64, "y": 13, "flags": 4},
{"matrix": [1, 8], "x": 80, "y": 13, "flags": 4},
{"matrix": [1, 9], "x": 96, "y": 13, "flags": 4},
{"matrix": [2, 4], "x": 0, "y": 13, "flags": 4},
{"matrix": [3, 4], "x": 0, "y": 26, "flags": 4},
{"matrix": [2, 5], "x": 20, "y": 26, "flags": 4},
{"matrix": [2, 6], "x": 36, "y": 26, "flags": 4},
{"matrix": [2, 7], "x": 52, "y": 26, "flags": 4},
{"matrix": [2, 8], "x": 68, "y": 26, "flags": 4},
{"matrix": [2, 9], "x": 84, "y": 26, "flags": 4},
{"matrix": [3, 4], "x": 0, "y": 26, "flags": 4},
{"matrix": [4, 4], "x": 0, "y": 39, "flags": 5},
{"matrix": [3, 5], "x": 24, "y": 39, "flags": 4},
{"matrix": [3, 6], "x": 40, "y": 39, "flags": 4},
{"matrix": [3, 7], "x": 56, "y": 39, "flags": 4},
{"matrix": [3, 8], "x": 72, "y": 39, "flags": 4},
{"matrix": [3, 9], "x": 88, "y": 39, "flags": 4},
{"matrix": [4, 4], "x": 0, "y": 39, "flags": 5},
{"matrix": [5, 4], "x": 0, "y": 51, "flags": 5},
{"matrix": [4, 5], "x": 28, "y": 51, "flags": 4},
{"matrix": [4, 6], "x": 44, "y": 51, "flags": 4},
{"matrix": [4, 7], "x": 60, "y": 51, "flags": 4},
{"matrix": [4, 8], "x": 76, "y": 51, "flags": 4},
{"matrix": [4, 9], "x": 92, "y": 51, "flags": 4},
{"matrix": [5, 4], "x": 0, "y": 51, "flags": 5},
{"matrix": [5, 5], "x": 0, "y": 64, "flags": 5},
{"matrix": [5, 6], "x": 20, "y": 64, "flags": 5},
@@ -274,6 +274,7 @@
{"matrix": [7, 8], "x": 220, "y": 13, "flags": 4},
{"matrix": [7, 9], "x": 224, "y": 13, "flags": 4},
{"matrix": [9, 0], "x": 100, "y": 26, "flags": 4},
{"matrix": [8, 0], "x": 116, "y": 26, "flags": 4},
{"matrix": [8, 1], "x": 132, "y": 26, "flags": 4},
{"matrix": [8, 2], "x": 148, "y": 26, "flags": 4},
@@ -284,23 +285,22 @@
{"matrix": [8, 7], "x": 216, "y": 26, "flags": 4},
{"matrix": [8, 8], "x": 220, "y": 26, "flags": 4},
{"matrix": [8, 9], "x": 224, "y": 26, "flags": 4},
{"matrix": [9, 0], "x": 100, "y": 26, "flags": 4},
{"matrix": [10, 0], "x": 104, "y": 39, "flags": 4},
{"matrix": [9, 1], "x": 120, "y": 39, "flags": 4},
{"matrix": [9, 2], "x": 136, "y": 39, "flags": 4},
{"matrix": [9, 3], "x": 152, "y": 39, "flags": 4},
{"matrix": [9, 4], "x": 168, "y": 39, "flags": 4},
{"matrix": [9, 5], "x": 184, "y": 39, "flags": 4},
{"matrix": [9, 6], "x": 200, "y": 39, "flags": 4},
{"matrix": [10, 0], "x": 104, "y": 39, "flags": 4},
{"matrix": [11, 0], "x": 108, "y": 51, "flags": 4},
{"matrix": [10, 1], "x": 124, "y": 51, "flags": 4},
{"matrix": [10, 2], "x": 140, "y": 51, "flags": 4},
{"matrix": [10, 3], "x": 156, "y": 51, "flags": 4},
{"matrix": [10, 4], "x": 172, "y": 51, "flags": 4},
{"matrix": [10, 6], "x": 188, "y": 51, "flags": 5},
{"matrix": [10, 8], "x": 216, "y": 51, "flags": 4},
{"matrix": [11, 0], "x": 108, "y": 51, "flags": 4},
{"matrix": [11, 1], "x": 118, "y": 64, "flags": 4},
{"matrix": [11, 3], "x": 144, "y": 64, "flags": 5},

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,115 @@
{
"manufacturer": "suikagiken",
"keyboard_name": "suika83opti",
"maintainer": "suikagiken",
"processor": "RP2040",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15"],
"rows": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP24"]
},
"url": "https://github.com/suikagiken/suika83opti",
"usb": {
"device_version": "1.0.0",
"vid": "0x4B48",
"pid": "0x0101"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0,0], "x": 0, "y": 0},
{"matrix": [0,1], "x": 1.5, "y": 0},
{"matrix": [0,2], "x": 2.5, "y": 0},
{"matrix": [0,3], "x": 3.5, "y": 0},
{"matrix": [0,4], "x": 4.5, "y": 0},
{"matrix": [0,5], "x": 7, "y": 0},
{"matrix": [0,6], "x": 8, "y": 0},
{"matrix": [0,8], "x": 9, "y": 0},
{"matrix": [0,9], "x": 10, "y": 0},
{"matrix": [0,10], "x": 12.75, "y": 0},
{"matrix": [0,11], "x": 13.75, "y": 0},
{"matrix": [0,12], "x": 14.75, "y": 0},
{"matrix": [0,13], "x": 15.75, "y": 0},
{"matrix": [0,15], "x": 17.25, "y": 0},
{"matrix": [1,0], "x": 0, "y": 1.5},
{"matrix": [1,1], "x": 1, "y": 1.5},
{"matrix": [1,2], "x": 2, "y": 1.5},
{"matrix": [1,3], "x": 3, "y": 1.5},
{"matrix": [1,4], "x": 4, "y": 1.5},
{"matrix": [1,5], "x": 5, "y": 1.5},
{"matrix": [1,6], "x": 6, "y": 1.5},
{"matrix": [1,7], "x": 8.5, "y": 1.5},
{"matrix": [1,9], "x": 11.5, "y": 1.5},
{"matrix": [1,10], "x": 12.5, "y": 1.5},
{"matrix": [1,11], "x": 13.5, "y": 1.5},
{"matrix": [1,12], "x": 14.5, "y": 1.5},
{"matrix": [1,13], "x": 15.5, "y": 1.5},
{"matrix": [1,15], "x": 17.25, "y": 1.5, "h": 1.5},
{"matrix": [2,0], "x": 0, "y": 2.5, "w": 1.5},
{"matrix": [2,1], "x": 1.5, "y": 2.5},
{"matrix": [2,2], "x": 2.5, "y": 2.5},
{"matrix": [2,3], "x": 3.5, "y": 2.5},
{"matrix": [2,4], "x": 4.5, "y": 2.5},
{"matrix": [2,5], "x": 5.5, "y": 2.5},
{"matrix": [2,7], "x": 8.5, "y": 2.5},
{"matrix": [2,9], "x": 11, "y": 2.5},
{"matrix": [2,10], "x": 12, "y": 2.5},
{"matrix": [2,11], "x": 13, "y": 2.5},
{"matrix": [2,12], "x": 14, "y": 2.5},
{"matrix": [2,13], "x": 15, "y": 2.5},
{"matrix": [2,14], "x": 16, "y": 2.5},
{"matrix": [3,0], "x": 0.25, "y": 3.5, "w": 1.5},
{"matrix": [3,1], "x": 1.75, "y": 3.5},
{"matrix": [3,2], "x": 2.75, "y": 3.5},
{"matrix": [3,3], "x": 3.75, "y": 3.5},
{"matrix": [3,4], "x": 4.75, "y": 3.5},
{"matrix": [3,5], "x": 5.75, "y": 3.5},
{"matrix": [3,6], "x": 8, "y": 3.5},
{"matrix": [3,8], "x": 9, "y": 3.5},
{"matrix": [3,9], "x": 11.25, "y": 3.5},
{"matrix": [3,10], "x": 12.25, "y": 3.5},
{"matrix": [3,11], "x": 13.25, "y": 3.5},
{"matrix": [3,12], "x": 14.25, "y": 3.5},
{"matrix": [3,13], "x": 15.25, "y": 3.5},
{"matrix": [3,14], "x": 16.25, "y": 3.5},
{"matrix": [3,15], "x": 17.25, "y": 3, "h": 1.5},
{"matrix": [4,0], "x": 0.75, "y": 4.5, "w": 1.5},
{"matrix": [4,1], "x": 2.25, "y": 4.5},
{"matrix": [4,2], "x": 3.25, "y": 4.5},
{"matrix": [4,3], "x": 4.25, "y": 4.5},
{"matrix": [4,4], "x": 5.25, "y": 4.5},
{"matrix": [4,5], "x": 6.25, "y": 4.5},
{"matrix": [4,7], "x": 8.5, "y": 4.5},
{"matrix": [4,9], "x": 10.75, "y": 4.5},
{"matrix": [4,10], "x": 11.75, "y": 4.5},
{"matrix": [4,11], "x": 12.75, "y": 4.5},
{"matrix": [4,12], "x": 13.75, "y": 4.5},
{"matrix": [4,13], "x": 14.75, "y": 4.5},
{"matrix": [4,14], "x": 15.75, "y": 4.5},
{"matrix": [4,15], "x": 16.75, "y": 4.5},
{"matrix": [5,0], "x": 1.25, "y": 5.5, "w": 1.5},
{"matrix": [5,1], "x": 2.75, "y": 5.5},
{"matrix": [5,2], "x": 3.75, "y": 5.5},
{"matrix": [5,3], "x": 4.75, "y": 5.5},
{"matrix": [5,4], "x": 5.75, "y": 5.5, "w": 1.5},
{"matrix": [5,6], "x": 7.5, "y": 5.5},
{"matrix": [5,7], "x": 8.5, "y": 5.5},
{"matrix": [5,8], "x": 9.5, "y": 5.5},
{"matrix": [5,9], "x": 10.75, "y": 5.5, "w": 1.5},
{"matrix": [5,10], "x": 12.25, "y": 5.5},
{"matrix": [5,11], "x": 13.25, "y": 5.5},
{"matrix": [5,12], "x": 14.25, "y": 5.5},
{"matrix": [5,13], "x": 15.25, "y": 5.5, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,24 @@
{
"author": "suikagiken",
"keyboard": "suikagiken/suika83opti",
"keymap": "default",
"layout": "LAYOUT",
"layers": [
[
"KC_ESC" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5" , "KC_F6" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11" , "KC_F12" , "KC_DEL" ,
"KC_GRV" , "KC_1" , "KC_2" , "KC_3" , "KC_4" , "KC_5" , "KC_6" , "KC_PSCR", "KC_7" , "KC_8" , "KC_9" , "KC_0" , "KC_MINS", "KC_BSPC",
"KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T" , "KC_EQL" , "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSLS",
"KC_CAPS", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G" , "KC_LBRC", "KC_RBRC", "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_UP" , "KC_B" , "KC_N" , "KC_M" , "KC_COMM", "KC_DOT" , "KC_SLSH", "KC_RSFT",
"KC_LCTL", "KC_LWIN", "KC_LOPT", "MO(1)" , "KC_SPC" , "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_SPC" , "MO(1)" , "KC_ROPT", "KC_APP" , "KC_RCTL"
],
[
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_HOME", "KC_PGDN", "KC_END" , "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
]
]
}

View File

@@ -0,0 +1,43 @@
# suika83opti
(English Follows Japanese)
## 概要
![suika83opti1](https://imgur.com/eJOI2Ax.jpg)
![suika83opti2](https://imgur.com/kVtW5gt.jpg)
suika83optiはロースタッガードの一体型エルゴキーボードです。
ファンクションキーや矢印キーなど、コンパクトキーボードでは省略されがちなキーも備えており、フルキーボードからの移行も容易です。
* 制作 : すいか技研 Website: https://suikagiken.net GitHub: [suikagiken](https://github.com/suikagiken)
* 販売 : すいか技研の[booth](https://suikagiken.booth.pm/)にて販売予定です
## ビルドガイド
[こちら](https://github.com/suikagiken/suika83opti/blob/main/buildguide_1.0.md)からご覧下さい。
---
## Overview
suika83opti is a row-staggered ergonomic keyboard with 85 keys. It has function keys or arrow keys, which are omitted in compact keyboards, making it easy to switch from a conventional full keyboard.
* Keyboard Maintainer: [suikagiken](https://github.com/suikagiken)
* Hardware Availability: Available at [booth](https://suikagiken.booth.pm/).
Make example for this keyboard (after setting up your build environment):
make suikagiken/suika83opti:default
Flashing example for this keyboard:
make suikagiken/suika83opti: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,73 @@
{
"manufacturer": "takashicompany",
"keyboard_name": "MirageiX",
"maintainer": "takashicompany",
"development_board": "promicro",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6"]
},
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0065",
"vid": "0x7463"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 1.25},
{"matrix": [1, 0], "x": 1, "y": 1.25},
{"matrix": [2, 0], "x": 2, "y": 0.25},
{"matrix": [3, 0], "x": 3, "y": 0},
{"matrix": [4, 0], "x": 4, "y": 0.25},
{"matrix": [5, 0], "x": 5, "y": 0.5},
{"matrix": [0, 3], "x": 8, "y": 0.5},
{"matrix": [1, 3], "x": 9, "y": 0.25},
{"matrix": [2, 3], "x": 10, "y": 0},
{"matrix": [3, 3], "x": 11, "y": 0.25},
{"matrix": [4, 3], "x": 12, "y": 1.25},
{"matrix": [5, 3], "x": 13, "y": 1.25},
{"matrix": [0, 1], "x": 0, "y": 2.25},
{"matrix": [1, 1], "x": 1, "y": 2.25},
{"matrix": [2, 1], "x": 2, "y": 1.25},
{"matrix": [3, 1], "x": 3, "y": 1},
{"matrix": [4, 1], "x": 4, "y": 1.25},
{"matrix": [5, 1], "x": 5, "y": 1.5},
{"matrix": [0, 4], "x": 8, "y": 1.5},
{"matrix": [1, 4], "x": 9, "y": 1.25},
{"matrix": [2, 4], "x": 10, "y": 1},
{"matrix": [3, 4], "x": 11, "y": 1.25},
{"matrix": [4, 4], "x": 12, "y": 2.25},
{"matrix": [5, 4], "x": 13, "y": 2.25},
{"matrix": [0, 2], "x": 0, "y": 3.25},
{"matrix": [1, 2], "x": 1, "y": 3.25},
{"matrix": [2, 2], "x": 2, "y": 2.25},
{"matrix": [3, 2], "x": 3, "y": 2},
{"matrix": [4, 2], "x": 4, "y": 2.25},
{"matrix": [5, 2], "x": 5, "y": 2.5},
{"matrix": [0, 5], "x": 8, "y": 2.5},
{"matrix": [1, 5], "x": 9, "y": 2.25},
{"matrix": [2, 5], "x": 10, "y": 2},
{"matrix": [3, 5], "x": 11, "y": 2.25},
{"matrix": [4, 5], "x": 12, "y": 3.25},
{"matrix": [5, 5], "x": 13, "y": 3.25},
{"matrix": [6, 0], "x": 2.5, "y": 4},
{"matrix": [6, 1], "x": 3.5, "y": 4},
{"matrix": [6, 2], "x": 4.5, "y": 4},
{"matrix": [6, 3], "x": 5.5, "y": 4},
{"matrix": [7, 2], "x": 7.5, "y": 4},
{"matrix": [7, 3], "x": 8.5, "y": 4},
{"matrix": [7, 4], "x": 9.5, "y": 4},
{"matrix": [7, 5], "x": 10.5, "y": 4}
]
}
}
}

View File

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

View File

@@ -0,0 +1,39 @@
# MirageiX
![takashicompany/mirageix](https://i.imgur.com/93krKWQ.jpeg)
MirageiX is a 44-key integrated keyboard.
The PCB has been trimmed to the limit to create a visual appearance in which only the keycaps seem to float.
By using a transparent acrylic case, you can enjoy a mirage-like keyboard expression.
The key layout is based on the TRON keyboard layout, making typing smoother than it looks.
Keyswitches are fixed with sockets, allowing easy replacement of keyswitches.
MirageiXは44キーの一体型キーボードです。
PCBを極限まで切り詰めたことでキーキャップのみが浮き出るようなビジュアルを実現しました。
透明なアクリルケースを用いることで蜃気楼のようなキーボード表現が楽しめます。
キー配列もTRONというキーボードの配置を参考にしているため、見た目以上にスムーズなタイピングを実現します。
キースイッチはソケットで固定されるため、キースイッチの交換を容易に行えます。
* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
* Hardware Supported: MirageiX PCB, Pro Micro
* Hardware Availability: https://github.com/takashicompany/mirageix
Make example for this keyboard (after setting up your build environment):
make takashicompany/mirageix:default
Flashing example for this keyboard:
make takashicompany/mirageix:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

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