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

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

#define LAYER_ID_DEFAULT 0
#define LAYER_ID_FUNC 1
#define LAYER_ID_ALT 2

&pro_micro_i2c {
	status = "okay";
};

/ {
    sensors {
		compatible = "zmk,keymap-sensors";
		sensors = <&encoder_1>;
	};

    behaviors {
		tildeesc: tilde_escape {
			compatible = "zmk,behavior-mod-morph";
			label = "TILDE_ESCAPE";
			#binding-cells = <0>;
			bindings = <&kp ESC>, <&kp TILDE>;
            mods = <(MOD_LSFT)>;
		};
	};

    combos {
		compatible = "zmk,combos";
        combo_layer_navigation { 
            key-positions = <34 19 36>; 
            bindings = <&tog LAYER_ID_FUNC>; 
        };
        combo_shift_lock { 
            key-positions = <19 35>; 
            bindings = <&kt LSHFT>; 
        };
    };

    keymap {
        compatible = "zmk,keymap";

        default_layer {
            label = "ANSI";

            sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>;

            bindings = <
            &tildeesc         &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 HOME
&kp C_MUTE  &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 PG_UP
&to 3       &mo LAYER_ID_ALT  &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 PG_DN
&trans      &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   &kp END
&trans      &kp LCTRL         &kp LGUI  &kp LALT                      &kp SPACE                     &mo LAYER_ID_FUNC &kp RCTRL  &kp RALT  &kp LEFT            &kp DOWN &kp RIGHT
            >;
        };
        function_layer {
            label = "Function";
            
            sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>;

            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     &kp DEL
&trans &kp CAPS    &kp PG_UP    &kp HOME     &kp UP       &kp END      &trans       &trans    &trans    &trans    &trans    &trans    &trans    &trans  &kp INS     &kp INS
&none  &trans      &kp PG_DN    &kp LEFT     &kp DOWN     &kp RIGHT    &trans       &trans    &trans    &trans    &trans    &trans    &trans            &kp PSCRN   &kp PSCRN
&none  &bt BT_CLR  &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans    &trans    &trans    &trans    &trans    &trans    &bootloader &reset  &kp C_PP
&none  &trans      &trans       &trans                                              &trans                        &trans    &kp C_VOLUME_UP &kp C_VOLUME_DOWN &kp C_MUTE &trans &trans
            >;
        };
        alt_layer {
            label = "Alt";
            
            sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOLUME_DOWN>;

            bindings = <
       &trans  &kp LA(F1) &kp LA(F2) &kp LA(F3) &kp LA(F4) &kp LA(F5) &kp LA(F6) &kp LA(F7) &kp LA(F8) &kp LA(F9) &kp LA(F10) &kp LA(F11) &kp LA(F12) &trans      &trans
&trans &trans  &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans       &trans      &trans      &trans
&none  &trans  &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans                   &trans      &trans
&none  &trans  &none      &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans     &trans       &trans      &trans      &trans
&none  &trans  &trans     &trans                           &trans                           &trans     &trans     &trans     &trans                   &trans      &trans
            >;
        };
    };
};
