~ruther/qmk_firmware

53a6501d71cabbe4c5c41652cf24fdc059609e5d — Drashna Jaelre 7 years ago a572323
Yet another update to drashna keymaps and userspace (EEPROM, RGB indicators) (#2959)

* More Iris Tweaks

* Mess with iris arrow keys

* Massive layout overhaul to make everything more OLKB

* Additional tweaks

* Cleanup Userspace

Remove unused layer code, and properly set userspace eeprom structure.

* EEPROM stuff

* Only use indicators if layer indication is enabled

* Iris and Orthodox Tweaks (Status Indicators)

* Additional tweaks to finish tri layer conversion

* Disable ProMicro ligths globally

* Add Pro Micro hacking info

* Successfully get mod indication working on thumb clusters

* Enable printing when console is enabled

* Make Modifier Indicator lights more modular

* Keymap cleanup

* Tapping test changes

* Cleanup and minor tweaks
M keyboards/iris/keymaps/drashna/config.h => keyboards/iris/keymaps/drashna/config.h +2 -0
@@ 41,6 41,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1

#define RGBLIGHT_LIMIT_VAL 225
#endif // RGBLIGHT_ENABLE

#ifdef AUDIO_ENABLE

M keyboards/iris/keymaps/drashna/keymap.c => keyboards/iris/keymaps/drashna/keymap.c +76 -54
@@ 2,79 2,94 @@
#include QMK_KEYBOARD_H
#include "drashna.h"

#ifdef INDICATOR_LIGHTS
extern userspace_config_t userspace_config;

#define KC_ALAP ALT_T(KC_APP)
uint8_t last_mod;
uint8_t last_led;
uint8_t last_osm;
bool has_mods_changed = false;
#endif

#define KC_ALAP ALT_T(KC_APP)
#define KC_OSLG OSM(MOD_LGUI)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_QWERTY] = LAYOUT_wrapper(
     KC_GESC, ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
     KC_ESC,  ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
     KC_TAB , _________________QWERTY_L1_________________,                       _________________QWERTY_R1_________________, KC_BSLS,
     KC_C1R3, _________________QWERTY_L2_________________,                       _________________QWERTY_R2_________________, KC_QUOT,
     KC_MLSF, _________________QWERTY_L3_________________, KC_ALAP,     KC_LGUI, _________________QWERTY_R3_________________, KC_MRSF,
                                       LOWER,   KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
     KC_CCCV, _________________QWERTY_L2_________________,                       _________________QWERTY_R2_________________, KC_QUOT,
     KC_MLSF, _________________QWERTY_L3_________________, KC_ALAP,     KC_OSLG, _________________QWERTY_R3_________________, KC_MRSF,
                             LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
  ),
  [_COLEMAK] = LAYOUT_wrapper(
     KC_GESC, ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
     KC_ESC , ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
     KC_TAB , _________________COLEMAK_L1________________,                       _________________COLEMAK_R1________________, KC_BSLS,
     KC_C1R3, _________________COLEMAK_L2________________,                       _________________COLEMAK_R2________________, KC_QUOT,
     KC_MLSF, _________________COLEMAK_L3________________, KC_ALAP,     KC_LGUI, _________________COLEMAK_R3________________, KC_MRSF,
                                       LOWER,   KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
     KC_CCCV, _________________COLEMAK_L2________________,                       _________________COLEMAK_R2________________, KC_QUOT,
     KC_MLSF, _________________COLEMAK_L3________________, KC_ALAP,     KC_OSLG, _________________COLEMAK_R3________________, KC_MRSF,
                             LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
  ),
  [_DVORAK] = LAYOUT_wrapper(
     KC_GESC, ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
     KC_ESC,  ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
     KC_TAB , _________________DVORAK_L1_________________,                       _________________DVORAK_R1_________________, KC_BSLS,
     KC_C1R3, _________________DVORAK_L2_________________,                       _________________DVORAK_R2_________________, KC_QUOT,
     KC_MLSF, _________________DVORAK_L3_________________, KC_ALAP,     KC_LGUI, _________________DVORAK_R3_________________, KC_MRSF,
                                       LOWER,   KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
     KC_CCCV, _________________DVORAK_L2_________________,                       _________________DVORAK_R2_________________, KC_QUOT,
     KC_MLSF, _________________DVORAK_L3_________________, KC_ALAP,     KC_OSLG, _________________DVORAK_R3_________________, KC_MRSF,
                             LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
  ),
  [_WORKMAN] = LAYOUT_wrapper(
     KC_GESC, ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
     KC_ESC,  ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
     KC_TAB , _________________WORKMAN_L1________________,                       _________________WORKMAN_R1________________, KC_BSLS,
     KC_C1R3, _________________WORKMAN_L2________________,                       _________________WORKMAN_R2________________, KC_QUOT,
     KC_MLSF, _________________WORKMAN_L3________________, KC_ALAP,     KC_LGUI, _________________WORKMAN_R3________________, KC_MRSF,
                                       LOWER,   KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
     KC_CCCV, _________________WORKMAN_L2________________,                       _________________WORKMAN_R2________________, KC_QUOT,
     KC_MLSF, _________________WORKMAN_L3________________, KC_ALAP,     KC_OSLG, _________________WORKMAN_R3________________, KC_MRSF,
                             LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
  ),

  [_MODS] = LAYOUT(
  [_MODS] = LAYOUT_wrapper(
     _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
     _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
     _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
     KC_LSFT, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______,
     KC_LSFT, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, KC_RSFT,
                                       _______, _______, _______,         _______, _______, _______
  ),


  [_LOWER] = LAYOUT(
     KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                       KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
  [_LOWER] = LAYOUT_wrapper(
     _______, _________________FUNC_LEFT_________________,                       _________________FUNC_RIGHT________________, _______,
     _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
     KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,                         KC_RBRC, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
     KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12, KC_LPRN,      KC_RPRN, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______,
                                       _______, _______, KC_DEL,          _______, _______, _______
     _______, _______, _______, _______, _______, _______,                       _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
     _______, _______, _______, _______, _______, _______, _______,     _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______,
                                       _______, _______, _______,         _______, _______, _______
  ),

  [_RAISE] = LAYOUT(
      KC_F12,  KC_F1,   KC_F2,   KC_F3,   KC_F4,    KC_F5,                        KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
      _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
      _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_UNDS,                       KC_EQL , KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
      _______, _______, _______, _______, _______, _______, _______,     _______, KC_PLUS, KC_END, _______, _______, _______, _______,
                                        _______, _______, _______,         _______, _______, _______
  [_RAISE] = LAYOUT_wrapper(
      _______, _________________FUNC_LEFT_________________,                      _________________FUNC_RIGHT________________, _______,
      _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
      _______, _______, _______, _______, _______, _______,                      _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
      _______, _______, _______, _______, _______, _______, _______,    _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END,  _______,
                                        _______, _______, _______,        _______, _______, _______
   ),

  [_ADJUST] = LAYOUT(
      KC_MAKE, KC_RST,  EPRM,    _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
      RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______,                       _______, _______, _______, _______, _______, _______,
      RGB_SMOD,RGB_HUI, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,                       AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS),
      KC_RGB_T,RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______, _______,     _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY,
                                        _______, _______, _______,         _______, _______, _______
  [_ADJUST] = LAYOUT_wrapper(
      KC_MAKE, _______, _______, _______, _______, _______,                      KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_RST,
      VRSN,    RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG,                      _______, _______, _______, _______, _______, EPRM,
      _______, _______, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,                      AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, _______,
      TG(_MODS),RGB_SMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T,_______,    _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY,
                                        _______, _______, _______,        _______, _______, _______
   )

};


void matrix_init_keymap(void) {
#ifdef INDICATOR_LIGHTS
  last_mod = get_mods();
  last_led = host_keyboard_leds();
  last_osm =get_oneshot_mods();
#endif
}

#ifdef INDICATOR_LIGHT
uint32_t layer_state_set_keymap (uint32_t state) {
#ifdef INDICATOR_LIGHTS
  uint8_t modifiders = get_mods();
  uint8_t led_usb_state = host_keyboard_leds();
  uint8_t one_shot = get_oneshot_mods();


@@ 92,41 107,49 @@ uint32_t layer_state_set_keymap (uint32_t state) {
    rgblight_sethsv_at(120, 255, 255, 7);
    rgblight_sethsv_at(120, 255, 255, 8);
  }
#endif

  return state;
}


void matrix_scan_keymap (void) {
  static uint8_t current_mods;
  static uint8_t current_host_leds;
  static uint8_t current_oneshot_mods;
  static bool has_status_changed = true;

  if ( current_mods != get_mods() || current_host_leds != host_keyboard_leds() || current_oneshot_mods != get_oneshot_mods()) {
    has_status_changed = true;
    current_mods = get_mods();
    current_host_leds = host_keyboard_leds();
    current_oneshot_mods = get_oneshot_mods();

#ifdef INDICATOR_LIGHTS
  uint8_t current_mod = get_mods();
  uint8_t current_led = host_keyboard_leds();
  uint8_t current_osm =get_oneshot_mods();

  if (last_mod == current_mod) {
    last_mod = current_mod;
    has_mods_changed = true;
  }
  if (last_led == current_led) {
    last_led = current_led;
    has_mods_changed = true;
  }
  if (has_status_changed) {
    has_status_changed = false;
  if (last_osm == current_osm) {
    last_osm = current_osm;
    has_mods_changed = true;
  }


    if (current_mods & MODS_SHIFT_MASK || current_host_leds & (1<<USB_LED_CAPS_LOCK) || current_oneshot_mods & MODS_SHIFT_MASK) {
  if (userspace_config.rgb_layer_change && has_mods_changed && biton32(layer_state) == 0) {
    if (current_mod & MODS_SHIFT_MASK || current_led & (1<<USB_LED_CAPS_LOCK) || current_osm & MODS_SHIFT_MASK) {
      rgblight_sethsv_at(0, 255, 255, 5);
      rgblight_sethsv_at(0, 255, 255, 10);
    } else {
      rgblight_sethsv_default_helper(5);
      rgblight_sethsv_default_helper(10);
    }
    if (current_mods & MODS_CTRL_MASK || current_oneshot_mods & MODS_CTRL_MASK) {
    if (current_mod & MODS_CTRL_MASK || current_osm & MODS_CTRL_MASK) {
      rgblight_sethsv_at(51, 255, 255, 6);
      rgblight_sethsv_at(51, 255, 255, 9);
    } else {
      rgblight_sethsv_default_helper(6);
      rgblight_sethsv_default_helper(9);
    }
    if (current_mods & MODS_GUI_MASK || current_oneshot_mods & MODS_GUI_MASK) {
    if (current_mod & MODS_GUI_MASK || current_osm & MODS_GUI_MASK) {
      rgblight_sethsv_at(120, 255, 255, 7);
      rgblight_sethsv_at(120, 255, 255, 8);
    } else {


@@ 135,7 158,6 @@ void matrix_scan_keymap (void) {

    }
  }
}
#endif


}

M keyboards/iris/keymaps/drashna/rules.mk => keyboards/iris/keymaps/drashna/rules.mk +1 -0
@@ 9,3 9,4 @@ AUDIO_ENABLE      = yes
NKRO_ENABLE       = yes
BACKLIGHT_ENABLE = no
SWAP_HANDS_ENABLE = yes
INDICATOR_LIGHTS  = yes

M keyboards/orthodox/keymaps/drashna/keymap.c => keyboards/orthodox/keymaps/drashna/keymap.c +50 -23
@@ 22,6 22,14 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_H
#include "drashna.h"

#ifdef INDICATOR_LIGHTS
extern userspace_config_t userspace_config;

uint8_t last_mod;
uint8_t last_led;
uint8_t last_osm;
bool has_mods_changed = false;
#endif

// 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.


@@ 33,6 41,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define XXXXXXX KC_NO



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

[_QWERTY] = LAYOUT_wrapper(\


@@ 65,27 74,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[_LOWER] = LAYOUT_wrapper(\
  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                                                               KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,            KC_PGUP, KC_PGDN,         KC_HOME, KC_END,           _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
  KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______,         _______, _______, _______, _______, _______, KC_COMM, KC_DOT,  _______, _______
  _______, _________________FUNC_LEFT_________________,           KC_PGUP, KC_PGDN,         KC_HOME, KC_END,           _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
  _______, _________________FUNC_RIGHT________________,  _______, _______, _______,         _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______
),

[_RAISE] = LAYOUT_wrapper(\
  KC_GRV,  ________________NUMBER_LEFT________________,                                                               ________________NUMBER_RIGHT_______________, KC_BSPC,
  _______, _______, _______, _______, _______, _______,          KC_PGUP, KC_PGDN,         KC_HOME, KC_END,           _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
  _______, _______, _______, _______, _______, _______, _______, _______, _______,         _______, _______, _______, _______, _______, KC_COMM, KC_DOT,  _______, _______
  _______, _______, _______, _______, _______, _______, _______, _______, _______,         _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______
),

[_ADJUST] = LAYOUT_wrapper(\
  KC_MAKE,KC_RESET, EPRM,    _______, _______, _______,                                                               _______, _______, _______, _______, _______, _______,
  RGB_SMOD,RGB_HUI, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,          _______, _______,         _______, _______,          AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS),
  KC_RGB_T,RGB_HUD, MU_ON,   MU_OFF,  MU_TOG,  MU_MOD,  _______, _______, _______,         _______, _______, _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY
  KC_MAKE, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG,                                                               KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_RESET,
  VRSN,    _______, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,          _______, _______,         _______, _______,          AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, EPRM,
  TG(_MODS),RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T,_______, _______, _______,         _______, _______, _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY
)


};

#ifdef RGBLIGHT_ENABLE
void matrix_init_keymap(void) {
#ifdef INDICATOR_LIGHTS
  last_mod = get_mods();
  last_led = host_keyboard_leds();
  last_osm =get_oneshot_mods();
#endif
}

uint32_t layer_state_set_keymap (uint32_t state) {
#ifdef INDICATOR_LIGHTS
  uint8_t modifiders = get_mods();
  uint8_t led_usb_state = host_keyboard_leds();
  uint8_t one_shot = get_oneshot_mods();


@@ 103,41 120,49 @@ uint32_t layer_state_set_keymap (uint32_t state) {
    rgblight_sethsv_at(120, 255, 255, 7);
    rgblight_sethsv_at(120, 255, 255, 8);
  }
#endif

  return state;
}


void matrix_scan_keymap (void) {
  static uint8_t current_mods;
  static uint8_t current_host_leds;
  static uint8_t current_oneshot_mods;
  static bool has_status_changed = true;

  if ( current_mods != get_mods() || current_host_leds != host_keyboard_leds() || current_oneshot_mods != get_oneshot_mods()) {
    has_status_changed = true;
    current_mods = get_mods();
    current_host_leds = host_keyboard_leds();
    current_oneshot_mods = get_oneshot_mods();

#ifdef INDICATOR_LIGHTS
  uint8_t current_mod = get_mods();
  uint8_t current_led = host_keyboard_leds();
  uint8_t current_osm =get_oneshot_mods();

  if (last_mod == current_mod) {
    last_mod = current_mod;
    has_mods_changed = true;
  }
  if (last_led == current_led) {
    last_led = current_led;
    has_mods_changed = true;
  }
  if (has_status_changed) {
    has_status_changed = false;
  if (last_osm == current_osm) {
    last_osm = current_osm;
    has_mods_changed = true;
  }


    if (current_mods & MODS_SHIFT_MASK || current_host_leds & (1<<USB_LED_CAPS_LOCK) || current_oneshot_mods & MODS_SHIFT_MASK) {
  if (userspace_config.rgb_layer_change && has_mods_changed && biton32(layer_state) == 0) {
    if (current_mod & MODS_SHIFT_MASK || current_led & (1<<USB_LED_CAPS_LOCK) || current_osm & MODS_SHIFT_MASK) {
      rgblight_sethsv_at(0, 255, 255, 5);
      rgblight_sethsv_at(0, 255, 255, 10);
    } else {
      rgblight_sethsv_default_helper(5);
      rgblight_sethsv_default_helper(10);
    }
    if (current_mods & MODS_CTRL_MASK || current_oneshot_mods & MODS_CTRL_MASK) {
    if (current_mod & MODS_CTRL_MASK || current_osm & MODS_CTRL_MASK) {
      rgblight_sethsv_at(51, 255, 255, 6);
      rgblight_sethsv_at(51, 255, 255, 9);
    } else {
      rgblight_sethsv_default_helper(6);
      rgblight_sethsv_default_helper(9);
    }
    if (current_mods & MODS_GUI_MASK || current_oneshot_mods & MODS_GUI_MASK) {
    if (current_mod & MODS_GUI_MASK || current_osm & MODS_GUI_MASK) {
      rgblight_sethsv_at(120, 255, 255, 7);
      rgblight_sethsv_at(120, 255, 255, 8);
    } else {


@@ 146,5 171,7 @@ void matrix_scan_keymap (void) {

    }
  }
}
#endif

}


M keyboards/orthodox/keymaps/drashna/rules.mk => keyboards/orthodox/keymaps/drashna/rules.mk +1 -0
@@ 7,3 7,4 @@ TAP_DANCE_ENABLE  = no
RGBLIGHT_ENABLE   = yes
AUDIO_ENABLE      = yes
NKRO_ENABLE       = yes
INDICATOR_LIGHTS  = yes

M keyboards/viterbi/keymaps/drashna/keymap.c => keyboards/viterbi/keymaps/drashna/keymap.c +1 -15
@@ 17,7 17,6 @@ extern keymap_config_t keymap_config;
#define DIABLO   TG(_DIABLO)
#define GAMEPAD  TG(_GAMEPAD)
#define MEDIA    TT(_MEDIA)
#define COVECUBE TG(_COVECUBE)


//enum more_custom_keycodes {


@@ 28,7 27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_NUMLOCK] = LAYOUT_ortho_5x7(
      LMACRO,  DIABLO,  GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS,
      MEDIA,   KC_CALC, COVECUBE,KC_P7,   KC_P8,   KC_P9,   KC_PAST,
      MEDIA,   KC_CALC, XXXXXXX, KC_P7,   KC_P8,   KC_P9,   KC_PAST,
      KC_HOME, KC_DEL,  KC_PGUP, KC_P4,   KC_P5,   KC_P6,   KC_PMNS,
      KC_END,  KC_UP,   KC_PGDN, KC_P1,   KC_P2,   KC_P3,   KC_PPLS,
      KC_LEFT, KC_DOWN, KC_RGHT, KC_P0,   KC_PDOT, KC_COLN, KC_PENT


@@ 58,13 57,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      KC_SALT,     KC_MORESALT, KC_SALTHARD, KC_JUSTGAME, KC_AIM,      XXXXXXX,     KC_PENT
  ),

  [_COVECUBE] = LAYOUT_ortho_5x7(
      XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,
      XXXXXXX,     XXXXXXX,     COVECUBE,    XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,
      XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,
      XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,
      XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX
  ),

  [_MEDIA] = LAYOUT_ortho_5x7(
      KC_MAKE, KC_RESET,MU_TOG,  AU_ON,   AU_OFF,  CK_TOGG, RGB_SAD,


@@ 77,13 69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

};

void matrix_init_keymap(void) {
  DDRD &= ~(1<<5);
  PORTD &= ~(1<<5);

  DDRB &= ~(1<<0);
  PORTB &= ~(1<<0);
}

bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {


M layouts/community/ergodox/drashna/keymap.c => layouts/community/ergodox/drashna/keymap.c +42 -72
@@ 57,11 57,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 */
  [_QWERTY] = LAYOUT_ergodox_pretty_wrapper(
        // left hand                                                                       // right hand
             KC_EQL,  ________________NUMBER_LEFT________________, OSL(_MOUS),           OSL(_MOUS), ________________NUMBER_RIGHT_______________, KC_MINS,
             KC_EQL,  ________________NUMBER_LEFT________________, _______,                 _______, ________________NUMBER_RIGHT_______________, KC_MINS,
             KC_TAB,  _________________QWERTY_L1_________________, TG(_DIABLO),         TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS,
             KC_C1R3, _________________QWERTY_L2_________________,                                   _________________QWERTY_R2_________________, KC_QUOT,
             KC_MLSF, _________________QWERTY_L3_________________, TG(_GAMEPAD),       TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_MRSF,
    LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________,                                   ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB),
             KC_GRV,  ___________ERGODOX_BOTTOM_LEFT_____________,                                   ___________ERGODOX_BOTTOM_RIGHT____________, KC_CCCV,
                                                    __________________ERGODOX_THUMB_CLUSTER_____________________
    ),
/* Keymap 0: COLEMAK layer


@@ 89,11 89,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
  [_COLEMAK] = LAYOUT_ergodox_pretty_wrapper(
        // left hand                                                                       // right hand
             KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    OSL(_MOUS),           OSL(_MOUS), KC_6,    KC_7,    KC_8,    KC_9,     KC_0,   KC_MINS,
             KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______,                 _______, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,   KC_MINS,
             KC_TAB,  _________________COLEMAK_L1________________, TG(_DIABLO),         TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS,
             KC_C1R3, _________________COLEMAK_L2________________,                                   _________________COLEMAK_R2________________, KC_QUOT,
             KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD),       TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF,
    LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________,                                   ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB),
             KC_GRV,  ___________ERGODOX_BOTTOM_LEFT_____________,                                   ___________ERGODOX_BOTTOM_RIGHT____________, KC_CCCV,
                                                    __________________ERGODOX_THUMB_CLUSTER_____________________
    ),
/* Keymap 0: DVORAK Layout


@@ 121,11 121,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
  [_DVORAK] = LAYOUT_ergodox_pretty_wrapper(
        // left hand        // right hand
             KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    OSL(_MOUS),           OSL(_MOUS), KC_6,    KC_7,    KC_8,    KC_9,     KC_0,   KC_BSLS,
             KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______,                 _______, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,   KC_BSLS,
             KC_TAB,  _________________DVORAK_L1_________________, TG(_DIABLO),         TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH,
             KC_C1R3, _________________DVORAK_L2_________________,                                   _________________DVORAK_R2_________________, KC_MINS,
             KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD),       TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF,
    LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________,                                   ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB),
             KC_GRV,  ___________ERGODOX_BOTTOM_LEFT_____________,                                   ___________ERGODOX_BOTTOM_RIGHT____________, KC_CCCV,
                                                    __________________ERGODOX_THUMB_CLUSTER_____________________
    ),
/* Keymap 0: WORKMAN layer


@@ 153,16 153,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
  [_WORKMAN] = LAYOUT_ergodox_pretty_wrapper(
        // left hand
             KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    OSL(_MOUS),           OSL(_MOUS), KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
             KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______,                 _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
             KC_TAB,  _________________WORKMAN_L1________________, TG(_DIABLO),         TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS,
             KC_C1R3, _________________WORKMAN_L2________________,                                   _________________WORKMAN_R2________________, KC_QUOT,
             KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD),       TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF,
    LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________,                                   ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB),
             KC_GRV,  ___________ERGODOX_BOTTOM_LEFT_____________,                                   ___________ERGODOX_BOTTOM_RIGHT____________, KC_CCCV,
                                                    __________________ERGODOX_THUMB_CLUSTER_____________________
    ),

// Reverts OSM(Shift) to normal Shifts. However, may not need since we fixed the issue with RDP (LOCAL RESOURCES)
  [_MODS] = LAYOUT_ergodox_pretty(
  [_MODS] = LAYOUT_ergodox_pretty_wrapper(
             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
             _______, _______, _______, _______, _______, _______,                                   _______, _______, _______, _______, _______, _______,


@@ 173,37 173,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                                                 _______, _______, _______,                 _______, _______, _______
            ),

    /* Keymap 3: Symbol Layer
*
* ,--------------------------------------------------.           ,--------------------------------------------------.
* |   ESC  |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  | F10  |   F11  |
* |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
* |  RESET |   !  |   @  |  {   |   }  |  |   |      |           |      |  +   |   7  |   8  |   9  |  *   |   F12  |
* |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
* |  MAKE  |   #  |   $  |  (   |   )  |  `   |------|           |------|  -   |   4  |   5  |   6  |  /   | PrtSc  |
* |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
* |  VRSN  |   %  |   ^  |  [   |   ]  |  ~   |      |           |      | NUM  |   1  |   2  |   3  |  =   |  PAUSE |
* `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
*   |  LT0 |   &  |   *  |  :   |   ;  |                                       |      |   0  | NUM. | ENT  |  ENT |
*   `----------------------------------'                                       `----------------------------------'
*                                        ,-------------.       ,-------------.
*                                        | RGBM | RED  |       | OFF  | SOLID|
*                                 ,------|------|------|       |------+------+------.
*                                 |      |      | GREEN|       |      |      |      |
*                                 | RGB  | RGB  |------|       |------| NUM0 | NUME |
*                                 | DARK |BRITE | BLUE |       |      |      |      |
*                                 `--------------------'       `--------------------'
*/
  [_SYMB] = LAYOUT_ergodox_pretty(
             EPRM,    KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_QWERTY,             KC_QWERTY, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
             KC_RST,  KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_PIPE, KC_COLEMAK,           KC_WORKMAN, KC_PPLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST, KC_F12,
             KC_MAKE, KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_GRAVE,                                  KC_PMNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_PSLS, KC_PSCREEN,
             VRSN,    KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_DVORAK,            TG(_MODS), KC_NLCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_PEQL, KC_PAUSE,
             KC_TRNS, KC_AMPR, KC_ASTR, KC_COLN, KC_SCLN,                                                     KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT, KC_TRNS,
                                                          RGB_SMOD, KC_RGB_T,               KC_TRNS, KC_TRNS,
                                                                    RGB_HUI,                KC_TRNS,
                                                 RGB_M_R, RGB_M_SW, RGB_HUD,                KC_PDOT, KC_KP_0, KC_PENT
            ),

/* Keymap 4: Customized Overwatch Layout
 *


@@ 226,7 195,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 *                                 |      |      |  H   |       |      |      |      |
 *                                 `--------------------'       `--------------------'
 */
  [_GAMEPAD] = LAYOUT_ergodox_pretty(
  [_GAMEPAD] = LAYOUT_ergodox_pretty_wrapper(
             KC_ESC,  KC_TRNS, KC_TRNS, KC_TRNS, HYPR(KC_D), HYPR(KC_Q), HYPR(KC_GRV),      KC_TRNS, KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_NO,
             KC_F1,   KC_K,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
             KC_TAB,  KC_G,    KC_A,    KC_S,    KC_D,    KC_F,                                      KC_I,    KC_O,    KC_NO,   KC_NO,   KC_NO,   KC_NO,


@@ 258,7 227,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 *                                 | SHIFT| ALT  | 0MAC |       |      |      |      |
 *                                 `--------------------'       `--------------------'
 */
  [_DIABLO] = LAYOUT_ergodox_pretty(
  [_DIABLO] = LAYOUT_ergodox_pretty_wrapper(
             KC_ESC,  KC_V,    KC_D,    KC_LALT, KC_NO,   KC_NO,   KC_NO,                   KC_TRNS, KC_F9,   KC_F10,   KC_F11,  KC_F12,  KC_NO,   KC_NO,
             KC_TAB,  KC_S,    KC_I,    KC_F,    KC_M,    KC_T,    KC_TRNS,                 KC_TRNS, KC_NO,   KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,
             KC_Q,    KC_1,    KC_2,    KC_3,    KC_4,    KC_G,                                      KC_NO,   KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,


@@ 269,36 238,37 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                          SFT_T(KC_SPACE),  ALT_T(KC_Q),   KC_DIABLO_CLEAR,                 KC_PGDN, KC_DEL,  KC_ENT
            ),

/* Keymap 4: Media and mouse keys
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 * |        |      | MsUp |      |      |      |      |           |      |      |      |      |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |MsLeft|MsDown|MsRght|      |      |------|           |------|      |      | Acc0 | Acc1 | Acc2 |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        | Acc0 | Acc1 | Acc2 |      |      |      |           |      |      | Mute |VolDn |VolUp |      |        |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |      |      |      |      |      |                                       | Play | Stop |      |      |      |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |      |      |       |      |      |
 *                                 ,------|------|------|       |------+------+------.
 *                                 |      |      | MWUp |       |      |      |      |
 *                                 | Lclk | Rclk |------|       |------| MBn4 | MBn5 |
 *                                 |      |      | MWDn |       | Mclk |      |      |
 *                                 `--------------------'       `--------------------'
 */
  [_MOUS] = LAYOUT_ergodox_pretty(
             KC_NO,   KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_TRNS,                 KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
             KC_NO,   KC_NO,   KC_MS_U, KC_NO,   KC_NO,   KC_NO,   KC_TRNS,                 KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
             KC_NO,   KC_MS_L, KC_MS_D, KC_MS_R, KC_NO,   KC_NO,                                     KC_NO,   KC_ACL0, KC_ACL1, KC_ACL2, KC_NO,   KC_NO,
             KC_NO,   KC_ACL0, KC_ACL1, KC_ACL2, KC_NO,   KC_NO,   KC_TRNS,                 KC_TRNS, KC_NO,   KC_MUTE, KC_VOLD, KC_VOLU, 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_NO,
                                                                   KC_WH_U,                 KC_NO,
                                                 KC_BTN1, KC_BTN2, KC_WH_D,                 KC_BTN3, KC_BTN4, KC_BTN5
  [_LOWER] = LAYOUT_ergodox_pretty_wrapper(
             _______, _________________FUNC_LEFT_________________, _______,                 _______, _________________FUNC_RIGHT________________, KC_F11,
             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
             _______, _______, _______, _______, _______, _______,                                   _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
                                                          _______, _______,                 _______, _______,
                                                                   _______,                 _______,
                                                 _______, _______, _______,                 _______, _______, _______
            ),

  [_RAISE] = LAYOUT_ergodox_pretty_wrapper(
             _______, _________________FUNC_LEFT_________________, _______,                 _______, _________________FUNC_RIGHT________________, _______,
             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
             _______, _______, _______, _______, _______, _______,                                   _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, KC_RSFT,
             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
                                                          _______, _______,                 _______, _______,
                                                                   _______,                 _______,
                                                 _______, _______, _______,                 _______, _______, _______
            ),

  [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
             KC_MAKE, _______, _______, _______, _______, _______, _______,                 _______, KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_RST,
             VRSN,    RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG, _______,                 _______, _______, _______, _______, _______, _______, EPRM,
             RGB_SMOD,RGB_HUI, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,                                   AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS),
             TG(_MODS),RGB_SMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T,_______,                 _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY,
             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
                                                          _______, _______,                 _______, _______,
                                                                   _______,                 _______,
                                                 _______, _______, _______,                 _______, _______, _______
            ),

};

M users/drashna/config.h => users/drashna/config.h +4 -3
@@ 4,7 4,6 @@

#ifdef AUDIO_ENABLE
#define AUDIO_CLICKY
#define AUDIO_CLICKY_ON
#define STARTUP_SONG SONG(E1M1_DOOM)
#define GOODBYE_SONG  SONG(SONIC_RING)
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \


@@ 43,6 42,8 @@
#define IGNORE_MOD_TAP_INTERRUPT
#undef PERMISSIVE_HOLD
#undef PREVENT_STUCK_MODIFIERS
#define TAPPING_FORCE_HOLD
//#define RETRO_TAPPING

#define FORCE_NKRO



@@ 53,7 54,7 @@
#ifdef TAPPING_TERM
#undef TAPPING_TERM
#endif // TAPPING_TERM
#define TAPPING_TERM 176
#define TAPPING_TERM 200


// Disable action_get_macro and fn_actions, since we don't use these


@@ 61,7 62,7 @@
#ifndef NO_DEBUG
#define NO_DEBUG
#endif // !NO_DEBUG
#ifndef NO_PRINT
#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE)
#define NO_PRINT
#endif // !NO_PRINT
#define NO_ACTION_MACRO

M users/drashna/drashna.c => users/drashna/drashna.c +62 -70
@@ 38,10 38,6 @@ float tone_paste[][2]           = SONG(SCROLL_LOCK_OFF_SOUND);


static uint16_t copy_paste_timer;
#ifdef RGBLIGHT_ENABLE
bool rgb_layer_change = true;
#endif

userspace_config_t userspace_config;

//  Helper Functions


@@ 164,31 160,42 @@ void led_set_keymap(uint8_t usb_led) {}
// call the keymap's init function
void matrix_init_user(void) {
  uint8_t default_layer = eeconfig_read_default_layer();
  userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE);

#ifdef RGBLIGHT_ENABLE
  rgblight_enable();
#endif // RGBLIGHT_ENABLE
#ifdef BOOTLOADER_CATERINA
  DDRD &= ~(1<<5);
  PORTD &= ~(1<<5);

  if (default_layer & (1UL << _COLEMAK)) {
#ifdef RGBLIGHT_ENABLE
    rgblight_sethsv_magenta();
#endif // RGBLIGHT_ENABLE
  } else if (default_layer & (1UL << _DVORAK)) {
#ifdef RGBLIGHT_ENABLE
    rgblight_sethsv_green();
#endif // RGBLIGHT_ENABLE
  } else if (default_layer & (1UL << _WORKMAN)) {
#ifdef RGBLIGHT_ENABLE
    rgblight_sethsv_goldenrod();
#endif // RGBLIGHT_ENABLE
  } else {
  DDRB &= ~(1<<0);
  PORTB &= ~(1<<0);
#endif

  if (userspace_config.rgb_layer_change) {
#ifdef RGBLIGHT_ENABLE
    rgblight_sethsv_teal();
    rgblight_enable();
#endif // RGBLIGHT_ENABLE
    if (default_layer & (1UL << _COLEMAK)) {
  #ifdef RGBLIGHT_ENABLE
      rgblight_sethsv_magenta();
  #endif // RGBLIGHT_ENABLE
    } else if (default_layer & (1UL << _DVORAK)) {
  #ifdef RGBLIGHT_ENABLE
      rgblight_sethsv_green();
  #endif // RGBLIGHT_ENABLE
    } else if (default_layer & (1UL << _WORKMAN)) {
  #ifdef RGBLIGHT_ENABLE
      rgblight_sethsv_goldenrod();
  #endif // RGBLIGHT_ENABLE
    } else {
  #ifdef RGBLIGHT_ENABLE
      rgblight_sethsv_teal();
  #endif // RGBLIGHT_ENABLE
    }
  }

  userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE);
#ifdef AUDIO_CLICKY
  clicky_enable = userspace_config.clicky_enable;
#endif

#if ( defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) )
	set_unicode_input_mode(UC_WINC);


@@ 364,8 371,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  case KC_RGB_T:  // This allows me to use underglow as layer indication, or as normal
#ifdef RGBLIGHT_ENABLE
    if (record->event.pressed) {
      rgb_layer_change = !rgb_layer_change;
      if (rgb_layer_change) {
      userspace_config.rgb_layer_change ^= 1;
      eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);
      if (userspace_config.rgb_layer_change) {
        layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
      }
    }


@@ 374,7 382,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#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
      rgb_layer_change = false;
      userspace_config.rgb_layer_change = false;
      eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);
    }
    return true; break;
#endif // RGBLIGHT_ENABLE


@@ 403,8 412,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    return false;
    break;
  case CLICKY_TOGGLE:
#ifdef AUDIO_CLICKY
    userspace_config.clicky_enable = clicky_enable;
    eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);
#endif
    break;
#ifdef UNICODE_ENABLE
  case UC_FLIP: // (╯°□°)╯ ︵ ┻━┻


@@ 445,123 456,104 @@ uint32_t layer_state_set_user(uint32_t state) {
  state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);

  switch (biton32(state)) {
  case _NAV:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
      rgblight_sethsv_blue();
      rgblight_mode(1);
    }
#endif // RGBLIGHT_ENABLE
    break;
  case _SYMB:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
      rgblight_sethsv_blue();
      rgblight_mode(2);
    }
#endif // RGBLIGHT_ENABLE
    break;
  case _MOUS:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
      rgblight_sethsv_yellow();
      rgblight_mode(1);
    }
#endif // RGBLIGHT_ENABLE
    break;
  case _MACROS:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
    if (userspace_config.rgb_layer_change) {
      rgblight_sethsv_orange();
      userspace_config.is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
    }
#endif // RGBLIGHT_ENABLE

    break;
  case _MEDIA:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
    if (userspace_config.rgb_layer_change) {
      rgblight_sethsv_chartreuse();
      rgblight_mode(22);
    }
#endif // RGBLIGHT_ENABLE

    break;
  case _GAMEPAD:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
    if (userspace_config.rgb_layer_change) {
      rgblight_sethsv_orange();
      rgblight_mode(17);
    }
#endif // RGBLIGHT_ENABLE

    break;
  case _DIABLO:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
    if (userspace_config.rgb_layer_change) {
      rgblight_sethsv_red();
      rgblight_mode(5);
    }
#endif // RGBLIGHT_ENABLE

    break;
  case _RAISE:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
    if (userspace_config.rgb_layer_change) {
      rgblight_sethsv_yellow();
      rgblight_mode(5);
    }
#endif // RGBLIGHT_ENABLE

    break;
  case _LOWER:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
    if (userspace_config.rgb_layer_change) {
      rgblight_sethsv_orange();
      rgblight_mode(5);
    }
#endif // RGBLIGHT_ENABLE

    break;
  case _ADJUST:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
    if (userspace_config.rgb_layer_change) {
      rgblight_sethsv_red();
      rgblight_mode(23);
    }
#endif // RGBLIGHT_ENABLE
    break;
  case _COVECUBE:
#ifdef RGBLIGHT_ENABLE
    if (rgb_layer_change) {
      rgblight_sethsv_green();
      rgblight_mode(2);
    }
#endif // RGBLIGHT_ENABLE

    break;
  default: //  for any other layers, or the default layer
    if (default_layer & (1UL << _COLEMAK)) {
#ifdef RGBLIGHT_ENABLE
      if (rgb_layer_change) { rgblight_sethsv_magenta(); }
      if (userspace_config.rgb_layer_change) { rgblight_sethsv_magenta(); }
#endif // RGBLIGHT_ENABLE

    }
    else if (default_layer & (1UL << _DVORAK)) {
#ifdef RGBLIGHT_ENABLE
      if (rgb_layer_change) { rgblight_sethsv_green(); }
      if (userspace_config.rgb_layer_change) { rgblight_sethsv_green(); }
#endif // RGBLIGHT_ENABLE

    }
    else if (default_layer & (1UL << _WORKMAN)) {
#ifdef RGBLIGHT_ENABLE
      if (rgb_layer_change) { rgblight_sethsv_goldenrod(); }
      if (userspace_config.rgb_layer_change) { rgblight_sethsv_goldenrod(); }
#endif // RGBLIGHT_ENABLE

    }
    else {
#ifdef RGBLIGHT_ENABLE
      if (rgb_layer_change) { rgblight_sethsv_teal(); }
      if (userspace_config.rgb_layer_change) { rgblight_sethsv_teal(); }
#endif // RGBLIGHT_ENABLE

    }
    if (biton32(state) == _MODS) { // If the non-OSM layer is enabled, then breathe
#ifdef RGBLIGHT_ENABLE
      if (rgb_layer_change) { rgblight_mode(2); }
      if (userspace_config.rgb_layer_change) { rgblight_mode(2); }
#endif // RGBLIGHT_ENABLE

    } else {                       // otherwise, stay solid
#ifdef RGBLIGHT_ENABLE
      if (rgb_layer_change) { rgblight_mode(1); }
      if (userspace_config.rgb_layer_change) { rgblight_mode(1); }
#endif // RGBLIGHT_ENABLE

    }
    break;
  }

M users/drashna/drashna.h => users/drashna/drashna.h +11 -13
@@ 27,12 27,8 @@ enum userspace_layers {
  _DVORAK,
  _WORKMAN,
  _MODS,
  _NAV,
  _COVECUBE,
  _SYMB,
  _GAMEPAD,
  _DIABLO,
  _MOUS,
  _MACROS,
  _MEDIA,
  _LOWER,


@@ 49,7 45,6 @@ enum userspace_layers {
// RGB color codes are no longer located here anymore.  Instead, you will want to
// head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h

extern bool rgb_layer_change;
extern bool clicky_enable;

#ifdef RGBLIGHT_ENABLE


@@ 59,10 54,11 @@ void rgblight_sethsv_default_helper(uint8_t index);
#define EECONFIG_USERSPACE (uint8_t *)20

typedef union {
  uint32_t raw;
  uint8_t raw;
  struct {
    bool     clicky_enable  :1;
    bool     is_overwatch   :1;
    bool     clicky_enable    :1;
    bool     rgb_layer_change :1;
    bool     is_overwatch     :1;
  };
} userspace_config_t;



@@ 166,10 162,10 @@ enum {
#define LAYOUT KEYMAP
#endif

#define LAYOUT_ergodox_wrapper(...)   LAYOUT_ergodox(__VA_ARGS__)
#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 KEYMAP_wrapper(...)                  LAYOUT(__VA_ARGS__)
#define LAYOUT_wrapper(...)                  LAYOUT(__VA_ARGS__)


// Blocks for each of the four major keyboard layouts


@@ 236,6 232,8 @@ enum {

#define ________________NUMBER_LEFT________________       KC_1,    KC_2,    KC_3,    KC_4,    KC_5
#define ________________NUMBER_RIGHT_______________       KC_6,    KC_7,    KC_8,    KC_9,    KC_0
#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

// Since we have 4 default layouts (QWERTY, DVORAK, COLEMAK and WORKMAN),
// this allows us to quickly modify the bottom row for all of the layouts


@@ 245,9 243,9 @@ enum {
#define ___________ERGODOX_BOTTOM_RIGHT____________       KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT


#define __________________ERGODOX_THUMB_CLUSTER_____________________       ALT_T(KC_APP), KC_LGUI,                 KC_RGUI, CTL_T(KC_ESCAPE), \
#define __________________ERGODOX_THUMB_CLUSTER_____________________           ALT_T(KC_APP), KC_LGUI,                 KC_RGUI, CTL_T(KC_ESCAPE), \
                                                                                              KC_HOME,                 KC_PGUP, \
                                                                            KC_SPACE,KC_BSPC, KC_END,                  KC_PGDN, KC_DEL,  KC_ENTER
                                                                LT(_LOWER, KC_SPACE),KC_BSPC, KC_END,                  KC_PGDN, KC_DEL,  LT(_RAISE, KC_ENTER)


#endif // !USERSPACE

M users/drashna/readme.md => users/drashna/readme.md +21 -1
@@ 162,7 162,7 @@ This tells us where in the EEPROM that the data structure is located, and this s

```c
typedef union {
  uint32_t raw;
  uint8_t raw;
  struct {
    bool     clicky_enable  :1;
    bool     is_overwatch   :1;


@@ 174,3 174,23 @@ Then, in your C file, you want to add: `userspace_config_t userspace_config;`, a
From there, you'd want to use the data structure (such as `userspace_config.is_overwatch`) when you want to check this value.  

And if you want to update it, update directly and then use `eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);` to write the value back to the EEPROM. 


Pro Micro Hacking
-----------------

Well, you can get the QMK DFU bootloader working on the ProMicro. But you need to change fuses.  

What worked to get into the firmware properly was: 

```
Low: 0x5E High: 0x99 Extended: 0xF3 Lock: 0xFF
```

But some of the columns and rows didn't work, like the pin mapping was wrong. Even when setting the bootloader settings.
 
 This is here for future reference.  And the default fuse settings I believe were:

```
Low: 0xFF High: 0xD8 Extended: 0xC3 Lock: 0x3F
```

M users/drashna/rules.mk => users/drashna/rules.mk +4 -0
@@ 5,3 5,7 @@ EXTRAFLAGS        += -flto
ifeq ($(strip $(NO_SECRETS)), yes)
    OPT_DEFS += -DNO_SECRETS
endif

ifeq ($(strip $(INDICATOR_LIGHTS)), yes)
    OPT_DEFS += -DINDICATOR_LIGHTS
endif