/*
 * 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 <behaviors.dtsi>
/* Include all behavior includes needed */
#include <dt-bindings/zmk/outputs.h>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>
#include <dt-bindings/zmk/rgb.h>

/* 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
            >;
        };

    };
};
