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

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

// dt-formatter: indent = "  "
// dt-formatter: reindentMultilineIntegerCells = "dedent"

/ {
  behaviors {
    llayers: llayers {
      compatible = "zmk,behavior-tap-dance";
      label = "LLAYERS";
      #binding-cells = <0>;
      bindings = <&mo 5>, <&mo 1>, <&tog 5>;
    };
    rlayers: rlayers {
      compatible = "zmk,behavior-tap-dance";
      label = "RLAYERS";
      #binding-cells = <0>;
      bindings = <&mo 5>;
    };
    lmods: lmods {
      compatible = "zmk,behavior-tap-dance";
      label = "LMODS";
      #binding-cells = <0>;
      bindings = <&sk LCTRL>, <&sk LEFT_ALT>;
    };
    rmods: rmods {
      compatible = "zmk,behavior-tap-dance";
      label = "RMODS";
      #binding-cells = <0>;
      bindings = <&sk RCTRL>, <&sk LEFT_META>;
    };
  };

  combos {
    compatible = "zmk,combos";

    capslock {
      bindings = <&kp CAPS>;
      key-positions = <24 35>;
    };

    lctrl {
      bindings = <&sk LCTRL>;
      key-positions = <25 26>;
    };

    lmeta {
      bindings = <&sk LEFT_META>;
      key-positions = <26 27>;
    };

    lalt {
      bindings = <&sk LALT>;
      key-positions = <27 28>;
    };

    rctrl {
      bindings = <&sk RCTRL>;
      key-positions = <33 34>;
    };

    rmeta {
      bindings = <&sk RIGHT_META>;
      key-positions = <33 32>;
    };

    ralt {
      bindings = <&sk RIGHT_ALT>;
      key-positions = <32 31>;
    };

    l5 {
      bindings = <&sl 5>;
      key-positions = <36 40 41 37>;
    };
  };

  macros {
  };

  keymap {
    compatible = "zmk,keymap";

    base {
      bindings = <
&kp TAB         &kp Q  &kp W  &kp F  &kp P  &kp G        &kp J      &kp L  &kp U      &kp Y    &kp SEMI  &kp INS
&kp BACKSPACE   &kp A  &kp R  &kp S  &kp T  &kp D        &kp H      &kp N  &kp E      &kp I    &kp O     &kp DEL
&kp LEFT_SHIFT  &kp Z  &kp X  &kp C  &kp V  &kp B        &kp K      &kp M  &kp COMMA  &kp DOT  &kp FSLH  &kp RSHFT
                              &mo 1  &mo 2  &kp SPACE    &kp ENTER  &mo 3  &mo 4
      >;
    };

    altkeypad {
      bindings = <
&trans    &kp MINUS     &kp PLUS  &kp N7  &kp N8  &kp N9       &trans  &trans  &trans  &trans  &trans  &trans
&kp BSPC  &kp FSLH      &kp STAR  &kp N4  &kp N5  &kp N6       &trans  &trans  &trans  &trans  &trans  &trans
&trans    &kp KP_EQUAL  &kp DOT   &kp N1  &kp N2  &kp N3       &trans  &trans  &trans  &trans  &trans  &trans
                                  &trans  &kp N0  &kp ENTER    &trans  &trans  &trans
      >;

      label = "altkeypad";
    };

    navigation {
      bindings = <
&kp ESC   &kp HOME  &kp PAGE_DOWN  &kp PG_UP  &kp END    &kp ENTER    &kp KP_NUMBER_7  &kp KP_NUMBER_8  &kp KP_NUMBER_9  &kp KP_PLUS      &kp KP_MINUS   &trans
&kp BSPC  &kp LEFT  &kp UP         &kp DOWN   &kp RIGHT  &kp DEL      &kp KP_NUMBER_4  &kp KP_NUMBER_5  &kp KP_NUMBER_6  &kp KP_MULTIPLY  &kp KP_DIVIDE  &kp BACKSPACE
&trans    &none     &none          &none      &none      &none        &kp KP_NUMBER_1  &kp KP_NUMBER_2  &kp KP_NUMBER_3  &kp KP_DOT       &kp KP_EQUAL   &trans
                                   &trans     &trans     &trans       &kp ENTER        &kp KP_N0        &trans
      >;

      label = "navigation";
    };

    punctuation {
      bindings = <
&kp F1  &mt N1 F2   &mt N2 F3   &mt N3 F4   &mt N4 F5   &mt N5 F6     &mt N6 F7         &mt N7 F8         &mt N8 F9          &mt N9 F10        &mt N0 F11         &kp F12
&trans  &kp LS(N1)  &kp LS(N2)  &kp LS(N3)  &kp LS(N4)  &kp LS(N5)    &kp LS(N6)        &kp LS(N7)        &kp LS(N8)         &kp LS(N9)        &kp LS(N0)         &trans
&trans  &kp NUBS    &kp PIPE    &kp NUHS    &kp MINUS   &kp UNDER     &kp LS(NUMBER_2)  &kp SINGLE_QUOTE  &kp DOUBLE_QUOTES  &kp LEFT_BRACKET  &kp RIGHT_BRACKET  &trans
                                &trans      &trans      &trans        &trans            &trans            &trans
      >;

      label = "punctuation";
    };

    altium {
      bindings = <
&kp ESC         &kp X      &kp SPACE  &kp UP            &kp LS(SPACE)  &kp STAR    &none  &none  &none   &none  &none  &none
&kp TAB         &kp Y      &kp LEFT   &kp DOWN          &kp RIGHT      &kp L       &none  &none  &none   &none  &none  &none
&kp LEFT_SHIFT  &kp LC(Z)  &kp LC(X)  &kp LC(C)         &kp LC(V)      &none       &none  &none  &none   &none  &none  &none
                                      &kp LEFT_CONTROL  &trans         &kp RET     &none  &none  &trans
      >;

      label = "altium";
    };

    configuration {
      bindings = <
&trans  &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
&trans  &trans        &bt BT_PRV    &bt BT_CLR    &bt BT_NXT    &trans          &kp KP_NUMLOCK  &trans  &trans  &trans  &trans  &trans
&trans  &trans        &trans        &trans        &trans        &trans          &trans          &trans  &trans  &trans  &trans  &trans
                                    &trans        &trans        &trans          &trans          &trans  &trans
      >;

      label = "configuration";
    };
  };
};