/*
 * Keyboard: Ergodox
 * Keymap:   replicaJunction
 * Version:  2.1
 */

#include QMK_KEYBOARD_H
#include "config.h"
#include "replicaJunction.h"

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

[L_COLEMAK] = LAYOUT_ergodox(
//--------|--------|--------|--------|--------|--------|--------|
  KC_ESC  ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,KC_GRV  ,
//--------|--------|--------|--------|--------|--------|--------|
  KX_ECTL ,KC_Q    ,KC_W    ,KC_F    ,KC_P    ,KC_B    ,KC_LBRC ,
//--------|--------|--------|--------|--------|--------|--------|
  KC_TAB  ,KC_A    ,KC_R_LT ,KC_S_LT ,KC_T    ,KC_G,
//--------|--------|--------|--------|--------|--------|--------|
  KC_LSFT ,KX_Z_MT ,KX_X_MT ,KX_C_MT ,KX_D_MT ,KC_V    ,KC_RBRC ,
//--------|--------|--------|--------|--------|--------|--------|
  TD_LAYR ,KC_LGUI ,KC_HYPR ,KX_CTSF ,KC_LCTL ,
//--------|--------|--------|--------|--------|--------|--------|
                                               KC_HOME ,KC_END  ,
//                                            |--------|--------|
                                                        KC_PGUP ,
//                                   |--------|--------|--------|
                                      KX_BKNM ,KX_DCTL ,KC_PGDN ,
//                                   |--------|--------|--------|

//--------|--------|--------|--------|--------|--------|-------|
  TG_GAME ,KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_EQL ,
//--------|--------|--------|--------|--------|--------|-------|
  KC_DEL  ,KC_J    ,KC_L    ,KC_U    ,KC_Y    ,KC_SCLN ,KC_BSLS,
//--------|--------|--------|--------|--------|--------|-------|
           KC_M    ,KC_N    ,KC_E_LT ,KC_I_LT ,KC_O    ,KC_QUOT,
//--------|--------|--------|--------|--------|--------|-------|
  KC_LOCK ,KC_K    ,KX_H_MT ,KX_COMT ,KX_DOMT ,KX_SLMT ,KC_RSFT,
//--------|--------|--------|--------|--------|--------|-------|
                    KC_LALT ,KC_MINS ,KC_QUOT ,KC_EQL  ,TT_NUM ,
//--------|--------|--------|--------|--------|--------|-------|
  KC_LEFT ,KC_RGHT ,
//--------|--------|
  KC_UP   ,
//--------|--------|--------|
  KC_DOWN ,KX_NALT ,KX_SPAC
//--------|--------|--------|

),



[L_QWERTY] = LAYOUT_ergodox(
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_Q    ,KC_W    ,KC_E    ,KC_R    ,KC_T    ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_A    ,KC_S    ,KC_D    ,KC_F    ,KC_G    ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_Z    ,KC_X    ,KC_C    ,KC_V    ,KC_B    ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
                                               _______ ,_______ ,
//                                            |--------|--------|
                                                        _______ ,
//                                   |--------|--------|--------|
                                      _______ ,_______ ,_______ ,
//                                   |--------|--------|--------|

//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,KC_EQL  ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_Y    ,KC_U    ,KC_I    ,KC_O    ,KC_P    ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
           KC_H    ,KC_J    ,KC_K    ,KC_L    ,KC_SCLN ,KC_QUOT ,
//--------|--------|--------|--------|--------|--------|--------|
  KC_LOCK ,KC_N    ,KC_M    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSPC ,
//--------|--------|--------|--------|--------|--------|--------|
                    KC_RALT ,KC_MINS ,KC_QUOT ,KC_EQL  ,TT_NUM  ,
//--------|--------|--------|--------|--------|--------|--------|
  KC_LEFT ,KC_RGHT ,
//--------|--------|
  KC_UP   ,
//--------|--------|--------|
  KC_DOWN ,KX_NALT ,KX_SPAC
//--------|--------|--------|
),



[L_NUM] = LAYOUT_ergodox(
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_EXLM ,KC_AT   ,KC_LCBR ,KC_RCBR ,KC_SLSH ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_HASH ,KC_DLR  ,KC_LPRN ,KC_RPRN ,KC_PIPE,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_BSLS ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,KC_AMPR ,KC_LABK ,KC_RABK,
//--------|--------|--------|--------|--------|--------|--------|
                                               _______ ,_______ ,
//                                            |--------|--------|
                                                        _______ ,
//                                   |--------|--------|--------|
                                      _______ ,_______ ,_______ ,
//                                   |--------|--------|--------|

//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_F6   ,KC_F7   ,KC_F8   ,KC_F9   ,KC_F10  ,KC_F11  ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_COLN ,KC_P7   ,KC_P8   ,KC_P9   ,KC_PSLS ,KC_F12  ,
//--------|--------|--------|--------|--------|--------|--------|
           KC_HASH ,KC_P4   ,KC_P5   ,KC_P6   ,KC_PAST ,KC_BSPC ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_BSPC ,KC_P1   ,KC_P2   ,KC_P3   ,KC_PMNS ,KC_TAB  ,
//--------|--------|--------|--------|--------|--------|--------|
                    KC_P0   ,KC_PDOT ,KC_PEQL ,KC_PPLS ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,
//--------|--------|
  _______ ,
//--------|--------|--------|
  _______ ,KC_PENT ,MO_FUNC
//--------|--------|--------|
),



[L_EXTEND] = LAYOUT_ergodox(
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,KC_APP  ,KX_CGR,  KC_VOLU,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_LGUI, KC_LSFT, KC_LALT, KC_LCTL, _______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,KX_SRCH, KX_PAST, KC_VOLD,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
                                               _______ ,_______ ,
//                                   |--------|--------|--------|
                                                        _______ ,
//                                   |--------|--------|--------|
                                      MO_FUNC, _______ ,_______ ,
//                                   |--------|--------|--------|

//--------|--------|--------|--------|--------|--------|--------|
  KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  _______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_PGUP, KC_HOME, KC_UP,   KC_END,  KC_DEL,  _______ ,
//--------|--------|--------|--------|--------|--------|--------|
           KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, KC_MENU,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,KX_STAB, KC_TAB,  _______ ,KC_INS, KC_PSCR,
//--------|--------|--------|--------|--------|--------|--------|
                    _______ ,_______ ,_______ ,KC_PSCR, _______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______
//--------|--------|--------|--------|--------|--------|--------|
),



[L_FUNC] = LAYOUT_ergodox(
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_F11  ,KC_F12  ,KC_F13  ,KC_F14  ,KC_F15  ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,M_LCLIK, M_RCLIK, M_MCLIK, _______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_LGUI, KC_LSFT, KC_LALT, KC_LCTL, M_WHLUP,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,M_LEFT,  M_DOWN,  M_UP    ,M_RIGHT, M_WHLDN, _______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
                                               _______ ,_______ ,
//                                   |--------|--------|--------|
                                                        _______ ,
//                                   |--------|--------|--------|
                                      _______ ,_______ ,_______ ,
//                                   |--------|--------|--------|

//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_F16  ,KC_F17  ,KC_F18  ,KC_F19  ,KC_F20  ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_VOLU, KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______ ,
//--------|--------|--------|--------|--------|--------|--------|
           KC_MUTE, KC_F5,   KC_F6,   KC_F7,   KC_F8,   _______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_VOLD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   _______ ,
//--------|--------|--------|--------|--------|--------|--------|
                    _______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______
//--------|--------|--------|--------|--------|--------|--------|
),



[L_GAMING] = LAYOUT_ergodox(
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  KC_ESC  ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,KC_R    ,KC_S    ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  KC_LSFT, _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,KC_LALT ,KC_LCTL ,
//--------|--------|--------|--------|--------|--------|--------|
                                               _______ ,_______ ,
//                                            |--------|--------|
                                                        _______ ,
//                                   |--------|--------|--------|
                                      KC_SPC,  KC_LSFT, _______ ,
//                                   |--------|--------|--------|

//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
           _______ ,_______ ,KC_E    ,KC_I    ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,KC_UP,   KC_SLSH,
//--------|--------|--------|--------|--------|--------|--------|
                    _______ ,_______ ,KC_LEFT, KC_DOWN, KC_RGHT,
//--------|--------|--------|--------|--------|--------|--------|
  M_MCLIK ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  M_RCLIK ,
//--------|--------|--------|--------|--------|--------|--------|
  M_LCLIK ,KC_ENT  ,KC_BSPC
//--------|--------|--------|--------|--------|--------|--------|
)
,

// "Letter Layers"

[L_LL_R] = LAYOUT_ergodox(
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,ooooooo ,KC_AMPR ,KC_PIPE ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
                                               _______ ,_______ ,
//                                            |--------|--------|
                                                        _______ ,
//                                   |--------|--------|--------|
                                      _______ ,_______ ,_______ ,
//                                   |--------|--------|--------|

//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_COLN ,KC_P7   ,KC_P8   ,KC_P9   ,KC_PSLS ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
           KC_HASH ,KC_P4   ,KC_P5   ,KC_P6   ,KC_PAST ,KC_TAB  ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_BSPC ,KC_P1   ,KC_P2   ,KC_P3   ,KC_PMNS ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
                    KC_P0   ,KC_PDOT ,KC_PEQL ,KC_PPLS ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,
//--------|--------|
  _______ ,
//--------|--------|--------|
  _______ ,KC_PENT ,MO_FUNC
//--------|--------|--------|
)
,

[L_LL_E] = LAYOUT_ergodox(
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  RJ_QMKV ,RJ_MAKE ,RJ_EQ   ,RJ_LEQ  ,RJ_GEQ  ,RJ_GEQR ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,RJ_SELS ,RJ_DUND ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
                                               _______ ,_______ ,
//                                            |--------|--------|
                                                        _______ ,
//                                   |--------|--------|--------|
                                      _______ ,_______ ,_______ ,
//                                   |--------|--------|--------|

//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
           _______ ,_______ ,ooooooo ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
                    _______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,
//--------|--------|
  _______ ,
//--------|--------|--------|
  _______ ,_______ ,_______
//--------|--------|--------|
)
,

[L_LL_I] = LAYOUT_ergodox(
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_EXLM ,KC_AT   ,KC_LCBR ,KC_RCBR ,KC_SLSH ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_HASH ,KC_DLR  ,KC_LPRN ,KC_RPRN ,KC_PIPE,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_BSLS ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,KC_AMPR ,KC_LABK ,KC_RABK,
//--------|--------|--------|--------|--------|--------|--------|
                                               _______ ,_______ ,
//                                            |--------|--------|
                                                        _______ ,
//                                   |--------|--------|--------|
                                      _______ ,_______ ,_______ ,
//                                   |--------|--------|--------|

//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,KC_UNDS, KC_GRV  ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
           _______ ,KC_MINS ,KC_QUOT ,ooooooo ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,KC_TILD, KC_DQT  ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
                    _______ ,_______ ,_______ ,_______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,
//--------|--------|--------|--------|--------|--------|--------|
  _______ ,_______ ,_______
//--------|--------|--------|--------|--------|--------|--------|
)


};

// The normal QMK functions ending in _user are overridden in the
// replicaJunction userspace. Those functions handle my global
// settings, and redirect to these _keymap functions if something
// is unhandled. This allows me to keep most of my global preferences
// in one place while still allowing keyboard-specific code.

// The idea was shamelessly copied from the amazing Drashna.

// Nothing to do here, so I've commented it out.
// bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
//   return true;
// }

// void matrix_init_keymap(void) {};

void matrix_scan_keymap(void) {

    uint8_t layer = biton32(layer_state);
    // uint8_t default_layer = biton32(layer_state);

    ergodox_board_led_off();

    switch (layer) {
        case L_COLEMAK:
            ergodox_right_led_1_on();
            ergodox_right_led_2_off();
            ergodox_right_led_3_off();
            break;
        case L_NUM:
            ergodox_right_led_1_on();
            ergodox_right_led_2_on();
            ergodox_right_led_3_off();
            break;
        case L_EXTEND:
            ergodox_right_led_1_on();
            ergodox_right_led_2_off();
            ergodox_right_led_3_on();
            break;
        case L_FUNC:
            ergodox_right_led_1_on();
            ergodox_right_led_2_on();
            ergodox_right_led_3_on();
            break;
        case L_GAMING:
            ergodox_right_led_1_off();
            ergodox_right_led_2_on();
            ergodox_right_led_3_on();
            break;
        default:
            // none
            break;
    }

};