#include QMK_KEYBOARD_H
#include "debug.h"
#include "action_layer.h"
#include "keymap_neo2.h"
#include "keymap_uk.h"
#include "keymap_colemak.h"
#include "keymap_nordic.h"
#include "keymap_dvorak.h"
#include "keymap_german.h"
#include "keymap_norwegian.h"
#include "keymap_fr_ch.h"
#include "keymap_german_osx.h"
#include "keymap_spanish.h"
#include "keymap_bepo.h"


/**
* This layout was generated using the ErgodoxLayoutGenerator (ELG). You can download it from https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases
* documentation about it can be found here https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/
* Thanks to the team of Erez Zukerman for building the great Ergodox-EZ!
*
* use at own risk!
**/

#define BASE 0
#define SYMB 1
#define MDIA 2
#define SMLY 3
#define NUMB 4
#define EGOS 5

#define SMLY_TOG_QUOT 0

#define M_TOGGLE_5 1

#define TGH_NUM 2

#define M_DE_PLUS_CTRLALT 3

#define SM_KISS 4

#define SM_FROWN 5

#define SM_CRY 6

#define SM_SMILE 7

#define SM_SMIRK 8

#define M_LGUI_SHFT 9

#define SM_HEART 10

#define TOG_HLD_MDIA 11

#define SM_LAUGH 12

#define SM_SAD 13

#define M_DE_CIRC_CTRLCMD 14

#define M_MEH_SH_ACUT 15


//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/**
* Layer: BASE
* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                        /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
* | ESC                | 1                  | 2                  | 3                  | 4                  | 5                  | Hold or toggle     |                       | Hold or toggle     | 6                  | 7                  | 8                  | 9                  | 0                  | ß                  |                      
* |                    |                    |                    |                    |                    |                    | Layer NUMB         |                       | Layer MDIA         |                    |                    |                    |                    |                    |                    |                      
* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                        /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
* | TAB                | Q                  | W                  | E                  | R                  | T                  | Cmd                |                       | Cmd                | Z                  | U                  | I                  | O                  | P                  | Ü                  |                      
* |                    |                    |                    |                    |                    |                    |                    |                       |                    |                    |                    |                    |                    |                    |                    |                      
* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/\-------------------\                        \-------------------\/-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
* | Alt                | A                  | S                  | D                  | F                  | G                  |                                                                 | H                  | J                  | K                  | L                  | Ö                  | Ä                  |                      
* |                    |                    |                    |                    |                    |                    |                                                                 |                    |                    |                    |                    |                    | ALT                |                      
* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                        /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
* | Shift              | Y                  | X                  | C                  | V                  | B                  | Alt                |                       | Alt                | N                  | M                  | ,                  | .                  | -                  | Shift              |                      
* |                    | Ctrl               |                    |                    |                    |                    |                    |                       |                    |                    |                    |                    |                    | Ctrl               |                    |                      
* \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\                        \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\                       
*                                                                                                                                                                                                                                                                                                                                                      
*                                                                                                                                                                                                                                                                                                                                                      
*                                           /-------------------//-------------------//-------------------//-------------------//-------------------/                                                                                       /-------------------//-------------------//-------------------//-------------------//-------------------/  
*                                           | <                  | LongPress / Type   | LongPress / Type   | Shift+Ctrl         | Type               |                                                                                      | #                  | ACUT               | CMD+Shift          | ALT+Shift          | +                  | 
*                                           | SYMB               | DE_CIRC_CTRLCMD    | DE_PLUS_CTRAlt     |                    | Toggle SMLY        |                                                                                      | Meh                | Hyper              |                    |                    | SYMB               | 
*                                           \-------------------\\-------------------\\-------------------\\-------------------\/-------------------//-------------------/   /-------------------//-------------------/                     \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\  
*                                                                                                                               | HOME               | END                |  | LEFT               | RIGHT              |                                                                                                                               
*                                                                                                                               |                    |                    |  |                    |                    |                                                                                                                               
*                                                                                                                               \-------------------\/-------------------/   /-------------------/\-------------------\                                                                                                                                
*                                                                                                                                                    | PGUP               |  | UP                 |                                                                                                                                                    
*                                                                                                                                                    |                    |  |                    |                                                                                                                                                    
*                                                                                                          /-------------------//-------------------//-------------------/   /-------------------//-------------------//-------------------/                                                                                                           
*                                                                                                          | BSPC               | DEL                | PGDN               |  | DOWN               | ENT                | SPC                |                                                                                                          
*                                                                                                          |                    |                    |                    |  |                    |                    |                    |                                                                                                          
*                                                                                                          \-------------------\\-------------------\\-------------------\   \-------------------\\-------------------\\-------------------\                                                                                                           
*                                                                                                                                                                                                                                                                                                                                                      
* 
**/
[BASE]=LAYOUT_ergodox(
//left half
    KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, M(TGH_NUM), 
    KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, KC_LGUI, 
    KC_LALT, DE_A, DE_S, DE_D, DE_F, DE_G, 
    KC_LSFT, CTL_T(DE_Y), DE_X, DE_C, DE_V, DE_B, KC_LALT, 
                  LT(SYMB,DE_LABK), M(M_DE_CIRC_CTRLCMD), M(M_DE_PLUS_CTRLALT), LSFT(KC_LCTRL), M(SMLY_TOG_QUOT), 
                                              KC_HOME, KC_END, 
                                                     KC_PGUP, 
                                       KC_BSPC, KC_DEL, KC_PGDN, 
    //right half
    M(TOG_HLD_MDIA), DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS, 
    KC_RGUI, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UDIA, 
           DE_H, DE_J, DE_K, DE_L, DE_ODIA, ALT_T(DE_ADIA), 
    KC_RALT, DE_N, DE_M, DE_COMM, DE_DOT, CTL_T(DE_MINS), KC_RSFT, 
                         MEH_T(DE_HASH), ALL_T(DE_ACUT), LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_PLUS), 
    KC_LEFT, KC_RIGHT, 
    KC_UP, 
    KC_DOWN, KC_ENT, KC_SPC),
/**
* Layer: SYMB
* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/                /-----------//-----------//-----------//-----------//-----------//-----------//-----------/               
* | APPLICATION| F1         | F2         | F3         | F4         | F5         | F5         |               | F6         | F6         | F7         | F8         | F9         | F10        | F11        |              
* |            |            |            |            |            |            |            |               |            |            |            |            |            |            |            |              
* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/                /-----------//-----------//-----------//-----------//-----------//-----------//-----------/               
* |            | <          | >          | !          | ?          |            |            |               |            | \          | [          | ]          | <          | >          | !          |              
* |            |            |            |            |            |            |            |               |            |            |            |            |            |            |            |              
* /-----------//-----------//-----------//-----------//-----------//-----------/\-----------\                \-----------\/-----------//-----------//-----------//-----------//-----------//-----------/               
* |            | #          | $          | \          | /          | .          |                                         | /          | (          | )          | {          | }          | #          |              
* |            |            |            |            |            |            |                                         |            |            |            |            |            |            |              
* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/                /-----------//-----------//-----------//-----------//-----------//-----------//-----------/               
* |            |            | <          | %          | |          | ~          |            |               |            | |          | ~          |            |            |            |            |              
* |            |            |            |            |            |            |            |               |            |            |            |            |            |            |            |              
* \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\                \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\               
*                                                                                                                                                                                                                      
*                                                                                                                                                                                                                      
*                           /-----------//-----------//-----------//-----------//-----------/                                                       /-----------//-----------//-----------//-----------//-----------/  
*                           |            |            |            |            |            |                                                      | '          | DQOT       |            | Toggle 5   |            | 
*                           |            |            |            |            |            |                                                      |            |            |            |            |            | 
*                           \-----------\\-----------\\-----------\\-----------\/-----------//-----------/   /-----------//-----------/             \-----------\\-----------\\-----------\\-----------\\-----------\  
*                                                                               |            |            |  | F13        | F12        |                                                                               
*                                                                               |            |            |  |            |            |                                                                               
*                                                                               \-----------\/-----------/   /-----------/\-----------\                                                                                
*                                                                                            |            |  | F14        |                                                                                            
*                                                                                            |            |  |            |                                                                                            
*                                                                  /-----------//-----------//-----------/   /-----------//-----------//-----------/                                                                   
*                                                                  |            | DEL        |            |  | F15        |            |            |                                                                  
*                                                                  |            |            |            |  |            |            |            |                                                                  
*                                                                  \-----------\\-----------\\-----------\   \-----------\\-----------\\-----------\                                                                   
*                                                                                                                                                                                                                      
* 
**/
[SYMB]=LAYOUT_ergodox(
//left half
    KC_APPLICATION, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, 
    KC_TRNS, DE_LABK, DE_RABK, DE_EXLM, DE_QST, KC_TRNS, KC_TRNS, 
    KC_TRNS, DE_HASH, DE_DLR, DE_BSLS, DE_SLSH, KC_DOT, 
    KC_TRNS, KC_TRNS, DE_LABK, DE_PERC, DE_PIPE, DE_TILD, KC_TRNS, 
                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                                              KC_TRNS, KC_TRNS, 
                                                     KC_TRNS, 
                                       KC_TRNS, KC_DEL, KC_TRNS, 
    //right half
    KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
    KC_TRNS, DE_BSLS, DE_LBRC, DE_RBRC, DE_LABK, DE_RABK, DE_EXLM, 
           DE_SLSH, DE_LPRN, DE_RPRN, DE_LCBR, DE_RCBR, DE_HASH, 
    KC_TRNS, DE_PIPE, DE_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                         DE_QUOT, DE_DQUO, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, 
    KC_F13, KC_F12, 
    KC_F14, 
    KC_F15, KC_TRNS, KC_TRNS),
/**
* Layer: MDIA
* /-----//-----//-----//-----//-----//-----//-----/          /-----//-----//-----//-----//-----//-----//-----/         
* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
* /-----//-----//-----//-----//-----//-----//-----/          /-----//-----//-----//-----//-----//-----//-----/         
* |      |      | BTN1 | U    | BTN2 | U    |      |         |      |      |      |      |      |      |      |        
* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
* /-----//-----//-----//-----//-----//-----/\-----\          \-----\/-----//-----//-----//-----//-----//-----/         
* |      |      | L    | D    | R    | D    |                       |      |      |      |      |      |      |        
* |      |      |      |      |      |      |                       |      |      |      |      |      |      |        
* /-----//-----//-----//-----//-----//-----//-----/          /-----//-----//-----//-----//-----//-----//-----/         
* |      |      | L    | D    | R    | BTN3 |      |         |      |      |      |      |      | UP   |      |        
* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
* \-----\\-----\\-----\\-----\\-----\\-----\\-----\          \-----\\-----\\-----\\-----\\-----\\-----\\-----\         
*                                                                                                                      
*                                                                                                                      
*               /-----//-----//-----//-----//-----/                               /-----//-----//-----//-----//-----/  
*               |      |      |      |      |      |                              |      |      | LEFT | DOWN | RIGHT| 
*               |      |      |      |      |      |                              |      |      |      |      |      | 
*               \-----\\-----\\-----\\-----\/-----//-----/   /-----//-----/       \-----\\-----\\-----\\-----\\-----\  
*                                           |      |      |  | MPRV | MNXT |                                           
*                                           |      |      |  |      |      |                                           
*                                           \-----\/-----/   /-----/\-----\                                            
*                                                  |      |  | VOLU |                                                  
*                                                  |      |  |      |                                                  
*                                    /-----//-----//-----/   /-----//-----//-----/                                     
*                                    |      |      |      |  | VOLD | MUTE | MPLY |                                    
*                                    |      |      |      |  |      |      |      |                                    
*                                    \-----\\-----\\-----\   \-----\\-----\\-----\                                     
*                                                                                                                      
* 
**/
[MDIA]=LAYOUT_ergodox(
//left half
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, 
    KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, 
                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                                              KC_TRNS, KC_TRNS, 
                                                     KC_TRNS, 
                                       KC_TRNS, KC_TRNS, KC_TRNS, 
    //right half
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, 
                         KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, 
    KC_MPRV, KC_MNXT, 
    KC_VOLU, 
    KC_VOLD, KC_MUTE, KC_MPLY),
/**
* Layer: SMLY
* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
* |         |         |         |         |         |         |         |            | Typing  | Typing  | Typing  |         |         |         |         |           
* |         |         |         |         |         |         |         |            | SM_SMILE| SM_SMIRK| SM_LAUGH|         |         |         |         |           
* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
* |         |         |         |         |         |         |         |            |         | Typing  | Typing  | Typing  |         |         |         |           
* |         |         |         |         |         |         |         |            |         | SM_FROWN| SM_SAD  | SM_CRY  |         |         |         |           
* /--------//--------//--------//--------//--------//--------/\--------\             \--------\/--------//--------//--------//--------//--------//--------/            
* |         |         |         |         |         |         |                                | Typing  | Typing  |         |         |         |         |           
* |         |         |         |         |         |         |                                | SM_HEART| SM_KISS |         |         |         |         |           
* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
* \--------\\--------\\--------\\--------\\--------\\--------\\--------\             \--------\\--------\\--------\\--------\\--------\\--------\\--------\            
*                                                                                                                                                                      
*                                                                                                                                                                      
*                     /--------//--------//--------//--------//--------/                                           /--------//--------//--------//--------//--------/  
*                     |         |         |         |         |         |                                          |         |         |         |         |         | 
*                     |         |         |         |         |         |                                          |         |         |         |         |         | 
*                     \--------\\--------\\--------\\--------\/--------//--------/   /--------//--------/          \--------\\--------\\--------\\--------\\--------\  
*                                                             |         |         |  |         |         |                                                             
*                                                             |         |         |  |         |         |                                                             
*                                                             \--------\/--------/   /--------/\--------\                                                              
*                                                                       |         |  |         |                                                                       
*                                                                       |         |  |         |                                                                       
*                                                   /--------//--------//--------/   /--------//--------//--------/                                                    
*                                                   |         |         |         |  |         |         |         |                                                   
*                                                   |         |         |         |  |         |         |         |                                                   
*                                                   \--------\\--------\\--------\   \--------\\--------\\--------\                                                    
*                                                                                                                                                                      
* 
**/
[SMLY]=LAYOUT_ergodox(
//left half
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                                              KC_TRNS, KC_TRNS, 
                                                     KC_TRNS, 
                                       KC_TRNS, KC_TRNS, KC_TRNS, 
    //right half
    M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, 
           M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, 
    KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS),
/**
* Layer: NUMB
* /----//----//----//----//----//----//----/         /----//----//----//----//----//----//----/        
* |     |     |     |     |     |     |     |        |     | F6  | F7  | F8  | F9  | F10 | F11 |       
* |     |     |     |     |     |     |     |        |     |     |     |     |     |     |     |       
* /----//----//----//----//----//----//----/         /----//----//----//----//----//----//----/        
* |     |     |     | UP  |     |     |     |        |     | /   | 7   | 8   | 9   | *   | F12 |       
* |     |     |     |     |     |     |     |        |     |     |     |     |     |     |     |       
* /----//----//----//----//----//----/\----\         \----\/----//----//----//----//----//----/        
* |     |     | LEFT| DOWN| RGHT|     |                    | /   | 4   | 5   | 6   | +   | -   |       
* |     |     |     |     |     |     |                    |     |     |     |     |     |     |       
* /----//----//----//----//----//----//----/         /----//----//----//----//----//----//----/        
* |     |     |     |     |     |     |     |        |     | %   | 1   | 2   | 3   |     |     |       
* |     |     |     |     |     |     |     |        |     |     |     |     |     |     |     |       
* \----\\----\\----\\----\\----\\----\\----\         \----\\----\\----\\----\\----\\----\\----\        
*                                                                                                      
*                                                                                                      
*             /----//----//----//----//----/                           /----//----//----//----//----/  
*             |     |     |     |     |     |                          | 0   | .   | ,   | =   |     | 
*             |     |     |     |     |     |                          |     |     |     |     |     | 
*             \----\\----\\----\\----\/----//----/   /----//----/      \----\\----\\----\\----\\----\  
*                                     |     |     |  |     |     |                                     
*                                     |     |     |  |     |     |                                     
*                                     \----\/----/   /----/\----\                                      
*                                           |     |  |     |                                           
*                                           |     |  |     |                                           
*                               /----//----//----/   /----//----//----/                                
*                               |     |     |     |  |     |     |     |                               
*                               |     |     |     |  |     |     |     |                               
*                               \----\\----\\----\   \----\\----\\----\                                
*                                                                                                      
* 
**/
[NUMB]=LAYOUT_ergodox(
//left half
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                                              KC_TRNS, KC_TRNS, 
                                                     KC_TRNS, 
                                       KC_TRNS, KC_TRNS, KC_TRNS, 
    //right half
    KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
    KC_TRNS, DE_SLSH, KC_7, KC_8, KC_9, DE_ASTR, KC_F12, 
           DE_SLSH, KC_4, KC_5, KC_6, DE_PLUS, DE_MINS, 
    KC_TRNS, DE_PERC, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, 
                         KC_0, KC_DOT, KC_COMM, DE_EQL, KC_TRNS, 
    KC_TRNS, KC_TRNS, 
    KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS),
/**
* Layer: EGOS
* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
* /--------//--------//--------//--------//--------//--------/\--------\             \--------\/--------//--------//--------//--------//--------//--------/            
* | Shift   |         |         |         |         |         |                                |         |         |         |         |         |         |           
* |         |         |         |         |         |         |                                |         |         |         |         |         |         |           
* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
* \--------\\--------\\--------\\--------\\--------\\--------\\--------\             \--------\\--------\\--------\\--------\\--------\\--------\\--------\            
*                                                                                                                                                                      
*                                                                                                                                                                      
*                     /--------//--------//--------//--------//--------/                                           /--------//--------//--------//--------//--------/  
*                     | Ctrl    |         |         |         |         |                                          |         |         |         | Toggle 5|         | 
*                     |         |         |         |         |         |                                          |         |         |         |         |         | 
*                     \--------\\--------\\--------\\--------\/--------//--------/   /--------//--------/          \--------\\--------\\--------\\--------\\--------\  
*                                                             | F1      | F2      |  |         |         |                                                             
*                                                             |         |         |  |         |         |                                                             
*                                                             \--------\/--------/   /--------/\--------\                                                              
*                                                                       | F3      |  |         |                                                                       
*                                                                       |         |  |         |                                                                       
*                                                   /--------//--------//--------/   /--------//--------//--------/                                                    
*                                                   | SPC     | Ctrl    | F4      |  |         |         |         |                                                   
*                                                   |         |         |         |  |         |         |         |                                                   
*                                                   \--------\\--------\\--------\   \--------\\--------\\--------\                                                    
*                                                                                                                                                                      
* 
**/
[EGOS]=LAYOUT_ergodox(
//left half
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                  KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                                              KC_F1, KC_F2, 
                                                     KC_F3, 
                                       KC_SPC, KC_LCTL, KC_F4, 
    //right half
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
                         KC_TRNS, KC_TRNS, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, 
    KC_TRNS, KC_TRNS, 
    KC_TRNS, 
    KC_TRNS, KC_TRNS, KC_TRNS),
};

const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
static uint16_t start;
switch(id) {
case SMLY_TOG_QUOT:
//Macro: SMLY_TOG_QUOT//-----------------------
if (record->event.pressed) {
			start = timer_read();
           layer_state ^= (1<<SMLY);
           layer_state &= (1<<SMLY);
			return MACRO_NONE; 		} else {
           layer_state ^= (1<<SMLY);
           layer_state &= (1<<SMLY);
			if (timer_elapsed(start) >150) {
				return MACRO_NONE;
			} else {
				return MACRO(DOWN(KC_LSFT),TYPE(DE_HASH),UP(KC_LSFT),END);
			}
		}

break;
case M_TOGGLE_5:
//Macro: M_TOGGLE_5//-----------------------
 if (record->event.pressed){
           layer_state ^= (1<<5);
           layer_state &= (1<<5);
        }

break;
case TGH_NUM:
//Macro: TGH_NUM//-----------------------
if (record->event.pressed){
         start = timer_read();
         layer_state ^=(1<<NUMB);
         layer_state &=(1<<NUMB);
 } else {
         if (timer_elapsed(start) > 150) {
                 layer_state^=(1<<NUMB);
                 layer_state&=(1<<NUMB);
         }
 }
return MACRO_NONE;

break;
case M_DE_PLUS_CTRLALT:
//Macro: M_DE_PLUS_CTRLALT//-----------------------
if (record->event.pressed) {
			start = timer_read();
			return MACRO(DOWN(KC_LCTRL),DOWN(KC_LALT),END);
		} else {
			if (timer_elapsed(start) >150) {
				return MACRO(U(LCTRL),U(LALT),END);
			} else {
				return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(KC_RBRC),END);
			}
		}

break;
case SM_KISS:
//Macro: SM_KISS//-----------------------
if (record->event.pressed) {
			return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_RBRC),UP(KC_LSFT),END);
		}

break;
case SM_FROWN:
//Macro: SM_FROWN//-----------------------
if (record->event.pressed) {
			return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LALT),TYPE(KC_8),UP(KC_LALT),END);
		}

break;
case SM_CRY:
//Macro: SM_CRY//-----------------------
if (record->event.pressed) {
			return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END);
		}

break;
case SM_SMILE:
//Macro: SM_SMILE//-----------------------
if (record->event.pressed) {
			return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END);
		}

break;
case SM_SMIRK:
//Macro: SM_SMIRK//-----------------------
if (record->event.pressed) {
			return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END);
		}

break;
case M_LGUI_SHFT:
//Macro: M_LGUI_SHFT//-----------------------
if (record->event.pressed){
			return MACRO(DOWN(KC_LGUI),DOWN(KC_LSFT),END);
		}else{
			return MACRO(UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),U(LGUI),U(LSFT),END);
		}

break;
case SM_HEART:
//Macro: SM_HEART//-----------------------
if (record->event.pressed) {
			return MACRO(TYPE(KC_GRV),TYPE(KC_3),END);
		}

break;
case TOG_HLD_MDIA:
//Macro: TOG_HLD_MDIA//-----------------------
if (record->event.pressed){
         start = timer_read();
         layer_state ^=(1<<MDIA);
         layer_state &=(1<<MDIA);
 } else {
         if (timer_elapsed(start) > 150) {
                 layer_state^=(1<<MDIA);
                 layer_state&=(1<<MDIA);
         }
 }
return MACRO_NONE;

break;
case SM_LAUGH:
//Macro: SM_LAUGH//-----------------------
if (record->event.pressed) {
			return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_D),UP(KC_LSFT),END);
		}

break;
case SM_SAD:
//Macro: SM_SAD//-----------------------
if (record->event.pressed) {
			return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END);
		}

break;
case M_DE_CIRC_CTRLCMD:
//Macro: M_DE_CIRC_CTRLCMD//-----------------------
if (record->event.pressed) {
			start = timer_read();
			return MACRO(DOWN(KC_LCTRL),DOWN(KC_LGUI),END);
		} else {
			if (timer_elapsed(start) >150) {
				return MACRO(U(LCTRL),U(LGUI),END);
			} else {
				return MACRO(UP(KC_LCTRL),UP(KC_LGUI),TYPE(KC_NUBS),END);
			}
		}

break;
case M_MEH_SH_ACUT:
//Macro: M_MEH_SH_ACUT//-----------------------
if (record->event.pressed) {
			start = timer_read();
			return MACRO(DOWN(KC_LCTRL),DOWN(KC_LSFT),DOWN(KC_LALT),END);
		} else {
			if (timer_elapsed(start) >150) {
				return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
			} else {
				return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(DE_ACUT),UP(KC_LSFT),END);
			}
		}

break;
}
return MACRO_NONE;
};

// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {

};

// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {

uint8_t layer = biton32(layer_state);

ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {

    case SYMB:
        ergodox_right_led_1_on();
        
        
    break;
    case MDIA:
        
        ergodox_right_led_2_on();
        
    break;
    case NUMB:
        
        
        ergodox_right_led_3_on();
    break;
    case EGOS:
        ergodox_right_led_1_on();
        ergodox_right_led_2_on();
        ergodox_right_led_3_on();
    break;
default:
// none
break;
}

};