// Copyright (c) 2022 The ZMK Contributors
// SPDX-License-Identifier: MIT

#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>

// Home row mods macro
#define HRML(k1,k2,k3,k4) &ht LSHFT k1  &ht LALT k2  &ht LCTRL k3  &ht LGUI k4
#define HRMR(k1,k2,k3,k4) &ht RGUI k1  &ht RCTRL k2  &ht RALT k3  &ht RSHFT k4

/ {
    behaviors {
        ht: hold_tap {
            compatible = "zmk,behavior-hold-tap";
            #binding-cells = <2>;
            flavor = "tap-preferred";
            tapping-term-ms = <220>;
            quick-tap-ms = <150>;
            require-prior-idle-ms = <100>;
            bindings = <&kp>, <&kp>;
        };
        
        esc_shct: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&mt LSHIFT ESC>, <&kp LCTRL>;
        };

        eq_dot: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&kp EQUAL>, <&kp DOT>;
        };
        
        dash_slsh: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&kp MINUS>, <&kp SLASH>;
        };

        tab_ret: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&kp TAB>, <&kp RET>;
        };

        f1_f7: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&kp F1>, <&kp F7>;
        };

        f2_f8: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&kp F2>, <&kp F8>;
        };

        f3_f9: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&kp F3>, <&kp F9>;
        };

        f4_f10: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&kp F4>, <&kp F10>;
        };

        f5_f11: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&kp F5>, <&kp F11>;
        };
        f6_f12: tap_dance_mod_tap {
            compatible = "zmk,behavior-tap-dance";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&kp F6>, <&kp F12>;
        };
    };

    conditional_layers {
        compatible = "zmk,conditional-layers";
        tri_layer {
            if-layers = <1 2>;
            then-layer = <3>;
        };
    };

    combos {
        compatible = "zmk,combos";
        combo_act {
            timeout-ms = <50>;
            key-positions = <14 31>;
            bindings = <&tog act>;
            layers = <default_layer>;
        };
    };

    keymap {
        compatible = "zmk,keymap";
        base {
            bindings = <
            &lt sym Q  &kp W      &kp F      &kp P      &kp G          &kp J      &kp L      &kp U      &kp Y      &kp SEMI;
            &kp A      &kp R      &kp S      &kp T      &kp D          &kp H      &kp N      &kp E      &kp I      &kp O;
            &kp Z      &kp X      &kp C      &kp V      &kp B          &kp K      &kp M      &kp COMMA  &kp DOT    &kp FSLH;
                                             &esc_shct  &kp SPACE      &kp BSPC   &kp ENTER
            >;
        };

        sym {
            bindings = <
            &none      &kp N7     &kp N8     &kp N9         &kp N0         &kp BSLH     &kp GRAVE    &kp LBKT   &kp RBKT   &kp APOS;
            &none      &kp N4     &kp N5     &kp N6         &eq_dot        &kp HOME     &kp LEFT     &kp DOWN   &kp UP     &kp RIGHT;
            &none      &kp N1     &kp N2     &kp N3         &dash_slsh     &kp END      &kp LC(LEFT) &kp PG_DN  &kp PG_UP  &kp LC(RIGHT);
                                             &mt LSHIFT ESC &tab_ret       &lt mnav DEL &none
            >;
        };

        mnav {
            bindings = <
            &trans     &trans     &msc SCRL_UP   &trans     &trans         &trans     &mkp LCLK      &msc SCRL_DOWN &msc SCRL_UP &mkp RCLK;
            &trans     &mkp LCLK  &mkp MCLK      &mkp RCLK  &trans         &trans     &mmv MOVE_LEFT &mmv MOVE_DOWN &mmv MOVE_UP &mmv MOVE_RIGHT;
            &trans     &trans     &msc SCRL_DOWN &trans     &trans         &trans     &trans         &trans         &trans       &trans;
                                                 &trans     &trans         &trans     &trans
            >;
        };

        act {
            bindings = <
            &f1_f7     &f2_f8     &f3_f9     &kp TAB     &trans            &studio_unlock     &trans     &trans       &trans       &trans;
            &f4_f10    &f5_f11    &f6_f12    &kp LS(TAB) &tog act          &bootloader     &kp C_PREV &kp C_PP     &kp C_STOP   &kp C_NEXT;
            &sk LCTRL  &sk LSHIFT &sk LALT   &sk LGUI    &kp PRSCRN        &trans     &kp C_MUTE &kp C_VOL_DN &kp C_VOL_UP &trans;
                                             &trans      &tog act          &trans     &trans
            >;
        };
    };
};