/* * Copyright (c) 2020 The ZMK Contributors * Copyright (c) 2025 Innaworks Development Limited, trading as MoErgo * * SPDX-License-Identifier: MIT */ /* THIS FILE WAS GENERATED BY GLOVE80 LAYOUT EDITOR * * This file was generated automatically. You may or may not want to * edit it directly. */ #include /* Include all behavior includes needed */ #include #include #include #include /* On demand includes */ /* Helper Macros, based on https://github.com/urob/zmk-helpers/ */ #pragma once #define ZMK_HELPER_STRINGIFY(x) #x // Preprocessor mechanism to overload macros, cf. https://stackoverflow.com/a/27051616/6114651 #define VARGS_(_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, N, ...) N #define VARGS(...) VARGS_(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) #define CONCAT_(a, b) a##b #define CONCAT(a, b) CONCAT_(a, b) #define ZMK_BEHAVIOR_CORE_tap_dance \ compatible = "zmk,behavior-tap-dance"; \ #binding-cells = <0> #define ZMK_BEHAVIOR(name, type, ...) \ name: name { \ ZMK_BEHAVIOR_CORE_ ## type; \ __VA_ARGS__ \ }; #define ZMK_TAP_DANCE(name, ...) \ ZMK_BEHAVIOR(name, tap_dance, __VA_ARGS__) #define ZMK_TD_LAYER(name, layer) \ ZMK_TAP_DANCE(name, \ tapping-term-ms = <200>; \ bindings = <&mo layer>, <&to layer>; \ ) /* Environment and metadata defines */ #define KB_TYPE_GLOVE_80 1 #define KB_TYPE_GO_60 2 #define KB_TYPE KB_TYPE_GLOVE_80 #define EDITOR_HOST_OS 'L' /* Automatically generated layer name defines */ #define LAYER_Base 0 #define LAYER_Lower 1 #define LAYER_Magic 2 #define LAYER_Factory 3 /* To deal with the situation where there is no Lower layer, to keep &lower happy */ #ifndef LAYER_Lower #define LAYER_Lower 0 #endif /* Custom Device-tree */ /* Input Listeners */ /* System behavior and Macros */ / { behaviors { ZMK_TD_LAYER(lower, LAYER_Lower) }; }; / { macros { rgb_ug_status_macro: rgb_ug_status_macro { label = "RGB_UG_STATUS"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings = <&rgb_ug RGB_STATUS>; }; }; }; / { #ifdef BT_DISC_CMD behaviors { bt_0: bt_0 { compatible = "zmk,behavior-tap-dance"; label = "BT_0"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&bt_select_0>, <&bt BT_DISC 0>; }; bt_1: bt_1 { compatible = "zmk,behavior-tap-dance"; label = "BT_1"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&bt_select_1>, <&bt BT_DISC 1>; }; bt_2: bt_2 { compatible = "zmk,behavior-tap-dance"; label = "BT_2"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&bt_select_2>, <&bt BT_DISC 2>; }; bt_3: bt_3 { compatible = "zmk,behavior-tap-dance"; label = "BT_3"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&bt_select_3>, <&bt BT_DISC 3>; }; }; macros { bt_select_0: bt_select_0 { label = "BT_SELECT_0"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings = <&out OUT_BLE>, <&bt BT_SEL 0>; }; bt_select_1: bt_select_1 { label = "BT_SELECT_1"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings = <&out OUT_BLE>, <&bt BT_SEL 1>; }; bt_select_2: bt_select_2 { label = "BT_SELECT_2"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings = <&out OUT_BLE>, <&bt BT_SEL 2>; }; bt_select_3: bt_select_3 { label = "BT_SELECT_3"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings = <&out OUT_BLE>, <&bt BT_SEL 3>; }; }; #else macros { bt_0: bt_0 { label = "BT_0"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings = <&out OUT_BLE>, <&bt BT_SEL 0>; }; bt_1: bt_1 { label = "BT_1"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings = <&out OUT_BLE>, <&bt BT_SEL 1>; }; bt_2: bt_2 { label = "BT_2"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings = <&out OUT_BLE>, <&bt BT_SEL 2>; }; bt_3: bt_3 { label = "BT_3"; compatible = "zmk,behavior-macro"; #binding-cells = <0>; bindings = <&out OUT_BLE>, <&bt BT_SEL 3>; }; }; #endif }; / { behaviors { magic: magic { compatible = "zmk,behavior-hold-tap"; label = "MAGIC_HOLD_TAP"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <200>; bindings = <&mo>, <&rgb_ug_status_macro>; }; }; }; /* Key positions */ #define POS_LH_C6R1 0 #define POS_LH_C5R1 1 #define POS_LH_C4R1 2 #define POS_LH_C3R1 3 #define POS_LH_C2R1 4 #define POS_RH_C2R1 5 #define POS_RH_C3R1 6 #define POS_RH_C4R1 7 #define POS_RH_C5R1 8 #define POS_RH_C6R1 9 #define POS_LH_C6R2 10 #define POS_LH_C5R2 11 #define POS_LH_C4R2 12 #define POS_LH_C3R2 13 #define POS_LH_C2R2 14 #define POS_LH_C1R2 15 #define POS_RH_C1R2 16 #define POS_RH_C2R2 17 #define POS_RH_C3R2 18 #define POS_RH_C4R2 19 #define POS_RH_C5R2 20 #define POS_RH_C6R2 21 #define POS_LH_C6R3 22 #define POS_LH_C5R3 23 #define POS_LH_C4R3 24 #define POS_LH_C3R3 25 #define POS_LH_C2R3 26 #define POS_LH_C1R3 27 #define POS_RH_C1R3 28 #define POS_RH_C2R3 29 #define POS_RH_C3R3 30 #define POS_RH_C4R3 31 #define POS_RH_C5R3 32 #define POS_RH_C6R3 33 #define POS_LH_C6R4 34 #define POS_LH_C5R4 35 #define POS_LH_C4R4 36 #define POS_LH_C3R4 37 #define POS_LH_C2R4 38 #define POS_LH_C1R4 39 #define POS_RH_C1R4 40 #define POS_RH_C2R4 41 #define POS_RH_C3R4 42 #define POS_RH_C4R4 43 #define POS_RH_C5R4 44 #define POS_RH_C6R4 45 #define POS_LH_C6R5 46 #define POS_LH_C5R5 47 #define POS_LH_C4R5 48 #define POS_LH_C3R5 49 #define POS_LH_C2R5 50 #define POS_LH_C1R5 51 #define POS_LH_T1 52 #define POS_LH_T2 53 #define POS_LH_T3 54 #define POS_RH_T3 55 #define POS_RH_T2 56 #define POS_RH_T1 57 #define POS_RH_C1R5 58 #define POS_RH_C2R5 59 #define POS_RH_C3R5 60 #define POS_RH_C4R5 61 #define POS_RH_C5R5 62 #define POS_RH_C6R5 63 #define POS_LH_C6R6 64 #define POS_LH_C5R6 65 #define POS_LH_C4R6 66 #define POS_LH_C3R6 67 #define POS_LH_C2R6 68 #define POS_LH_T4 69 #define POS_LH_T5 70 #define POS_LH_T6 71 #define POS_RH_T6 72 #define POS_RH_T5 73 #define POS_RH_T4 74 #define POS_RH_C2R6 75 #define POS_RH_C3R6 76 #define POS_RH_C4R6 77 #define POS_RH_C5R6 78 #define POS_RH_C6R6 79 /* Custom Defined Behaviors */ / { }; /* Generated input processors */ /* Automatically generated macro definitions */ / { macros { }; }; /* Automatically generated behavior definitions */ / { behaviors { }; }; /* Automatically generated combos definitions */ /* Automatically generated keymap */ / { keymap { compatible = "zmk,keymap"; layer_Base { bindings = < &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp EQUAL &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp END &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LCTRL &lower &kp LGUI &kp LALT &mt RALT RET &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp PG_UP &magic LAYER_Magic 0 &kp HOME &kp GRAVE &kp LEFT &kp RIGHT &kp BSPC &kp DEL &kp LALT &kp RCTRL &kp RSHFT &kp SPACE &kp UP &kp LBKT &kp RBKT &kp DOWN &kp PG_DN >; }; layer_Lower { bindings = < &kp C_BRI_DN &kp C_BRI_UP &kp C_PREV &kp C_NEXT &kp C_PP &kp C_MUTE &kp C_VOL_DN &kp C_VOL_UP &none &kp PAUSE_BREAK &trans &none &none &none &none &kp HOME &kp LS(N9) &kp KP_NUM &kp KP_EQUAL &kp KP_SLASH &kp KP_MULTIPLY &kp PRINTSCREEN &trans &none &none &kp UP_ARROW &none &kp END &kp LS(N0) &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_MINUS &kp SCROLLLOCK &trans &none &kp LEFT_ARROW &kp DOWN_ARROW &kp RIGHT_ARROW &kp PG_UP &kp LS(N5) &kp KP_N4 &kp KP_N5 &kp KP_N6 &kp KP_PLUS &none &trans &kp K_APP &none &kp F11 &kp F12 &kp PG_DN &trans &trans &to 0 &trans &trans &trans &kp COMMA &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_ENTER &trans &magic LAYER_Magic 0 &kp CAPS &kp INS &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &kp KP_N0 &kp KP_N0 &kp KP_DOT &kp KP_ENTER &trans >; }; layer_Magic { bindings = < &bt BT_CLR &none &none &none &none &none &none &none &none &bt BT_CLR_ALL &none &none &none &none &none &none &none &none &none &none &none &none &none &rgb_ug RGB_SPI &rgb_ug RGB_SAI &rgb_ug RGB_HUI &rgb_ug RGB_BRI &rgb_ug RGB_TOG &none &none &none &none &none &none &bootloader &rgb_ug RGB_SPD &rgb_ug RGB_SAD &rgb_ug RGB_HUD &rgb_ug RGB_BRD &rgb_ug RGB_EFF &none &none &none &none &none &bootloader &sys_reset &none &none &none &none &none &bt_2 &bt_3 &none &none &none &none &none &none &none &none &none &sys_reset &none &none &none &none &none &bt_0 &bt_1 &out OUT_USB &none &none &none &none &none &none &none &to LAYER_Factory >; }; layer_Factory { bindings = < &kp NUMBER_0 &kp NUMBER_6 &kp NUMBER_2 &kp NUMBER_8 &kp NUMBER_4 &kp NUMBER_4 &kp NUMBER_8 &kp NUMBER_2 &kp NUMBER_6 &kp NUMBER_0 &kp NUMBER_1 &kp NUMBER_7 &kp NUMBER_3 &kp NUMBER_9 &kp NUMBER_5 &kp NUMBER_0 &kp NUMBER_0 &kp NUMBER_5 &kp NUMBER_9 &kp NUMBER_3 &kp NUMBER_7 &kp NUMBER_1 &kp NUMBER_2 &kp NUMBER_8 &kp NUMBER_4 &kp NUMBER_0 &kp NUMBER_6 &kp NUMBER_1 &kp NUMBER_1 &kp NUMBER_6 &kp NUMBER_0 &kp NUMBER_4 &kp NUMBER_8 &kp NUMBER_2 &kp NUMBER_3 &kp NUMBER_9 &kp NUMBER_5 &kp NUMBER_1 &kp NUMBER_7 &kp NUMBER_2 &kp NUMBER_2 &kp NUMBER_7 &kp NUMBER_1 &kp NUMBER_5 &kp NUMBER_9 &kp NUMBER_3 &kp NUMBER_4 &kp NUMBER_0 &kp NUMBER_6 &kp NUMBER_2 &kp NUMBER_8 &kp NUMBER_3 &kp NUMBER_4 &kp NUMBER_5 &kp NUMBER_6 &kp NUMBER_6 &kp NUMBER_5 &kp NUMBER_4 &kp NUMBER_3 &kp NUMBER_8 &kp NUMBER_2 &kp NUMBER_6 &kp NUMBER_0 &kp NUMBER_4 &kp NUMBER_5 &kp NUMBER_1 &kp NUMBER_7 &kp NUMBER_3 &kp NUMBER_9 &kp NUMBER_7 &kp NUMBER_8 &kp NUMBER_9 &kp NUMBER_9 &kp NUMBER_8 &kp NUMBER_7 &kp NUMBER_9 &kp NUMBER_3 &kp NUMBER_7 &kp NUMBER_1 &kp NUMBER_5 >; }; }; };