commit 9d21b8ff1e46e685636d4584fa5003e83d73e76a Author: afiqzudinhadi Date: Wed Jun 24 17:41:09 2026 +0800 Init: Corne-only zmk-config Extracted from zmk-config-archive (multi-board repo). Corne 42-key with nice_nano_v2, nice_oled, RGB, ZMK Studio, Javelin steno. diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b2b33d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.dtsi linguist-language=C++ +*.keymap linguist-language=C++ diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..5e907b1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,5 @@ +on: [push, pull_request, workflow_dispatch] + +jobs: + build: + uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@v0.3.0 diff --git a/.github/workflows/keymap-drawer.yaml b/.github/workflows/keymap-drawer.yaml new file mode 100644 index 0000000..af063d6 --- /dev/null +++ b/.github/workflows/keymap-drawer.yaml @@ -0,0 +1,25 @@ +# keymap -c config/config_keymap-drawer.yaml parse -c 12 -z config/corne.keymap > keymap-drawer/corne.yaml +# keymap -c config/config_keymap-drawer.yaml draw keymap-drawer/corne.yaml > keymap-drawer/corne.svg + +# Example for using the keymap-drawer ZMK user config workflow +name: Draw ZMK keymaps +on: + workflow_dispatch: # can be triggered manually + push: # automatically run on changes to following paths + paths: + - "config/*.keymap" + - "config/config_keymap-drawer.yaml" + - .github/workflows/keymap-drawer.yaml + +jobs: + draw: + uses: caksoylar/keymap-drawer/.github/workflows/draw-zmk.yml@main + permissions: + contents: write # allow workflow to commit to the repo + with: + amend_commit: true + keymap_patterns: "config/*.keymap" # path to the keymaps to parse + config_path: "config/config_keymap-drawer.yaml" # config file, ignored if not exists + output_folder: "keymap-drawer" # path to save produced SVG and keymap YAML files + parse_args: "" # map of extra args to pass to `keymap parse`, e.g. "corne:'-l Def Lwr Rse' cradio:''" + draw_args: "" # map of extra args to pass to `keymap draw`, e.g. "corne:'-k corne_rotated' cradio:'-k paroxysm'" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d646be4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,91 @@ +# zmk +zmk/ + +# sketchybar +sketchybar/dotfiles/ +sketchybar/dotfiles +sketchybar/dotfiles/* + +# MacOS +.DS_Store +vim-tools_notiz.vim +.DS_Store +./*/.DS_Store +.vscode +# .vimspector.json +push.sh +/test +test/ + +# c, cpp +*.x +*.d +*.dSYM +*.o +*.out + +# firmware build output +*.uf2 +*.hex +*.bin + +# log +*.log + +# cache +*.cache +cache/ + +# Windows +Thumbs.db +Desktop.ini + +# Tags +#TAGS +#!TAGS/ +#tags +doc/tags +tags-cn +!tags/ +.tags +.tags1 +tags.lock +tags.temp +gtags.files +GTAGS +GRTAGS +GPATH +cscope.files +cscope.out +cscope.in.out +cscope.po.out + +# Vim +[._]*.s[a-w][a-z] +[._]s[a-w][a-z] +*.un~ +Session.vim +.netrwhist +*~ + +# Test % Tmp +test.* +tmp.* +temp.* + +# Java +*.class + +# JavaScript +node_modules + +# Python +*.pyc +.idea/ +/.idea +# build/ +__pycache__ + +# Rust +target/ +**/*.rs.bk diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..213e734 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 The ZMK Contributors + +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. diff --git a/boards/nice_nano.overlay b/boards/nice_nano.overlay new file mode 100644 index 0000000..798f94b --- /dev/null +++ b/boards/nice_nano.overlay @@ -0,0 +1,47 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; +// vim: filetype=dts fdm=marker: diff --git a/boards/nice_nano_v2.overlay b/boards/nice_nano_v2.overlay new file mode 100644 index 0000000..3dcc5f7 --- /dev/null +++ b/boards/nice_nano_v2.overlay @@ -0,0 +1,75 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; + +/* Override flash size for build testing — actual hardware may differ */ +&flash0 { + reg = <0x00000000 DT_SIZE_M(4)>; + + partitions { + /delete-node/ partition@0; + /delete-node/ partition@26000; + /delete-node/ partition@ec000; + /delete-node/ partition@f4000; + + sd_partition: partition@0 { + reg = <0x00000000 0x00026000>; + }; + + code_partition: partition@26000 { + reg = <0x00026000 0x003c8000>; + }; + + storage_partition: partition@3ee000 { + reg = <0x003ee000 0x00008000>; + }; + + boot_partition: partition@3f6000 { + reg = <0x003f6000 0x0000a000>; + }; + }; +}; +// vim: filetype=dts fdm=marker: diff --git a/boards/shields/corne/Kconfig.defconfig b/boards/shields/corne/Kconfig.defconfig new file mode 100644 index 0000000..adc0f01 --- /dev/null +++ b/boards/shields/corne/Kconfig.defconfig @@ -0,0 +1,58 @@ +if SHIELD_CORNE_LEFT || SHIELD_CORNE_DONGLE_XIAO || SHIELD_CORNE_DONGLE_PRO_MICRO + +config ZMK_KEYBOARD_NAME + default "Corne" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +# if SHIELD_CORNE_DONGLE_XIAO || SHIELD_CORNE_DONGLE_PRO_MICRO + +# config ZMK_USB +# default y + +# endif + +endif + +if SHIELD_CORNE_LEFT || SHIELD_CORNE_RIGHT || SHIELD_CORNE_LEFT_PERIPHERAL || SHIELD_CORNE_DONGLE_XIAO || SHIELD_CORNE_DONGLE_PRO_MICRO + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +if SHIELD_CORNE_DONGLE_XIAO || SHIELD_CORNE_DONGLE_PRO_MICRO + +choice ZMK_DISPLAY_WORK_QUEUE + default ZMK_DISPLAY_WORK_QUEUE_DEDICATED +endchoice + +endif + +endif # ZMK_DISPLAY + +if LVGL + +config LV_Z_VDB_SIZE + default 64 + +config LV_DPI_DEF + default 148 + +config LV_Z_BITS_PER_PIXEL + default 1 + +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/boards/shields/corne/Kconfig.shield b/boards/shields/corne/Kconfig.shield new file mode 100644 index 0000000..cd6ca70 --- /dev/null +++ b/boards/shields/corne/Kconfig.shield @@ -0,0 +1,17 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_CORNE_LEFT + def_bool $(shields_list_contains,corne_left) + +config SHIELD_CORNE_RIGHT + def_bool $(shields_list_contains,corne_right) + +config SHIELD_CORNE_DONGLE_XIAO + def_bool $(shields_list_contains,corne_dongle_xiao) + +config SHIELD_CORNE_LEFT_PERIPHERAL + def_bool $(shields_list_contains,corne_left_peripheral) + +config SHIELD_CORNE_DONGLE_PRO_MICRO + def_bool $(shields_list_contains,corne_dongle_pro_micro) diff --git a/boards/shields/corne/boards/nice_nano.overlay b/boards/shields/corne/boards/nice_nano.overlay new file mode 100644 index 0000000..424a617 --- /dev/null +++ b/boards/shields/corne/boards/nice_nano.overlay @@ -0,0 +1,46 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/boards/shields/corne/boards/nice_nano_v2.overlay b/boards/shields/corne/boards/nice_nano_v2.overlay new file mode 100644 index 0000000..424a617 --- /dev/null +++ b/boards/shields/corne/boards/nice_nano_v2.overlay @@ -0,0 +1,46 @@ +#include + +&pinctrl { + spi3_default: spi3_default { + group1 { + psels = ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + + color-mapping = ; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/boards/shields/corne/corne.conf b/boards/shields/corne/corne.conf new file mode 100644 index 0000000..974243c --- /dev/null +++ b/boards/shields/corne/corne.conf @@ -0,0 +1,6 @@ +# Uncomment the following lines to enable the Corne RGB Underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y + +# Uncomment the following line to enable the Corne OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/boards/shields/corne/corne.dtsi b/boards/shields/corne/corne.dtsi new file mode 100644 index 0000000..e1dcc05 --- /dev/null +++ b/boards/shields/corne/corne.dtsi @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include + +#include +#include + +&foostan_corne_6col_layout { + transform = <&default_transform>; +}; + +&foostan_corne_5col_layout { + transform = <&five_column_transform>; +}; + +/ { + chosen { + zephyr,display = &oled; + zmk,kscan = &kscan0; + zmk,physical-layout = &foostan_corne_6col_layout; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | +// | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | +// | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) +RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) +RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + wakeup-source; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + // TODO: per-key RGB node(s)? +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + inversion-on; + prechargep = <0x22>; + }; +}; diff --git a/boards/shields/corne/corne.keymap b/boards/shields/corne/corne.keymap new file mode 100644 index 0000000..8d165b2 --- /dev/null +++ b/boards/shields/corne/corne.keymap @@ -0,0 +1,58 @@ +// #include "../../../corne.keymap" + +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ----------------------------------------------------------------------------------------- +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BKSP | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHFT | Z | X | C | V | B | | N | M | , | . | / | ESC | +// | GUI | LWR | SPC | | ENT | RSE | ALT | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC + &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp ESC + &kp LGUI &mo 1 &kp SPACE &kp RET &mo 2 &kp RALT + >; + }; + lower_layer { +// ----------------------------------------------------------------------------------------- +// | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | +// | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | | +// | SHFT | | | | | | | | | | | | | +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans + &kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + >; + }; + + raise_layer { +// ----------------------------------------------------------------------------------------- +// | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BKSP | +// | CTRL | | | | | | | - | = | [ | ] | \ | ` | +// | SHFT | | | | | | | _ | + | { | } | "|" | ~ | +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp BSPC + &kp LCTRL &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp GRAVE + &kp LSHFT &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE + &kp LGUI &trans &kp SPACE &kp RET &trans &kp RALT + >; + }; + }; +}; diff --git a/boards/shields/corne/corne.zmk.yml b/boards/shields/corne/corne.zmk.yml new file mode 100644 index 0000000..c496aef --- /dev/null +++ b/boards/shields/corne/corne.zmk.yml @@ -0,0 +1,18 @@ +file_format: "1" +id: corne +name: Corne +type: shield +url: https://github.com/foostan/crkbd/ +requires: [pro_micro] +exposes: [i2c_oled] +features: + - keys + - display + - underglow + - studio +siblings: + - corne_left + - corne_right + - corne_left_peripheral + - corne_dongle_xiao + - corne_dongle_pro_micro diff --git a/boards/shields/corne/corne_dongle_pro_micro.conf b/boards/shields/corne/corne_dongle_pro_micro.conf new file mode 100644 index 0000000..2560437 --- /dev/null +++ b/boards/shields/corne/corne_dongle_pro_micro.conf @@ -0,0 +1,30 @@ +# MC: +# compatible con todas las versiones de nrf52840 (pro_micro): +# - nice_nano (no probado) +# - nice_nano_v2 (probado) +# - nice_nano_v2 (super mini -> nice_nano_v2 clon) (probado) +# - nrfmicro_11 (no probado) +# - nrfmicro_11_flipped (no probado) +# - nrfmicro_13 (no probado) +# - puchi_ble_v1 (probado) + +### DONGLE MODE +CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS=2 + +### DONGLE OPTIONS +# 3 profiles (n+2) +CONFIG_BT_MAX_CONN=5 +CONFIG_BT_MAX_PAIRED=5 + +### DISPLAY DONGLE OPTIONS +CONFIG_ZMK_DISPLAY=y +CONFIG_BT_BAS=n +CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y + +### POWER OPTIONS +# La unidad del intervalo del informe de energía de la batería es segundos +CONFIG_ZMK_BATTERY_REPORT_INTERVAL=60 + +### DEBUG OPTIONS +# CONFIG_ZMK_USB_LOGGING=y +# CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS=8000 diff --git a/boards/shields/corne/corne_dongle_pro_micro.overlay b/boards/shields/corne/corne_dongle_pro_micro.overlay new file mode 100644 index 0000000..54f4758 --- /dev/null +++ b/boards/shields/corne/corne_dongle_pro_micro.overlay @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include + +#include +#include + +&foostan_corne_6col_layout { + transform = <&default_transform>; +}; + +&foostan_corne_5col_layout { + transform = <&five_column_transform>; +}; + +/ { + chosen { + zephyr,display = &oled; + zmk,kscan = &mock_kscan; + zmk,physical-layout = &foostan_corne_6col_layout; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | +// | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | +// | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) +RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) +RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + /* + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + + input-gpios + = <&xiao_d 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&xiao_d 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&xiao_d 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&xiao_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; + */ + + mock_kscan: kscan_0 { + compatible = "zmk,kscan-mock"; + // wakeup-source; + columns = <0>; + rows = <0>; + events = <0>; + }; + // TODO: per-key RGB node(s)? +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + segment-remap; + com-invdir; + inversion-on; + prechargep = <0x22>; + }; +}; + +/* +// 128x64 OLED +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + segment-remap; + com-invdir; + inversion-on; + prechargep = <0x22>; + }; +}; +// 128x32 OLED +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + inversion-on; + prechargep = <0x22>; + }; +}; + +// 128x64 OLED model sh1106 + +&pro_micro_i2c { + status = "okay"; + oled: sh1106@3c { + compatible = "sinowealth,sh1106"; + reg = <0x3c>; + width = <129>; + height = <64>; + segment-offset = <1>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + segment-remap; + com-invdir; + inversion-on; + prechargep = <0x22>; + }; +}; + +// 128x128 OLED model sh1107 +&pro_micro_i2c { + status = "okay"; + oled: sh1106@3c { + compatible = "sinowealth,sh1106"; + reg = <0x3c>; + width = <120>; + height = <128>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <119>; + segment-remap; + com-invdir; + inversion-on; + prechargep = <0x22>; + }; +}; + +*/ +// vim: filetype=dts fdm=marker: diff --git a/boards/shields/corne/corne_dongle_xiao.conf b/boards/shields/corne/corne_dongle_xiao.conf new file mode 100644 index 0000000..1d9fa26 --- /dev/null +++ b/boards/shields/corne/corne_dongle_xiao.conf @@ -0,0 +1,24 @@ +# MC: +# compatible con todas las versiones de nrf52840 (xiao): +# - seeeduino_xiao_ble (probado) + +### DONGLE MODE +CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS=2 + +### DONGLE OPTIONS +# 3 profiles (n+2) +CONFIG_BT_MAX_CONN=5 +CONFIG_BT_MAX_PAIRED=5 + +### DISPLAY DONGLE OPTIONS +CONFIG_ZMK_DISPLAY=y +CONFIG_BT_BAS=n +CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y + +### POWER OPTIONS +# La unidad del intervalo del informe de energía de la batería es segundos +CONFIG_ZMK_BATTERY_REPORT_INTERVAL=60 + +### DEBUG OPTIONS +# CONFIG_ZMK_USB_LOGGING=y +# CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS=8000 diff --git a/boards/shields/corne/corne_dongle_xiao.overlay b/boards/shields/corne/corne_dongle_xiao.overlay new file mode 100644 index 0000000..7b09f4c --- /dev/null +++ b/boards/shields/corne/corne_dongle_xiao.overlay @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include + +#include +#include + +&foostan_corne_6col_layout { + transform = <&default_transform>; +}; + +&foostan_corne_5col_layout { + transform = <&five_column_transform>; +}; + +/ { + chosen { + zephyr,display = &oled; + zmk,kscan = &mock_kscan; + zmk,physical-layout = &foostan_corne_6col_layout; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | +// | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | +// | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) +RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) +RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + /* + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + + input-gpios + = <&xiao_d 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&xiao_d 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&xiao_d 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&xiao_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; + */ + + mock_kscan: kscan_0 { + compatible = "zmk,kscan-mock"; + // wakeup-source; + columns = <0>; + rows = <0>; + events = <0>; + }; + // TODO: per-key RGB node(s)? +}; + +// 128x64 OLED +&xiao_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + segment-remap; + com-invdir; + inversion-on; + prechargep = <0x22>; + }; +}; + +/* +// 128x64 OLED +&xiao_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + segment-remap; + com-invdir; + inversion-on; + prechargep = <0x22>; + }; +}; +// 128x32 OLED +&xiao_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + inversion-on; + prechargep = <0x22>; + }; +}; + + +// 128x64 OLED model sh1106 + +&xiao_i2c { + status = "okay"; + oled: sh1106@3c { + compatible = "sinowealth,sh1106"; + reg = <0x3c>; + width = <129>; + height = <64>; + segment-offset = <1>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + segment-remap; + com-invdir; + inversion-on; + prechargep = <0x22>; + }; +}; + +// 128x128 OLED model sh1107 +&xiao_i2c { + status = "okay"; + oled: sh1106@3c { + compatible = "sinowealth,sh1106"; + reg = <0x3c>; + width = <120>; + height = <128>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <119>; + segment-remap; + com-invdir; + inversion-on; + prechargep = <0x22>; + }; +}; + +// ################# niceview working fine START ################# +// doc: https://wiki.seeedstudio.com/XIAO-SAMD21-Zephyr-RTOS/ +// @bravekarma nice Discord server +// The &gpioX Y and NRF_PSEL(..., X, Y) uses the PX.Y notation (underlying nRF +// pin numbers), &xiao_d x uses the unified pinout Dx + +&pinctrl { + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; +}; + +nice_view_spi: &spi0 { + compatible = "nordic,nrf-spim"; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + cs-gpios = <&xiao_d 6 GPIO_ACTIVE_HIGH>; // Pin D6 as CS +}; + +&xiao_i2c { + status = "disabled"; +}; +// ################# niceview working fine END ################# +*/ +// vim: filetype=dts fdm=marker: diff --git a/boards/shields/corne/corne_left.conf b/boards/shields/corne/corne_left.conf new file mode 100644 index 0000000..e69de29 diff --git a/boards/shields/corne/corne_left.overlay b/boards/shields/corne/corne_left.overlay new file mode 100644 index 0000000..d96a5de --- /dev/null +++ b/boards/shields/corne/corne_left.overlay @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "corne.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + ; +}; + +// vim: filetype=dts fdm=marker: diff --git a/boards/shields/corne/corne_left_peripheral.conf b/boards/shields/corne/corne_left_peripheral.conf new file mode 100644 index 0000000..e69de29 diff --git a/boards/shields/corne/corne_left_peripheral.overlay b/boards/shields/corne/corne_left_peripheral.overlay new file mode 100644 index 0000000..d96a5de --- /dev/null +++ b/boards/shields/corne/corne_left_peripheral.overlay @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "corne.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro 21 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 14 GPIO_ACTIVE_HIGH> + ; +}; + +// vim: filetype=dts fdm=marker: diff --git a/boards/shields/corne/corne_right.conf b/boards/shields/corne/corne_right.conf new file mode 100644 index 0000000..e69de29 diff --git a/boards/shields/corne/corne_right.overlay b/boards/shields/corne/corne_right.overlay new file mode 100644 index 0000000..7b2b752 --- /dev/null +++ b/boards/shields/corne/corne_right.overlay @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "corne.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&five_column_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro 14 GPIO_ACTIVE_HIGH> + , <&pro_micro 15 GPIO_ACTIVE_HIGH> + , <&pro_micro 18 GPIO_ACTIVE_HIGH> + , <&pro_micro 19 GPIO_ACTIVE_HIGH> + , <&pro_micro 20 GPIO_ACTIVE_HIGH> + , <&pro_micro 21 GPIO_ACTIVE_HIGH> + ; +}; + +// vim: filetype=dts fdm=marker: diff --git a/build.yaml b/build.yaml new file mode 100644 index 0000000..9f747d7 --- /dev/null +++ b/build.yaml @@ -0,0 +1,20 @@ +--- +include: + + ### CORNE START ### + - board: nice_nano_v2 + shield: corne_left nice_oled + artifact-name: nice_corne_left_oled_rgb + snippet: rgb-config studio-rpc-usb-uart + - board: nice_nano_v2 + shield: corne_right nice_oled + cmake-args: -DCONFIG_NICE_OLED_WIDGET_ANIMATION_PERIPHERAL_CAT=n -DCONFIG_NICE_OLED_WIDGET_ANIMATION_PERIPHERAL_KM=y + artifact-name: nice_corne_right_oled_rgb + snippet: rgb-config + ### CORNE END ### + + ### SETTINGS_RESET START ### + - board: nice_nano_v2 + shield: settings_reset + artifact-name: nice_settings_reset + ### SETTINGS_RESET END ### diff --git a/config/config_keymap-drawer.yaml b/config/config_keymap-drawer.yaml new file mode 100644 index 0000000..a3b562f --- /dev/null +++ b/config/config_keymap-drawer.yaml @@ -0,0 +1,433 @@ +# configuration for https://github.com/caksoylar/keymap-drawer +draw_config: + footer_text: 'Keymap View: keymap-drawer' + # dark_mode: auto + n_columns: 1 + # draw_key_sides: true # draw a square in the middle of the keys + key_w: 60.0 + key_h: 56.0 + split_gap: 30.0 + combo_w: 28.0 + combo_h: 26.0 + key_rx: 6.0 + key_ry: 6.0 + inner_pad_w: 2.0 + inner_pad_h: 2.0 + outer_pad_w: 40.0 + outer_pad_h: 56.0 + line_spacing: 1.2 + arc_radius: 6.0 + append_colon_to_layer_header: true + small_pad: 2.0 + svg_extra_style: | + /* For default sytles, see https://github.com/caksoylar/keymap-drawer/blob/main/keymap_drawer/config.py#L85 */ + + svg.keymap { + font-family: Ubuntu Mono, Inconsolata, Consolas, Liberation Mono, Menlo, monospace; + font-size: 16px; + font-weight: bold; + text-rendering: optimizeLegibility; + } + + /* Color accent for held keys + red = #f00 + green = #0f0 + blue = #00f + yellow = #ff0 + cyan = #0ff + magenta = #f0f + white = #fff + black = #000 + grey = #888 + light grey = #ccc + #ffc + */ + rect.held, rect.combo.held { + fill: #f00; + } + + /* Technique borrowed and extended from https://github.com/englmaxi/zmk-config/blob/master/keymap-drawer/config.yaml */ + .sym_sub_text.tap { + translate: -5px 2px; + font-size: 20px; + } + .sym_sub_text.shifted { + translate: 10px 13px; + font-size: 10px; + opacity: 1.0; + } + .combo.sym_sub_text.tap { + translate: -1px 1px; + } + .combo.sym_sub_text.shifted { + translate: 7px 5px; + font-size: 10px; + opacity: 1.0; + } + + /* Toggle */ + .toggle.shifted { + translate: -10px 12px; + } + + .toggle.hold { + translate: 13px -23px; + } + + /* Variant for tap-dances */ + .tap_dance.tap { + translate: -7px 0px; + font-size: 12px; + } + .tap_dance.shifted { + translate: 7px 17px; + font-size: 12px; + opacity: 1.0; + } + + /* Variant for symbol next to symbol */ + .sym_by_sym.tap { + translate: -6px 0px; + } + .sym_by_sym.shifted { + translate: 10px 12px; + opacity: 1.0; + } + + .combo.sym_by_sym.tap { + translate: -35px 0px; + } + .combo.sym_by_sym.shifted { + translate: 35px 20px; + opacity: 1.0; + } + + .combo.sym_by_sym.hold { + visibility: hidden; + } + + /* hide hold box for combo sym_by_sym */ + .combo.sym_by_sym.hold > path[stroke="none"][fill="none"] { + visibility: hidden; + } + + shrink_wide_legends: 6 + glyph_tap_size: 18 + glyph_hold_size: 15 + glyph_shifted_size: 15 + glyphs: {} + glyph_urls: + tabler: https://unpkg.com/@tabler/icons/icons/outline/{}.svg + tablerf: https://unpkg.com/@tabler/icons/icons/filled/{}.svg + mdi: https://raw.githubusercontent.com/Templarian/MaterialDesign-SVG/master/svg/{}.svg + mdil: https://raw.githubusercontent.com/Pictogrammers/MaterialDesignLight/master/svg/{}.svg + material: https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/{}/default/48px.svg + use_local_cache: true +parse_config: + raw_binding_map: + '&sys_reset': Reset + '&bootloader': Boot + '&swapper': Win Next + '&caps_word': Caps Word + '&inv_qm': ¿ + + '&kp LC(LG(LEFT))': Desk Left + '&kp LC(LG(RIGHT))': Desk Right + '&kp LC(TAB)': Tab Right + '&kp LC(LS(TAB))': Tab Left + '&kp LA(F4)': Win Close + '&kp LC(F4)': Tab Close + '&kp LS(TAB)': Win Prev + '&kp LS(INS)': Paste + '&kp LG(L)': Lock + + '&out OUT_USB': Out USB + '&out OUT_BLE': Out BLE + + '&bt BT_SEL 0': BT 1 + '&bt BT_SEL 1': BT 2 + '&bt BT_SEL 2': BT 3 + '&bt BT_SEL 3': BT 4 + '&bt BT_SEL 4': BT 5 + + # Display + 'DISPLAY_UP': {t: $$mdi:television-classic$$, h: $$mdi:arrow-up$$, type: tap_dance} + 'DISPLAY_DOWN': {t: $$mdi:television-classic$$, h: $$mdi:arrow-down$$, type: tap_dance} + 'DISPLAY_LEFT': {t: $$mdi:television-classic$$, h: $$mdi:arrow-left$$, type: tap_dance} + 'DISPLAY_RIGHT': {t: $$mdi:television-classic$$, h: $$mdi:arrow-right$$, type: tap_dance} + 'DISPLAY_SPACE': {t: $$mdi:television-classic$$, h: $$mdi:keyboard-space$$, type: tap_dance} + + + # Rgb + '&rgb_ug RGB_TOG': {t: $$mdi:led-on$$, h: $$mdi:toggle-switch$$, s: $$mdi:led-outline$$, type: toggle} + '&rgb_ug RGB_VAI': {t: $$mdi:led-on$$, s: $$tabler:brightness-up$$, type: sym_by_sym} + '&rgb_ug RGB_VAD': {t: $$mdi:led-outline$$, s: $$tabler:brightness-down$$, type: sym_by_sym} + '&rgb_ug RGB_BRD': {t: $$mdi:led-on$$, s: $$tabler:brightness-up$$, type: sym_by_sym} + '&rgb_ug RGB_BRI': {t: $$mdi:led-outline$$, s: $$tabler:brightness-down$$, type: sym_by_sym} + '&rgb_ug RGB_SAI': {t: $$mdi:led-outline$$, s: $$mdi:eyedropper$$, type: sym_by_sym} + '&rgb_ug RGB_SAD': {t: $$mdi:led-on$$, s: $$mdi:eyedropper$$, type: sym_by_sym} + '&rgb_ug RGB_HUI': {t: $$mdi:led-on$$, s: $$mdi:palette$$, type: sym_by_sym} + '&rgb_ug RGB_HUD': {t: $$mdi:led-outline$$, s: $$mdi:palette$$, type: sym_by_sym} + '&rgb_ug RGB_RMOD': {t: $$mdi:led-on$$, h: $$mdi:page-previous-outline$$, type: tap_dance} + '&rgb_ug RGB_MOD': {t: $$mdi:led-on$$, h: $$mdi:page-next-outline$$, type: tap_dance} + '&rgb_ug RGB_EFF': {t: $$mdi:led-on$$, h: $$mdi:page-previous-outline$$, type: tap_dance} + '&rgb_ug RGB_EFR': {t: $$mdi:led-on$$, h: $$mdi:page-next-outline$$, type: tap_dance} + '&rgb_ug RGB_SPI': {t: $$mdi:led-on$$, h: $$mdi:speedometer$$, type: sym_by_sym} + '&rgb_ug RGB_SPD': {t: $$mdi:led-on$$, h: $$mdi:speedometer-slow$$, type: sym_by_sym} + '&rgb_ug RGB_UP': {t: $$mdi:led-on$$, h: $$mdi:arrow-up$$, type: tap_dance} + '&rgb_ug RGB_DOWN': {t: $$mdi:led-on$$, h: $$mdi:arrow-down$$, type: tap_dance} + '&rgb_ug RGB_LEFT': {t: $$mdi:led-on$$, h: $$mdi:arrow-left$$, type: tap_dance} + '&rgb_ug RGB_RIGHT': {t: $$mdi:led-on$$, h: $$mdi:arrow-right$$, type: tap_dance} + '&rgb_ug RGB_SPACE': {t: $$mdi:led-on$$, h: $$mdi:keyboard-space$$, type: tap_dance} + '&rgb_ug RGB_COLOR_HSB(0,0,100)': {t: $$mdi:led-on$$, h: $$mdi:palette$$, type: tap_dance} + '&rgb_ug RGB_COLOR_HSB(224,100,100)': {t: $$mdi:led-on$$, h: $$mdi:palette$$, type: tap_dance} + + # Mouse + 'U_WH_L': {t: $$mdi:mouse-outline$$, h: $$mdi:arrow-left$$, type: tap_dance} + 'U_WH_R': {t: $$mdi:mouse-outline$$, h: $$mdi:arrow-right$$, type: tap_dance} + 'U_WH_U': {t: $$mdi:mouse-outline$$, h: $$mdi:arrow-up$$, type: tap_dance} + 'U_WH_D': {t: $$mdi:mouse-outline$$, h: $$mdi:arrow-down$$, type: tap_dance} + 'U_MS_L': {t: $$mdi:mouse$$, h: $$mdi:arrow-left$$, type: tap_dance} + 'U_MS_D': {t: $$mdi:mouse$$, h: $$mdi:arrow-down$$, type: tap_dance} + 'U_MS_R': {t: $$mdi:mouse$$, h: $$mdi:arrow-right$$, type: tap_dance} + 'U_MS_U': {t: $$mdi:mouse$$, h: $$mdi:arrow-up$$, type: tap_dance} + 'CLICK_LEFT': $$mdi:cursor-default-click$$ + 'CLICK_RIGHT': $$mdi:cursor-default-click-outline$$ + 'CLICK_MIDDLE': $$mdi:cursor-default-click-outline$$ + # '&mmv MOVE_UP': Mouse ↑ + # '&mmv MOVE_DOWN': Mouse ↓ + # '&mmv MOVE_LEFT': Mouse ← + # '&mmv MOVE_RIGHT': Mouse → + + # '&msc SCRL_UP': Scroll ↑ + # '&msc SCRL_DOWN': Scroll ↓ + # '&msc SCRL_LEFT': Scroll ← + # '&msc SCRL_RIGHT': Scroll → + + # '&mkp MCLK': Middle Click + # '&mkp MB4': Back Click + # '&mkp MB5': Forward Click + + + # layers + 'MEDIA_ESC': {t: $$mdi:keyboard-esc$$, h: $$mdi:music-note$$} + 'MOUSE_TAB': {t: $$mdi:keyboard-tab$$, h: $$mdi:mouse$$} + 'NUMBER_SPACE': {t: $$mdi:keyboard-space$$, h: $$mdi:numeric$$} + '&mo _FUNCTION': $$mdi:function-variant$$ + '&mo _CONFIG': $$mdi:cog$$ + '&mo _LOCK': $$mdi:lock$$ + '&mo _SYMBOL': $$mdi:symbol$$ + '&mo _DISPLAY': $$mdi:television-classic$$ + '&mo _OLED': $$mdi:television-classic$$ + '&mo _LINUX': $$mdi:linux$$ + '&mo _RGB': $$mdi:led-on$$ + 'DE_CAPS': $$mdi:keyboard-caps$$ + 'TAB': $$mdi:keyboard-tab$$ + '&mt LSHFT COMMA': {t: $$mdi:google-downasaur$$, h: $$mdi:apple-keyboard-shift$$, type: tap_dance} + + # CONTROL CMD/WINDOWS SHIFT ALT/META/OPTION + '&kp LSHFT': $$mdi:apple-keyboard-shift$$ + '&kp LCTRL': $$mdi:apple-keyboard-control$$ + '&kp RCTRL': $$mdi:apple-keyboard-control$$ + '&kp LGUI': $$mdi:apple-keyboard-command$$ + '&kp RGUI': $$mdi:apple-keyboard-command$$ + '&kp LALT': $$mdi:apple-keyboard-option$$ + '&kp RALT': $$mdi:apple-keyboard-option$$ + '&kp RSHFT': $$mdi:apple-keyboard-shift$$ + '&kp BSPC': $$mdi:backspace-outline$$ + + qmk_keycode_map: + XXXXXXX: '' + 'NO': '' + MINUS: '-' + MINS: '-' + EQUAL: '=' + EQL: '=' + LEFT_BRACKET: '[' + LBRC: '[' + RIGHT_BRACKET: ']' + RBRC: ']' + BACKSLASH: \ + BSLS: \ + NONUS_HASH: '#' + NUHS: '#' + SEMICOLON: ; + SCLN: ; + QUOTE: '''' + QUOT: '''' + GRAVE: '`' + GRV: '`' + COMMA: ',' + COMM: ',' + DOT: . + SLASH: / + SLSH: / + TILDE: '~' + TILD: '~' + EXCLAIM: '!' + EXLM: '!' + AT: '@' + HASH: '#' + DOLLAR: $ + DLR: $ + PERCENT: '%' + PERC: '%' + CIRCUMFLEX: ^ + CIRC: ^ + AMPERSAND: '&' + AMPR: '&' + ASTERISK: '*' + ASTR: '*' + LEFT_PAREN: ( + LPRN: ( + RIGHT_PAREN: ) + RPRN: ) + UNDERSCORE: _ + UNDS: _ + PLUS: + + LEFT_CURLY_BRACE: '{' + LCBR: '{' + RIGHT_CURLY_BRACE: '}' + RCBR: '}' + PIPE: '|' + COLON: ':' + COLN: ':' + DOUBLE_QUOTE: '"' + DQUO: '"' + DQT: '"' + LEFT_ANGLE_BRACKET: < + LABK: < + LT: < + RIGHT_ANGLE_BRACKET: '>' + RABK: '>' + GT: '>' + QUESTION: '?' + QUES: '?' + + zmk_combos: + combo_tab: {align: top, o: 0.15} + combo_del: {align: top, o: 0.15} + combo_f12: {align: bottom} + combo_btclr: {align: bottom} + combo_play: {align: right} + combo_capswd: {draw_separate: true} + combo_semi: {draw_separate: true} + combo_grave: {draw_separate: true} + combo_lpar: {draw_separate: true} + combo_rpar: {draw_separate: true} + combo_lbkt: {draw_separate: true} + combo_rbkt: {draw_separate: true} + combo_tab: {draw_separate: true} + combo_del: {draw_separate: true} + combo_esc: {draw_separate: true} + combo_ret: {draw_separate: true} + combo_lock: {draw_separate: true} + combo_bslh: {draw_separate: true} + combo_slsh: {draw_separate: true} + + zmk_keycode_map: + + # custom mappings + C_VOL_UP: Vol Up + C_VOL_DN: Vol Down + C_AL_CALC: Calc + # C_PP: Play Pause + + LCTRL: Ctrl + RCTRL: Ctrl + LALT: Alt + RALT: Alt + LGUI: Gui + RGUI: Gui + LSHFT: Shift + RSHFT: Shift + ESC: Esc + SPACE: ␣ + BSPC: ⌫ + RET: ⏎ + TAB: ↹ + DEL: ⌦ + + PG_UP: Page Up + PG_DN: Page Down + INS: Insert + HOME: Home + END: End + CAPS: Caps Lock + PSCRN: Print Scrn + PAUSE_BREAK: Pause Break + + UP: ↑ + DOWN: ↓ + LEFT: ← + RIGHT: → + + C_PP: ⏯ + C_NEXT: ⏭️ + C_PREV: ⏮️ + + # defaults + # AMPERSAND: '&' + # AMPS: '&' + APOS: "'" + APOSTROPHE: "'" + ASTERISK: '*' + ASTRK: '*' + AT: '@' + AT_SIGN: '@' + BACKSLASH: \ + BSLH: \ + CARET: ^ + COLON: ':' + COMMA: ',' + DLLR: $ + DOLLAR: $ + DOT: . + DOUBLE_QUOTES: '"' + DQT: '"' + EQUAL: '=' + EXCL: '!' + EXCLAMATION: '!' + FSLH: / + GRAVE: '`' + GREATER_THAN: '>' + GT: '>' + HASH: '#' + LBKT: '[' + LBRC: '{' + LEFT_BRACE: '{' + LEFT_BRACKET: '[' + LEFT_PARENTHESIS: ( + LESS_THAN: < + LPAR: ( + LT: < + MINUS: '-' + NON_US_BACKSLASH: \ + NON_US_BSLH: '|' + NON_US_HASH: '#' + NUHS: '#' + PERCENT: '%' + PERIOD: . + PIPE: '|' + PIPE2: '|' + PLUS: + + POUND: '#' + PRCNT: '%' + QMARK: '?' + QUESTION: '?' + RBKT: ']' + RBRC: '}' + RIGHT_BRACE: '}' + RIGHT_BRACKET: ']' + RIGHT_PARENTHESIS: ) + RPAR: ) + SEMI: ; + SEMICOLON: ; + SINGLE_QUOTE: '''' + SLASH: / + SQT: '''' + STAR: '*' + TILDE: '~' + TILDE2: '~' + UNDER: _ + UNDERSCORE: _ diff --git a/config/corne.conf b/config/corne.conf new file mode 100644 index 0000000..0d04489 --- /dev/null +++ b/config/corne.conf @@ -0,0 +1,139 @@ +# ======================================== +# FileName: corne.conf +# Date: 07.06.2023 +# Author: Marcos Chow Castro +# Email: mctechnology170318@gmail.com +# GitHub: https://github.com/mctechnology17 +# Brief: configuration file for ZMK firmware +# Board: nice_nano_v2 and puchi_ble_v1 +# ╔═╦═╦═╗ +# ╔════╗ ║║║║║╔╝ +# ║╔╗╔╗║ ║║║║║╚╗ +# ╚╝║║╚╝ ║╠═╩╩═╝ +# ║╠═╦═╣╚╦═╦╦═╦╗╔═╦═╦╦╗ +# ║║╩╣═╣║║║║║╬║╚╣╬║╬║║║ +# ╚╩═╩═╩╩╩╩═╩═╩═╩═╬╗╠╗║ +# ╚═╩═╝ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# ========================================= +# on config_zmk.h file enable/disable the following options, if you want to +# use CONFIG_ZMK_MOUSE=y, CONFIG_ZMK_RGB_UNDERGLOW=y, CONFIG_ZMK_RGB_UNDERGLOW=y +# mouse config, 1 = enable, 0 = disable, default = 1 +# 2 = enable, but with rgb matrix +# #define MC_TECHNOLOGY_MOUSE_ENABLE 1 +# rgb matrix config, 1 = enable, 0 = disable, default = 0 +# #define MC_TECHNOLOGY_RGB_ENABLE 0 +# define macros on for .dtsi file 1 = enable, 0 = disable default = 1 +# #define MC_TECHNOLOGY_MACROS_ENABLE 1 + +### Turn of pin code pairing +CONFIG_ZMK_BLE_PASSKEY_ENTRY=n +CONFIG_ZMK_BLE_EXPERIMENTAL_SEC=n +CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES=n + +### Keyboard name +CONFIG_ZMK_KEYBOARD_NAME="Afiq Zudin Corne42" +CONFIG_BT_DEVICE_NAME_MAX=28 + +### Boost Bluetooth TX power, also make Bluetooth stronger +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y +CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES=y +# Tune bluetooth profiles for quick select +# CONFIG_BT_MAX_CONN=3 +# Uncomment the following line if you facing issue on win 11 connection +# Enables a combination of settings that are planned to be default in future +# versions of ZMK to improve connection stability. This includes changes to +# timing on BLE pairing initiation, restores use of the updated/new LLCP +# implementation, and disables 2M PHY support. +CONFIG_ZMK_BLE_EXPERIMENTAL_CONN=y + +### POWER OPTIONS +CONFIG_ZMK_SLEEP=y +CONFIG_ZMK_EXT_POWER=y +# 15 min (15*60*1000ms) +# CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=900000 +# 1 min Número de milisegundos de inactividad antes de entrar en estado inactivo +# CONFIG_ZMK_IDLE_TIMEOUT=60000 +# 30 min (30*60*1000ms) +# CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000 +# CONFIG_ZMK_IDLE_TIMEOUT=120000 +# Disable external power when not connected to USB +# CONFIG_ZMK_EXT_POWER_USB_ONLY=y + +### MOUSE +# https://github.com/zmkfirmware/zmk/blob/main/docs/docs/keymaps/behaviors/mouse-emulation.md +# CONFIG_ZMK_MOUSE=y + +### ZMK STUDIO +# MC: 2. zmk-studio test START +# https://github.com/zmkfirmware/zmk/blob/main/docs/docs/config/studio.md +CONFIG_ZMK_STUDIO=y +CONFIG_ZMK_STUDIO_LOCKING=n +# MC: zmk-studio test END + +### RGB UNDERGLOW +# uncomment to enable RGB Underglow or backlight +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y +# apaga si no se usa el teclado +# CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE=y +# 0 Solid color 1 Breathe 2 Spectrum 3 Swirl +# CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=3 +# nivel de brillo en porcentaje, el valor por defecto es 10 por ciento +# CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP=1 +# Turn off RGB underglow when keyboard goes into idle state +# CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE=y + +# # Hue step in degrees (0-359) used by RGB actions default 10 +# CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP=30 + +# # Brightness step in percent used by RGB actions default 10 +# CONFIG_ZMK_RGB_UNDERGLOW_SAT_STEP=2 +# CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=240 +# CONFIG_ZMK_RGB_UNDERGLOW_SAT_START=10 +# CONFIG_ZMK_RGB_UNDERGLOW_BRT_START=15 + +# Uncomment the line below to disable external power toggling by the underglow. +# By default toggling the underglow on and off also toggles external power +# on and off. This also causes the display to turn off. +# CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=n + +### OLED DISPLAY +CONFIG_ZMK_DISPLAY=y +CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM=y +# esto creo que ya no es necesario +# CONFIG_ZMK_DISPLAY_WORK_QUEUE_DEDICATED=y +# CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN=y + +### WIDGET SETTINGS +# No Widget configurations added since nice!view has its own custom widgets +# activar solo estos dos widgets +# CONFIG_ZMK_WIDGET_WPM_STATUS=n +# CONFIG_ZMK_WIDGET_BATTERY_STATUS_SHOW_PERCENTAGE=y +# CONFIG_ZMK_WIDGET_LAYER_STATUS=y +# CONFIG_ZMK_WIDGET_BATTERY_STATUS=y +# CONFIG_ZMK_WIDGET_OUTPUT_STATUS=y + +### HID para nice!view ePaperDisplay +# Enable eager debouncing +# "Eager Debouncing" +# Trying to lower the input lag. +CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=1 +CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5 + +### Improves compatibility with iPad +# ref: https://zmk.dev/docs/config/system#hid +CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC=y + +### JAVELIN STENO ENGINE +CONFIG_ZMK_JAVELIN_STENO=y +CONFIG_ZMK_JAVELIN_STENO_DICT_PLOVER=n +CONFIG_ZMK_JAVELIN_STENO_DICT_LAPWING=y +CONFIG_CPLUSPLUS=y +CONFIG_LIB_CPLUSPLUS=y +CONFIG_HEAP_MEM_POOL_SIZE=32768 + +### DEBUG OPTIONS +# CONFIG_ZMK_USB_LOGGING=y +# CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS=8000 diff --git a/config/corne.keymap b/config/corne.keymap new file mode 100644 index 0000000..0ec9836 --- /dev/null +++ b/config/corne.keymap @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +&led_strip { + chain-length = <27>; +}; + +/ { + behaviors { + ht_mute_pp: ht_mute_pp { + compatible = "zmk,behavior-hold-tap"; + #binding-cells = <2>; + tapping-term-ms = <200>; + bindings = <&kp>, <&kp>; + }; + td_rgb: td_rgb { + compatible = "zmk,behavior-tap-dance"; + #binding-cells = <0>; + tapping-term-ms = <300>; + bindings = <&rgb_ug RGB_TOG>, <&rgb_ug RGB_EFF>, <&rgb_ug RGB_EFR>; + }; + td_colors: td_colors { + compatible = "zmk,behavior-tap-dance"; + #binding-cells = <0>; + tapping-term-ms = <400>; + bindings = <&rgb_ug RGB_COLOR_HSB(270,89,90)>, + <&rgb_ug RGB_COLOR_HSB(0,0,100)>, + <&rgb_ug RGB_COLOR_HSB(0,100,100)>, + <&rgb_ug RGB_COLOR_HSB(240,100,100)>, + <&rgb_ug RGB_COLOR_HSB(120,100,100)>; + }; + }; + + combos { + compatible = "zmk,combos"; + // Top + home row combos = numbers (like ecosteno) + combo_1 { key-positions = <1 13>; bindings = <&kp N1>; layers = <0 1>; }; + combo_2 { key-positions = <2 14>; bindings = <&kp N2>; layers = <0 1>; }; + combo_3 { key-positions = <3 15>; bindings = <&kp N3>; layers = <0 1>; }; + combo_4 { key-positions = <4 16>; bindings = <&kp N4>; layers = <0 1>; }; + combo_5 { key-positions = <5 17>; bindings = <&kp N5>; layers = <0 1>; }; + combo_6 { key-positions = <6 18>; bindings = <&kp N6>; layers = <0 1>; }; + combo_7 { key-positions = <7 19>; bindings = <&kp N7>; layers = <0 1>; }; + combo_8 { key-positions = <8 20>; bindings = <&kp N8>; layers = <0 1>; }; + combo_9 { key-positions = <9 21>; bindings = <&kp N9>; layers = <0 1>; }; + combo_0 { key-positions = <10 22>; bindings = <&kp N0>; layers = <0 1>; }; + // I+O (QWRT) / U+B (CARP) = BSPC + combo_bspc { key-positions = <8 9>; bindings = <&kp BSPC>; layers = <0 1>; }; + // K+L (QWRT) / E+O (CARP) = ENTER + combo_enter { key-positions = <20 21>; bindings = <&kp RET>; layers = <0 1>; }; + // W+E (QWRT) / G+M (CARP) = ESC + combo_esc { key-positions = <2 3>; bindings = <&kp ESC>; layers = <0 1>; }; + // S+D (QWRT) / S+T (CARP) = TAB + combo_tab { key-positions = <14 15>; bindings = <&kp TAB>; layers = <0 1>; }; + }; + + keymap { + compatible = "zmk,keymap"; + + carpalx_layer { + display-name = "CARP"; + bindings = < +&kp GRAVE &kp Q &kp G &kp M &kp L &kp W &kp Y &kp F &kp U &kp B &kp SEMI &to 4 +&mo 4 &kp D &kp S &kp T &kp N &kp R &kp I &kp A &kp E &kp O &kp H &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp J &kp K &kp P &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &td_rgb &kp LCTRL &kp LGUI &kp SPACE &kp RALT &ht_mute_pp C_PLAY_PAUSE C_MUTE + >; + }; + + qwerty_layer { + display-name = "QWRT"; + bindings = < +&kp GRAVE &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &to 4 +&mo 4 &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT +&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT + &td_rgb &kp LCTRL &kp LGUI &kp SPACE &kp RALT &ht_mute_pp C_PLAY_PAUSE C_MUTE + >; + }; + + steno_layer { + display-name = "STEN"; + bindings = < +&none &javsteno STENO_NUM1 &javsteno STENO_NUM2 &javsteno STENO_NUM3 &javsteno STENO_NUM4 &javsteno STENO_NUM5 &javsteno STENO_NUM6 &javsteno STENO_NUM7 &javsteno STENO_NUM8 &javsteno STENO_NUM9 &javsteno STENO_NUM10 &to 4 +&mo 4 &javsteno STENO_S1 &javsteno STENO_TL &javsteno STENO_PL &javsteno STENO_HL &javsteno STENO_STAR1 &javsteno STENO_STAR3 &javsteno STENO_FR &javsteno STENO_PR &javsteno STENO_LR &javsteno STENO_TR &javsteno STENO_DR +&none &javsteno STENO_S2 &javsteno STENO_KL &javsteno STENO_WL &javsteno STENO_RL &javsteno STENO_STAR2 &javsteno STENO_STAR4 &javsteno STENO_RR &javsteno STENO_BR &javsteno STENO_GR &javsteno STENO_SR &javsteno STENO_ZR + &none &javsteno STENO_A &javsteno STENO_O &javsteno STENO_E &javsteno STENO_U &none + >; + }; + + fps_layer { + display-name = "FPS"; + bindings = < +&mt ESC N1 &kp N2 &kp Q &kp W &mt N3 E &mt N4 R &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &to 4 +&kp TAB &kp LSHFT &kp A &kp S &kp D &kp F &none &none &none &none &none &none +&mt LALT M &kp Z &kp X &kp C &kp V &kp G &none &none &none &none &none &none + &kp T &kp LCTRL &kp SPACE &none &none &none + >; + }; + + hub_layer { + display-name = "HUB"; + bindings = < +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp PLUS &kp LBKT &kp UP &kp RBKT &kp ASTRK &kp EQUAL +&out OUT_TOG &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &kp C_BRI_UP &kp C_VOL_UP &kp MINUS &kp LEFT &kp DOWN &kp RIGHT &kp FSLH &kp BSLH +&kp LSHFT &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &kp C_BRI_DN &kp C_VOL_DN &to 0 &to 1 &to 2 &to 3 &td_colors &kp RSHFT + &td_rgb &kp LCTRL &kp LGUI &kp SPACE &kp RALT &ht_mute_pp C_PLAY_PAUSE C_MUTE + >; + }; + + }; +}; diff --git a/config/west.yml b/config/west.yml new file mode 100644 index 0000000..8a02c72 --- /dev/null +++ b/config/west.yml @@ -0,0 +1,55 @@ +manifest: + remotes: + - name: zmkfirmware + url-base: https://github.com/zmkfirmware + # dongle_display + - name: englmaxi + url-base: https://github.com/englmaxi + # nice_oled - nice_epaper - dongle_display!view - oled Adapter + - name: mctechnology17 + url-base: https://github.com/mctechnology17 + # fork of zmk-nice-oled with custom KM medal animation + - name: KeebMaker + url-base: https://github.com/KeebMaker + # javelin steno engine module + - name: afiqzudinhadi + url-base: https://github.com/afiqzudinhadi + # javelin steno engine source + - name: jthlim + url-base: https://github.com/jthlim + projects: + # Pinned to v0.3.0 instead of `main`: ZMK main tracks Zephyr 4.1, whose + # board-model rewrite renamed `nice_nano_v2` (now `nice_nano//zmk`) and + # split the `WS2812_STRIP` Kconfig symbol per-driver. Bumping this back to + # `main` will break every build.yaml entry below until those are updated. + - name: zmk + remote: zmkfirmware + revision: v0.3.0 + import: app/west.yml + # dongle_display + - name: zmk-dongle-display + remote: englmaxi + revision: v0.3 + # nice_oled - nice_epaper (fork with custom KM medal animation) + - name: zmk-nice-oled + remote: KeebMaker + revision: km-medal-animation + # dongle_display!view + - name: zmk-dongle-display-view + remote: mctechnology17 + revision: main + # oled Adapter + - name: zmk-oled-adapter + remote: mctechnology17 + revision: main + # javelin steno engine module + - name: zmk-javelin-steno + remote: afiqzudinhadi + revision: main + # javelin steno engine source (fetched into module's javelin/ dir) + - name: javelin-steno + remote: jthlim + revision: main + path: zmk-javelin-steno/javelin + self: + path: config diff --git a/keymap-drawer/corne.svg b/keymap-drawer/corne.svg new file mode 100644 index 0000000..82e3be7 --- /dev/null +++ b/keymap-drawer/corne.svg @@ -0,0 +1,1634 @@ + +/* start glyphs */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* end glyphs */ + + +CARP: + + + +` + + + +Q + + + +G + + + +M + + + +L + + + +W + + + +Y + + + +F + + + +U + + + +B + + + +; + + + + +HUB +toggle + + + + +HUB + + + +D + + + +S + + + +T + + + +N + + + +R + + + +I + + + +A + + + +E + + + +O + + + +H + + + +' + + + + + + + +Z + + + +X + + + +C + + + +V + + + +J + + + +K + + + +P + + + +, + + + +. + + + +/ + + + + + + + +&td_rgb + + + + + + + + + + + + + + + + + + + +MUTE +PLAY PAUSE + + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + +6 + + + +7 + + + +8 + + + +9 + + + +0 + + + + + + + + + + + + +QWRT: + + + +` + + + +Q + + + +W + + + +E + + + +R + + + +T + + + +Y + + + +U + + + +I + + + +O + + + +P + + + + +HUB +toggle + + + + +HUB + + + +A + + + +S + + + +D + + + +F + + + +G + + + +H + + + +J + + + +K + + + +L + + + +; + + + +' + + + + + + + +Z + + + +X + + + +C + + + +V + + + +B + + + +N + + + +M + + + +, + + + +. + + + +/ + + + + + + + +&td_rgb + + + + + + + + + + + + + + + + + + + +MUTE +PLAY PAUSE + + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + +6 + + + +7 + + + +8 + + + +9 + + + +0 + + + + + + + + + + + + +STEN: + + + + + + + +&javstenoSTENO_NUM1 + + + + + +&javstenoSTENO_NUM2 + + + + + +&javstenoSTENO_NUM3 + + + + + +&javstenoSTENO_NUM4 + + + + + +&javstenoSTENO_NUM5 + + + + + +&javstenoSTENO_NUM6 + + + + + +&javstenoSTENO_NUM7 + + + + + +&javstenoSTENO_NUM8 + + + + + +&javstenoSTENO_NUM9 + + + + + +&javstenoSTENO_NUM… + + + + + +HUB +toggle + + + + +HUB + + + + +&javstenoSTENO_S1 + + + + + +&javstenoSTENO_TL + + + + + +&javstenoSTENO_PL + + + + + +&javstenoSTENO_HL + + + + + +&javstenoSTENO_STA… + + + + + +&javstenoSTENO_STA… + + + + + +&javstenoSTENO_FR + + + + + +&javstenoSTENO_PR + + + + + +&javstenoSTENO_LR + + + + + +&javstenoSTENO_TR + + + + + +&javstenoSTENO_DR + + + + + + + + +&javstenoSTENO_S2 + + + + + +&javstenoSTENO_KL + + + + + +&javstenoSTENO_WL + + + + + +&javstenoSTENO_RL + + + + + +&javstenoSTENO_STA… + + + + + +&javstenoSTENO_STA… + + + + + +&javstenoSTENO_RR + + + + + +&javstenoSTENO_BR + + + + + +&javstenoSTENO_GR + + + + + +&javstenoSTENO_SR + + + + + +&javstenoSTENO_ZR + + + + + + + + +&javstenoSTENO_A + + + + + +&javstenoSTENO_O + + + + + +&javstenoSTENO_E + + + + + +&javstenoSTENO_U + + + + + + + + +FPS: + + + +1 +Esc + + + +2 + + + +Q + + + +W + + + +E +3 + + + +R +4 + + + +5 + + + +6 + + + +7 + + + +8 + + + +9 + + + + +HUB +toggle + + + + + + + + + + + +A + + + +S + + + +D + + + +F + + + + + + + + + + + + + + + + + + + + + +M + + + + +Z + + + +X + + + +C + + + +V + + + +G + + + + + + + + + + + + + + + + + + + + + +T + + + + + + + + + + + + + + + + + + + + + +HUB: + + + + +BTCLR + + + + + +BT1 + + + + + +BT2 + + + + + +BT3 + + + + + +BT4 + + + + + +BT5 + + + + ++ + + + +[ + + + + + + + +] + + + +* + + + += + + + + +OUTTOG + + + + + + + + + + + + + + + + + + + + +BRIUP + + + + + +VolUp + + + + +- + + + + + + + + + + + + + + + +/ + + + +\ + + + + + + + + + + + + + + + + + + + + + + + +BRIDN + + + + + +VolDown + + + + + +CARP +toggle + + + + +QWRT +toggle + + + + +STEN +toggle + + + + +FPS +toggle + + + +&td_colors + + + + + + + +&td_rgb + + + + + + + + + + + + + + + + + + + +MUTE +PLAY PAUSE + + + +Combos: + + + + +Esc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Keymap View: keymap-drawer diff --git a/keymap-drawer/corne.yaml b/keymap-drawer/corne.yaml new file mode 100644 index 0000000..6340a96 --- /dev/null +++ b/keymap-drawer/corne.yaml @@ -0,0 +1,262 @@ +layout: {zmk_keyboard: corne} +layers: + CARP: + - '`' + - Q + - G + - M + - L + - W + - Y + - F + - U + - B + - ; + - {t: HUB, h: toggle} + - HUB + - D + - S + - T + - N + - R + - I + - A + - E + - O + - H + - '''' + - $$mdi:apple-keyboard-shift$$ + - Z + - X + - C + - V + - J + - K + - P + - ',' + - . + - / + - $$mdi:apple-keyboard-shift$$ + - '&td_rgb' + - $$mdi:apple-keyboard-control$$ + - $$mdi:apple-keyboard-command$$ + - ␣ + - $$mdi:apple-keyboard-option$$ + - {t: MUTE, h: PLAY PAUSE} + QWRT: + - '`' + - Q + - W + - E + - R + - T + - Y + - U + - I + - O + - P + - {t: HUB, h: toggle} + - HUB + - A + - S + - D + - F + - G + - H + - J + - K + - L + - ; + - '''' + - $$mdi:apple-keyboard-shift$$ + - Z + - X + - C + - V + - B + - N + - M + - ',' + - . + - / + - $$mdi:apple-keyboard-shift$$ + - '&td_rgb' + - $$mdi:apple-keyboard-control$$ + - $$mdi:apple-keyboard-command$$ + - ␣ + - $$mdi:apple-keyboard-option$$ + - {t: MUTE, h: PLAY PAUSE} + STEN: + - '' + - '&javsteno STENO_NUM1' + - '&javsteno STENO_NUM2' + - '&javsteno STENO_NUM3' + - '&javsteno STENO_NUM4' + - '&javsteno STENO_NUM5' + - '&javsteno STENO_NUM6' + - '&javsteno STENO_NUM7' + - '&javsteno STENO_NUM8' + - '&javsteno STENO_NUM9' + - '&javsteno STENO_NUM10' + - {t: HUB, h: toggle} + - HUB + - '&javsteno STENO_S1' + - '&javsteno STENO_TL' + - '&javsteno STENO_PL' + - '&javsteno STENO_HL' + - '&javsteno STENO_STAR1' + - '&javsteno STENO_STAR3' + - '&javsteno STENO_FR' + - '&javsteno STENO_PR' + - '&javsteno STENO_LR' + - '&javsteno STENO_TR' + - '&javsteno STENO_DR' + - '' + - '&javsteno STENO_S2' + - '&javsteno STENO_KL' + - '&javsteno STENO_WL' + - '&javsteno STENO_RL' + - '&javsteno STENO_STAR2' + - '&javsteno STENO_STAR4' + - '&javsteno STENO_RR' + - '&javsteno STENO_BR' + - '&javsteno STENO_GR' + - '&javsteno STENO_SR' + - '&javsteno STENO_ZR' + - '' + - '&javsteno STENO_A' + - '&javsteno STENO_O' + - '&javsteno STENO_E' + - '&javsteno STENO_U' + - '' + FPS: + - {t: '1', h: Esc} + - '2' + - Q + - W + - {t: E, h: '3'} + - {t: R, h: '4'} + - '5' + - '6' + - '7' + - '8' + - '9' + - {t: HUB, h: toggle} + - ↹ + - $$mdi:apple-keyboard-shift$$ + - A + - S + - D + - F + - '' + - '' + - '' + - '' + - '' + - '' + - {t: M, h: '$$mdi:apple-keyboard-option$$'} + - Z + - X + - C + - V + - G + - '' + - '' + - '' + - '' + - '' + - '' + - T + - $$mdi:apple-keyboard-control$$ + - ␣ + - '' + - '' + - '' + HUB: + - BT CLR + - BT 1 + - BT 2 + - BT 3 + - BT 4 + - BT 5 + - + + - '[' + - ↑ + - ']' + - '*' + - '=' + - {t: OUT TOG, type: held} + - {t: '$$mdi:led-on$$', s: '$$mdi:palette$$', type: sym_by_sym} + - {t: '$$mdi:led-outline$$', s: '$$mdi:eyedropper$$', type: sym_by_sym} + - {t: '$$mdi:led-outline$$', s: '$$tabler:brightness-down$$', type: sym_by_sym} + - BRI UP + - Vol Up + - '-' + - ← + - ↓ + - → + - / + - \ + - $$mdi:apple-keyboard-shift$$ + - {t: '$$mdi:led-outline$$', s: '$$mdi:palette$$', type: sym_by_sym} + - {t: '$$mdi:led-on$$', s: '$$mdi:eyedropper$$', type: sym_by_sym} + - {t: '$$mdi:led-on$$', s: '$$tabler:brightness-up$$', type: sym_by_sym} + - BRI DN + - Vol Down + - {t: CARP, h: toggle} + - {t: QWRT, h: toggle} + - {t: STEN, h: toggle} + - {t: FPS, h: toggle} + - '&td_colors' + - $$mdi:apple-keyboard-shift$$ + - '&td_rgb' + - $$mdi:apple-keyboard-control$$ + - $$mdi:apple-keyboard-command$$ + - ␣ + - $$mdi:apple-keyboard-option$$ + - {t: MUTE, h: PLAY PAUSE} +combos: +- p: [1, 13] + k: '1' + l: [CARP, QWRT] +- p: [2, 14] + k: '2' + l: [CARP, QWRT] +- p: [3, 15] + k: '3' + l: [CARP, QWRT] +- p: [4, 16] + k: '4' + l: [CARP, QWRT] +- p: [5, 17] + k: '5' + l: [CARP, QWRT] +- p: [6, 18] + k: '6' + l: [CARP, QWRT] +- p: [7, 19] + k: '7' + l: [CARP, QWRT] +- p: [8, 20] + k: '8' + l: [CARP, QWRT] +- p: [9, 21] + k: '9' + l: [CARP, QWRT] +- p: [10, 22] + k: '0' + l: [CARP, QWRT] +- p: [8, 9] + k: $$mdi:backspace-outline$$ + l: [CARP, QWRT] +- p: [20, 21] + k: ⏎ + l: [CARP, QWRT] +- p: [2, 3] + k: Esc + l: [CARP, QWRT] + draw_separate: true +- p: [14, 15] + k: ↹ + l: [CARP, QWRT] + draw_separate: true diff --git a/snippets/rgb-config/rgb-config.conf b/snippets/rgb-config/rgb-config.conf new file mode 100644 index 0000000..57170ab --- /dev/null +++ b/snippets/rgb-config/rgb-config.conf @@ -0,0 +1,21 @@ +### RGB UNDERGLOW +CONFIG_ZMK_RGB_UNDERGLOW=y +CONFIG_ZMK_RGB_UNDERGLOW_ON_START=n +CONFIG_WS2812_STRIP=y +# 0 Solid color 1 Breathe 2 Spectrum 3 Swirl +CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=3 +# brightness level in percentage, the default value is 10 percent +CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP=1 +# Turn off RGB underglow when keyboard goes into idle state +CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE=y +# # Hue step in degrees (0-359) used by RGB actions default 10 +# CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP=30 +# CONFIG_ZMK_RGB_UNDERGLOW_SAT_STEP=2 +# CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=240 +# CONFIG_ZMK_RGB_UNDERGLOW_SAT_START=10 +# CONFIG_ZMK_RGB_UNDERGLOW_BRT_START=15 + +# Uncomment the line below to disable external power toggling by the underglow. +# By default toggling the underglow on and off also toggles external power +# on and off. This also causes the display to turn off. +CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=n diff --git a/snippets/rgb-config/snippet.yml b/snippets/rgb-config/snippet.yml new file mode 100644 index 0000000..c0552da --- /dev/null +++ b/snippets/rgb-config/snippet.yml @@ -0,0 +1,3 @@ +name: rgb-config +append: + EXTRA_CONF_FILE: rgb-config.conf diff --git a/zephyr/module.yml b/zephyr/module.yml new file mode 100644 index 0000000..d9f1966 --- /dev/null +++ b/zephyr/module.yml @@ -0,0 +1,4 @@ +build: + settings: + board_root: . + snippet_root: .