~ruther/qmk_firmware

674fcc474c162f44fadfa8a796134751d80ee639 — kuchosauronad0 5 years ago b1c2bf0
[Keymap] Update to Userspace kuchosauronad0 (#6899)

* Add Plover layer, remove unused layers

* Add rgb indicator for success/failed sequences

* Add RGB effects

* Add RGB

* Add effects for start and end of a leader sequence

* Add PLOVER layer

* Add RGB

* Add RBG

* Minor clean up

* Minor clean up

* Minor clean up

* Minor clean up

* Rename rgb_light to rgblight_user and fix all references to it

* Remove unnecessary guards

Remove unnecessary matrix_scan in rgb post_init function

* remove trailing newline
M users/kuchosauronad0/config.h => users/kuchosauronad0/config.h +40 -40
@@ 1,61 1,62 @@
#pragma once

#ifdef AUDIO_ENABLE
  #define AUDIO_CLICKY
  #define STARTUP_SONG SONG(RICK_ROLL)
  #define GOODBYE_SONG SONG(SONIC_RING)
  #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
                                    SONG(COLEMAK_SOUND), \
                                    SONG(DVORAK_SOUND), \
                                    SONG(OVERWATCH_THEME) \
                                  }
  #define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f
  // #ifdef RGBLIGHT_ENABLE
  // #define NO_MUSIC_MODE
  // #endif //RGBLIGHT_ENABLE/
  // #ifndef __arm__
  //   #undef  NOTE_REST
  //   #define NOTE_REST         1.00f
  // #endif // !__arm__
  #define UNICODE_SONG_OSX SONG(RICK_ROLL)
  #define UNICODE_SONG_LNX SONG(RICK_ROLL)
  #define UNICODE_SONG_WIN SONG(RICK_ROLL)
  #define UNICODE_SONG_BSD SONG(RICK_ROLL)
  #define UNICODE_SONG_WINC SONG(RICK_ROLL)
#  define DEFAULT_LAYER_SONGS \
     { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(PLOVER_SOUND) }
#  define AUDIO_CLICKY
#  define STARTUP_SONG SONG(RICK_ROLL)
#  define GOODBYE_SONG SONG(SONIC_RING)
#  define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f
#  ifndef __arm__
#    undef  NOTE_REST
#    define NOTE_REST 1.00f
#  endif // !__arm__
#  define UNICODE_SONG_OSX SONG(RICK_ROLL)
#  define UNICODE_SONG_LNX SONG(RICK_ROLL)
#  define UNICODE_SONG_WIN SONG(RICK_ROLL)
#  define UNICODE_SONG_BSD SONG(RICK_ROLL)
#  define UNICODE_SONG_WINC SONG(RICK_ROLL)
#endif // !AUDIO_ENABLE

#ifdef RGBLIGHT_ENABLE
  #define RGBLIGHT_SLEEP
  #undef RGBLIGHT_ANIMATIONS
  #define RGBLIGHT_EFFECT_BREATHING
  #define RGBLIGHT_EFFECT_SNAKE
  #define RGBLIGHT_EFFECT_KNIGHT
#  define RGBLIGHT_SLEEP
#  undef  RGBLIGHT_ANIMATIONS
#  define RGBLIGHT_HUE_STEP 16
#  define RGBLIGHT_SAT_STEP 16
#  define RGBLIGHT_VAL_STEP 16
#  define RGBLIGHT_LIMIT_VAL 255
#  define RGBLIGHT_EFFECT_BREATHING
#  define RGBLIGHT_EFFECT_STATIC_GRADIENT
//#  define RGBLIGHT_EFFECT_KNIGHT
//#  define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
//#  define RGBLIGHT_EFFECT_SNAKE
//#  define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
#endif // !RGBLIGHT_ENABLE

#ifndef ONESHOT_TAP_TOGGLE
  #define ONESHOT_TAP_TOGGLE 2
#  define ONESHOT_TAP_TOGGLE 2
#endif // !ONESHOT_TAP_TOGGLE

#ifndef ONESHOT_TIMEOUT
  #define ONESHOT_TIMEOUT 3000
#  define ONESHOT_TIMEOUT 3000
#endif// !ONESHOT_TIMEOUT

#ifndef QMK_KEYS_PER_SCAN
  #define QMK_KEYS_PER_SCAN 4
#  define QMK_KEYS_PER_SCAN 4
#endif // !QMK_KEYS_PER_SCAN

#if defined(LEADER_ENABLE)
  #define LEADER_PER_KEY_TIMING
  #define LEADER_TIMEOUT 250
#  define LEADER_PER_KEY_TIMING
#  define LEADER_TIMEOUT 250
#endif // !LEADER_ENABLE 

#if defined(COMBO_ENABLE)
  #define COMBO_COUNT 4
  #define COMBO_TERM 150
#  define COMBO_COUNT 4
#  define COMBO_TERM 150
#endif // !COMBO_ENABLE 

#if defined(NKRO_ENABLE)
  #define FORCE_NKRO
#  define FORCE_NKRO
#endif // !NKRO_ENABLE

// this makes it possible to do rolling combos (zx) with keys that


@@ 68,18 69,18 @@
//#define RETRO_TAPPING

#ifndef TAPPING_TOGGLE
  #define TAPPING_TOGGLE  1
#  define TAPPING_TOGGLE  1
#endif

#ifdef TAPPING_TERM
  #undef TAPPING_TERM
#  undef TAPPING_TERM
#endif // !TAPPING_TERM
#if defined(KEYBOARD_handwired_kuchosauronad0_planckenstein)
  #define TAPPING_TERM 185
#  define TAPPING_TERM 185
#elif defined(KEYBOARD_c39)
  #define TAPPING_TERM 200
#  define TAPPING_TERM 200
#else
  #define TAPPING_TERM 180
#  define TAPPING_TERM 180
#endif




@@ 87,4 88,3 @@

#define MACRO_TIMER 5 



M users/kuchosauronad0/kuchosauronad0.c => users/kuchosauronad0/kuchosauronad0.c +7 -6
@@ 19,10 19,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

userspace_config_t userspace_config;
#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
  #define KUCHOSAURONAD0_UNICODE_MODE UC_WINC
#  define KUCHOSAURONAD0_UNICODE_MODE UC_WINC
#else
  // set to 2 for UC_WIN, set to 4 for UC_WINC
  #define KUCHOSAURONAD0_UNICODE_MODE 2
#  define KUCHOSAURONAD0_UNICODE_MODE 2 // set to 2 for UC_WIN, set to 4 for UC_WINC
#endif




@@ 70,7 69,7 @@ void shutdown_user (void) {
  #ifdef RGBLIGHT_ENABLE
    rgblight_enable_noeeprom();
    rgblight_mode_noeeprom(1);
    rgblight_setrgb_red();
    rgblight_setrgb_teal();
  #endif // RGBLIGHT_ENABLE
  #ifdef RGB_MATRIX_ENABLE
    // uint16_t timer_start = timer_read();


@@ 108,11 107,11 @@ void matrix_scan_user(void){

#ifdef TAP_DANCE_ENABLE  // Run Diablo 3 macro checking code.
//  run_diablo_macro_check();
#endif // TAP_DANCE_ENABLE
#endif // !TAP_DANCE_ENABLE

#ifdef RGBLIGHT_ENABLE
  matrix_scan_rgb();
#endif // RGBLIGHT_ENABLE
#endif // !RGBLIGHT_ENABLE

  matrix_scan_keymap();
}


@@ 171,6 170,8 @@ void eeconfig_init_user(void) {
  #else
    eeprom_update_byte(EECONFIG_UNICODEMODE, KUCHOSAURONAD0_UNICODE_MODE);
  #endif
  eeconfig_init_keymap();
  keyboard_init();
}

// TMUX stuff

M users/kuchosauronad0/kuchosauronad0.h => users/kuchosauronad0/kuchosauronad0.h +36 -38
@@ 1,7 1,4 @@
#ifndef USERSPACE
#define USERSPACE

//#pragma once
#pragma once

#include "quantum.h"



@@ 11,23 8,25 @@
#include "process_records.h"

#ifdef TAP_DANCE_ENABLE
  #include "tap_dances.h"
  #define KC_TMX TD(TD_TMX)   // tap1: 't'  tap2: <CTL>+b
  #define KC_EOL TD(TD_EOL)   // tap1: 'e'  tap2: <CTL>+e
  #define KC_BOL TD(TD_BOL)   // tap1: 'a'  tap2: <CTL>+a
  #define KC_NW TD(TD_NW)     // tap1: 'f'  tap2: <ALT>+f
  #define KC_PW TD(TD_PW)     // tap1: 'b'  tap2: <ALT>+b
  #define KC_DW TD(TD_DW)     // tap1: 'w'  tap2: <CTL>+w
#  include "tap_dances.h"
#  define KC_TMX TD(TD_TMX)   // tap1: 't'  tap2: <CTL>+b
#  define KC_EOL TD(TD_EOL)   // tap1: 'e'  tap2: <CTL>+e
#  define KC_BOL TD(TD_BOL)   // tap1: 'a'  tap2: <CTL>+a
#  define KC_NW TD(TD_NW)     // tap1: 'f'  tap2: <ALT>+f
#  define KC_PW TD(TD_PW)     // tap1: 'b'  tap2: <ALT>+b
#  define KC_DW TD(TD_DW)     // tap1: 'w'  tap2: <CTL>+w
#endif //!TAP_DANCE_ENABLE

#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
  #include "rgb_stuff.h"
#  include "rgblight_user.h"
#endif

#if defined(UNICODEMAP_ENABLE) || defined(UNICODE_ENABLE)
  #include "unicode.h"
#  include "unicode.h"
#endif //!UNICODE_ENABLE

// Keycode aliases
#define TM_X LCTL(KC_B)     // Tmux control sequence
#define TM_X LCTL(KC_B)     // Tmux leader key
// Unix QoL macros
#define MC_BOL LCTL(KC_A)   // jump to beginning of line
#define MC_EOL LCTL(KC_E)   // jump to end       of line


@@ 42,10 41,11 @@ enum userspace_layers {
  _COLEMAK,
  _DVORAK,
  _WORKMAN,
  _NORMAN,
/*  _NORMAN,
  _MALTRON,
  _EUCALYN,
  _CARPLAX,
  _CARPLAX, */
  _PLOVER,
  _UNICODE,
  _MODS, /* layer 8 now 9*/
  _GAMEPAD,


@@ 57,18 57,18 @@ enum userspace_layers {
  _ADJUST,
};

bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed);
bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
bool send_game_macro(const char *str, keyrecord_t *record, bool override);
void matrix_init_keymap(void);
void shutdown_keymap(void);
void suspend_power_down_keymap(void);
void suspend_wakeup_init_keymap(void);
void matrix_scan_keymap(void);
bool     mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed);
bool     mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
bool     send_game_macro(const char *str, keyrecord_t *record, bool override);
void     matrix_init_keymap(void);
void     shutdown_keymap(void);
void     suspend_power_down_keymap(void);
void     suspend_wakeup_init_keymap(void);
void     matrix_scan_keymap(void);
uint32_t layer_state_set_keymap (uint32_t state);
uint32_t default_layer_state_set_keymap (uint32_t state);
void led_set_keymap(uint8_t usb_led);
void eeconfig_init_keymap(void);
void     led_set_keymap(uint8_t usb_led);
void     eeconfig_init_keymap(void);

void tmux_prefix(void);
void tmux_pane_zoom(void);


@@ 95,17 95,15 @@ But since TD() doesn't work when tap dance is disabled
We use custom codes here, so we can substitute the right stuff
*/
#ifdef TAP_DANCE_ENABLE
#define KC_D3_1 TD(TD_D3_1)
#define KC_D3_2 TD(TD_D3_2)
#define KC_D3_3 TD(TD_D3_3)
#define KC_D3_4 TD(TD_D3_4)
#else // TAP_DANCE_ENABLE
#define KC_D3_1 KC_1
#define KC_D3_2 KC_2
#define KC_D3_3 KC_3
#define KC_D3_4 KC_4
#endif // TAP_DANCE_ENABLE

#endif // !USERSPACE
#  define KC_D3_1 TD(TD_D3_1)
#  define KC_D3_2 TD(TD_D3_2)
#  define KC_D3_3 TD(TD_D3_3)
#  define KC_D3_4 TD(TD_D3_4)
#else
#  define KC_D3_1 KC_1
#  define KC_D3_2 KC_2
#  define KC_D3_3 KC_3
#  define KC_D3_4 KC_4
#endif // !TAP_DANCE_ENABLE

/* vi: ft=c:tw=80:sw=2:ts=2:sts=2:et */

M users/kuchosauronad0/leader.c => users/kuchosauronad0/leader.c +68 -29
@@ 1,77 1,116 @@
#include "leader.h"
#ifdef RGBLIGHT_ENABLE
extern rgblight_config_t rgblight_config;
#endif
bool leader_succeed;

LEADER_EXTERNS();

void matrix_scan_user(void){
void matrix_scan_user(void) {
  static bool has_ran_yet;
  if (!has_ran_yet) {
    has_ran_yet = true;
    startup_user();
  }

#ifdef TAP_DANCE_ENABLE  // Run Diablo 3 macro checking code.
//  run_diablo_macro_check();
#endif // TAP_DANCE_ENABLE

#endif 
#ifdef RGBLIGHT_ENABLE
  matrix_scan_rgb();
#endif // RGBLIGHT_ENABLE

#endif
  LEADER_DICTIONARY() {
    leading = false;
    leader_end();
    leader_succeed = leading = false;

    SEQ_ONE_KEY(KC_W) {
      // vim/tmux: Use in command mode in vim: write to file, switch tmux pane in the current session window and repeat the last command
      SEND_STRING(":w" SS_TAP(X_ENTER));
      tmux_pane_switch_repeat();
      }
    
      leader_succeed = true;
    } else
    SEQ_ONE_KEY(KC_T) {
      // Send the Tmux Prefix
      tmux_prefix();
    }

      leader_succeed = true;
    } else
    SEQ_ONE_KEY(KC_A) {
       // tmux: Send the prefix and press 'right' arrow
      tmux_prefix();
      tap_code(KC_RIGHT);
    }

      leader_succeed = true;
    } else
    SEQ_TWO_KEYS(KC_T, KC_T) {
      // tmux: Send the prefix to a nested session
      tmux_prefix();
      tmux_prefix();
    }
      leader_succeed = true;
    } else
    SEQ_TWO_KEYS(KC_T, KC_R) {
      // tmux: Switch pane and repeat last action
      tmux_pane_switch_repeat();
    }

      leader_succeed = true;
    } else
    SEQ_TWO_KEYS(KC_V, KC_Z){
      // vim: Zoom pane
      tap_code16(LCTL(KC_W));
      tap_code16(LSFT(KC_BSLS));
    }

      leader_succeed = true;
    } else
    SEQ_TWO_KEYS(KC_V, KC_R) {
      // vim: Substitute and place cursor
      SEND_STRING(":%s///g" SS_TAP(X_LEFT));
      tap_code(KC_LEFT);
      tap_code(KC_LEFT);
    }

      leader_succeed = true;
    } else
    SEQ_TWO_KEYS(KC_V, KC_T) {
     // vim: move current pane to new tab
     tap_code16(LCTL(KC_W));
     tap_code16(LSFT(KC_T));
    }

      // vim: move current pane to new tab
      tap_code16(LCTL(KC_W));
      tap_code16(LSFT(KC_T));
      leader_succeed = true;
    } else
    SEQ_ONE_KEY(KC_R){
      // Toggle RGB Layer indicator
      tap_code16(KC_RGB_T);
      leader_succeed = true;
    } else
    SEQ_ONE_KEY(KC_SPC){
      // One Shot Unicode layer
//TODO      tap_code16(OS_UNI);
      leader_succeed = true;
    } else
    SEQ_TWO_KEYS(KC_SPC, KC_SPC){
      // Toggle _MODS
      tap_code16(TG_MODS);
      leader_succeed = true;
    } else
    SEQ_THREE_KEYS(KC_BSPC, KC_BSPC, KC_BSPC){
        // Reset the keyboard
        reset_keyboard();
      // Reset the keyboard
      reset_keyboard();
      leader_succeed = true;
    }
  leader_end();
  }
//  matrix_scan_keymap();
}

void leader_start(void) {
#ifdef RGBLIGHT_ENABLE
 rgblight_savebase();
 rgblight_mode_noeeprom(1);
 rgblight_sethsv_noeeprom_goldenrod();
#endif
}

  matrix_scan_keymap();
void leader_end(void) {
// pick color depending of success /fail
// fade leader_start from 100 to 0
// fade new color from  0 to 100 to 0
// fade old color from 0 to 100
#ifdef RGBLIGHT_ENABLE
  if (leader_succeed) {
    fadeflash_leds(HSV_GREEN);
  } else {
    fadeflash_leds(HSV_RED);
  }
#endif
}

M users/kuchosauronad0/process_records.c => users/kuchosauronad0/process_records.c +2 -2
@@ 25,7 25,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#endif //KEYLOGGER_ENABLE

  switch (keycode) {
  case KC_QWERTY ... KC_UNICODE:
  case KC_QWERTY ... KC_PLOVER:
    if (record->event.pressed) {
      set_single_persistent_default_layer(keycode - KC_QWERTY);
    }


@@ 168,7 168,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros
    if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeconfig_update_user(userspace_config.raw); }
#ifdef RGBLIGHT_ENABLE
    userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18);
//    userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18);
#endif //RGBLIGHT_ENABLE
    break;
  case KC_SALT:

M users/kuchosauronad0/process_records.h => users/kuchosauronad0/process_records.h +43 -46
@@ 2,9 2,9 @@
#include "kuchosauronad0.h"

#if defined(KEYMAP_SAFE_RANGE)
#define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
#  define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
#else
#define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
#  define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
#endif

enum userspace_custom_keycodes{


@@ 13,11 13,7 @@ enum userspace_custom_keycodes{
  KC_COLEMAK,        // Sets default layer to COLEMAK
  KC_DVORAK,         // Sets default layer to DVORAK
  KC_WORKMAN,        // Sets default layer to WORKMAN
  KC_NORMAN,         // Sets default layer to NORMAN
  KC_MALTRON,        // Sets default layer to MALTRON
  KC_EUCALYN,        // Sets default layer to EUCALYN
  KC_CARPLAX,        // Sets default layer to CARPLAX
  KC_UNICODE,        // Sets default layer to UNICODE
  KC_PLOVER,         // Sets default layer to PLOVER

  KC_MAKE,           // Run keyboard's customized make command
  KC_RGB_T,          // Toggles RGB Layer Indication mode


@@ 33,36 29,37 @@ enum userspace_custom_keycodes{
  UC_SHRG,           // ¯\_(ツ)_/¯
  UC_DISA,           // ಠ_ಠ

  MC_QT1,  // ""
  MC_QT2,  // ''
  MC_QT3,  // `'
  MC_PAR,  // Parenthesis
  MC_CUR,  // Curly bracket
  MC_SQR,  // Square bracket
  MC_ABR,  // Angle bracket
  MCT_NEW, // New Tmux Session
  MCT_SH,  // Tmux horizontal split
  MCT_SV,  // Tmux vertical split
  MCT_ZM,  // Tmux zoom
  MCT_SCR, // Tmux scroll mode
  MCT_UP,  // Tmux up
  MCT_DW,  // Tmux down
  MCT_LFT, // Tmux left
  MCT_RGT, // Tmux right
  MCV_B,   // Vim begin of line
  MCV_E,   // Vim end of line
  MCT_F,   // Vim for loop
  MCG_A, // Git add
  MCG_C, // Git commit
  MCG_P, // Git push
  MCG_R, // Git revert
  MCG_L, // Git log
  MCG_S, // Git status
  MC_QT1,            // ""
  MC_QT2,            // ''
  MC_QT3,            // `'
  MC_PAR,            // Parenthesis
  MC_CUR,            // Curly bracket
  MC_SQR,            // Square bracket
  MC_ABR,            // Angle bracket
  MCT_NEW,           // New Tmux Session
  MCT_SH,            // Tmux horizontal split
  MCT_SV,            // Tmux vertical split
  MCT_ZM,            // Tmux zoom
  MCT_SCR,           // Tmux scroll mode
  MCT_UP,            // Tmux up
  MCT_DW,            // Tmux down
  MCT_LFT,           // Tmux left
  MCT_RGT,           // Tmux right
  MCV_B,             // Vim begin of line
  MCV_E,             // Vim end of line
  MCT_F,             // Vim for loop
  MCG_A,             // Git add
  MCG_C,             // Git commit
  MCG_P,             // Git push
  MCG_R,             // Git revert
  MCG_L,             // Git log
  MCG_S,             // Git status

  NEW_SAFE_RANGE     //use "NEWPLACEHOLDER for keymap specific codes
  };

bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record);
bool process_record_keymap(uint16_t keycode, keyrecord_t *record);

#define LOWER MO(_LOWER)


@@ 74,21 71,21 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
#define OS_RSE OSL(_RAISE)
#define OS_UNI OSL(_UNICODE)

#define KC_SEC1 KC_SECRET_1
#define KC_SEC2 KC_SECRET_2
#define KC_SEC3 KC_SECRET_3
#define KC_SEC4 KC_SECRET_4
#define KC_SEC5 KC_SECRET_5
#define KC_SEC6 KC_SECRET_6
#define SEC1     KC_SECRET_1
#define SEC2     KC_SECRET_2
#define SEC3     KC_SECRET_3
#define SEC4     KC_SECRET_4
#define SEC5     KC_SECRET_5
#define SEC6     KC_SECRET_6

#define QWERTY KC_QWERTY
#define DVORAK KC_DVORAK
#define COLEMAK KC_COLEMAK
#define WORKMAN KC_WORKMAN
#define UNICODE KC_UNICODE
#define QWERTY   KC_QWERTY
#define DVORAK   KC_DVORAK
#define COLEMAK  KC_COLEMAK
#define WORKMAN  KC_WORKMAN
#define PLOVER   KC_PLOVER

#define KC_RESET RESET
#define KC_RST KC_RESET
#define KC_RST   KC_RESET

#define UC_IRNY UC(0x2E2E)
#define UC_CLUE UC(0x203D)
#define UC_IRNY  UC(0x2E2E)
#define UC_CLUE  UC(0x203D)

A users/kuchosauronad0/rgblight_user.c => users/kuchosauronad0/rgblight_user.c +156 -0
@@ 0,0 1,156 @@
#include "rgblight_user.h"
extern rgblight_config_t rgblight_config;
bool                     has_initialized;
uint8_t                  base_hue;  // Hue value of base state
uint8_t                  base_sat;  // Saturation value of base state
uint8_t                  base_val;  // Brightness value of base state
uint8_t                  base_mod;  // Animation mode of the base state

void rgblight_savebase(void) {  // Save the current settings to ram
  base_hue = rgblight_config.hue;
  base_sat = rgblight_config.sat;
  base_val = rgblight_config.val;
  base_mod = rgblight_config.mode;
}
void rgblight_loadbase(void) {  // Load settings from ram to eeprom
  rgblight_mode( base_mod );
  rgblight_sethsv_eeprom_helper(base_hue, base_sat, base_val, true);
}



bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
  if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
    keycode = keycode & 0xFF;
  }
  switch (keycode) {
    case KC_RGB_T:  // Switch between underglow layer indication and normal qmk behaviour
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
      if (record->event.pressed) {
        userspace_config.rgb_layer_change ^= 1;
        xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
        eeconfig_update_user(userspace_config.raw);
        if (userspace_config.rgb_layer_change) {
          layer_state_set(layer_state);  // Immediately set the layer color (looks better)
        }
      }
#endif  // RGBLIGHT_ENABLE
      return false;
      break;
#ifdef RGBLIGHT_ENABLE
    case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT:  // quantum_keycodes.h L400 for definitions
      if (record->event.pressed) {  // This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
        if (userspace_config.rgb_layer_change) {
          userspace_config.rgb_layer_change = false;
          xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
          eeconfig_update_user(userspace_config.raw);
        }
      }
      return true;
      break;
#endif  // RGBLIGHT_ENABLE
  }
  return true;
}

void keyboard_post_init_rgb(void) {
# if defined(RGBLIGHT_ENABLE) || defined(RGBLIGHT_STARTUP_ANIMATION)
  bool is_enabled = rgblight_config.enable;
  if (userspace_config.rgb_layer_change) {
    rgblight_enable_noeeprom();
  }
  if (rgblight_config.enable) {
    layer_state_set_user(layer_state);
    uint16_t old_hue = rgblight_config.hue;
    rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
    for (uint16_t i = 255; i > 0; i--) {
      rgblight_sethsv_noeeprom((i + old_hue) % 255, 255, 255);
      wait_ms(5);
    }
  }
  if (!is_enabled) {
    rgblight_disable_noeeprom();
  }
# endif // !RGBLIGHT_ENABLE || RGBLIGHT_STARTUP_ANIMATION
  layer_state_set_user(layer_state);
}

void matrix_scan_rgb(void) {
# ifdef INDICATOR_LIGHTS
  matrix_scan_indicator();
# endif
}

layer_state_t layer_state_set_rgb(layer_state_t state) {
# ifdef RGBLIGHT_ENABLE
  if (userspace_config.rgb_layer_change) {
    switch (biton32(state)) {  // _RAISE, _LOWER and _ADJUST use a custom color and the breathing effect
      case _RAISE:
        rgblight_sethsv_noeeprom_green();
        rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
        break;
      case _LOWER:
        rgblight_sethsv_noeeprom_red();
        rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
        break;
      case _ADJUST:
        rgblight_sethsv_noeeprom_white();
        rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 2);
        break;
      default:  // Use a solid color for normal layers
        switch (biton32(default_layer_state)) {
          case _QWERTY:
            rgblight_sethsv_noeeprom_magenta();
            break;
          case _COLEMAK:
            rgblight_sethsv_noeeprom_green();
            break;
          case _DVORAK:
            rgblight_sethsv_noeeprom_blue();
            break;
          case _WORKMAN:
            rgblight_sethsv_noeeprom_goldenrod();
            break;
          case _PLOVER:
            rgblight_sethsv_noeeprom_pink();
            break;
          default:
            rgblight_sethsv_noeeprom_white();
            break;
        }
        biton32(state) == _MODS ? rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING) : rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);  // if _MODS layer is on, then breath to denote it
        break;
    }
  }
# endif  // !RGBLIGHT_ENABLE
  return state;
}

#ifdef INDICATOR_LIGHTS
void matrix_scan_indicator(void) {
  if (has_initialized) {
    set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods());
  }
}
#endif // !INDICATOR_LIGHTS

void rgblight_fade_helper(bool direction){
  // true: increase val = fade in 
  // false: decrease val = fade out
  for (uint8_t index = 0; index <  RGBLIGHT_VAL_STEP ; index++) {
    direction ? rgblight_increase_val()  : rgblight_decrease_val();
    wait_ms(5);
  }
}
void fadeflash_leds(uint8_t hue, uint8_t sat, uint8_t val){
  // indicate success / fail of a leader sequence
  // fade out, set new hue and saturation, fade in, fade out, set old color, fade in
  // this is used in leader.c
  // TODO: come up with a better name maybe
  rgblight_fade_helper(false); 
  rgblight_sethsv_noeeprom(hue, sat, 0); 
  rgblight_fade_helper(true); 
  rgblight_fade_helper(false); 
  rgblight_sethsv_noeeprom(base_hue, base_sat, 0); 
  rgblight_fade_helper(true); 
}

A users/kuchosauronad0/rgblight_user.h => users/kuchosauronad0/rgblight_user.h +23 -0
@@ 0,0 1,23 @@
#pragma once
#include "kuchosauronad0.h"

typedef struct {
    bool     enabled;
    uint8_t  hue;
    uint16_t timer;
    uint8_t  life;
} rgblight_fadeout;
const uint8_t RGBLIGHT_FADE_SPEED[6] PROGMEM;

layer_state_t layer_state_set_rgb(layer_state_t state);
layer_state_t default_layer_state_set_rgb(layer_state_t state);

bool          process_record_user_rgb(uint16_t keycode, keyrecord_t *record);
void          scan_rgblight_fadeout(void);
void          keyboard_post_init_rgb(void);
void          matrix_scan_rgb(void);
void          rgblight_sethsv_default_helper(uint8_t index);
void          rgblight_savebase(void);
void          rgblight_loadbase(void);
void          rgblight_fade_helper(bool direction);
void          fadeflash_leds(uint8_t hue, uint8_t sat, uint8_t val);

M users/kuchosauronad0/rules.mk => users/kuchosauronad0/rules.mk +5 -3
@@ 2,10 2,11 @@ SRC += kuchosauronad0.c \
	   process_records.c

LINK_TIME_OPTIMIZATION_ENABLE = yes
SPACE_CADET_ENABLE            = no

#ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
#     SRC += secrets.c
#endif
ifneq ($(strip $(RGBLIGHT_ENABLE)),yes )
     SRC += rgblight_user.c
endif

ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
     SRC += tap_dances.c


@@ 14,6 15,7 @@ endif
ifeq ($(strip $(ENCODER_ENABLE)), yes)
     SRC += encoder.c
endif

ifeq ($(strip $(COMBO_ENABLE)), yes)
     SRC += combo.c
endif

M users/kuchosauronad0/wrappers.h => users/kuchosauronad0/wrappers.h +79 -73
@@ 6,7 6,7 @@ arguments, we need a wrapper in order for these definitions to be
expanded before being used as arguments to the LAYOUT_xxx macro.
*/
#if (!defined(LAYOUT) && defined(KEYMAP))
#define LAYOUT KEYMAP
#  define LAYOUT KEYMAP
#endif

#define LAYOUT_ergodox_wrapper(...)          LAYOUT_ergodox(__VA_ARGS__)


@@ 16,6 16,8 @@ expanded before being used as arguments to the LAYOUT_xxx macro.
#define LAYOUT_ortho_4x12_wrapper(...)       LAYOUT_ortho_4x12(__VA_ARGS__)
#define LAYOUT_ortho_5x12_wrapper(...)       LAYOUT_ortho_5x12(__VA_ARGS__)

#define LAYOUT_collide39_base_wrapper(...)   LAYOUT_collide39_base(__VA_ARGS__)

/*
Blocks for each of the four major keyboard layouts
Organized so we can quickly adapt and modify all of them


@@ 26,20 28,30 @@ NOTE: These are all the same length.  If you do a search/replace
  then you need to add/remove underscores to keep the
  lengths consistent.
*/

#define ___________________BLANK___________________        _______, _______, _______, _______, _______

#ifdef TAP_DANCE_ENABLE
  #define _________________QWERTY_L1_________________        KC_Q,    KC_DW,   KC_EOL,  KC_R,    KC_TMX
  #define _________________QWERTY_L2_________________        KC_BOL,  KC_S,    KC_D,    KC_NW,   KC_G
  #define _________________QWERTY_L3_________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_PW
#  define _________________QWERTY_L1_________________     KC_Q,    KC_DW,   KC_EOL,  KC_R,    KC_TMX
#  define _________________QWERTY_L2_________________     KC_BOL,  KC_S,    KC_D,    KC_NW,   KC_G
#  define _________________QWERTY_L3_________________     KC_Z,    KC_X,    KC_C,    KC_V,    KC_PW
#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_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
#endif

#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,  KC_SLASH
#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,  KC_SLASH

#define _________________PLOVER_L1_________________       KC_Q,    KC_W,    KC_E,    KC_R,    KC_T
#define _________________PLOVER_L2_________________       KC_A,    KC_S,    KC_D,    KC_F,    KC_G
#define _________________PLOVER_L3_________________       KC_NO,   KC_NO,   KC_C,    KC_V,    KC_NO

#define _________________PLOVER_R1_________________       KC_Y,    KC_U,    KC_I,    KC_O,    KC_P
#define _________________PLOVER_R2_________________       KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN
#define _________________PLOVER_R3_________________       KC_NO,   KC_NO,   KC_N,    KC_M,    KC_NO

#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


@@ 57,23 69,21 @@ NOTE: These are all the same length.  If you do a search/replace
#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, KC_COMM, KC_DOT, KC_P,     KC_Y
#define _________________DVORAK_L2_________________       KC_A,    KC_O,    KC_E,   KC_U,     KC_I
#define _________________DVORAK_L3_________________       KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X

#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 _________________DVORAK_L3_________________        KC_SCLN, KC_Q,    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 _________________DVORAK_R3_________________       KC_B,    KC_M,    KC_W,    KC_V,    KC_Z

#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 _________________DVORAK_R3_________________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z

#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 ________________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


@@ 83,7 93,6 @@ NOTE: These are all the same length.  If you do a search/replace
#define _________________WORKMAN_R2________________       KC_Y,    KC_N,    KC_E,    KC_O,    KC_I
#define _________________WORKMAN_R3________________       KC_K,    KC_L,    KC_COMM, KC_DOT,  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


@@ 92,7 101,6 @@ NOTE: These are all the same length.  If you do a search/replace
#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


#define _________________MALTRON_L1________________       KC_Q,    KC_P,    KC_Y,    KC_C,    KC_B
#define _________________MALTRON_L2________________       KC_A,    KC_N,    KC_I,    KC_S,    KC_F
#define _________________MALTRON_L3________________       KC_SCLN, KC_SLSH, KC_J,    KC_G,    KC_COMM


@@ 101,7 109,6 @@ NOTE: These are all the same length.  If you do a search/replace
#define _________________MALTRON_R2________________       KC_D,    KC_T,    KC_D,    KC_O,    KC_R
#define _________________MALTRON_R3________________       KC_DOT,  KC_W,    KC_K,    KC_MINS, KC_X


#define _________________EUCALYN_L1________________       KC_SLSH, KC_COMM, KC_DOT,  KC_F,    KC_Q
#define _________________EUCALYN_L2________________       KC_A,    KC_O,    KC_E,    KC_I,    KC_U
#define _________________EUCALYN_L3________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_W


@@ 110,7 117,6 @@ NOTE: These are all the same length.  If you do a search/replace
#define _________________EUCALYN_R2________________       KC_G,    KC_T,    KC_K,    KC_S,    KC_N
#define _________________EUCALYN_R3________________       KC_B,    KC_H,    KC_J,    KC_L,    KC_SCLN


#define _____________CARPLAX_QFMLWY_L1_____________       KC_Q,    KC_F,    KC_M,    KC_L,    KC_W
#define _____________CARPLAX_QFMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
#define _____________CARPLAX_QFMLWY_L3_____________       KC_Z,    KC_V,    KC_G,    KC_C,    KC_X


@@ 119,7 125,6 @@ NOTE: These are all the same length.  If you do a search/replace
#define _____________CARPLAX_QFMLWY_R2_____________       KC_I,    KC_A,    KC_E,    KC_H,    KC_SCLN
#define _____________CARPLAX_QFMLWY_R3_____________       KC_P,    KC_K,    KC_COMM, KC_DOT,  KC_SLSH


#define _____________CARPLAX_QGMLWB_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W
#define _____________CARPLAX_QGMLWB_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
#define _____________CARPLAX_QGMLWB_L3_____________       KC_Z,    KC_X,    KC_C,    KC_F,    KC_J


@@ 128,7 133,6 @@ NOTE: These are all the same length.  If you do a search/replace
#define _____________CARPLAX_QGMLWB_R2_____________       KC_I,    KC_A,    KC_E,    KC_O,    KC_H
#define _____________CARPLAX_QGMLWB_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH


#define _____________CARPLAX_QGMLWY_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W
#define _____________CARPLAX_QGMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
#define _____________CARPLAX_QGMLWY_L3_____________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_J


@@ 138,23 142,23 @@ NOTE: These are all the same length.  If you do a search/replace
#define _____________CARPLAX_QGMLWY_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH

#ifdef UNICODE_ENABLE
#define _______________UNICODE_L1__________________        UC_DISA,UC_DISA, UC_DISA, UC_DISA, UC_DISA
#define _______________UNICODE_L2__________________        UC_DISA,UC_DISA, UC_DISA, UC_DISA, UC_DISA
#define _______________UNICODE_L3__________________        UC_DISA,UC_DISA, UC_DISA, UC_DISA, UC_DISA
#  define _______________UNICODE_L1__________________     UC_DISA,UC_DISA, UC_DISA, UC_DISA, UC_DISA
#  define _______________UNICODE_L2__________________     UC_DISA,UC_DISA, UC_DISA, UC_DISA, UC_DISA
#  define _______________UNICODE_L3__________________     UC_DISA,UC_DISA, UC_DISA, UC_DISA, UC_DISA

#define _______________UNICODE_R1__________________        UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG
#define _______________UNICODE_R2__________________        UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG
#define _______________UNICODE_R3__________________        UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG
#  define _______________UNICODE_R1__________________     UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG
#  define _______________UNICODE_R2__________________     UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG
#  define _______________UNICODE_R3__________________     UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG
#endif

#ifdef UNICODEMAP_ENABLE
#define _______________UNICODE_L1__________________        X(SMRK),  X(THINK),  X(CLOWN), X(HUNDR), X(BANG)
#define _______________UNICODE_L2__________________        X(GRIN),  X(MONKEY), X(OKOK), X(EGGPL), X(LIT)
#define _______________UNICODE_L3__________________        X(WEARY), X(UNAMU),  X(EFFU), X(MONOCL), X(IRONY)
#  define _______________UNICODE_L1__________________     X(SMRK),  X(THINK),  X(CLOWN), X(HUNDR),  X(BANG)
#  define _______________UNICODE_L2__________________     X(GRIN),  X(MONKEY), X(OKOK),  X(EGGPL),  X(LIT)
#  define _______________UNICODE_L3__________________     X(WEARY), X(UNAMU),  X(EFFU),  X(MONOCL), X(IRONY)

#define _______________UNICODE_R1__________________        X(DRUG0), X(THUP), X(INUP), X(DIZZY), X(COOL)
#define _______________UNICODE_R2__________________        X(FIST0), X(FIST2),X(FIST3),X(FIST1), X(OKOK)
#define _______________UNICODE_R3__________________        X(MNDBLWN), X(THDN), X(SPOCK),X(HOLE),  X(DASH)
#  define _______________UNICODE_R1__________________     X(DRUG0),   X(THUP),  X(INUP),  X(DIZZY), X(COOL)
#  define _______________UNICODE_R2__________________     X(FIST0),   X(FIST2), X(FIST3), X(FIST1), X(OKOK)
#  define _______________UNICODE_R3__________________     X(MNDBLWN), X(THDN),  X(SPOCK), X(HOLE),  X(DASH)
#endif

#define ________________NUMBER_LEFT________________       KC_1,    KC_2,    KC_3,    KC_4,    KC_5


@@ 162,45 166,47 @@ NOTE: These are all the same length.  If you do a search/replace
#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

#define ___________________BLANK___________________        _______, _______, _______, _______, _______
#define _________________MEDIA_RIGHT_______________       KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP
#define _________________MEDIA_LEFT________________       KC_VOLD, KC_VOLD, KC_MUTE, KC_VOLU, KC_VOLU

#define _________________LOWER_L1__________________       KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC
#define _________________LOWER_L2__________________       ___________________BLANK___________________
#define _________________LOWER_L3__________________       _______, _______, _______, OS_UNI,  TM_X

#define _________________LOWER_L1__________________        KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC
#define _________________LOWER_L2__________________        ___________________BLANK___________________
#define _________________LOWER_L3__________________        ___________________BLANK___________________
#define _________________LOWER_R1__________________       KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
#define _________________LOWER_R2__________________       _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
#define _________________LOWER_R3__________________       _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT

#define _________________LOWER_R1__________________        KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
#define _________________LOWER_R2__________________        OS_UNI, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
#define _________________LOWER_R3__________________        TM_X,    KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
#define _________________RAISE_L1__________________       ________________NUMBER_LEFT________________
#define _________________RAISE_L2__________________       ___________________BLANK___________________
#define _________________RAISE_L3__________________       ___________________BLANK___________________

#define _________________RAISE_R1__________________       ________________NUMBER_RIGHT_______________
#define _________________RAISE_R2__________________       _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC
#define _________________RAISE_R3__________________       _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END

#define _________________ADJUST_L1_________________       QWERTY,  COLEMAK, DVORAK,  WORKMAN, PLOVER
#define _________________ADJUST_L2_________________       _________________FUNC_LEFT_________________
#define _________________ADJUST_L3_________________       _________________MEDIA_LEFT________________

#define _________________RAISE_L1__________________        ________________NUMBER_LEFT________________
#define _________________RAISE_L2__________________        ___________________BLANK___________________
#define _________________RAISE_L3__________________        ___________________BLANK___________________
#define _________________ADJUST_R1_________________       SEC1,    SEC2,    SEC3,    SEC4,    SEC5
#define _________________ADJUST_R2_________________       _________________FUNC_RIGHT________________
#define _________________ADJUST_R3_________________       _________________MEDIA_RIGHT_______________

#define _________________RAISE_R1__________________        ________________NUMBER_RIGHT_______________
#define _________________RAISE_R2__________________        _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC
#define _________________RAISE_R3__________________        _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
#define _________________RGB_UP____________________       RGB_MOD,  RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
#define _________________RGB_CENTER________________       MU_TOG ,  CK_TOGG, AU_ON,   AU_OFF,  AG_NORM
#define _________________RGB_DOWN__________________       RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, KC_RGB_T

#define _________________RGB_R1____________________       RGB_MOD,  RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
#define _________________RGB_R2____________________       MU_TOG ,  CK_TOGG, AU_ON,   AU_OFF,  AG_NORM
#define _________________RGB_R3____________________       RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, KC_RGB_T

#define __________________GAMEPAD_L1_______________       _______,  KC_Q,    KC_W,    KC_E,     _______
#define __________________GAMEPAD_L2_______________       _______,  KC_A,    KC_S,    KC_D,     _______
#define __________________GAMEPAD_L3_______________       KC_1,     KC_2,    KC_3,    KC_4,     KC_5

#define _________________ADJUST_L1_________________        ___________________BLANK___________________
#define _________________ADJUST_L2_________________        _________________FUNC_LEFT_________________
#define _________________ADJUST_L3_________________        AG_SWAP, QWERTY,  COLEMAK, DVORAK,  WORKMAN
#define __________________GAMEPAD_R1_______________       _______,  KC_U,    KC_UP,   KC_O,     _______
#define __________________GAMEPAD_R2_______________       _______,  KC_LEFT, KC_DOWN, KC_RIGHT, _______
#define __________________GAMEPAD_R3_______________       KC_6,     KC_7,    KC_8,    KC_9,     KC_0
/* vi: ft=c:tw=80:sw=2:ts=2:sts=2:et */

#define _________________ADJUST_R1_________________        KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
#define _________________ADJUST_R2_________________        _________________FUNC_RIGHT________________
#define _________________ADJUST_R3_________________        KC_MUTE, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT


/*
#define _________________RGB_L1____________________       RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
#define _________________RGB_L2____________________       MU_TOG , CK_TOGG, AU_ON,   AU_OFF,  AG_NORM
#define _________________RGB_L3____________________       RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
#define _________________RGB_R1____________________       RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
#define _________________RGB_R2____________________       MU_TOG , CK_TOGG, AU_ON,   AU_OFF,  AG_NORM
#define _________________RGB_R3____________________       RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
*/
/* vi: ft=c:tw=80:sw=2:ts=2:sts=2:et
     */