Compare commits

...

95 Commits

Author SHA1 Message Date
Ryan Neff
28b2515a24
Merge fe0301349d into 9bea332a21 2024-11-20 22:22:13 -08:00
Ryan
9bea332a21
qmk via2json: Improve macro parsing (#24345) 2024-11-21 17:20:05 +11:00
Ryan
8cbcdcac62
qmk new-keymap: validate keymap name (#23420) 2024-11-21 17:18:51 +11:00
Ryan Neff
fe0301349d
Moves serial driver from rules.mk to info.json
Co-authored-by: Joel Challis <git@zvecr.com>
2024-10-17 15:50:24 -07:00
Ryan Neff
6545c21610 Removes unneded rules.mk
serial driver moving to json config
2024-10-17 15:49:22 -07:00
Ryan Neff
ea1a0c0bd3 Removes VIA-enabled keymap from Sofle Pico 2024-10-15 15:33:49 -07:00
Ryan Neff
847dbbd2e2 Merge branch 'master' of https://github.com/JellyTitan/qmk_firmware into sofle_pico 2024-07-04 10:04:19 -07:00
Ryan Neff
3d373075c1
fixes oled rotation default at the keyboard level.
Co-authored-by: jack <0x6a73@protonmail.com>
2024-04-08 16:31:02 -07:00
Ryan Neff
643b50d6b8
removes enabled mouse_key default
Co-authored-by: jack <0x6a73@protonmail.com>
2024-04-08 16:26:57 -07:00
Ryan Neff
0ce90e4336 Removed tri-layer-enable from via keymap
VIA enables this by default, so it is not needed
2024-03-31 16:27:42 -07:00
Ryan Neff
24462d2eda Removes ee_hands - letting master default to LH
Updates readme to remove LH/RH flashing
2024-03-31 16:20:28 -07:00
Ryan Neff
5c1383db29 Copies default keymap updates to VIA keymap 2024-03-29 13:51:28 -07:00
Ryan Neff
3a1a71d2c9 Cleans up keymap spacing 2024-03-29 13:50:42 -07:00
Ryan Neff
4986536181 Enables tri_layer feature 2024-03-29 13:42:27 -07:00
Ryan Neff
cad7282e28
Removed vestigial OLED logo timeout
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-03-29 13:28:38 -07:00
Ryan Neff
a011ffbcb0 Removes depricated copy/paste/cut/undo methods 2024-03-29 13:21:57 -07:00
Ryan Neff
c9da4b57ec Removes vestigial encoder map layer 2024-03-29 13:09:06 -07:00
Ryan Neff
b9f6310f87
Fixes lazy encoder formatting
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-03-29 12:59:24 -07:00
Ryan Neff
caf496ff0e
Removes keyboard level conditionals wrapping oled size, timeout, and others
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-03-29 12:57:04 -07:00
Ryan Neff
c03ff53b34
Moves layer state transport sync to json config
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-27 20:18:31 -07:00
Ryan Neff
0a210d5207
Removes extended layer count, and extra rgb config from keyboard level
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-27 20:17:01 -07:00
Ryan Neff
83d1fb70b4
Removes pointing device config at the keyboard level.
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-27 20:11:01 -07:00
Ryan Neff
fe281eca6c moves the OLED code from the default keymap to the keyboard level
Removes custom keycodes in default keymap and via
Updates keymap images in default keymap and via
Removes Colemak and extra Colemak toggle layer from default keymap and via
2024-03-27 20:04:04 -07:00
Ryan Neff
e98fd4a487 Removes user keymap 'default_jellytitan' 2024-03-27 19:59:57 -07:00
Ryan Neff
6336c2123a Standardizes make commands in readme 2024-03-25 17:11:19 -07:00
Ryan Neff
7d6a766960 Moves sofle pico keymap images to imgur 2024-03-25 17:03:37 -07:00
Ryan Neff
06a4bb914f Added ee_hands first flash instructions to README 2024-03-24 16:53:53 -07:00
Ryan Neff
97f950da7f
Simplifies flashing instructions to align with standards
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-24 16:47:58 -07:00
Ryan Neff
42d715a5ee
Turns off the LEDs when the host goes to sleep.
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-24 16:11:39 -07:00
Ryan Neff
bd2c950a86
Removes redundant encoder resolution
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-24 16:07:13 -07:00
Ryan Neff
abb10f160b
Removes redundant encoder resolution
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-24 16:06:59 -07:00
Ryan Neff
0891aa2410 Moved bootmagic config into info.json 2024-03-24 16:02:20 -07:00
Ryan Neff
4ca2cc25cf
Fixes sofle pico via keymap name in readme
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-24 15:54:58 -07:00
Ryan Neff
da01f24d05
Update keyboards/sofle_pico/info.json
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-24 15:51:08 -07:00
Ryan Neff
2cce3b8cb1 Fixes lint error 'Invalid keyboard level feature detected - encoder_map' 2024-03-24 15:47:42 -07:00
Ryan Neff
6c000cbeff
Merge branch 'qmk:master' into sofle_pico 2024-03-24 12:35:46 -07:00
Ryan Neff
a7c9965d39 Restores 'default' keymap in readme to align with qmk template guidelines 2024-03-24 12:29:16 -07:00
Ryan Neff
3539f6c983 Removed redundant comments 2024-03-24 12:27:29 -07:00
Ryan Neff
6d8b0862cc Updates readme to use 'via' keymap as default 2024-03-24 12:22:45 -07:00
Ryan Neff
c0e7f063c9 Fixes long comment styling 2024-03-24 12:00:59 -07:00
Ryan Neff
6d8cfe8133 Cleans up comments to use 'C' style 2024-03-24 11:55:40 -07:00
Ryan Neff
9b7a4be521 Fixed jellytitan oled line breaks 2024-03-24 11:31:41 -07:00
Ryan Neff
20e4c0874a Added uberrice submitted oled line wraps to default keymap
minor formatting cleanup
2024-03-24 11:06:45 -07:00
Ryan Neff
2e2a952125
Merge pull request #41 from uberrice/sofle_pico
fix issue of cpslk appearing on different lines in default and raise/…
2024-03-24 10:50:07 -07:00
uberrice
87a56ada10 fix issue of cpslk appearing on different lines in default and raise/lower modes 2024-03-23 07:42:46 +01:00
Ryan Neff
755f20e270 Fixed OLED rotation 2024-03-22 16:52:42 -07:00
Ryan Neff
dcbfbed919 Adds updated startup graphics to default Sofle Pico keymap 2024-03-22 16:35:14 -07:00
Ryan Neff
540f16a187 Fixes broken url in readme's 2024-03-14 13:45:18 -07:00
Ryan Neff
b9adb0e115 Fixed ascii keymaps mangled by clang 2024-02-20 17:40:44 -08:00
Ryan Neff
475bdeccfc Formatting cleanup 2024-02-20 17:21:20 -08:00
Ryan Neff
a93ba7e805 Updated sofle pico hero images 2024-02-20 16:30:30 -08:00
Ryan Neff
3273146037 Readme tweak 2024-02-20 16:16:10 -08:00
Ryan Neff
3899c212b4 qmk-json formatting applied
jellytitan keymaps relabeled as vendor default
updated license year
2024-02-20 15:49:16 -08:00
Ryan Neff
05c1c9155f Updated Sofle Pico name and url 2024-02-20 15:22:44 -08:00
Ryan Neff
53eab0aab8
Merge branch 'qmk:master' into sofle_pico 2024-02-20 14:53:37 -08:00
Ryan Neff
934ada8ee3 Updated default layer count to match classic Sofle 2024-01-05 13:12:37 -08:00
Ryan Neff
3da48b3fb9 Added via support for default 2024-01-02 17:19:08 -08:00
Ryan Neff
0629633da8 Reduced max brightness 2023-12-31 15:28:51 -08:00
Ryan Neff
461432b6fc Removed tapdance from default config and keymap 2023-12-14 14:59:44 -08:00
Ryan Neff
c8fd1299cd Default keymap matches legacy sofle
Added via support (not tested yet)
2023-12-14 14:53:09 -08:00
Ryan Neff
a43c4088d1 Merge branch 'master' of https://github.com/JellyTitan/qmk_firmware into sofle_pico 2023-12-14 11:30:31 -08:00
Ryan Neff
36bc366699
Removed animation default 'on' 2023-12-13 14:24:21 -08:00
Ryan Neff
bbfdde98bd
Update readme.md 2023-12-13 14:23:24 -08:00
Ryan Neff
567bfe884d
Update readme.md 2023-12-13 14:21:02 -08:00
Ryan Neff
2162f101cd
Update readme.md image link 2023-12-13 14:20:47 -08:00
Ryan Neff
867ebcaf5e Added QMK & Via logo to RH startup OLED 2023-12-05 19:28:21 -08:00
Ryan Neff
63d4abeb85 Fixed OLED logo timeout bug
Updated Sofle Pico OLED logo
Added Sofle Pico OLED attributation and build data
2023-12-05 17:51:13 -08:00
Ryan Neff
4f2024ab6e Maxed out max brightness 2023-12-01 10:12:37 -08:00
Ryan Neff
b56fb64e6e Added via files (not yet working) 2023-11-30 17:04:15 -08:00
Ryan Neff
2254ebd3c8 Moved heatmap animations to json config
Updated attribution comments
2023-11-30 15:36:52 -08:00
Ryan Neff
90fedbc5be Adds 'bootmagic' feature
Validated this is working as expected
2023-11-30 09:59:15 -08:00
Ryan Neff
cb66ad3da8 Updated json layout labels to match legacy sofle defaults 2023-11-30 09:39:02 -08:00
Ryan Neff
f826eccd73 Fixed switched RH thumb keys 2023-11-30 09:26:33 -08:00
Ryan Neff
e3454a3956 Added rgb_matrix animations and defaults to json config 2023-11-29 16:48:39 -08:00
Ryan Neff
5479c27175 Removed duplicated rgb_matrix config 2023-11-29 16:34:35 -08:00
Ryan Neff
e479049283 Moved SPLIT_KEYBOARD setting from rules to .json 2023-11-29 16:06:40 -08:00
Ryan Neff
161b8f5c8d Wipes OLED after startup logo 2023-11-29 13:30:30 -08:00
Ryan Neff
67753d72e9 Shows logo on startup for 5 seconds 2023-11-29 13:10:13 -08:00
Ryan Neff
86e8ae126d Removed OLED transport config rule
It was redundant because it uses default transport I2C
2023-11-28 16:22:21 -08:00
Ryan Neff
73b8a65aca Moved most of rules.mk to info.json
Removed bootmagic
2023-11-28 16:17:04 -08:00
Ryan Neff
3749d07bd3 Removed rev1 folder and duplicate rules 2023-11-28 15:44:07 -08:00
Ryan Neff
d19f4fc531 Removed swap hands 2023-11-28 15:13:03 -08:00
Ryan Neff
fbd7c8cb16 Updated hex for vid (JT) and pid (SP) 2023-11-26 17:29:36 -08:00
Ryan Neff
b741ec9115 Changed layout config name from LAYOUT_split4x6_r1 to LAYOUT 2023-11-26 16:55:43 -08:00
Ryan Neff
371850c889 Moved tapping term speed to json
Added search 'tags'
added comma after mouse config in json
2023-11-25 14:59:17 -08:00
Ryan Neff
dfe3646dd7 Moved mouse config to .json 2023-11-25 14:43:28 -08:00
Ryan Neff
3736ac34d5 Added max_brightness to rgb_matrix
bumped version
2023-11-25 14:34:33 -08:00
Ryan Neff
7cb58756ce Fixed switched row/column config 2023-11-25 14:18:51 -08:00
Ryan Neff
2f5e18d587 Move matrix_pins into info.json 2023-10-19 14:34:45 -07:00
Ryan Neff
0ca4c65fd9 Sofle Pico 'default' keymap created/fixed
Based on the sofle_choc Brian Low default
2023-10-19 11:59:36 -07:00
Ryan Neff
edd4f42337 Renamed sofle_v303 to sofle_pico
Removed Deluxe keymap from Junco
2023-10-19 11:47:55 -07:00
Ryan Neff
0b1495f2a0 Fixed RH pimaroni config bug 2023-10-02 16:52:40 -07:00
Ryan Neff
1bc1ecd721 Added RH trackball 2023-10-01 16:58:07 -07:00
Ryan Neff
97e6b96808 fixed sofle pico build process 2023-10-01 16:38:57 -07:00
Ryan Neff
f417e42250 Sofle pico first commit 2023-10-01 15:44:40 -07:00
10 changed files with 505 additions and 9 deletions

View File

@ -0,0 +1,23 @@
// Copyright 2024 Ryan Neff (@JellyTitan)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* Use full duplex communication (TRRS) */
#define SERIAL_USART_FULL_DUPLEX
#define SERIAL_USART_TX_PIN GP16
#define SERIAL_USART_RX_PIN GP17
/* Swap TX and RX pins if keyboard is master half. Only available on some MCU's. This _is_ available on the RP2040 */
#define SERIAL_USART_PIN_SWAP
/* I2C for OLEDs */
#define I2C_DRIVER I2CD1
#define I2C1_SDA_PIN GP6
#define I2C1_SCL_PIN GP7
#define OLED_DISPLAY_128X64
#define OLED_TIMEOUT 30000
#define ENCODER_MAP_KEY_DELAY 10
#define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 50

View File

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

View File

@ -0,0 +1,251 @@
{
"manufacturer": "Ryan Neff",
"keyboard_name": "Sofle Pico",
"maintainer": "Ryan Neff <github@JellyTitan.com>",
"bootloader": "rp2040",
"bootloader_instructions": "Hold the BOOT button while plugging in the usb cable",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP14", "pin_b": "GP15"}
]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"dynamic_tapping_term": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"oled": true,
"rgb_matrix": true,
"wpm": true
},
"matrix_pins": {
"cols": ["GP1", "GP2", "GP3", "GP4", "GP5", "GP8"],
"rows": ["GP9", "GP10", "GP11", "GP12", "GP13"]
},
"mouse_key": {
"delay": 10,
"interval": 16,
"max_speed": 2,
"time_to_max": 40
},
"processor": "RP2040",
"rgb_matrix": {
"sleep": true,
"animations": {
"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_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": "cycle_out_in",
"speed": 16
},
"driver": "ws2812",
"layout": [
{"matrix": [0, 5], "x": 95, "y": 7, "flags": 4},
{"matrix": [1, 5], "x": 95, "y": 21, "flags": 4},
{"matrix": [2, 5], "x": 95, "y": 36, "flags": 4},
{"matrix": [3, 5], "x": 95, "y": 50, "flags": 4},
{"matrix": [4, 4], "x": 115, "y": 64, "flags": 4},
{"matrix": [4, 3], "x": 95, "y": 64, "flags": 4},
{"matrix": [4, 2], "x": 76, "y": 62, "flags": 4},
{"matrix": [3, 4], "x": 76, "y": 48, "flags": 4},
{"matrix": [2, 4], "x": 76, "y": 33, "flags": 4},
{"matrix": [1, 4], "x": 76, "y": 19, "flags": 4},
{"matrix": [0, 4], "x": 76, "y": 5, "flags": 4},
{"matrix": [0, 3], "x": 57, "y": 3, "flags": 4},
{"matrix": [1, 3], "x": 57, "y": 17, "flags": 4},
{"matrix": [2, 3], "x": 57, "y": 31, "flags": 4},
{"matrix": [3, 3], "x": 57, "y": 46, "flags": 4},
{"matrix": [4, 1], "x": 57, "y": 62, "flags": 4},
{"matrix": [4, 0], "x": 38, "y": 64, "flags": 4},
{"matrix": [3, 2], "x": 38, "y": 48, "flags": 4},
{"matrix": [2, 2], "x": 38, "y": 33, "flags": 4},
{"matrix": [1, 2], "x": 38, "y": 19, "flags": 4},
{"matrix": [0, 2], "x": 38, "y": 5, "flags": 4},
{"matrix": [0, 1], "x": 19, "y": 7, "flags": 4},
{"matrix": [1, 1], "x": 19, "y": 21, "flags": 4},
{"matrix": [2, 1], "x": 19, "y": 36, "flags": 4},
{"matrix": [3, 1], "x": 19, "y": 50, "flags": 4},
{"matrix": [3, 0], "x": 0, "y": 50, "flags": 4},
{"matrix": [2, 0], "x": 0, "y": 36, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 21, "flags": 4},
{"matrix": [0, 0], "x": 0, "y": 7, "flags": 4},
{"matrix": [5, 5], "x": 129, "y": 7, "flags": 4},
{"matrix": [6, 5], "x": 129, "y": 21, "flags": 4},
{"matrix": [7, 5], "x": 129, "y": 36, "flags": 4},
{"matrix": [8, 5], "x": 129, "y": 50, "flags": 4},
{"matrix": [9, 4], "x": 119, "y": 64, "flags": 4},
{"matrix": [9, 3], "x": 129, "y": 64, "flags": 4},
{"matrix": [9, 2], "x": 148, "y": 62, "flags": 4},
{"matrix": [8, 4], "x": 148, "y": 48, "flags": 4},
{"matrix": [7, 4], "x": 148, "y": 33, "flags": 4},
{"matrix": [6, 4], "x": 148, "y": 19, "flags": 4},
{"matrix": [5, 4], "x": 148, "y": 5, "flags": 4},
{"matrix": [5, 3], "x": 167, "y": 3, "flags": 4},
{"matrix": [6, 3], "x": 167, "y": 17, "flags": 4},
{"matrix": [7, 3], "x": 167, "y": 31, "flags": 4},
{"matrix": [8, 3], "x": 167, "y": 46, "flags": 4},
{"matrix": [9, 1], "x": 167, "y": 62, "flags": 4},
{"matrix": [9, 0], "x": 186, "y": 64, "flags": 4},
{"matrix": [8, 2], "x": 186, "y": 48, "flags": 4},
{"matrix": [7, 2], "x": 186, "y": 33, "flags": 4},
{"matrix": [6, 2], "x": 186, "y": 19, "flags": 4},
{"matrix": [5, 2], "x": 186, "y": 5, "flags": 4},
{"matrix": [5, 1], "x": 209, "y": 7, "flags": 4},
{"matrix": [6, 1], "x": 209, "y": 21, "flags": 4},
{"matrix": [7, 1], "x": 209, "y": 36, "flags": 4},
{"matrix": [8, 1], "x": 209, "y": 50, "flags": 4},
{"matrix": [8, 0], "x": 224, "y": 50, "flags": 4},
{"matrix": [7, 0], "x": 224, "y": 36, "flags": 4},
{"matrix": [6, 0], "x": 224, "y": 21, "flags": 4},
{"matrix": [5, 0], "x": 224, "y": 7, "flags": 4}
],
"max_brightness": 127,
"split_count": [29, 29]
},
"split": {
"enabled": true,
"bootmagic": {
"matrix": [5, 0]
},
"encoder": {
"right": {
"rotary": [
{"pin_a": "GP14", "pin_b": "GP15"}
]
}
},
"serial": {
"driver": "vendor"
},
"transport": {
"sync": {
"layer_state": true
}
}
},
"tags": ["ortho", "split", "rgb", "encoder", "OLED", "128x64", "tenting_puck"],
"tapping": {
"term": 210
},
"url": "https://github.com/JellyTitan/Sofle-Pico",
"usb": {
"device_version": "3.5.4",
"pid": "0x5350",
"vid": "0x4A54"
},
"ws2812": {
"driver": "vendor",
"pin": "GP0"
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "`", "matrix": [0, 0], "x": 0, "y": 0.7},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0.7},
{"label": "2", "matrix": [0, 2], "x": 2, "y": 0.3},
{"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "4", "matrix": [0, 4], "x": 4, "y": 0.3},
{"label": "5", "matrix": [0, 5], "x": 5, "y": 0.45},
{"label": "6", "matrix": [5, 5], "x": 9, "y": 0.45},
{"label": "7", "matrix": [5, 4], "x": 10, "y": 0.3},
{"label": "8", "matrix": [5, 3], "x": 11, "y": 0},
{"label": "9", "matrix": [5, 2], "x": 12, "y": 0.3},
{"label": "0", "matrix": [5, 1], "x": 13, "y": 0.7},
{"label": "`", "matrix": [5, 0], "x": 14, "y": 0.7},
{"label": "Esc", "matrix": [1, 0], "x": 0, "y": 1.7},
{"label": "Q", "matrix": [1, 1], "x": 1, "y": 1.7},
{"label": "W", "matrix": [1, 2], "x": 2, "y": 1.3},
{"label": "E", "matrix": [1, 3], "x": 3, "y": 1},
{"label": "R", "matrix": [1, 4], "x": 4, "y": 1.3},
{"label": "T", "matrix": [1, 5], "x": 5, "y": 1.45},
{"label": "Y", "matrix": [6, 5], "x": 9, "y": 1.45},
{"label": "U", "matrix": [6, 4], "x": 10, "y": 1.3},
{"label": "I", "matrix": [6, 3], "x": 11, "y": 1},
{"label": "O", "matrix": [6, 2], "x": 12, "y": 1.3},
{"label": "P", "matrix": [6, 1], "x": 13, "y": 1.7},
{"label": "Bspc", "matrix": [6, 0], "x": 14, "y": 1.7},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.7},
{"label": "A", "matrix": [2, 1], "x": 1, "y": 2.7},
{"label": "S", "matrix": [2, 2], "x": 2, "y": 2.3},
{"label": "D", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "F", "matrix": [2, 4], "x": 4, "y": 2.3},
{"label": "G", "matrix": [2, 5], "x": 5, "y": 2.45},
{"label": "H", "matrix": [7, 5], "x": 9, "y": 2.45},
{"label": "J", "matrix": [7, 4], "x": 10, "y": 2.3},
{"label": "K", "matrix": [7, 3], "x": 11, "y": 2},
{"label": "L", "matrix": [7, 2], "x": 12, "y": 2.3},
{"label": ";", "matrix": [7, 1], "x": 13, "y": 2.7},
{"label": "'", "matrix": [7, 0], "x": 14, "y": 2.7},
{"label": "LShift", "matrix": [3, 0], "x": 0, "y": 3.7},
{"label": "Z", "matrix": [3, 1], "x": 1, "y": 3.7},
{"label": "X", "matrix": [3, 2], "x": 2, "y": 3.3},
{"label": "C", "matrix": [3, 3], "x": 3, "y": 3},
{"label": "V", "matrix": [3, 4], "x": 4, "y": 3.3},
{"label": "B", "matrix": [3, 5], "x": 5, "y": 3.45},
{"label": "Mute", "matrix": [4, 5], "x": 6.2, "y": 3.45},
{"label": "Pause", "matrix": [9, 5], "x": 7.8, "y": 3.45},
{"label": "N", "matrix": [8, 5], "x": 9, "y": 3.45},
{"label": "M", "matrix": [8, 4], "x": 10, "y": 3.3},
{"label": ",", "matrix": [8, 3], "x": 11, "y": 3},
{"label": ".", "matrix": [8, 2], "x": 12, "y": 3.3},
{"label": "/", "matrix": [8, 1], "x": 13, "y": 3.7},
{"label": "RShift", "matrix": [8, 0], "x": 14, "y": 3.7},
{"label": "LCtrl", "matrix": [4, 0], "x": 2, "y": 4.3},
{"label": "LGUI", "matrix": [4, 1], "x": 3, "y": 4},
{"label": "LCmnd", "matrix": [4, 2], "x": 4, "y": 4.3},
{"label": "LAlt", "matrix": [4, 3], "x": 5.1, "y": 4.5, "h": 1.5},
{"label": "Enter", "matrix": [4, 4], "x": 6.1, "y": 4.5, "h": 1.5},
{"label": "Space", "matrix": [9, 4], "x": 7.9, "y": 4.5, "h": 1.5},
{"label": "RAlt", "matrix": [9, 3], "x": 8.9, "y": 4.5, "h": 1.5},
{"label": "RCmnd", "matrix": [9, 2], "x": 10, "y": 4.3},
{"label": "RGui", "matrix": [9, 1], "x": 11, "y": 4},
{"label": "RCtrl", "matrix": [9, 0], "x": 12, "y": 4.3}
]
}
}
}

View File

@ -0,0 +1,111 @@
// Copyright 2024 Ryan Neff (@JellyTitan)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum sofle_layers {
_QWERTY,
_LOWER,
_RAISE,
_ADJUST,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
/*
* QWERTY
* ,-----------------------------------------. ,-----------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
* |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_QWERTY] = LAYOUT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
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, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LGUI, KC_LALT, KC_LCTL, TL_LOWR, KC_ENT, KC_SPC , TL_UPPR, KC_RCTL, KC_RALT, KC_RGUI
),
/* LOWER
* ,-----------------------------------------. ,-----------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | |
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
* | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_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_F12,
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
_______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* 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_PGUP, XXXXXXX, KC_UP , XXXXXXX, XXXXXXX, KC_BSPC,
_______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL , KC_BSPC,
_______, C(KC_Z), C(KC_X), C(KC_C), C(KC_V), XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* ADJUST
* ,-----------------------------------------. ,-----------------------------------------.
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* |QK_BOOT| | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | |MACWIN| | | |-------. ,-------| | VOLDO| MUTE | VOLUP| | |
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
* | | | | | | |-------| |-------| | PREV | PLAY | NEXT | | |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[_ADJUST] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[1] = {ENCODER_CCW_CW(KC_PGUP, KC_PGDN)},
[2] = {ENCODER_CCW_CW(_______, _______)},
[3] = {ENCODER_CCW_CW(_______, _______)},
};
#endif

View File

@ -0,0 +1,10 @@
![SofleKeyboard default keymap](https://i.imgur.com/MZxVvm9.png)
![SofleKeyboard adjust layer](https://i.imgur.com/f5sKy0I.png)
# Default keymap for Sofle Pico Keyboard
Adapted from the classic Sofle Keyboard by Josef Adamcik.
Simplified to serve as a starting point for further customizations.
Layout in [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/gists/76efb423a46cbbea75465cb468eef7ff)
Left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN.

View File

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

View File

@ -0,0 +1,33 @@
# Sofle Pico Keyboard
![Sofle Pico](https://raw.githubusercontent.com/JellyTitan/Sofle-Pico/main/docs/images/qmk/sofle_pico_hero_image.jpeg)
![Sofle Pico PCB](https://raw.githubusercontent.com/JellyTitan/Sofle-Pico/main/docs/images/qmk/sofle_pico_pcb_hero_image.jpeg)
Sofle Pico is a 60% Raspberry Pi Pico powered split keyboard boasting a 4x6 layout with an aggressive columnar stagger. It has 5 "thumb" keys on either side, support for 2-4 rotary encoders, per-key RGB lighting, 128x64 OLEDs and a tenting puck mount.
- Keyboard Maintainer: [Ryan Neff](https://github.com/JellyTitan)
- Hardware Supported: Sofle Pico PCB v3.5.x, Raspberry Pi Pico
- Hardware Availability: [PCB, Case, Parts List](https://github.com/JellyTitan/Sofle-Pico)
Remember you have to flash both halves of the keyboard for it to work!
Make example for this keyboard (after setting up your build environment):
make sofle_pico:default
Flashing example for this keyboard:
make sofle_pico: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** (works after you have flashed once): Hold down the top far corner key while plugging in the keyboard (`~` left half, `-` right half). This will also clear the EEPROM.
- **Physical reset button**: Hold the `BOOT` button on the Pico and press the `RST` button on the Pico, release the the `RST` button before the `BOOT` button.
- **Keycode in layout**: In the default layout, the `Bootloader` keycode is above home row pinky on the right side's adjust layer.
Once you enter the bootloader, the keyboard will show up as a USB device on your computer, you could drag and drop a `.uf2` firmware file to flash it.
[Keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/2fa0527caf2f6e527e4f46787a74a9d2)

View File

@ -0,0 +1,32 @@
// Copyright 2024 Ryan Neff (@JellyTitan)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
#ifdef OLED_ENABLE
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
return OLED_ROTATION_90;
}
static void render_logo(void) {
static const char PROGMEM sofle_pico_logo[] = {
0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0x70, 0xf0, 0xf0, 0xe0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf8, 0xfc, 0x3c, 0x3c, 0x3c, 0x7c, 0xf8, 0xf8, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1f, 0x3f, 0x3f, 0x3f, 0x7c, 0x78, 0xf8, 0xf8, 0xf0, 0xe0, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xfc, 0x3c, 0x1c, 0x1e, 0x1e, 0x3c, 0xfc, 0xf8, 0xf0, 0xc0, 0x00, 0x1c, 0x1c, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x1c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xfc, 0xfc, 0xce, 0xce, 0xce, 0xdc, 0xfc, 0xfc, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1e, 0x1e, 0x1e, 0x3c, 0x3c, 0x3c, 0x3e, 0x1f, 0x1f, 0x0f, 0x07, 0x01, 0x00, 0x01, 0x07,
0x0f, 0x1f, 0x1e, 0x3c, 0x3c, 0x3c, 0x1e, 0x1f, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x01, 0x07, 0x0f, 0x1f, 0x1f, 0x3c, 0x38, 0x38, 0x3c, 0x1c, 0x1c, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x0e, 0x9e, 0xfc, 0xf8, 0x00, 0x00, 0x8e, 0x8e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7c, 0xfe, 0xff, 0x83, 0x01, 0x01, 0x01, 0x83, 0x83, 0x00, 0x00, 0x7e, 0xff, 0xc7, 0x83, 0x01, 0x01, 0x01,
0x83, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc3, 0xe3, 0xe0, 0xe0, 0xe0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x30, 0x33, 0x73, 0xe0, 0x60, 0xe0, 0xe0, 0xc0, 0xc1, 0x83, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x70, 0x30, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1f, 0xff, 0xf8, 0xd0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x20, 0x40, 0xc0, 0x80, 0x00, 0x01, 0x87, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xff, 0xff, 0x03, 0x01, 0x00, 0x80, 0xc0, 0x40, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xf0, 0xf8, 0x7f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x1c, 0x1c, 0x38, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x38, 0x39, 0xdf, 0xef, 0xf7, 0x7b, 0x39, 0x1c, 0x1c, 0x0e, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x1e, 0x1c, 0x3c, 0x79, 0xfb, 0xf7, 0xef, 0x9f, 0x38, 0x30, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x38, 0x3c, 0x1c, 0x0f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfc, 0x7e, 0x7f, 0xff, 0xff, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xff, 0x7f, 0x7f, 0x3f, 0x7c, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xff, 0xfe, 0x7c, 0x78, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x78, 0x78, 0x7c, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x0e, 0x1e, 0x3f, 0x7f, 0xf1, 0xe0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xe1, 0xf3, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
oled_write_raw_P(sofle_pico_logo, sizeof(sofle_pico_logo));
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
render_logo();
return false;
}
#endif

View File

@ -1,5 +1,6 @@
"""This script automates the copying of the default keymap into your own keymap.
"""
import re
import shutil
from milc import cli
@ -13,6 +14,13 @@ from qmk.keyboard import keyboard_completer, keyboard_folder
from qmk.userspace import UserspaceDefs
def validate_keymap_name(name):
"""Returns True if the given keymap name contains only a-z, 0-9 and underscore characters.
"""
regex = re.compile(r'^[a-zA-Z0-9][a-zA-Z0-9_]+$')
return bool(regex.match(name))
def prompt_keyboard():
prompt = """{fg_yellow}Select Keyboard{style_reset_all}
If you`re unsure you can view a full list of supported keyboards with {fg_yellow}qmk list-keyboards{style_reset_all}.
@ -60,6 +68,10 @@ def new_keymap(cli):
cli.log.error(f'Default keymap {{fg_cyan}}{keymap_path_default}{{fg_reset}} does not exist!')
return False
if not validate_keymap_name(user_name):
cli.log.error('Keymap names must contain only {fg_cyan}a-z{fg_reset}, {fg_cyan}0-9{fg_reset} and {fg_cyan}_{fg_reset}! Please choose a different name.')
return False
if keymap_path_new.exists():
cli.log.error(f'Keymap {{fg_cyan}}{user_name}{{fg_reset}} already exists! Please choose a different name.')
return False

View File

@ -29,6 +29,7 @@ def _convert_macros(via_macros):
if len(via_macros) == 0:
return list()
split_regex = re.compile(r'(}\,)|(\,{)')
macro_group_regex = re.compile(r'({.+?})')
macros = list()
for via_macro in via_macros:
# Split VIA macro to its elements
@ -38,13 +39,28 @@ def _convert_macros(via_macros):
macro_data = list()
for m in macro:
if '{' in m or '}' in m:
# Found keycode(s)
keycodes = m.split(',')
# Remove whitespaces and curly braces from around keycodes
keycodes = list(map(lambda s: s.strip(' {}'), keycodes))
# Remove the KC prefix
keycodes = list(map(lambda s: s.replace('KC_', ''), keycodes))
macro_data.append({"action": "tap", "keycodes": keycodes})
# Split macro groups
macro_groups = macro_group_regex.findall(m)
for macro_group in macro_groups:
# Remove whitespaces and curly braces from around group
macro_group = macro_group.strip(' {}')
macro_action = 'tap'
macro_keycodes = []
if macro_group[0] == '+':
macro_action = 'down'
macro_keycodes.append(macro_group[1:])
elif macro_group[0] == '-':
macro_action = 'up'
macro_keycodes.append(macro_group[1:])
else:
macro_keycodes.extend(macro_group.split(',') if ',' in macro_group else [macro_group])
# Remove the KC prefixes
macro_keycodes = list(map(lambda s: s.replace('KC_', ''), macro_keycodes))
macro_data.append({"action": macro_action, "keycodes": macro_keycodes})
else:
# Found text
macro_data.append(m)
@ -54,13 +70,13 @@ def _convert_macros(via_macros):
def _fix_macro_keys(keymap_data):
macro_no = re.compile(r'MACRO0?([0-9]{1,2})')
macro_no = re.compile(r'MACRO0?\(([0-9]{1,2})\)')
for i in range(0, len(keymap_data)):
for j in range(0, len(keymap_data[i])):
kc = keymap_data[i][j]
m = macro_no.match(kc)
if m:
keymap_data[i][j] = f'MACRO_{m.group(1)}'
keymap_data[i][j] = f'MC_{m.group(1)}'
return keymap_data