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

/ {
    keymap {
        compatible = "zmk,keymap";

        default_layer {
// ------------------------------------------------------------------------------------------------------------
// |  `    |  1  |  2  |  3   |  4   |  5   |                   |  6   |  7    |  8    |  9   |   0   |       |
// |  ESC  |  Q  |  W  |  E   |  R   |  T   |                   |  Y   |  U    |  I    |  O   |   P   | BKSPC |
// |  TAB  |  A  |  S  |  D   |  F   |  G   |                   |  H   |  J    |  K    |  L   |   ;   |   '   |
// | SHIFT |  Z  |  X  |  C   |  V   |  B   |  MUTE  |  |       |  N   |  M    |  ,    |  .   |   /   | SHIFT |
//               | GUI | ALT  | CTRL | LOWER|  ENTER |  | SPACE | RAISE| CTRL  | ALT   | GUI  |
            bindings = <
&kp GRAV  &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5                  &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &none
&kp ESC   &kp Q     &kp W     &kp E     &kp R     &kp T                      &kp Y     &kp U     &kp I     &kp O     &kp P     &kp BKSP
&kp TAB   &kp A     &kp S     &kp D     &kp F     &kp G                      &kp H     &kp J     &kp K     &kp L     &kp SCLN  &kp QUOT
&kp LSFT  &kp Z     &kp X     &kp C     &kp V     &kp B  &cp M_MUTE &none    &kp N     &kp M     &kp CMMA  &kp DOT   &kp FSLH  &kp RSFT
                    &kp LGUI  &kp LALT  &kp LCTL  &mo 1  &kp RET    &kp SPC  &mo 2     &kp RCTL  &kp RALT  &kp RGUI
            >;

            sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>;
        };

        lower_layer {
// TODO: Some binds are waiting for shifted keycode support.
// ------------------------------------------------------------------------------------------------------------
// |       |  F1 |  F2 |  F3  |  F4  |  F5  |                   |  F6  |  F7   |  F8   |  F9  |  F10  |  F11  |
// | `     |   1 |   2 |   3  |   4  |   5  |                   |   6  |   7   |   8   |   9  |    0  |  F12  |
// |       |  !  |  @  |  #   |  $   |  %   |                   |  ^   |  &    |  *    |  (   |   )   |   |   |
// |       |  =  |  -  |  +   |  {   |  }   |        |  |       |  [   |  ]    |  ;    |  :   |   \   |       |
//               |     |      |      |      |        |  |       |      |       |       |      |
            bindings = <
&trans   &kp F1    &kp F2    &kp F3    &kp F4    &kp F5                   &kp F6    &kp F7    &kp F8    &kp F9    &kp F10   &kp F11
&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5                &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp F12
&trans   &kp BANG  &kp ATSN  &kp HASH  &kp CURU  &kp PRCT                 &kp CRRT  &kp AMPS  &kp KMLT  &kp LPRN  &kp RPRN  &kp PIPE
&trans   &kp EQL   &kp MINUS &kp KPLS  &kp LCUR  &kp RCUR &trans   &trans &kp LBKT  &kp RBKT  &kp SCLN  &kp COLN  &kp BSLH  &trans
                   &trans    &trans    &trans    &trans   &trans   &trans &trans    &trans    &trans    &trans
            >;

            sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>;
        };

        raise_layer {
// ------------------------------------------------------------------------------------------------------------
// |BTCLR| BT1  | BT2  |  BT3  |  BT4  |  BT5 |                |      |      |       |      |       |       |
// |     | INS  | PSCR | GUI   |       |      |                | PGUP |      |   ^   |      |       |       |
// |     | ALT  | CTRL | SHIFT |       | CAPS |                | PGDN |   <- |   v   |  ->  |  DEL  | BKSPC |
// |     | UNDO | CUT  | COPY  | PASTE |      |      |  |      |      |      |       |      |       |       |
//              |      |       |       |      |      |  |      |      |      |       |      |
            bindings = <
&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
&trans     &kp INS      &kp PRSC     &kp GUI      &trans       &trans                   &kp PGUP &trans    &kp UARW &trans   &kp NUM_0 &trans
&trans     &kp LALT     &kp LCTL     &kp LSFT     &trans       &kp CLCK                 &kp PGDN &kp LARW  &kp DARW &kp RARW &kp DEL   &kp BKSP
&trans     &kp UNDO     &kp CUT      &kp COPY     &kp PSTE     &trans  &trans   &trans  &trans   &trans    &trans   &trans   &trans    &trans
                        &trans       &trans       &trans       &trans  &trans   &trans  &trans   &trans    &trans   &trans
            >;

            sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>;
        };
    };
};