~ruther/qmk_firmware

d36d5ecfad3ea32c11fbf4a251cea7e25caafc28 — James Smith 5 years ago 7baeaae
Klackygears add user and handwired brain (#9154)

Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
A keyboards/handwired/brain/brain.c => keyboards/handwired/brain/brain.c +1 -0
@@ 0,0 1,1 @@
#include "brain.h"

A keyboards/handwired/brain/brain.h => keyboards/handwired/brain/brain.h +28 -0
@@ 0,0 1,28 @@
#pragma once

#include "quantum.h"





#define LAYOUT( \
         L01, L02, L03, L04, L05, L06,                     R00, R01, R02, R03, R04, R05, \
    L10, L11, L12, L13, L14, L15, L16,                     R10, R11, R12, R13, R14, R15, R16, \
    L20, L21, L22, L23, L24, L25, L26,                     R20, R21, R22, R23, R24, R25, R26, \
         L31, L32, L33, L34, L35,                               R31, R32, R33, R34, R35, \
                   L43, L44, L45,                               R41, R42, R43 \
    ) \
    { \
        { KC_NO, L01,   L02, L03, L04, L05, L06},   \
        { L10,   L11,   L12, L13, L14, L15, L16},   \
        { L20,   L21,   L22, L23, L24, L25, L26},   \
        { KC_NO, L31,   L32, L33, L34, L35, KC_NO}, \
        { KC_NO, KC_NO, KC_NO, L43, L44, L45, KC_NO}, \
\
        { R00,   R01, R02, R03, R04,   R05,   KC_NO }, \
        { R10,   R11, R12, R13, R14,   R15,   R16 },   \
        { R20,   R21, R22, R23, R24,   R25,   R26 },   \
        { KC_NO, R31, R32, R33, R34,   R35,   KC_NO }, \
        { KC_NO, R41, R42, R43, KC_NO, KC_NO, KC_NO }, \
}

A keyboards/handwired/brain/config.h => keyboards/handwired/brain/config.h +111 -0
@@ 0,0 1,111 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
Copyright 2020 James Smith <bronzegears@gmail.com> @klackygears


This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x4A53
#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER klackygears
#define PRODUCT Brain
#define DESCRIPTION A split ergonomic keyboard with sculpted shell

#define SPLIT_USB_DETECT

/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 10
#define MATRIX_COLS 7

// wiring of each half

#define MATRIX_COL_PINS \
    { D1, D4, C6, D7, E6, B4, B5 }
#define MATRIX_ROW_PINS \
    { F4, F5, F6, F7, B1 }

#define MATRIX_COL_PINS_RIGHT \
    { B5, B4, E6, D7, C6, D4, D1 }

#define DIODE_DIRECTION COL2ROW

/* mouse config */
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_TIME_TO_MAX 60
#define MOUSEKEY_MAX_SPEED 7
#define MOUSEKEY_WHEEL_DELAY 0

/* Set 0 if debouncing isn't needed */


/* serial.c configuration for split keyboard */
#define SOFT_SERIAL_PIN D0
#define EE_HANDS

//#define SPLIT_HAND_PIN B7

/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

/* Enables This makes it easier for fast typists to use dual-function keys */
#define PERMISSIVE_HOLD

/* ws2812 RGB LED */
#define RGB_DI_PIN D3

#define RGBLED_NUM 28  // Number of LEDs


#define RGBLIGHT_LIMIT_VAL 120

#define RGBLIGHT_SPLIT

/*
 * Feature disable options
 *  These options are also useful to firmware size reduction.
 */

/* disable debug print */
// #define NO_DEBUG

/* disable print */
// #define NO_PRINT

/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

//#define PREVENT_STUCK_MODIFIERS
//#define TAPPING_TERM 150
//#define IGNORE_MOD_TAP_INTERRUPT
//#define TAPPING_FORCE_HOLD

#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_COLUMN 6
#define BOOTMAGIC_LITE_ROW_RIGHT 5
#define BOOTMAGIC_LITE_COLUMN_RIGHT 0

A keyboards/handwired/brain/keymaps/default/keymap.c => keyboards/handwired/brain/keymaps/default/keymap.c +119 -0
@@ 0,0 1,119 @@
#include QMK_KEYBOARD_H



// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.

enum layers {
    _QWERTY,
    _LOWER,
    _RAISE,
    _ADJUST
};

enum custom_keycodes {
  LOWER = SAFE_RANGE,
  RAISE,
  ADJUST,
};


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


[_QWERTY] = LAYOUT(
  //       |------------------------------------------.         ,---------------------------------------------,
              KC_Q,  KC_W,  KC_E,  KC_R,  KC_T,  KC_NO,           KC_NO, KC_Y,  KC_U,    KC_I,   KC_O,    KC_P,
  //|------+------+------+------+------+------+-------|         |------+------+------+-------+--------+-------+--------,
    KC_LCTL,  KC_A,  KC_S,  KC_D,  KC_F,  KC_G,  KC_NO,           KC_NO, KC_H,  KC_J,    KC_K,   KC_L, KC_SCLN, KC_QUOT,
  //|------+------+------+------+------+------+-------|         |------+------+------+-------+-------+--------+--------,
    KC_LSFT,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_NO,           KC_NO, KC_N,  KC_M, KC_COMM, KC_DOT, KC_SLSH,  KC_ESC,
  //|------+------+------+------+------+------+-------|         |------+------+------+-------+-------+--------+--------|
             KC_NO, KC_NO,        KC_NO, LOWER, KC_SPC,          KC_ENT, RAISE, KC_NO,          KC_NO,   KC_NO,
         //|------+------|   //|-------+------+-------|         |------+------+------|       |-------+--------|
                                  KC_NO, KC_NO,  KC_NO,           KC_NO, KC_NO,  KC_NO
                             //`----------------------'         `--------------------'

  ),

[_LOWER] = LAYOUT(
  //       |-----------------------------------------------.         ,--------------------------------------------------------,
              KC_1,  KC_2,    KC_3,   KC_3,    KC_4, KC_ESC,              KC_5,    KC_6,    KC_7,     KC_8,     KC_9,     KC_0,
  //|------+------+------+--------+-------+------+---------|         |--------+--------+--------+---------+---------+---------+--------,
    KC_LCTL, KC_NO, KC_NO,   KC_NO,  KC_NO,   KC_NO,  KC_NO,             KC_NO, KC_LEFT, KC_DOWN,    KC_UP, KC_RIGHT,    KC_NO, KC_BSPC,
  //|------+------+------+--------+-------+------+---------|         |--------+--------+--------+---------+---------+---------+--------,
    KC_LSFT, KC_NO, KC_NO,   KC_NO,  KC_NO,   KC_NO,  KC_NO,             KC_NO,   KC_NO,   KC_NO,    KC_NO,    KC_NO,    KC_NO,   KC_NO,
  //|------+------+------+---+----+-------+------+---------|         |--------+--------+--------+---------+---------+---------+--------|
             KC_NO, KC_NO,         KC_LGUI,   LOWER, KC_SPC,            KC_ENT,   RAISE, KC_RALT,              KC_NO,    KC_NO,
         //|------+------|      //|------+------+----------|         |--------+------+----------|         |---------+---------|
                                     KC_NO,   KC_NO,  KC_NO,             KC_NO,   KC_NO,   KC_NO
                                //`------------------------'         `--------------------------'
  ),

[_RAISE] = LAYOUT(
  //       |------------------------------------------------.         ,-----------------------------------------------------,
           KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_ESC,           KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
  //|------+------+------+--------+-------+------+---------|         |--------+--------+--------+--------+--------+--------+--------,
    KC_LCTL, KC_NO, KC_NO,   KC_NO,  KC_NO,   KC_NO,  KC_NO,             KC_NO, KC_MINS,  KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE,  KC_GRV,
  //|------+------+------+--------+-------+------+---------|         |--------+--------+--------+--------+--------+--------+--------,
    KC_LSFT, KC_NO, KC_NO,   KC_NO,  KC_NO,   KC_NO,  KC_NO,             KC_NO, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
  //|------+------+------+---+----+-------+------+---------|         |--------+--------+--------+--------+--------+--------+--------|
             KC_NO, KC_NO,         KC_LGUI,   LOWER, KC_SPC,            KC_ENT,   RAISE, KC_RALT,            KC_NO,   KC_NO,
         //|------+------|      //|------+------+----------|         |--------+------+----------|        |--------+--------|
                                     KC_NO,   KC_NO,  KC_NO,             KC_NO,   KC_NO,   KC_NO
                                //`------------------------'         `--------------------------'
  ),


[_ADJUST] = LAYOUT(
  //       |------------------------------------------------.         ,-----------------------------------------------------,
             KC_NO, KC_NO,   KC_NO,  KC_NO,   KC_NO,  KC_NO,             KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
  //|------+------+------+--------+-------+------+---------|         |--------+--------+--------+--------+--------+--------+--------,
    KC_LCTL, KC_NO, KC_NO,   KC_NO,  KC_NO,   KC_NO,  KC_NO,             KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
  //|------+------+------+--------+-------+------+---------|         |--------+--------+--------+--------+--------+--------+--------,
    KC_LSFT, KC_NO, KC_NO,   KC_NO,  KC_NO,   KC_NO,  KC_NO,             KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
  //|------+------+------+---+----+-------+------+---------|         |--------+--------+--------+--------+--------+--------+--------|
             KC_NO, KC_NO,         KC_LGUI,   LOWER, KC_SPC,            KC_ENT,   RAISE, KC_RALT,            KC_NO,   KC_NO,
         //|------+------|      //|------+------+----------|         |--------+------+----------|        |--------+--------|
                                     KC_NO,   KC_NO,  KC_NO,             KC_NO,   KC_NO,   KC_NO
                                //`------------------------'         `--------------------------'
  )


};



bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case LOWER:
      if (record->event.pressed) {
        layer_on(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
    case RAISE:
      if (record->event.pressed) {
        layer_on(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
    case ADJUST:
      if (record->event.pressed) {
        layer_on(_ADJUST);
      } else {
        layer_off(_ADJUST);
      }
      return false;
  }
  return true;
}

A keyboards/handwired/brain/keymaps/klackygears/config.h => keyboards/handwired/brain/keymaps/klackygears/config.h +43 -0
@@ 0,0 1,43 @@
/*
Copyright 2020 James Smith <bronzegears@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

//#define USE_SERIAL

#define PERMISSIVE_HOLD
#define TAPPING_TERM 150
#define IGNORE_MOD_TAP_INTERRUPT

#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#undef RGBLIGHT_RAINBOW_SWIRL_RANGE
#define RGBLIGHT_RAINBOW_SWIRL_RANGE 75
#define RGBLIGHT_EFFECT_SNAKE
#undef RGBLIGHT_EFFECT_SNAKE_LENGTH
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 20
#define RGBLIGHT_EFFECT_KNIGHT
#undef RGBLIGHT_EFFECT_KNIGHT_LENGTH
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 20

//   #define RGBLIGHT_EFFECT_CHRISTMAS
//   #define RGBLIGHT_EFFECT_STATIC_GRADIENT
//   #define RGBLIGHT_EFFECT_RGB_TEST
//   #define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
#define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1 / 127

A keyboards/handwired/brain/keymaps/klackygears/keymap.c => keyboards/handwired/brain/keymaps/klackygears/keymap.c +99 -0
@@ 0,0 1,99 @@
#include QMK_KEYBOARD_H
#include "klackygears.h"

//For an explanation of what's going on here with the keymap wrappers, check out drashna's user folder.


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

  [_WINBASE] = LAYOUT_wrapper(
             _______________DVORAK_L1___________________, KC_ESC,       KC_GAMER, _______________DVORAK_R1___________________,
    RGB_TOG, _______________DVORAK_L2___________________, _______,      KC_GAMR1, _______________DVORAK_R2___________________, RGB_TOG,
    RGB_MOD, _______________WINDVK_L3___________________, _______,      KC_GAMR2, _______________WINDVK_R3___________________, RGB_MOD,
             _______, _______,          __________________WIN_THUMB_CLUSTER_V2______________     ,          _______, _______,
                                        KC_NO,   KC_NO,   KC_NO,        KC_NO,   KC_NO,   KC_NO
  ),

  [_MACBASE] = LAYOUT_wrapper(
             _______________DVORAK_L1___________________, KC_ESC,       _______, _______________DVORAK_R1___________________,
    RGB_TOG, _______________DVORAK_L2___________________, _______,      _______, _______________DVORAK_R2___________________, RGB_TOG,
    RGB_MOD, _______________MACDVK_L3___________________, _______,      _______, _______________MACDVK_R3___________________, RGB_MOD,
             _______, _______,            __________________MAC_THUMB_CLUSTER_V2______________    ,         _______, _______,
                                        KC_NO,   KC_NO,   KC_NO,        KC_NO,   KC_NO,   KC_NO
  ),


  [_QWERTY] = LAYOUT_wrapper(
             _________________QWERTY_L1_________________, KC_ESC,       _______, _________________QWERTY_R1_________________,
    KC_CAPS, _________________QWERTY_L2_________________, _______,      _______, _________________QWERTY_R2_________________, KC_ENT,
    KC_LSFT, _________________QWERTY_L3_________________, _______,      _______, _________________QWERTY_R3_________________, KC_RSFT,
             KC_LCTL, KC_LALT,      KC_LGUI, MO(_MNMB), MO(_SYMB),      MO(_SYMB), MO(_MNMB), KC_RGUI,  MO(_MDIA), MO(_FUNC),
                                         KC_LSFT, KC_SPC,  KC_SPC,      KC_SPC,  KC_SPC,  KC_RSFT
  ),
  //Jedi - Fallen Order
  [_GAMER] = LAYOUT_wrapper(
             KC_R,    KC_Q,    KC_W,    KC_E,    KC_1,      KC_ESC,        KC_WINBASE, _________________RGB_1_____________________,
    KC_TAB,  KC_F,    KC_A,    KC_S,    KC_D,    KC_2, LSFT(KC_F2),        KC_GAMR1, _________________RGB_2_____________________, RGB_TOG,
    KC_TAB,  KC_TAB,  KC_X,    KC_Z,    KC_C,    KC_3,        KC_M,        KC_GAMR2, _________________MEDIA_____________________, RGB_MOD,
             KC_LCTL, KC_LALT,       KC_LCTL,    KC_LSFT,   KC_SPC,        _______, KC_UP,   _______,           _______, _______,
                                     KC_NO,      KC_LSFT,  KC_LSFT,        KC_LEFT, KC_DOWN, KC_RIGHT
  ),
  //Borderlands
  [_GAMR1] = LAYOUT_wrapper(
             KC_R,    KC_G,    KC_W,    KC_E,    KC_1,      KC_ESC,        KC_WINBASE, _________________RGB_1_____________________,
    KC_TAB,  KC_V,    KC_A,    KC_S,    KC_D,    KC_2,        KC_L,        KC_GAMR1, _________________RGB_2_____________________, RGB_TOG,
    KC_T,    KC_I,    KC_F,    KC_Q,    KC_4,    KC_3,        KC_M,        KC_GAMR2, _________________MEDIA_____________________, RGB_MOD,
             KC_X,    KC_K,             KC_C,    KC_LSFT,   KC_SPC,        _______, KC_UP,   _______,           _______, _______,
                                        KC_Z,    KC_LSFT,  KC_LSFT,        KC_LEFT, KC_DOWN, KC_RIGHT
  ),
  //Witcher
  [_GAMR2] = LAYOUT_wrapper(
             KC_R,    KC_Q,    KC_W,    KC_E,    KC_1,      KC_ESC,        KC_WINBASE, _________________RGB_1_____________________,
    KC_TAB,  KC_LALT,  KC_A,    KC_S,    KC_D,    KC_2,        KC_J,        KC_GAMR1, _________________RGB_2_____________________, RGB_TOG,
    KC_X,    KC_I,    KC_F,    KC_C,    KC_V,    KC_3,        KC_M,        KC_GAMR2, _________________MEDIA_____________________, RGB_MOD,
             KC_LCTL, KC_V,          KC_HOME,    KC_LSFT,   KC_SPC,        _______, KC_UP,   _______,           _______, _______,
                                     KC_ENT,     KC_LCTL,  KC_LSFT,        KC_LEFT, KC_DOWN, KC_RIGHT
  ),

  [_SYMB] = LAYOUT_wrapper(
             _________________PUNC_L1_ALT_______________, _______,      _______, _________________PUNC_R1___________________,
    _______, _________________PUNC_L3___________________, _______,      _______, _________________PUNC_R2___________________, _______,
    RGB_MOD, _________________PUNC_L3_ALT_______________, _______,      _______, _________________PUNC_R3___________________, _______,
             _______, _______,          _______, _______, KC_DEL,       KC_CAPS, _______, _______,          _______, _______,
                                        _______, _______, KC_DEL,       KC_CAPS, _______, _______
  ),

  [_FUNC] = LAYOUT_wrapper(
             _____________FUNC_L1_______________________,    _______,      _______, _______, _____________FUNC_1_______________,
    _______, ________MAC_MISSION_CTRL__________, LGUI(KC_L), _______,      _______, _______, _____________FUNC_2_______________, _______,
    RGB_MOD, _____________FUNC_L3_______________________,    _______,      _______, _______, _____________FUNC_3_______________, _______,
             _______, _______,          _______, _______,    _______,      KC_CAPS, _______, _______,          _______, _______,
                                        _______, _______,    _______,      KC_CAPS, _______, _______
  ),

  [_MNMB] = LAYOUT_wrapper(
             _________________MACNAV_L1_________________, _______,      _______, _________________NUMB_R1___________________,
    _______, _________________MACNAV_L2_________________, _______,      _______, _________________NUMB_R2___________________, _______,
    RGB_MOD, _________________MACNAV_L3_________________, _______,      _______, _________________NUMB_R3_MAC_______________, _______,
             _______, _______,          _______, _______, _______,      _______, RSFT_T(KC_ENT), KC_RSFT,   _______, _______,
                                        _______, _______, _______,      _______, RSFT_T(KC_ENT), KC_RSFT
  ),


  [_NUMB] = LAYOUT_wrapper(
             _________________WINNAV_L1_________________, _______,      _______, _________________NUMB_R1___________________,
    _______, _________________WINNAV_L2_________________, _______,      _______, _________________NUMB_R2___________________, _______,
    RGB_MOD, _________________WINNAV_L3_________________, _______,      _______, _________________NUMB_R3_WIN_______________, _______,
             _______, _______,          _______, _______, _______,      _______, RSFT_T(KC_ENT), KC_RSFT,   _______, _______,
                                        _______, _______, _______,      _______, RSFT_T(KC_ENT), KC_RSFT
  ),

   [_MDIA] = LAYOUT_wrapper(
             _________________LYOUT_____________________, _______,      RGB_TOG, _________________RGB_1_____________________,
    _______, _________________KC_BLANK__________________, _______,      _______, _________________RGB_2_____________________, _______,
    RGB_MOD, _________________KC_BLANK__________________, _______,      _______, _________________MEDIA_____________________, _______,
             _______, _______,          _______, _______, _______,      _______, _______, _______,          _______, _______,
                                        _______, _______, _______,      _______, _______, _______
  )

  };

A keyboards/handwired/brain/keymaps/klackygears/rules.mk => keyboards/handwired/brain/keymaps/klackygears/rules.mk +3 -0
@@ 0,0 1,3 @@

RGBLIGHT_ENABLE = yes #Enable WS2812 RGB underlight.
TAP_DANCE_ENABLE = yes

A keyboards/handwired/brain/readme.md => keyboards/handwired/brain/readme.md +1 -0
@@ 0,0 1,1 @@
#The Brain is a tented ergo split handwired keyboard with a sculped shell that can be changed out for other options.

A keyboards/handwired/brain/rules.mk => keyboards/handwired/brain/rules.mk +24 -0
@@ 0,0 1,24 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = atmel-dfu

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no        # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE.it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
NKRO_ENABLE = no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
MIDI_ENABLE = no            # MIDI controls
BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no           # Audio output on port C6

SPLIT_KEYBOARD = yes

A users/klackygears/klackygears.c => users/klackygears/klackygears.c +75 -0
@@ 0,0 1,75 @@
#include "klackygears.h"

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    /*
     if (!process_record_dynamic_macro(keycode, record)) {
            return false;
        }
    */
    switch (keycode) {
        case KC_MACBASE:
            if (record->event.pressed) {
                set_single_persistent_default_layer(_MACBASE);
            }
            break;

        case KC_QWERTY:
            if (record->event.pressed) {
                set_single_persistent_default_layer(_QWERTY);
            }
            break;

        case KC_WINBASE:
            if (record->event.pressed) {
                set_single_persistent_default_layer(_WINBASE);
            }
            break;

        case KC_GAMER:
            if (record->event.pressed) {
                set_single_persistent_default_layer(_GAMER);
            }
            break;

        case KC_GAMR1:
            if (record->event.pressed) {
                set_single_persistent_default_layer(_GAMR1);
            }
            break;

        case KC_GAMR2:
            if (record->event.pressed) {
                set_single_persistent_default_layer(_GAMR2);
            }
            break;
        case RGBRST:
#ifdef RGBLIGHT_ENABLE
            if (record->event.pressed) {
                eeconfig_update_rgblight_default();
                rgblight_enable();
            }
#endif
            break;

        case MAKEK:
            if (record->event.pressed) {
                SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
            }
            break;

        case MAKEKF:
            if (!record->event.pressed) {
                SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP ":flash");
            }

            break;

        case SHRUG:
            if (record->event.pressed) {
                SEND_STRING(":Shrug:");
            }
            break;
    }

    return true;
}

A users/klackygears/klackygears.h => users/klackygears/klackygears.h +72 -0
@@ 0,0 1,72 @@
#pragma once

#include QMK_KEYBOARD_H

#include "wrappers.h"
#include "eeprom.h"
#ifdef TAP_DANCE_ENABLE
  #include "tap_dances.h"
#endif // TAP_DANCE_ENABLE

enum layer_number {
    _WINBASE = 0,
    _MACBASE,
    _QWERTY,
    _GAMER,
    _GAMR1,
    _GAMR2,
    _NGMR,
    _NUMB,
    _MNMB,
    _SYMB,
    _FUNC,
    _MDIA,
    _MEME
};

enum userspace_custom_keycodes {
  KC_MACBASE = SAFE_RANGE,
  KC_QWERTY,
  KC_WINBASE,
  KC_GAMER,
  KC_GAMR1,
  KC_GAMR2,
  NUMB,
  MNMB,
  SYMB,
  FUNC,
  MDIA,
  RGBRST,
  MAKEK,
  MAKEKF,
  SHRUG,
  //DYNAMIC_MACRO_RANGE,
  SAFE_RANGE_KEYMAP
};


/*
#ifdef UNICODEMAP_ENABLE
enum unicode_names {
  BANG,
  IRONY,
  SNEK,
};

const uint32_t PROGMEM unicode_map[] = {
  [BANG]  = 0x203D,  // ‽
  [IRONY] = 0x2E2E,  // ⸮
  [SNEK]  = 0x1F40D, // 🐍
};
#endif // UNICODEMAP_ENABLE
*/


//#include "dynamic_macro.h"



#if RGBLIGHT_ENABLE
uint8_t RGB_current_mode;

#endif

A users/klackygears/readme.md => users/klackygears/readme.md +15 -0
@@ 0,0 1,15 @@
Copyright<2019><James Smith><bronzegears@gmail.com> @klackygears

This program is free software : you can redistribute it and /or modify it under 
the terms of the GNU General Public License as published by the Free Software Foundation,
either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.


Most of what I have here was copied and modified from drashna. If it looks a bit messy it's because I'm a total noob and trying to push myself to learn new things.

A users/klackygears/rules.mk => users/klackygears/rules.mk +6 -0
@@ 0,0 1,6 @@
SRC += klackygears.c


ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
  SRC += tap_dances.c
endif
\ No newline at end of file

A users/klackygears/tap_dances.c => users/klackygears/tap_dances.c +184 -0
@@ 0,0 1,184 @@
#include "tap_dances.h"

/*
void macroTogKey(qk_tap_dance_state_t *state, void *user_data) {
  keyrecord_t kr;

  if (state->count == 1)
  {
    kr.event.pressed = false;
    process_record_dynamic_macro( DYN_MACRO_PLAY1, &kr );
  }
  else if (state->count == 2)
  {
    kr.event.pressed = true;
    process_record_dynamic_macro( DYN_REC_STOP, &kr );
  }
  else if (state->count == 3)
  {
    kr.event.pressed = false;
    process_record_dynamic_macro( DYN_REC_START1, &kr );
  }
}

void macroTogKey2(qk_tap_dance_state_t *state, void *user_data) {
  keyrecord_t kr;

  if (state->count == 1)
  {
    kr.event.pressed = false;
    process_record_dynamic_macro( DYN_MACRO_PLAY2, &kr );
  }
  else if (state->count == 2)
  {
    kr.event.pressed = true;
    process_record_dynamic_macro( DYN_REC_STOP, &kr );
  }
  else if (state->count == 3)
  {
    kr.event.pressed = false;
    process_record_dynamic_macro( DYN_REC_START2, &kr );
  }
}
*/

void pstinsrt(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        register_code(KC_LALT);
        tap_code(KC_I);
        tap_code(KC_E);
        unregister_code(KC_LALT);
    } else {
        tap_code16(C(KC_V));
    }
    reset_tap_dance(state);
}

void ccopy(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        tap_code16(C(KC_X));

        // SEND_STRING( SS_DOWN(KC_LCTL) SS_TAP(KC_X) SS_UP(KC_LCTL));
    } else {
        tap_code16(C(KC_C));
    }
    reset_tap_dance(state);
}

void pstspecial(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        register_code(KC_LALT);
        tap_code(KC_E);
        tap_code(KC_S);
        unregister_code(KC_LALT);
        tap_code(KC_V);
    } else {
        register_code(KC_LALT);
        tap_code(KC_E);
        tap_code(KC_S);
        unregister_code(KC_LALT);
        tap_code(KC_T);
    }
    reset_tap_dance(state);
}

void deldel(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        register_code(KC_LALT);
        tap_code(KC_E);
        tap_code(KC_D);
        unregister_code(KC_LALT);
    } else {
        tap_code(KC_DEL);
    }
    reset_tap_dance(state);
}

void findreplace(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        tap_code16(C(KC_H));
    } else {
        tap_code16(C(KC_F));
    }
    reset_tap_dance(state);
}

void cyclawin(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        tap_code16(C(S(KC_F6)));
    } else {
        tap_code16(C(KC_F6));
    }
    reset_tap_dance(state);
}

void SCRNSNP(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        tap_code16(A(KC_PSCR));
    } else {
        tap_code(KC_LGUI);
        tap_code(KC_S);
        tap_code(KC_N);
        tap_code16(C(KC_N));
    }
    reset_tap_dance(state);
}

void mcccpy(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        tap_code16(G(KC_X));
    } else {
        tap_code16(G(KC_C));
    }
    reset_tap_dance(state);
}

void mcpstin(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        tap_code16(G(KC_I));
    } else {
        tap_code16(G(KC_V));
    }
    reset_tap_dance(state);
}

void enttab(qk_tap_dance_state_t *state, void *user_data) {
    if (state->count > 1) {
        tap_code(KC_ENT);
    } else {
        tap_code(KC_TAB);
    }
    reset_tap_dance(state);
}

void rgb_toggle(qk_tap_dance_state_t *state, void *user_data) {
#ifdef RGBLIGHT_ENABLE
    if (state->count == 1) {
        rgblight_step();
    } else {
        rgblight_increase_hue();
    }
#endif
}

// Tap Dance Definitions
qk_tap_dance_action_t tap_dance_actions[] = {
    [TD_PSTI] = ACTION_TAP_DANCE_FN(pstinsrt),
    [TD_PTSP] = ACTION_TAP_DANCE_FN(pstspecial),
    [TD_FNDR] = ACTION_TAP_DANCE_FN(findreplace),
    [TD_CCPY] = ACTION_TAP_DANCE_FN(ccopy),
    [TD_DDEL] = ACTION_TAP_DANCE_FN(deldel),
    [TD_ACCW] = ACTION_TAP_DANCE_FN(cyclawin),
    [TD_CAPESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS),
    [TD_DTEX] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_EXLM),
    [TD_COMQUES] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_QUES),
    [TD_MINPLS] = ACTION_TAP_DANCE_DOUBLE(KC_PMNS, KC_PPLS),
    [TD_DIVMLT] = ACTION_TAP_DANCE_DOUBLE(KC_PSLS, KC_PAST),
    [TD_DOTEQL] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_EQL),
    [TD_SCNSP] = ACTION_TAP_DANCE_FN(SCRNSNP),
    [TD_MCCCPY] = ACTION_TAP_DANCE_FN(mcccpy),
    [TD_MCPSTIN] = ACTION_TAP_DANCE_FN(mcpstin),
    [TD_ENTAB] = ACTION_TAP_DANCE_FN(enttab),
    [TD_XSPC] = ACTION_TAP_DANCE_DOUBLE(KC_SPACE, KC_X),
    [TD_RGB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rgb_toggle, NULL)
};

A users/klackygears/tap_dances.h => users/klackygears/tap_dances.h +37 -0
@@ 0,0 1,37 @@
#pragma once
#include "klackygears.h"

#ifdef TAP_DANCE_ENABLE
enum {
    // TD_MCROTOG,
    // TD_MCROTG2,
    TD_BTK,
    TD_TDE,
    TD_LPRN,
    TD_RPRN,
    TD_MIN,
    TD_USC,
    TD_CMWN,
    TD_ATSH,
    TD_PSTI,
    TD_PTSP,
    TD_FNDR,
    TD_CCPY,
    TD_DDEL,
    TD_ACCW,
    TD_CAPESC,
    TD_DTEX,
    TD_COMQUES,
    TD_MINPLS,
    TD_DIVMLT,
    TD_DOTEQL,
    TD_LSHSYM,
    TD_RSHSYM,
    TD_SCNSP,
    TD_MCCCPY,
    TD_MCPSTIN,
    TD_ENTAB,
    TD_XSPC,
    TD_RGB,
};
#endif

A users/klackygears/wrappers.h => users/klackygears/wrappers.h +220 -0
@@ 0,0 1,220 @@
#pragma once
#include "klackygears.h"
/*
Most of this is copied from drashna. I added and changed a few things but, it's all based off of his user folder.
*/
#if (!defined(LAYOUT) && defined(KEYMAP))
#define LAYOUT KEYMAP
#endif

//Added other layout options
#define LAYOUT_ergodox_wrapper(...)          LAYOUT_ergodox(__VA_ARGS__)
#define LAYOUT_ergodox_pretty_wrapper(...)   LAYOUT_ergodox_pretty(__VA_ARGS__)
#define KEYMAP_wrapper(...)                  LAYOUT(__VA_ARGS__)
#define LAYOUT_wrapper(...)                  LAYOUT(__VA_ARGS__)
#define LAYOUT_ortho_4x12_wrapper(...)       LAYOUT_ortho_4x12(__VA_ARGS__)
#define LAYOUT_ortho_5x10_wrapper(...)       LAYOUT_ortho_5x10(__VA_ARGS__)
#define LAYOUT_ortho_5x5_wrapper(...)        LAYOUT_ortho_5x5(__VA_ARGS__)


/*
NOTE: If you do a search/replace
  then you need to add/remove underscores to keep the
  lengths consistent.
*/
//keymaps for tap dance and without
#ifdef TAP_DANCE_ENABLE
  #define _________________QWERTY_L1_________________        KC_Q,    KC_W,    KC_E,    KC_R,    KC_T
  #define _________________QWERTY_L2_________________        KC_A,    KC_S,    KC_D,    KC_F,    KC_G
  #define _________________QWERTY_L3_________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B

  #define _________________QWERTY_R1_________________        KC_Y,    KC_U,    KC_I,           KC_O,        KC_P
  #define _________________QWERTY_R2_________________        KC_H,    KC_J,    KC_K,           KC_L,        KC_SCLN
  #define _________________QWERTY_R3_________________        KC_N,    KC_M,    TD(TD_COMQUES), TD(TD_DTEX), LT(_MDIA,KC_SLASH)


  #define _________________COLEMAK_L1________________        KC_Q,    KC_W,    KC_F,    KC_P,    KC_G
  #define _________________COLEMAK_L2________________        KC_A,    KC_R,    KC_S,    KC_T,    KC_D
  #define _________________COLEMAK_L3________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B

  #define _________________COLEMAK_R1________________        KC_J,    KC_L,    KC_U,           KC_Y,        KC_SCLN
  #define _________________COLEMAK_R2________________        KC_H,    KC_N,    KC_E,           KC_I,        KC_O
  #define _________________COLEMAK_R3________________        KC_K,    KC_M,    TD(TD_COMQUES), TD(TD_DTEX), KC_SLASH
/*
  #define ______________COLEMAK_MOD_DH_L1____________        KC_Q,    KC_W,    KC_F,    KC_P,    KC_B
  #define ______________COLEMAK_MOD_DH_L2____________        KC_A,    KC_R,    KC_S,    KC_T,    KC_G
  #define ______________COLEMAK_MOD_DH_L3____________        KC_Z,    KC_X,    KC_C,    KC_D,    KC_V

  #define ______________COLEMAK_MOD_DH_R1____________        KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN
  #define ______________COLEMAK_MOD_DH_R2____________        KC_M,    KC_N,    KC_E,    KC_I,    KC_O
  #define ______________COLEMAK_MOD_DH_R3____________        KC_K,    KC_H,    KC_COMM, KC_DOT,  KC_SLASH
*/

  #define _______________DVORAK_L1___________________        KC_QUOT,              TD(TD_COMQUES),    TD(TD_DTEX),        KC_P, KC_Y
  #define _______________DVORAK_L2___________________        KC_A,                 KC_O,              KC_E,               KC_U, KC_I
  #define _______________MACDVK_L3___________________        MT(MOD_LCTL,KC_SCLN), MT(MOD_LALT,KC_Q), MT(MOD_LGUI, KC_J), KC_K, KC_X
  #define _______________WINDVK_L3___________________        MT(MOD_LGUI,KC_SCLN), MT(MOD_LALT,KC_Q), MT(MOD_LCTL, KC_J), KC_K, KC_X

  #define _______________DVORAK_R1___________________        KC_F,       KC_G,       KC_C,              KC_R,              KC_L
  #define _______________DVORAK_R2___________________        KC_D,       KC_H,       KC_T,              KC_N,              KC_S
  #define _______________MACDVK_R3___________________        KC_B,       KC_M,       MT(MOD_LGUI,KC_W), MT(MOD_LALT,KC_V), LT(_MDIA,KC_Z)
  #define _______________WINDVK_R3___________________        KC_B,       KC_M,       MT(MOD_LCTL,KC_W), MT(MOD_LALT,KC_V), LT(_MDIA,KC_Z)

  #define __________c39__MACDVK_L3___________________        MT(MOD_LCTL,KC_SCLN), MT(MOD_LALT,KC_Q), MT(MOD_LGUI, KC_J), LT(_SYMB,KC_K), TD(TD_XSPC)
  #define __________c39__WINDVK_L3___________________        MT(MOD_LGUI,KC_SCLN), MT(MOD_LALT,KC_Q), MT(MOD_LCTL, KC_J), LT(_SYMB,KC_K), TD(TD_XSPC)
  #define __________c39__MACDVK_R3___________________        LT(_MNMB,KC_B),       LT(_SYMB,KC_M),    MT(MOD_LGUI,KC_W),  MT(MOD_LALT,KC_V), LT(_MDIA,KC_Z)
  #define __________c39__WINDVK_R3___________________        LT(_NUMB,KC_B),       LT(_SYMB,KC_M),    MT(MOD_LCTL,KC_W),  MT(MOD_LALT,KC_V), LT(_MDIA,KC_Z)
#else

  #define _________________QWERTY_L1_________________        KC_Q,    KC_W,    KC_E,    KC_R,    KC_T
  #define _________________QWERTY_L2_________________        KC_A,    KC_S,    KC_D,    KC_F,    KC_G
  #define _________________QWERTY_L3_________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B

  #define _________________QWERTY_R1_________________        KC_Y,    KC_U,    KC_I,           KC_O,        KC_P
  #define _________________QWERTY_R2_________________        KC_H,    KC_J,    KC_K,           KC_L,        KC_SCLN
  #define _________________QWERTY_R3_________________        KC_N,    KC_M,    KC_COMM, KC_DOT, LT(_MDIA,KC_SLASH)


  #define _________________COLEMAK_L1________________        KC_Q,    KC_W,    KC_F,    KC_P,    KC_G
  #define _________________COLEMAK_L2________________        KC_A,    KC_R,    KC_S,    KC_T,    KC_D
  #define _________________COLEMAK_L3________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B

  #define _________________COLEMAK_R1________________        KC_J,    KC_L,    KC_U,           KC_Y,        KC_SCLN
  #define _________________COLEMAK_R2________________        KC_H,    KC_N,    KC_E,           KC_I,        KC_O
  #define _________________COLEMAK_R3________________        KC_K,    KC_M,    KC_COMM, KC_DOT, KC_SLASH

  #define _______________DVORAK_L1___________________        KC_QUOT,              KC_COMM,    KC_DOT,        KC_P, KC_Y
  #define _______________DVORAK_L2___________________        KC_A,                 KC_O,              KC_E,               KC_U, KC_I
  #define _______________MACDVK_L3___________________        MT(MOD_LCTL,KC_SCLN), MT(MOD_LALT,KC_Q), MT(MOD_LGUI, KC_J), KC_K, KC_X
  #define _______________WINDVK_L3___________________        MT(MOD_LGUI,KC_SCLN), MT(MOD_LALT,KC_Q), MT(MOD_LCTL, KC_J), KC_K, KC_X

  #define _______________DVORAK_R1___________________        KC_F,       KC_G,       KC_C,              KC_R,              KC_L
  #define _______________DVORAK_R2___________________        KC_D,       KC_H,       KC_T,              KC_N,              KC_S
  #define _______________MACDVK_R3___________________        KC_B,       KC_M,       MT(MOD_LGUI,KC_W), MT(MOD_LALT,KC_V), LT(_MDIA,KC_Z)
  #define _______________WINDVK_R3___________________        KC_B,       KC_M,       MT(MOD_LCTL,KC_W), MT(MOD_LALT,KC_V), LT(_MDIA,KC_Z)
#endif

/*
#define ________________DVORAK_AU_L1_______________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y
#define ________________DVORAK_AU_L2_______________        KC_O,    KC_A,    KC_E,   KC_I,     KC_U
#define ________________DVORAK_AU_L3_______________        KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X

#define ________________DVORAK_AU_R1_______________        KC_F,    KC_G,    KC_C,    KC_R,    KC_L
#define ________________DVORAK_AU_R2_______________        KC_D,    KC_H,    KC_T,    KC_N,    KC_S
#define ________________DVORAK_AU_R3_______________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z


#define _________________WORKMAN_L1________________        KC_Q,    KC_D,    KC_R,   KC_W,     KC_B
#define _________________WORKMAN_L2________________        KC_A,    KC_S,    KC_H,   KC_T,     KC_G
#define _________________WORKMAN_L3________________        KC_Z,    KC_X,    KC_M,   KC_C,     KC_V

#define _________________WORKMAN_R1________________        KC_J,    KC_F,    KC_U,           KC_P,        KC_SCLN
#define _________________WORKMAN_R2________________        KC_Y,    KC_N,    KC_E,           KC_O,        KC_I
#define _________________WORKMAN_R3________________        KC_K,    KC_L,    TD(TD_COMQUES), TD(TD_DTEX), KC_SLASH


#define _________________NORMAN_L1_________________       KC_Q,    KC_W,    KC_D,    KC_F,    KC_K
#define _________________NORMAN_L2_________________       KC_A,    KC_S,    KC_E,    KC_T,    KC_G
#define _________________NORMAN_L3_________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B

#define _________________NORMAN_R1_________________       KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN
#define _________________NORMAN_R2_________________       KC_Y,    KC_N,    KC_I,    KC_O,    KC_U
#define _________________NORMAN_R3_________________       KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
*/

// thumb key layouts
#define ________WIN_THUMB_CLUSTER_________                LT(_SYMB,KC_SPC), LT(_NUMB,KC_BSPC), LT(_NUMB,KC_TAB), LT(_SYMB,KC_ENT)
#define ________MAC_THUMB_CLUSTER_________                LT(_SYMB,KC_SPC), LT(_MNMB,KC_BSPC), LT(_MNMB,KC_TAB), LT(_SYMB,KC_ENT)

#define __________________WIN_THUMB_CLUSTER_V2______________ LT(_FUNC,KC_ENT), LT(_NUMB,KC_BSPC), MT(MOD_LSFT,KC_SPC), LT(_NUMB,KC_TAB), LT(_SYMB,KC_ENT), KC_RSFT
#define __________________MAC_THUMB_CLUSTER_V2______________ LT(_FUNC,KC_ENT), LT(_MNMB,KC_BSPC), MT(MOD_LSFT,KC_SPC), LT(_MNMB,KC_TAB), LT(_SYMB,KC_ENT), KC_RSFT
#define ________MAC_THUMB_L______                            LT(_FUNC,KC_ENT), LT(_MNMB,KC_BSPC), MT(MOD_LSFT,KC_SPC)
#define ________MAC_THUMB_R______                            LT(_MNMB,KC_TAB), LT(_SYMB,KC_ENT),    LT(_MDIA,KC_ENT)
#define ________WIN_THUMB_L______                            LT(_FUNC,KC_ENT), LT(_NUMB,KC_BSPC), MT(MOD_LSFT,KC_SPC)
#define ________WIN_THUMB_R______                            LT(_NUMB,KC_TAB), LT(_SYMB,KC_ENT),    LT(_MDIA,KC_ENT)

// Mission Control Commands
#define ________MAC_MISSION_CTRL__________                LCTL(KC_LEFT),    LCTL(KC_UP),       LCTL(KC_DOWN),    LCTL(KC_RGHT)

//Number Row
#define _________________NUMBER_L__________________       KC_1,    KC_2,    KC_3,    KC_4,    KC_5
#define _________________NUMBER_R__________________       KC_6,    KC_7,    KC_8,    KC_9,    KC_0

//keymaps for tap dance and without
#ifdef TAP_DANCE_ENABLE
//Arrow keys and copy-paste shortcuts for MAC OS
  #define _________________MACNAV_L1_________________       KC_PGUP,    KC_PGDN,    KC_HOME,       KC_END,         _______
  #define _________________MACNAV_L2_________________       KC_LEFT,    KC_UP,      KC_DOWN,       KC_RIGHT,       _______
  #define _________________MACNAV_L3_________________       _______,    LGUI(KC_A), TD(TD_MCCCPY), TD(TD_MCPSTIN), KC_DEL

//Arrow keys and copy-paste shortcuts for Windows and Microsoft Access & Excel
  #define _________________WINNAV_L1_________________       KC_PGUP,     KC_PGDN,    KC_HOME,     KC_END,      TD(TD_FNDR)
  #define _________________WINNAV_L2_________________       KC_LEFT,     KC_UP,      KC_DOWN,     KC_RIGHT,    TD(TD_PTSP)
  #define _________________WINNAV_L3_________________       TD(TD_ACCW), LCTL(KC_A), TD(TD_CCPY), TD(TD_PSTI), TD(TD_DDEL)

//Numpad layout with different mod-tap keys for MAC OS and Windows
  #define _________________NUMB_R1___________________       TD(TD_MINPLS), KC_7, KC_8,              KC_9,              KC_COLN
  #define _________________NUMB_R2___________________       TD(TD_DIVMLT), KC_4, KC_5,              KC_6,              C_S_T(KC_COLN)
  #define _________________NUMB_R3_MAC_______________       TD(TD_DOTEQL), KC_1, MT(MOD_LGUI,KC_2), MT(MOD_LALT,KC_3), MT(MOD_LCTL,KC_0)
  #define _________________NUMB_R3_WIN_______________       TD(TD_DOTEQL), KC_1, MT(MOD_LCTL,KC_2), MT(MOD_LALT,KC_3), MT(MOD_LGUI,KC_0)
  #define _________________NUMB_R4___________________       KC_LSFT,       KC_0, KC_0,              _______,           _______
#else
//Arrow keys and copy-paste shortcuts for MAC OS
  #define _________________MACNAV_L1_________________       KC_PGUP,    KC_PGDN,    KC_HOME,       KC_END,         _______
  #define _________________MACNAV_L2_________________       KC_LEFT,    KC_UP,      KC_DOWN,       KC_RIGHT,       _______
  #define _________________MACNAV_L3_________________       _______,    LGUI(KC_A), _______,       _______, KC_DEL

//Arrow keys and copy-paste shortcuts for Windows and Microsoft Access & Excel
  #define _________________WINNAV_L1_________________       KC_PGUP,     KC_PGDN,    KC_HOME,     KC_END,      _______
  #define _________________WINNAV_L2_________________       KC_LEFT,     KC_UP,      KC_DOWN,     KC_RIGHT,    _______
  #define _________________WINNAV_L3_________________       _______,     _______,    _______,     _______,     _______
  #define _________________NUMB_R1___________________       KC_PMNS,       KC_7, KC_8,              KC_9,              KC_PPLS
  #define _________________NUMB_R2___________________       KC_PSLS,       KC_4, KC_5,              KC_6,              KC_PAST
  #define _________________NUMB_R3_MAC_______________       KC_DOT,        KC_1, MT(MOD_LGUI,KC_2), MT(MOD_LALT,KC_3), MT(MOD_LCTL,KC_0)
  #define _________________NUMB_R3_WIN_______________       KC_DOT,        KC_1, MT(MOD_LCTL,KC_2), MT(MOD_LALT,KC_3), MT(MOD_LGUI,KC_0)
  #define _________________NUMB_R4___________________       KC_LSFT,       KC_0, KC_0,              _______,           _______
#endif

//Function Row
/*
#define _________________FUNC_LEFT_________________       KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5
#define _________________FUNC_RIGHT________________       KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10
*/

//Function keys as macropad
#define _____________FUNC_1_______________                KC_F9,      KC_F10,     KC_F11,     KC_F12
#define _____________FUNC_2_______________                KC_F5,      KC_F6,      KC_F7,      KC_F8
#define _____________FUNC_3_______________                KC_F1,      KC_F2,      KC_F3,      KC_F4

//RGB keys
#if defined RGBLIGHT_ENABLE || defined RGB_MATRIX_ENABLE
#define _________________RGB_1_____________________       RGBRST,     RGB_HUI,    RGB_SAI,    RGB_VAI,    RGB_SPI
#define _________________RGB_2_____________________       RGB_MOD,    RGB_HUD,    RGB_SAD,    RGB_VAD,    RGB_SPD
#else
#define _________________RGB_1_____________________       _______,    _______,    _______,    _______,    _______
#define _________________RGB_2_____________________       _______,    _______,    _______,    _______,    _______
#endif

//Audio keys
#define _________________MEDIA_____________________       KC_MPLY,    KC_MUTE,     KC_VOLD,      KC_VOLU,     _______
#define _________________MEDIA_V2__________________       KC_EJCT,    KC_MRWD,     KC_MPLY,      KC_MFFD,     _______

//Base layer keys
#define _________________LYOUT_____________________       _______,    KC_QWERTY,   KC_MACBASE,   KC_WINBASE,  _______

//Punctuation keys
#define _________________PUNC_L1___________________       KC_BSLS,    KC_AT,      KC_HASH,    KC_DLR,     KC_PERC
#define _________________PUNC_L1_ALT_______________       KC_DQT,     KC_AT,      KC_HASH,    KC_DLR,     KC_PERC
#define _________________PUNC_L2___________________       KC_PLUS,    KC_MINS,    KC_ASTR,    KC_SLSH,    KC_EQL
#define _________________PUNC_L3___________________       KC_LBRC,    KC_RBRC,    KC_LPRN,    KC_RPRN,    KC_AMPR
#define _________________PUNC_L3_ALT_______________       _______,    _______,    KC_TILD,    KC_CIRC,    KC_GRV
#define _________________PUNC_R1___________________       _______, KC_DQT,  KC_EQL,  _______, _______
#define _________________PUNC_R2___________________       _______, KC_ASTR, KC_SLSH, KC_PLUS, KC_MINS
#define _________________PUNC_R3___________________       _______, KC_EQL,  KC_BSLS, _______, _______

//Make Shortcuts and window switching
#define _____________FUNC_L1_______________________       MAKEKF,   MAKEK,   _______, KC_ESC,  LCTL(LALT(KC_DEL))
#define _____________FUNC_L3_______________________       KC_LGUI, KC_RALT, KC_LCTL, KC_TAB,  _______


#define _________________KC_BLANK__________________       _______, _______, _______, _______, _______