From 6cf3e48b4da8953ee2ba2fd71dbfc4a29b9bc0f3 Mon Sep 17 00:00:00 2001 From: jakobst1n Date: Wed, 29 Nov 2023 21:40:14 +0100 Subject: Move keymap from main zmk source to separate zmk-config repo. Basically adhere to the "new way of doing things". Also, since I made the keymap the first time, the ckp boards has made it into the core zmk repo. So it is a hassle to compile without changing things in the source now. --- bin/build.sh | 181 ++++++++++++++++++++++++++++++ config/bt60_v2.conf | 45 +++++++- config/bt60_v2.keymap | 297 ++++++++++++++++++++++--------------------------- config/bt60_v2.overlay | 33 ++++++ config/common.h | 29 +++++ utils/unicode.h | 76 +++++++++++++ 6 files changed, 497 insertions(+), 164 deletions(-) create mode 100755 bin/build.sh create mode 100644 config/bt60_v2.overlay create mode 100644 config/common.h create mode 100644 utils/unicode.h diff --git a/bin/build.sh b/bin/build.sh new file mode 100755 index 0000000..b0314d8 --- /dev/null +++ b/bin/build.sh @@ -0,0 +1,181 @@ +#!/usr/bin/env bash +# Pulled from https://github.com/urob/zmk-config/, with some minor modifications + +# Parse input arguments +while [[ $# -gt 0 ]]; do + case $1 in + # needed when user isn't in docker group + -s|--su) + SUDO="sudo" + ;; + + -m|--multithread) + MULTITHREAD="true" + ;; + + -c|--clear-cache) + CLEAR_CACHE="true" + ;; + + # comma or space separated list of boards (use quotes if space separated) + # if ommitted, will compile list of boards in build.yaml + -b|--board) + BOARDS="$2" + shift + ;; + + -v|--version) + ZEPHYR_VERSION="$2" + shift + ;; + + -o|--output-dir) + OUTPUT_DIR="$2" + shift + ;; + + --log-dir) + LOG_DIR="$2" + shift + ;; + + --host-config-dir) + HOST_CONFIG_DIR="$2" + shift + ;; + + --host-zmk-dir) + HOST_ZMK_DIR="$2" + shift + ;; + + --docker-config-dir) + DOCKER_CONFIG_DIR="$2" + shift + ;; + + --docker-zmk-dir) + DOCKER_ZMK_DIR="$2" + shift + ;; + + --) + WEST_OPTS="${@:2}" + break + ;; + + *) + echo "Unknown option $1" + exit 1 + ;; + + esac + shift +done + +# Set defaults +[[ -z $ZEPHYR_VERSION ]] && ZEPHYR_VERSION="3.2" + +[[ -z $OUTPUT_DIR ]] && OUTPUT_DIR="$HOME/Downloads" +[[ -z $LOG_DIR ]] && LOG_DIR="/tmp" + +[[ -z $HOST_ZMK_DIR ]] && HOST_ZMK_DIR="$HOME/_code/zmk" +[[ -z $HOST_CONFIG_DIR ]] && HOST_CONFIG_DIR="$HOME/_code/zmk-config" + +[[ -z $DOCKER_ZMK_DIR ]] && DOCKER_ZMK_DIR="/workspace/zmk" +[[ -z $DOCKER_CONFIG_DIR ]] && DOCKER_CONFIG_DIR="/workspace/zmk-config" + +[[ -z $BOARDS ]] && BOARDS="$(grep '^[[:space:]]*\-[[:space:]]*board:' $HOST_CONFIG_DIR/build.yaml | sed 's/^.*: *//')" + +[[ -z $CLEAR_CACHE ]] && CLEAR_CACHE="false" + +DOCKER_IMG="zmkfirmware/zmk-dev-arm:$ZEPHYR_VERSION" +DOCKER_BIN="docker" + +# +--------------------+ +# | BUILD THE FIRMWARE | +# +--------------------+ + +echo "Build mode: docker" +# DOCKER_CMD="$DOCKER_BIN run --name zmk-$ZEPHYR_VERSION --rm \ +DOCKER_CMD="$DOCKER_BIN run --rm \ + --mount type=bind,source=$HOST_ZMK_DIR,target=$DOCKER_ZMK_DIR \ + --mount type=bind,source=$HOST_CONFIG_DIR,target=$DOCKER_CONFIG_DIR,readonly \ + --mount type=volume,source=zmk-root-user-$ZEPHYR_VERSION,target=/root \ + --mount type=volume,source=zmk-zephyr-$ZEPHYR_VERSION,target=$DOCKER_ZMK_DIR/zephyr \ + --mount type=volume,source=zmk-zephyr-modules-$ZEPHYR_VERSION,target=$DOCKER_ZMK_DIR/modules \ + --mount type=volume,source=zmk-zephyr-tools-$ZEPHYR_VERSION,target=$DOCKER_ZMK_DIR/tools" + +# Reset volumes +if [[ $CLEAR_CACHE = true ]] +then + $DOCKER_BIN volume rm $($DOCKER_BIN volume ls -q | grep "^zmk-.*-$ZEPHYR_VERSION$") +fi + +# Update west if needed +OLD_WEST="/root/west.yml.old" +$DOCKER_CMD -w "$DOCKER_ZMK_DIR" "$DOCKER_IMG" /bin/bash -c " \ + if [[ ! -f .west/config ]]; then west init -l app/; fi \ + && if [[ -f $OLD_WEST ]]; then md5_old=\$(md5sum $OLD_WEST | cut -d' ' -f1); fi \ + && [[ \$md5_old != \$(md5sum app/west.yml | cut -d' ' -f1) ]] \ + && west update \ + && cp app/west.yml $OLD_WEST" + +# Build parameters +DOCKER_PREFIX="$DOCKER_CMD -w $DOCKER_ZMK_DIR/app $DOCKER_IMG" +SUFFIX="${ZEPHYR_VERSION}_docker" +CONFIG_DIR="$DOCKER_CONFIG_DIR/config" + +# usage: compile_board board +compile_board () { + BUILD_DIR="${1}_$SUFFIX" + LOGFILE="$LOG_DIR/zmk_build_$1.log" + [[ $MULTITHREAD = "true" ]] || echo -en "\n$(tput setaf 2)Building $1... $(tput sgr0)" + [[ $MULTITHREAD = "true" ]] && echo -e "$(tput setaf 2)Building $1... $(tput sgr0)" + $DOCKER_PREFIX west build -d "build/$BUILD_DIR" -b $1 $WEST_OPTS \ + -- -DZMK_CONFIG="$CONFIG_DIR" -Wno-dev > "$LOGFILE" 2>&1 + if [[ $? -eq 0 ]] + then + [[ $MULTITHREAD = "true" ]] || echo "$(tput setaf 2)done$(tput sgr0)" + echo "Build log saved to \"$LOGFILE\"." + if [[ -f $HOST_ZMK_DIR/app/build/$BUILD_DIR/zephyr/zmk.uf2 ]] + then + TYPE="uf2" + else + TYPE="bin" + fi + OUTPUT="$OUTPUT_DIR/$1-zmk.$TYPE" + [[ -f $OUTPUT ]] && [[ ! -L $OUTPUT ]] && mv "$OUTPUT" "$OUTPUT.bak" + cp "$HOST_ZMK_DIR/app/build/$BUILD_DIR/zephyr/zmk.$TYPE" "$OUTPUT" + else + echo + cat "$LOGFILE" + echo "$(tput setaf 1)Error: $1 failed$(tput sgr0)" + fi +} + +cd "$HOST_ZMK_DIR/app" +if [[ $MULTITHREAD = "true" ]]; then + i=1 + for board in $(echo $BOARDS | sed 's/,/ /g') + do + compile_board $board & + eval "T${i}=\${!}" + eval "B${i}=\$board" # Store the board name in a corresponding variable + ((i++)) + done + + echo "Starting $(($i - 1)) background threads:" + for ((x=1; x #include #include +#include -#define ANSI -//#define ISO -//#define ALL_1U -//#define HHKB +#define K_E 17 +#define K_O 23 +#define K_A 28 -/ { - chosen { - #ifdef ANSI - zmk,matrix_transform = &ansi_transform; - #elif defined(ISO) - zmk,matrix_transform = &iso_transform; - #elif defined(ALL_1U) - zmk,matrix_transform = &all_1u_transform; - #elif defined(HHKB) - zmk,matrix_transform = &hhkb_transform; - #else - #error "Layout not defined, please define a layout by uncommenting the appropriate line in bt60_v2.keymap" - #endif - }; +#include "common.h" - keymap { - compatible = "zmk,keymap"; - #ifdef ANSI - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | - // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | - // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | - // ------------------------------------------------------------------------------------------ - bindings = < +#define DEFAULT 0 +#define RAISE 1 +#define SPECIAL 2 +#define MAC_U 3 +#define GAMING_U 4 - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - // ------------------------------------------------------------------------------------------ - // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | - // | TAB | Q | UP | E | HUI | HUD | Y | U | INS | O |PSCRN| SLCK| P_B | RGB_TOG| - // | CAPS | LEFT| DOWN|RIGHT| BRI | BRD | H | J | K | L | HOME| PGUP| BOOT | - // | SHIFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | END | PGDN | BL_TOG | - // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | RESET | BT_CLR | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL - &trans &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &rgb_ug RGB_TOG - &trans &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader - &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &kp END &kp PG_DN &bl BL_TOG - &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &sys_reset &bt BT_CLR - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - #elif defined(ISO) - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | - // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | # | ENTER | - // | SHIFT | \ | Z | X | C | V | B | N | M | , | . | / | SHIFT | - // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL | - // ------------------------------------------------------------------------------------------ - bindings = < +ZMK_UNICODE_PAIR_MACWIN(mwn_no_ae, N0, N0, E, N6, N0, N0, C, N6) +ZMK_UNICODE_PAIR_MACWIN(mwn_no_ao, N0, N0, E, N5, N0, N0, C, N5) +ZMK_UNICODE_PAIR_MACWIN(mwn_no_oe, N0, N0, F, N8, N0, N0, D, N8) +ZMK_UNICODE_PAIR_LINUX(lnx_no_ae, N0, N0, E, N6, N0, N0, C, N6) +ZMK_UNICODE_PAIR_LINUX(lnx_no_ao, N0, N0, E, N5, N0, N0, C, N5) +ZMK_UNICODE_PAIR_LINUX(lnx_no_oe, N0, N0, F, N8, N0, N0, D, N8) - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT - &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp NON_US_HASH &kp RET - &kp LSHFT &kp NON_US_BSLH &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp K_CMENU &kp RCTRL - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - // ------------------------------------------------------------------------------------------ - // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | - // | TAB | Q | UP | E | HUI | HUD | Y | U | INS | O |PSCRN| SLCK| P_B | | - // | CAPS | LEFT| DOWN|RIGHT| BRI | BRD | H | J | K | L | HOME| PGUP|RGB_TOG| BOOT | - // | SHIFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| B | N | M | , | END | PGDN | BL_TOG | - // | BT_PRV| BT_NXT| ALT | SPACE | ALT | 1 | RESET |BT_CLR | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL - &trans &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK - &trans &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &kp HOME &kp PG_UP &rgb_ug RGB_TOG &bootloader - &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &trans &kp END &kp PG_DN &bl BL_TOG - &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &sys_reset &bt BT_CLR - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - #elif defined(ALL_1U) - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BKSP | DEL | - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | - // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | - // | SHFT |NONE| Z | X | C | V | B | N | M | , | . | / | SHFT | UP | 1 | - // | CTL | WIN | ALT | SPACE | RALT| CTRL | LEFT | DOWN | RIGHT | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp DEL - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &none &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT &kp UP &mo 1 - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - // ------------------------------------------------------------------------------------------ - // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |BKSP | DEL | - // | TAB | Q | W | E | HUI | HUD | Y | U | INS | O |PSCRN| SLCK| P_B | RGB_TOG | - // | CAPS | A | S | D | BRI | BRD | H | J | K | L | HOME| PGUP| BOOT | - // | SHFT |NONE|VOLDN|VOLUP|MUTE|BLINC|BLDEC| N | M | , | END | PGDN | SHFT|BL_TOG| 1 | - // | BT_PRV| BT_NXT| ALT | SPACE | RALT| CTRL | LEFT |RESET| BT_CLR | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans - &trans &trans &trans &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &rgb_ug RGB_TOG - &trans &trans &trans &trans &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader - &trans &none &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &kp END &kp PG_DN &trans &bl BL_TOG &trans - &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &sys_reset &bt BT_CLR - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - #elif defined(HHKB) - default_layer { - // ------------------------------------------------------------------------------------------ - // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | - // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | - // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | - // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | - // | CTL | WIN | ALT | SPACE | ALT | 1 | CTRL | - // ------------------------------------------------------------------------------------------ - bindings = < +COMBO(lnx_oe_comb, K_O K_E, DEFAULT, &lnx_no_oe) +COMBO(lnx_ae_comb, K_A K_E, DEFAULT, &lnx_no_ae) +COMBO(lnx_ao_comb, K_A K_O, DEFAULT, &lnx_no_ao) - &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT - &kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &mo 1 &kp RCTRL - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; - }; - raise { - // ------------------------------------------------------------------------------------------ - // |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | - // | TAB | Q | UP | E | HUI | HUD | Y | U | INS | O |PSCRN| SLCK| P_B | RGB_TOG| - // | CAPS | LEFT| DOWN|RIGHT| BRI | BRD | H | J | K | L | HOME| PGUP| BOOT | - // | SHFT |VOLDN|VOLUP| MUTE|BLINC|BLDEC| N | M | , | END | PGDN | BL_TOG | - // | BT_PRV | BT_NXT | ALT | SPACE | RESET | 1 | BT_CLR | - // ------------------------------------------------------------------------------------------ - bindings = < - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL - &trans &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &rgb_ug RGB_TOG - &trans &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_BRI &rgb_ug RGB_BRD &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader - &trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC &trans &trans &trans &kp END &kp PG_DN &bl BL_TOG - &bt BT_PRV &bt BT_NXT &trans &trans &sys_reset &trans &bt BT_CLR - >; - sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; +COMBO(mwn_oe_comb, 54 37, MAC_U, &mwn_no_oe) +COMBO(mwn_ae_comb, 54 38, MAC_U, &mwn_no_ae) +COMBO(mwn_ao_comb, 54 25, MAC_U, &mwn_no_ao) + +/ { + behaviors { + mo_tog: behavior_mo_tog { + compatible = "zmk,behavior-hold-tap"; + label = "mo_tog"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <200>; + bindings = <&mo>, <&tog>; + }; + td_rfn_u_c: rfn_u { + compatible = "zmk,behavior-tap-dance"; + label = "RFN_UPPER"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&mo 1>, <&tog 1>; + }; + td_rfn_l_c: rfn_l { + compatible = "zmk,behavior-tap-dance"; + label = "RFN_LOWER"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&mo 1>, <&mo 2>; + }; + td_lctrl_l: lctrl_l { + compatible = "zmk,behavior-tap-dance"; + label = "LCTRL_LOWER"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&mo 1>, <&mo 2>; + }; + td_lshift_c: lshift_caps { + compatible = "zmk,behavior-tap-dance"; + label = "LSHIFT_CAPS"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&kp LSHFT>, <&kp CAPS>; + }; + td_rshift_c: rshift_caps { + compatible = "zmk,behavior-tap-dance"; + label = "RSHIFT_CAPS"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&kp RSHFT>, <&kp CAPS>; + }; }; - #else - #error "Layout not defined, please define a layout by uncommenting the appropriate line in bt60_v2.keymap" - #endif - }; + keymap { + compatible = "zmk,keymap"; + + default_layer { + // ------------------------------------------------------------------------------------------ + // | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | # | ENTER | + // | SHIFT| \ | Z | trans | . | / | SHIFT | + // | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | CTRL| + // ------------------------------------------------------------------------------------------ + bindings = < + + &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT + &mt LCTRL ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp NON_US_HASH &kp RET + &kp LSHIFT &kp NON_US_BSLH &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &td_rshift_c &td_rfn_u_c + &td_lctrl_l &kp LGUI &kp LALT &kp SPACE &kp RALT &td_rfn_l_c &kp C_MENU &kp RCTRL + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + raise { + bindings = < + &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL + ___ ___ ___ ___ ___ ___ &kp HOME &kp PG_DN &kp PG_UP &kp END &kp PSCRN &kp SLCK &kp PAUSE_BREAK + ___ ___ ___ ___ ___ ___ &kp LEFT &kp DOWN &kp UP &kp RIGHT ___ ___ ___ ___ + &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &bl BL_INC &bl BL_DEC ___ ___ ___ ___ ___ ___ ___ ___ + &to 0 ___ ___ ___ ___ &mo 2 ___ ___ + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + special { + bindings = < + &out OUT_TOG &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 ___ ___ ___ ___ ___ ___ ___ &bt BT_CLR + ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ &bootloader + ___ &tog MAC_U &tog GAMING_U ___ ___ ___ ___ ___ ___ ___ ___ ___ &bl BL_TOG ___ + &to 0 ___ ___ ___ ___ ___ &sys_reset ___ + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + + mac_unicode { + bindings = < + ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + ___ ___ ___ ___ ___ ___ ___ ___ + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + gaming { + bindings = < + &kp ESC ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + &kp LCTRL ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + &kp LSHIFT ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + &kp LCTRL ___ ___ ___ ___ ___ ___ ___ + >; + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; + }; + + }; }; + diff --git a/config/bt60_v2.overlay b/config/bt60_v2.overlay new file mode 100644 index 0000000..02595ab --- /dev/null +++ b/config/bt60_v2.overlay @@ -0,0 +1,33 @@ +#include + +/ { + model = "BT60_V2"; + compatible = "polarityworks,bt60_v2"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + zmk,underglow = &led_strip; + zmk,backlight = &backlight; + zmk,matrix_transform = &default_transform; + zmk,battery = &vbatt; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <5>; + map = < + 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(1,12) RC(1,13) + 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(2,12) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,14) + RC(5,0) RC(5,1) RC(5,2) RC(5,6) RC(5,10) RC(5,11) RC(5,12) RC(5,13) + >; + }; + + +}; + diff --git a/config/common.h b/config/common.h new file mode 100644 index 0000000..1292b8b --- /dev/null +++ b/config/common.h @@ -0,0 +1,29 @@ +#define ___ &trans +#define XXX &none + +#ifndef QUICK_TAP_MS + #define QUICK_TAP_MS 175 +#endif + +#define ZMK_HELPER_STRINGIFY(x) #x + +#define MO_TOG(layer) &mo_tog layer layer // Macro to apply momentary-layer-on-hold/toggle-layer-on-tap to a specific layer + +&sk { // sticky-key config + release-after-ms = <900>; // release after 0.6s + quick-release; // no double capitalization when rolling keys +}; + +&sl { // sticky-layer config + ignore-modifiers; // allow chording sticky mods & layers +}; + +< { // layer-tap config + flavor = "balanced"; + tapping-term-ms = <200>; + quick-tap-ms = ; +}; + + +#include "../utils/unicode.h" + diff --git a/utils/unicode.h b/utils/unicode.h new file mode 100644 index 0000000..1965a0d --- /dev/null +++ b/utils/unicode.h @@ -0,0 +1,76 @@ +#define COMBO(name, POS, LAYERS, BINDINGS) \ + / { \ + combos { \ + compatible = "zmk,combos"; \ + name { \ + timeout-ms = <50>; \ + key-positions = ; \ + layers = ; \ + bindings = ; \ + }; \ + }; \ + }; + +/* ZMK_UNICODE */ +#define UC_LEAD_MACWIN ¯o_press &kp LALT // macOS/Windows-Alt-Codes +#define UC_LEAD_LINUX ¯o_tap &kp LS(LC(U)) // Linux +#define UC_LEAD_WINDOWS ¯o_tap &kp RALT &kp U // Windows + WinCompose (default) + +#define UC_TRAIL_MACWIN ¯o_release &kp LALT // macOS/Windows-Alt-Codes +#define UC_TRAIL_LINUX ¯o_tap &kp SPACE // Linux +#define UC_TRAIL_WINDOWS ¯o_tap &kp RET // Windows + WinCompose (default) + +#define UC_MACRO_LINUX(name, unicode_bindings) \ + / { \ + macros { \ + name: name { \ + compatible = "zmk,behavior-macro"; \ + label = ZMK_HELPER_STRINGIFY(UC_MACRO_ ## name); \ + wait-ms = <0>; \ + tap-ms = <0>; \ + #binding-cells = <0>; \ + bindings = , <¯o_tap unicode_bindings>, ; \ + }; \ + }; \ + }; +#define UC_MACRO_MACWIN(name, unicode_bindings) \ + / { \ + macros { \ + name: name { \ + compatible = "zmk,behavior-macro"; \ + label = ZMK_HELPER_STRINGIFY(UC_MACRO_ ## name); \ + wait-ms = <0>; \ + tap-ms = <0>; \ + #binding-cells = <0>; \ + bindings = , <¯o_tap unicode_bindings>, ; \ + }; \ + }; \ + }; + +#define UC_MODMORPH(name, uc_binding, shifted_uc_binding) \ + / { \ + behaviors { \ + name: name { \ + compatible = "zmk,behavior-mod-morph"; \ + label = ZMK_HELPER_STRINGIFY(UC_MORPH_ ## name); \ + #binding-cells = <0>; \ + bindings = , ; \ + mods = <(MOD_LSFT|MOD_RSFT)>; \ + }; \ + }; \ + }; + +#define ZMK_UNICODE_SINGLE(name, L0, L1, L2, L3) \ + UC_MACRO(name ## _lower, &kp L0 &kp L1 &kp L2 &kp L3) \ + UC_MODMORPH(name, &name ## _lower, &none) + +#define ZMK_UNICODE_PAIR_LINUX(name, L0, L1, L2, L3, U0, U1, U2, U3) \ + UC_MACRO_LINUX(name ## _lower, &kp L0 &kp L1 &kp L2 &kp L3) \ + UC_MACRO_LINUX(name ## _upper, &kp U0 &kp U1 &kp U2 &kp U3) \ + UC_MODMORPH(name, &name ## _lower, &name ## _upper) + +#define ZMK_UNICODE_PAIR_MACWIN(name, L0, L1, L2, L3, U0, U1, U2, U3) \ + UC_MACRO_MACWIN(name ## _lower, &kp L0 &kp L1 &kp L2 &kp L3) \ + UC_MACRO_MACWIN(name ## _upper, &kp U0 &kp U1 &kp U2 &kp U3) \ + UC_MODMORPH(name, &name ## _lower, &name ## _upper) + -- cgit v1.2.3