#include QMK_KEYBOARD_H

extern keymap_config_t keymap_config;

// Layers
#define _QWERTY 0 // Base layer
#define _NAVI   1 // Navigation layer
#define _NUMP   2 // Numpad layer

// Keys
#define KC_NAVI TT(_NAVI)
#define KC_NUMP TT(_NUMP)
#define KC_AGRV LALT_T(KC_GRAVE)
#define KC_AQUO RALT_T(KC_QUOTE)
#define KC_GUIE LGUI_T(KC_ESC)
#define KC_DSFT RSFT_T(KC_DEL)
#define KC_PSFT LSFT_T(KC_KP_PLUS)
#define KC_MCTL RCTL_T(KC_MINS)
#define KC_ECTL LCTL_T(KC_EQL)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_QWERTY] = LAYOUT(
//,----+----+----+----+----+----.              ,----+----+----+----+----+----.
   KC_GUIE, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,                  KC_6,   KC_7,   KC_8,   KC_9,   KC_0,  KC_BSLS,
//|----+----+----+----+----+----|              |----+----+----+----+----+----|
   KC_TAB,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,                  KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,  KC_BSPC,
//|----+----+----+----+----+----|              |----+----+----+----+----+----|
   KC_AGRV, KC_A,   KC_S,   KC_D,   KC_F,   KC_G,                  KC_H,   KC_J,   KC_K,   KC_L,  KC_SCLN,KC_AQUO,
//|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
   KC_PSFT, KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,  KC_NAVI,     KC_NAVI, KC_N,   KC_M,  KC_COMM,KC_DOT, KC_SLSH,KC_DSFT,
//`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                     KC_NAVI,KC_ECTL, KC_SPC,         KC_ENT, KC_MCTL,KC_NAVI
//                  `----+----+----'        `----+----+----'
     ),

  [_NAVI] = LAYOUT(
//,----+----+----+----+----+----.              ,----+----+----+----+----+----.
   KC_F12,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,                 KC_F6,  KC_F7,  KC_F8,  KC_F9, KC_F10, KC_F11,
//|----+----+----+----+----+----|              |----+----+----+----+----+----|
   KC_TRNS,KC_TRNS,KC_MUTE,KC_VOLU,KC_TRNS,KC_TRNS,               KC_PGUP,KC_HOME, KC_UP, KC_END, KC_TRNS,KC_TRNS,
//|----+----+----+----+----+----|              |----+----+----+----+----+----|
   KC_TRNS,KC_TRNS,KC_BRID,KC_VOLD,KC_BRIU,KC_TRNS,               KC_PGDN,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,
//|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
   KC_TRNS,KC_TRNS,KC_TRNS,KC_NUMP,KC_INS, KC_TRNS,KC_TRNS,     KC_TRNS,KC_TRNS,KC_CAPS,KC_LBRC,KC_RBRC,KC_TRNS,KC_TRNS,
//`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                     KC_TRNS,KC_TRNS,KC_TRNS,         KC_TRNS,KC_TRNS,KC_TRNS
//                  `----+----+----'        `----+----+----'
     ),

  [_NUMP] = LAYOUT(
//,----+----+----+----+----+----.              ,----+----+----+----+----+----.
   KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,               KC_TRNS,KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,KC_TRNS,
//|----+----+----+----+----+----|              |----+----+----+----+----+----|
   KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,               KC_TRNS, KC_P7,  KC_P8,  KC_P9, KC_PPLS,KC_TRNS,
//|----+----+----+----+----+----|              |----+----+----+----+----+----|
   KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,               KC_TRNS, KC_P4,  KC_P5,  KC_P6, KC_PCMM,KC_TRNS,
//|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
   KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,     KC_TRNS,KC_TRNS, KC_P1,  KC_P2,  KC_P3, KC_PEQL,KC_TRNS,
//`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                     KC_TRNS,KC_TRNS,KC_TRNS,         KC_PENT, KC_P0, KC_PDOT
//                  `----+----+----'        `----+----+----'
     )
};