~ruther/qmk_firmware

ecd21b44a8efd5c7241ebf48c65fc7b30134865f — Drashna Jaelre 6 years ago edb6c98
Update to drashna userspace and keymaps (#4459)

* Fix reversed bool check in layer_state_set

* Add Quefrency 65 for a friend

* Add Ergodox EZ Glow keymap

* Add RGB Matrix Code

* Further changes to rgb matrix ErgoDox EZ

* Update bjohnson keymaps

* Fix CRKBD display

* Overhaul to corne keyboard

* Narrow scope for keylogger

* Minor layout tweaks to Corne Keyboard

* additional CRKBD tweaks

* Minor tweaks to CRKBD

* Add all characters for keylogger

* Ergodox EZ Glow overhaul

* Fix Ergodox EZ Glow layer colors

* Increase Tapping Term for Corne Keyboard

* Fix unicode-ish

* Revert some changes

* Add layer specific lighting effects

* Some minor tweaks to ergodox glow config

* revert changes to ergodox files

* Update Glow readme

* Add more tapping term defines

* Fix changes

* Fix ergodox keymap

* Hopefully fix sleeping

* Disable layer indications if rgb matrix is disabled

* Add support for sleeping and rgb layer change toggle to ergodox ez glow

* Make RGB Layer Indication Great Again

* Make Unicode Great Again

* Remove placeholder define

Co-Authored-By: drashna <drashna@live.com>

* Remove placeholder define

Co-Authored-By: drashna <drashna@live.com>

* Remove old EEPROM Reset keycode
M keyboards/crkbd/keymaps/drashna/config.h => keyboards/crkbd/keymaps/drashna/config.h +6 -1
@@ 41,5 41,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_LIMIT_VAL 100
#endif

#ifdef AUDIO_ENABLE
#define B6_AUDIO
// #define NO_MUSIC_MODE
#endif

M keyboards/crkbd/keymaps/drashna/keymap.c => keyboards/crkbd/keymaps/drashna/keymap.c +110 -43
@@ 26,10 26,10 @@ enum crkbd_keycodes {
    K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \
  ) \
  LAYOUT_wrapper( \
    KC_ESC,  K01,    K02,     K03,      K04,     K05,                        K06,     K07,     K08,     K09,     K0A,     KC_BSPC, \
    KC_TAB,  K11,    K12,     K13,      K14,     K15,                        K16,     K17,     K18,     K19,     K1A,     KC_QUOT, \
    KC_ESC,  K01,    K02,     K03,      K04,     K05,                        K06,     K07,     K08,     K09,     K0A,     KC_MINS, \
    KC_TAB, ALT_T(K11),  K12, K13,      K14,     K15,                        K16,     K17,     K18,     K19,     K1A, RGUI_T(KC_QUOT), \
    OS_LSFT, CTL_T(K21), K22, K23,      K24,     K25,                        K26,     K27,     K28,     K29,  CTL_T(K2A), OS_RSFT, \
                           LT(_LOWER,KC_GRV), KC_SPC,  LALT_T(KC_BSPC),  KC_DEL,  KC_ENT,  RAISE                                    \
                           LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,     KC_DEL,  KC_ENT,  RAISE                                        \
  )
#define LAYOUT_crkbd_base_wrapper(...)       LAYOUT_crkbd_base(__VA_ARGS__)



@@ 66,14 66,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  ),

  [_LOWER] = LAYOUT_wrapper(
    KC_TILD, _________________LOWER_L1__________________,                    _________________LOWER_R1__________________, KC_BSPC,
    KC_F11,  _________________LOWER_L2__________________,                    _________________LOWER_R2__________________, KC_PIPE,
    KC_F12,  _________________LOWER_L3__________________,                    _________________LOWER_R3__________________, _______,
    KC_F11,  _________________LOWER_L1__________________,                    _________________LOWER_R1__________________, KC_F11,
    KC_F12,  _________________LOWER_L2__________________,                    _________________LOWER_R2__________________, KC_PIPE,
    _______, _________________LOWER_L3__________________,                    _________________LOWER_R3__________________, _______,
                                     _______, _______, _______,        _______, _______, _______
  ),

  [_RAISE] = LAYOUT_wrapper( \
    KC_GRV,  _________________RAISE_L1__________________,                    _________________RAISE_R1__________________, KC_BSPC,
    _______, _________________RAISE_L1__________________,                    _________________RAISE_R1__________________, _______,
    _______, _________________RAISE_L2__________________,                    _________________RAISE_R2__________________, KC_BSLS,
    _______, _________________RAISE_L3__________________,                    _________________RAISE_R3__________________, _______,
                                     _______, _______, _______,        _______, _______, _______


@@ 81,18 81,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_ADJUST] = LAYOUT_wrapper( \
    KC_MAKE, _________________ADJUST_L1_________________,                    _________________ADJUST_R1_________________, KC_RESET,
    VRSN,    _________________ADJUST_L2_________________,                    _________________ADJUST_R2_________________, EPRM,
    TG_MODS, _________________ADJUST_L3_________________,                    _________________ADJUST_R3_________________, KC_MPLY,
                                     _______, _______, _______,        _______, _______, _______
    VRSN,    _________________ADJUST_L2_________________,                    _________________ADJUST_R2_________________, EEP_RST,
    _______, _________________ADJUST_L3_________________,                    _________________ADJUST_R3_________________, KC_MPLY,
                                     _______, _______, _______,        KC_NUKE, TG_MODS, _______
  )
};

int RGB_current_mode;

void matrix_init_keymap(void) {
    #ifdef RGBLIGHT_ENABLE
      RGB_current_mode = rgblight_config.mode;
    #endif
    //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
    #ifdef SSD1306OLED
        iota_gfx_init(!has_usb());   // turns on the display


@@ 102,53 97,118 @@ void matrix_init_keymap(void) {
  PORTD &= ~(1<<5);

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

//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED

// When add source files to SRC in rules.mk, you can use functions.
const char *read_layer_state(void);
const char *read_logo(void);
void set_keylog(uint16_t keycode, keyrecord_t *record);
const char *read_keylog(void);
const char *read_keylogs(void);
char layer_state_str[24];
char modifier_state_str[24];
char host_led_state_str[24];
char keylog_str[24] = {};
char keylogs_str[21] = {};
int keylogs_str_idx = 0;

// const char *read_mode_icon(bool swap);
const char *read_host_led_state(void);
// void set_timelog(void);
// const char *read_timelog(void);

const char code_to_name[60] = {
    ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
    'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
    '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
    'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
    '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};

void set_keylog(uint16_t keycode, keyrecord_t *record) {
  char name = ' ';
  if (keycode < 60) {
    name = code_to_name[keycode];
  }

  // update keylog
  snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
           record->event.key.row, record->event.key.col,
           keycode, name);

  // update keylogs
  if (keylogs_str_idx == sizeof(keylogs_str) - 1) {
    keylogs_str_idx = 0;
    for (int i = 0; i < sizeof(keylogs_str) - 1; i++) {
      keylogs_str[i] = ' ';
    }
  }

  keylogs_str[keylogs_str_idx] = name;
  keylogs_str_idx++;
}

const char *read_keylog(void) {
  return keylog_str;
}

const char *read_keylogs(void) {
  return keylogs_str;
}


const char* read_modifier_state(void) {
  uint8_t modifiers = get_mods();
  uint8_t one_shot = get_oneshot_mods();

  snprintf(modifier_state_str, sizeof(modifier_state_str), "Mods:%s %s %s %s",
    (modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) ? "CTL" : "   ",
    (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK) ? "GUI" : "   ",
    (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) ? "ALT" : "   ",
    (modifiers & MODS_SHIFT_MASK || one_shot & MODS_SHIFT_MASK) ? "SFT" : "   "
  );

  return modifier_state_str;
}

const char *read_host_led_state(void) {
  uint8_t leds = host_keyboard_leds();

  snprintf(host_led_state_str, sizeof(host_led_state_str), "NL:%s CL:%s SL:%s",
    (leds & (1 << USB_LED_NUM_LOCK)) ? "on" : "- ",
    (leds & (1 << USB_LED_CAPS_LOCK)) ? "on" : "- ",
    (leds & (1 << USB_LED_SCROLL_LOCK)) ? "on" : "- "
  );

  return host_led_state_str;
}

const char* read_layer_state(void) {
  switch (layer_state) {
    case _QWERTY:
      switch (default_layer_state) {
  switch (biton32(layer_state)) {
    case _RAISE:
      snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Raise  ");
      break;
    case _LOWER:
      snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Lower  ");
      break;
    case _ADJUST:
      snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Adjust ");
      break;
    default:
      switch (biton32(default_layer_state)) {
        case _QWERTY:
          snprintf(layer_state_str, sizeof(layer_state_str), "Layer: QWERTY");
          snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Qwerty ");
          break;
        case _COLEMAK:
          snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Colemak");
          break;
        case _DVORAK:
          snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Dvorak");
          snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Dvorak ");
          break;
        case _WORKMAN:
          snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Workman");
          break;
      }
      break;
    case _RAISE:
      snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Raise");
      break;
    case _LOWER:
      snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Lower");
      break;
    case _ADJUST:
      snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Adjust");
      break;
    default:
      snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Undef-%ld", layer_state);
  }

    return layer_state_str;


@@ 160,12 220,13 @@ void matrix_scan_keymap(void) {

void matrix_render_user(struct CharacterMatrix *matrix) {
  if (is_master) {
    // If you want to change the display of OLED, you need to change here
    //If you want to change the display of OLED, you need to change here
    matrix_write_ln(matrix, read_layer_state());
    matrix_write_ln(matrix, read_keylog());
    matrix_write_ln(matrix, read_modifier_state());
    // matrix_write_ln(matrix, read_keylog());
    matrix_write_ln(matrix, read_keylogs());
    //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
    matrix_write_ln(matrix, read_host_led_state());
    // matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
    matrix_write(matrix, read_host_led_state());
    //matrix_write_ln(matrix, read_timelog());
  } else {
    matrix_write(matrix, read_logo());


@@ 187,8 248,14 @@ void iota_gfx_task_user(void) {
}

bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  if (record->event.pressed) {
    set_keylog(keycode, record);
  switch (keycode) {
    case KC_A ... KC_SLASH:
    case KC_F1 ... KC_F12:
    case KC_INSERT ... KC_UP:
    case KC_KP_SLASH ... KC_KP_DOT:
    case KC_F13 ... KC_F24:
    if (record->event.pressed) { set_keylog(keycode, record); }
      break;
    // set_timelog();
  }
  return true;

M keyboards/crkbd/keymaps/drashna/rules.mk => keyboards/crkbd/keymaps/drashna/rules.mk +5 -3
@@ 20,12 20,14 @@ SWAP_HANDS_ENABLE = no      # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend

BOOTLOADER = qmk-dfu

# If you want to change the display of OLED, you need to change here
SRC +=  ./lib/glcdfont.c \
        ./lib/rgb_state_reader.c \
        ./lib/logo_reader.c \
        ./lib/keylogger.c \
        ./lib/host_led_state_reader.c \
        # ./lib/layer_state_reader.c \
        # ./lib/keylogger.c \
        # ./lib/host_led_state_reader.c \
        # ./lib/mode_icon_reader.c \
        # ./lib/layer_state_reader.c \
        # ./lib/timelogger.c \

M keyboards/iris/keymaps/drashna/keymap.c => keyboards/iris/keymaps/drashna/keymap.c +1 -1
@@ 79,7 79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_ADJUST] = LAYOUT_wrapper(
      KC_MAKE, _______, _______, _______, _______, _______,                      _________________ADJUST_R1_________________, KC_RST,
      VRSN,    _________________ADJUST_L1_________________,                      KC_NUKE, _______, _______, _______, _______, EPRM,
      VRSN,    _________________ADJUST_L1_________________,                      KC_NUKE, _______, _______, _______, _______, EEP_RST,
      _______, _________________ADJUST_L2_________________,                      _________________ADJUST_R2_________________, TG_MODS,
      _______, _________________ADJUST_L3_________________, TG_GAME,    _______, _________________ADJUST_R3_________________, KC_MPLY,
                                        _______, _______, _______,        _______, _______, _______

M keyboards/iris/keymaps/drashna/rules.mk => keyboards/iris/keymaps/drashna/rules.mk +1 -1
@@ 8,7 8,7 @@ RGBLIGHT_ENABLE   = yes
AUDIO_ENABLE      = yes
NKRO_ENABLE       = yes
BACKLIGHT_ENABLE  = no
SWAP_HANDS_ENABLE = yes
SWAP_HANDS_ENABLE = no

INDICATOR_LIGHTS  = yes
MACROS_ENABLED    = no

M keyboards/orthodox/keymaps/drashna/keymap.c => keyboards/orthodox/keymaps/drashna/keymap.c +1 -1
@@ 91,7 91,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[_ADJUST] = LAYOUT_wrapper(\
  KC_MAKE, _________________ADJUST_L1_________________,                                                               _________________ADJUST_R1_________________, KC_RESET,
  VRSN,    _________________ADJUST_L2_________________,          _______, _______,         _______, KC_NUKE,          _________________ADJUST_R2_________________, EPRM,
  VRSN,    _________________ADJUST_L2_________________,          _______, _______,         _______, KC_NUKE,          _________________ADJUST_R2_________________, EEP_RST,
  TG_MODS, _________________ADJUST_L3_________________, _______, _______, _______,         _______, _______, _______, _________________ADJUST_R3_________________, KC_MPLY
)
};

A keyboards/quefrency/keymaps/bjohnson/config.h => keyboards/quefrency/keymaps/bjohnson/config.h +41 -0
@@ 0,0 1,41 @@
/*
This is the c configuration file for the keymap

Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
Copyright 2018 Danny Nguyen <danny@keeb.io>

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

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

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

#pragma once

/* Use I2C or Serial, not both */

#define USE_SERIAL
// #define USE_I2C

#define TAPPING_TERM 500

#define IGNORE_MOD_TAP_INTERRUPT
#define PERMISSIVE_HOLD
#define FORCE_NKRO
#define RETRO_TAPPING

#define TAPPING_TOGGLE 1

#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION

#define RGBLIGHT_SLEEP

A keyboards/quefrency/keymaps/bjohnson/keymap.c => keyboards/quefrency/keymaps/bjohnson/keymap.c +33 -0
@@ 0,0 1,33 @@
#include QMK_KEYBOARD_H

extern keymap_config_t keymap_config;

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

enum custom_keycodes {
  QWERTY = SAFE_RANGE,
};


const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_BASE] = LAYOUT_65(
    KC_ESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  XXXXXXX, KC_BSPC, KC_HOME, \
    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_END, \
    KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,  KC_DEL, \
    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_UP,   KC_INS, \
    KC_LCTL, KC_LGUI, KC_LALT, LT(_FN1,KC_SPC),KC_SPC,    KC_SPC,  XXXXXXX,  KC_RALT, KC_RGUI, XXXXXXX, KC_APP,  KC_RCTL, TT(_FN1)
  ),

  [_FN1] = LAYOUT_65(
    KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  XXXXXXX, KC_BSPC, KC_PGUP, \
    _______, _______,  KC_UP,  _______, _______, _______, _______, KC_P7,   KC_P8,   KC_P9,   _______, _______, _______, _______, KC_PGDN, \
    _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_P4,   KC_P5,   KC_P6,   _______, _______, _______, _______, \
    _______, RGB_MOD, RGB_HUI, RGB_HUD, _______, _______, _______, KC_P1,   KC_P2,   KC_P3,   _______, _______, _______, _______, \
    _______, _______, _______, _______, _______,          KC_P0,   XXXXXXX, _______, _______, XXXXXXX, _______, _______, _______
  )
};

A keyboards/quefrency/keymaps/bjohnson/rules.mk => keyboards/quefrency/keymaps/bjohnson/rules.mk +22 -0
@@ 0,0 1,22 @@
BOOTLOADER = atmel-dfu

# Build Options
#   change to "no" to disable the options, or define them in the Makefile in
#   the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = lite       # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
CONSOLE_ENABLE = no         # Console for debug(+400)
COMMAND_ENABLE = no        # Commands for debug and configuration
NKRO_ENABLE = no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
MIDI_ENABLE = no            # MIDI controls
AUDIO_ENABLE = no           # Audio output on port C6
UNICODE_ENABLE = yes         # Unicode
BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend

SPLIT_KEYBOARD = yes

M keyboards/viterbi/keymaps/drashna/keymap.c => keyboards/viterbi/keymaps/drashna/keymap.c +1 -3
@@ 60,7 60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_MEDIA] = LAYOUT_ortho_5x7(
      KC_MAKE, KC_RESET,MU_TOG,  AU_ON,   AU_OFF,  CK_TOGG, RGB_SAD,
      MEDIA,   EPRM,    KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI,
      MEDIA,   EEP_RST,    KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI,
      RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD,
      KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI,
      KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI


@@ 94,5 94,3 @@ void matrix_init_keymap(void) {
  DDRB &= ~(1<<0);
  PORTB &= ~(1<<0);
}



M layouts/community/ergodox/drashna/keymap.c => layouts/community/ergodox/drashna/keymap.c +112 -8
@@ 20,8 20,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#ifdef UNICODEMAP_ENABLE
#include "drashna_unicode.h"
#endif // UNICODEMAP_ENABLE
extern uint8_t input_mode;


#ifdef RGB_MATRIX_ENABLE
extern bool g_suspend_state;
extern rgb_config_t rgb_matrix_config;
#endif
extern userspace_config_t userspace_config;

//enum more_custom_keycodes {
//    KC_P00 = NEW_SAFE_RANGE


@@ 40,7 45,7 @@ bool skip_leds = false;
      KC_TAB,  K01,    K02,     K03,      K04,     K05,     TG(_DIABLO),         TG(_DIABLO), K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \
      KC_C1R3, K11,    K12,     K13,      K14,     K15,                                       K16,     K17,     K18,     K19,     K1A,     KC_QUOT, \
      KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     TG(_GAMEPAD),       TG(_GAMEPAD), K26,     K27,     K28,     K29,  CTL_T(K2A), KC_MRSF, \
      KC_GRV,  OSM(MOD_MEH),OSM(MOD_LGUI),KC_LBRC, KC_RBRC,                                            KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, UC_SHRG, \
      KC_GRV,  OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC,                                            KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, UC(0x2E2E), \
                                                  OS_LALT, OS_LGUI,                 OS_RGUI, CTL_T(KC_ESCAPE), \
                                                           KC_HOME,                 KC_PGUP, \
                             LT(_LOWER, KC_SPACE),KC_BSPC, KC_END,                  KC_PGDN, KC_DEL,  LT(_RAISE, KC_ENTER)                          \


@@ 198,7 203,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 */
  [_GAMEPAD] = LAYOUT_ergodox_pretty_wrapper(
             KC_ESC,  KC_NO,   KC_1,    KC_2,    KC_3, 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,                    UC_SHRG, UC_DISA,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
             KC_F1,   KC_K,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                    UC_SHRG, UC_DISA, 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,
             KC_LCTL, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_TRNS,            TG(_GAMEPAD), KC_N,    KC_M,    KC_NO,   KC_NO,   KC_NO,   KC_NO,
             KC_GRV,  KC_U,    KC_I,    KC_Y,    KC_T,                                                        KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_NO,


@@ 263,7 268,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
             KC_MAKE, _______, _______, _______, _______, _______, _______,                 KC_NUKE, _________________ADJUST_R1_________________, KC_RST,
             VRSN,    _________________ADJUST_L1_________________, _______,                 _______, _______, _______, _______, _______, _______, EPRM,
             VRSN,    _________________ADJUST_L1_________________, _______,                 _______, _______, _______, _______, _______, _______, EEP_RST,
             _______, _________________ADJUST_L2_________________,                                   _________________ADJUST_R2_________________, TG(_MODS),
             _______, _________________ADJUST_L3_________________, _______,                 _______, _________________ADJUST_R3_________________, KC_MPLY,
             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,


@@ 290,10 295,6 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  return true;
}

void matrix_init_keymap(void) { // Runs boot tasks for keyboard
};


void matrix_scan_keymap(void) {  // runs frequently to update info
  uint8_t modifiers = get_mods();
  uint8_t led_usb_state = host_keyboard_leds();


@@ 335,3 336,106 @@ bool indicator_is_this_led_used_keyboard(uint8_t index) {
    return false;
  }
}


#ifdef RGB_MATRIX_ENABLE

void suspend_power_down_keymap(void) {
    rgb_matrix_set_suspend_state(true);
    rgb_matrix_config.enable = false;
}

void suspend_wakeup_init_keymap(void) {
    rgb_matrix_config.enable = true;
    rgb_matrix_set_suspend_state(false);
}

void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue) {
  rgb_led led;
  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
    led = g_rgb_leds[i];
    if (led.matrix_co.raw < 0xFF) {
      if (led.modifier) {
          rgb_matrix_set_color( i, red, green, blue );
      }
    }
  }
}

void rgb_matrix_indicators_user(void) {
  if (g_suspend_state || !rgb_matrix_config.enable || !userspace_config.rgb_layer_change) return;

  switch (biton32(layer_state)) {
    case _MODS:
      rgb_matrix_layer_helper(0xFF, 0xFF, 0x00); break;
    case _GAMEPAD:
      rgb_matrix_layer_helper(0xFF, 0x80, 0x00);
      rgb_matrix_set_color(32, 0x00, 0xFF, 0x00); // Q
      rgb_matrix_set_color(31, 0x00, 0xFF, 0xFF); // W
      rgb_matrix_set_color(30, 0xFF, 0x00, 0x00); // E
      rgb_matrix_set_color(29, 0xFF, 0x80, 0x00); // R
      rgb_matrix_set_color(37, 0x00, 0xFF, 0xFF); // A
      rgb_matrix_set_color(36, 0x00, 0xFF, 0xFF); // S
      rgb_matrix_set_color(35, 0x00, 0xFF, 0xFF); // D
      rgb_matrix_set_color(34, 0x7A, 0x00, 0xFF); // F

      rgb_matrix_set_color(27, 0xFF, 0xFF, 0xFF); // 1
      rgb_matrix_set_color(26, 0x00, 0xFF, 0x00); // 2
      rgb_matrix_set_color(25, 0x7A, 0x00, 0xFF); // 3

      break;
    case _DIABLO:
      rgb_matrix_layer_helper(0xFF, 0x00, 0x00); break;
    case _RAISE:
      rgb_matrix_layer_helper(0xFF, 0xFF, 0x00); break;
    case _LOWER:
      rgb_matrix_layer_helper(0x00, 0xFF, 0x00); break;
    case _ADJUST:
      rgb_matrix_layer_helper(0xFF, 0x00, 0x00); break;
    default:
      switch (biton32(default_layer_state)) {
        case _QWERTY:
          rgb_matrix_layer_helper(0x00, 0xFF, 0xFF); break;
        case _COLEMAK:
          rgb_matrix_layer_helper(0xFF, 0x00, 0xFF); break;
        case _DVORAK:
          rgb_matrix_layer_helper(0x00, 0xFF, 0x00); break;
        case _WORKMAN:
          rgb_matrix_layer_helper(0xD9, 0xA5, 0x21); break;
      }
  }
#if 0
  if (this_mod & MODS_SHIFT_MASK || this_led & (1<<USB_LED_CAPS_LOCK) || this_osm & MODS_SHIFT_MASK) {
    rgb_matrix_set_color(24, 0x00, 0xFF, 0x00);
    rgb_matrix_set_color(36, 0x00, 0xFF, 0x00);
  }
  if (this_mod & MODS_CTRL_MASK || this_osm & MODS_CTRL_MASK) {
    rgb_matrix_set_color(25, 0xFF, 0x00, 0x00);
    rgb_matrix_set_color(34, 0xFF, 0x00, 0x00);
    rgb_matrix_set_color(37, 0xFF, 0x00, 0x00);

  }
  if (this_mod & MODS_GUI_MASK || this_osm & MODS_GUI_MASK) {
    rgb_matrix_set_color(39, 0xFF, 0xD9, 0x00);
  }
  if (this_mod & MODS_ALT_MASK || this_osm & MODS_ALT_MASK) {
    rgb_matrix_set_color(38, 0x00, 0x00, 0xFF);
  }
#endif
}

void matrix_init_keymap(void) {
  #ifdef RGB_MATRIX_KEYPRESSES
    rgblight_mode(RGB_MATRIX_MULTISPLASH);
  #else
    rgblight_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
  #endif

  input_mode = 2;
}

#else
void matrix_init_keymap(void) {
  input_mode = 2;
}
#endif //RGB_MATRIX_INIT

A layouts/community/ergodox/drashna_glow/README.md => layouts/community/ergodox/drashna_glow/README.md +1 -0
@@ 0,0 1,1 @@
Note: This board will not flash if the "g_rgb_leds" const is not set to weak in the ergodox_ez.c file

A layouts/community/ergodox/drashna_glow/config.h => layouts/community/ergodox/drashna_glow/config.h +11 -0
@@ 0,0 1,11 @@
#pragma once

#include "../drashna/config.h"

#undef PRODUCT
#define PRODUCT         DrashnaDox - Hacked ErgoDox EZ Glow

#undef DEBOUNCE
#define DEBOUNCE 5

// #define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)

A layouts/community/ergodox/drashna_glow/keymap.c => layouts/community/ergodox/drashna_glow/keymap.c +67 -0
@@ 0,0 1,67 @@
/* placeholder file */
#include QMK_KEYBOARD_H

const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {

    /*{row | col << 4}
      |             {x=0..224, y=0..64}
      |              |                    modifier
      |              |                    | */
    {{0|(0<<4)},   {24.9*5, 16*0}, 0}, // LED 1 on right
    {{0|(1<<4)},   {24.9*6, 16*0}, 0}, // LED 2
    {{0|(2<<4)},   {24.9*7, 16*0}, 0}, // LED 3
    {{0|(3<<4)},   {24.9*8, 16*0}, 0}, // LED 4
    {{0|(4<<4)},   {24.9*9, 16*0}, 0}, // LED 5

    {{1|(5<<4)},   {24.9*5, 16*1}, 0}, // LED 6
    {{1|(6<<4)},   {24.9*6, 16*1}, 0}, // LED 7
    {{1|(7<<4)},   {24.9*7, 16*1}, 0}, // LED 8
    {{1|(8<<4)},   {24.9*8, 16*1}, 0}, // LED 9
    {{1|(9<<4)},   {24.9*9, 16*1}, 0}, // LED 10

    {{2|(5<<4)},   {24.9*5, 16*2}, 0}, // LED 11
    {{2|(6<<4)},   {24.9*6, 16*2}, 0}, // LED 12
    {{2|(7<<4)},   {24.9*7, 16*2}, 0}, // LED 13
    {{2|(8<<4)},   {24.9*8, 16*2}, 0}, // LED 14
    {{2|(9<<4)},   {24.9*9, 16*2}, 0}, // LED 15

    {{3|(5<<4)},   {24.9*5, 16*2}, 0}, // LED 16
    {{3|(6<<4)},   {24.9*6, 16*2}, 0}, // LED 17
    {{3|(7<<4)},   {24.9*7, 16*2}, 0}, // LED 18
    {{3|(8<<4)},   {24.9*8, 16*2}, 0}, // LED 19
    {{3|(9<<4)},   {24.9*9, 16*2}, 0}, // LED 20

    {{4|(6<<4)},   {24.9*6, 16*2}, 1}, // LED 21
    {{4|(7<<4)},   {24.9*7, 16*2}, 1}, // LED 22
    {{4|(8<<4)},   {24.9*8, 16*2}, 1}, // LED 23
    {{4|(9<<4)},   {24.9*9, 16*2}, 1}, // LED 24

    {{0|(0<<4)},   {24.9*4, 16*0}, 0}, // LED 1 on left
    {{0|(1<<4)},   {24.9*3, 16*0}, 0}, // LED 2
    {{0|(2<<4)},   {24.9*2, 16*0}, 0}, // LED 3
    {{0|(3<<4)},   {24.9*1, 16*0}, 0}, // LED 4
    {{0|(4<<4)},   {24.9*0, 16*0}, 0}, // LED 5

    {{1|(5<<4)},   {24.9*4, 16*1}, 0}, // LED 6
    {{1|(6<<4)},   {24.9*3, 16*1}, 0}, // LED 7
    {{1|(7<<4)},   {24.9*2, 16*1}, 0}, // LED 8
    {{1|(8<<4)},   {24.9*1, 16*1}, 0}, // LED 9
    {{1|(9<<4)},   {24.9*0, 16*1}, 0}, // LED 10

    {{2|(5<<4)},   {24.9*4, 16*2}, 0}, // LED 11
    {{2|(6<<4)},   {24.9*3, 16*2}, 0}, // LED 12
    {{2|(7<<4)},   {24.9*2, 16*2}, 0}, // LED 13
    {{2|(8<<4)},   {24.9*1, 16*2}, 0}, // LED 14
    {{2|(9<<4)},   {24.9*0, 16*2}, 0}, // LED 15

    {{3|(5<<4)},   {24.9*4, 16*2}, 0}, // LED 16
    {{3|(6<<4)},   {24.9*3, 16*2}, 0}, // LED 17
    {{3|(7<<4)},   {24.9*2, 16*2}, 0}, // LED 18
    {{3|(8<<4)},   {24.9*1, 16*2}, 0}, // LED 19
    {{3|(9<<4)},   {24.9*0, 16*2}, 0}, // LED 20

    {{4|(6<<4)},   {24.9*3, 16*2}, 1}, // LED 21
    {{4|(7<<4)},   {24.9*2, 16*2}, 1}, // LED 22
    {{4|(8<<4)},   {24.9*1, 16*2}, 1}, // LED 23
    {{4|(9<<4)},   {24.9*0, 16*2}, 1}, // LED 24
};

A layouts/community/ergodox/drashna_glow/rules.mk => layouts/community/ergodox/drashna_glow/rules.mk +9 -0
@@ 0,0 1,9 @@
USER_NAME := drashna
SRC += ../drashna/keymap.c

-include $$(LAYOUT_KEYMAP_PATH)/../drashna/rules.mk

ifneq (,$(findstring ergodox_ez,$(KEYBOARD)))
  RGBLIGHT_ENABLE = no
  RGB_MATRIX_ENABLE = yes
endif

M layouts/community/ortho_4x12/drashna/keymap.c => layouts/community/ortho_4x12/drashna/keymap.c +1 -1
@@ 92,7 92,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[_ADJUST] = LAYOUT_ortho_4x12_wrapper(
  KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RST,
  VRSN,    _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EPRM,
  VRSN,    _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
  _______, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, TG_MODS,
  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)

M users/drashna/config.h => users/drashna/config.h +3 -1
@@ 57,8 57,10 @@
#ifdef TAPPING_TERM
#undef TAPPING_TERM
#endif // TAPPING_TERM
#ifdef KEYBOARD_ergodox_ez
#if defined(KEYBOARD_ergodox_ez)
  #define TAPPING_TERM 185
#elif defined(KEYBOARD_crkbd)
  #define TAPPING_TERM 200
#else
  #define TAPPING_TERM 175
#endif

M users/drashna/drashna.c => users/drashna/drashna.c +12 -10
@@ 173,12 173,15 @@ void matrix_init_user(void) {
    get_unicode_input_mode();
  #endif //UNICODE_ENABLE
  matrix_init_keymap();
}

void startup_user (void) {
  #ifdef RGBLIGHT_ENABLE
    matrix_init_rgb();
  #endif //RGBLIGHT_ENABLE
}

void startup_user (void) {
  // #ifdef RGBLIGHT_ENABLE
  //   matrix_init_rgb();
  // #endif //RGBLIGHT_ENABLE
  startup_keymap();
}



@@ 294,11 297,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    }
    break;

  case EPRM: // Resets EEPROM
    if (record->event.pressed) {
      eeconfig_init();
    }
    break;
  case VRSN: // Prints firmware version
    if (record->event.pressed) {
      send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), MACRO_TIMER);


@@ 392,7 390,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#endif
  }
  return process_record_keymap(keycode, record) &&
#ifdef RGBLIGHT_ENABLE
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
    process_record_user_rgb(keycode, record) &&
#endif // RGBLIGHT_ENABLE
    process_record_secrets(keycode, record);


@@ 413,7 411,11 @@ uint32_t layer_state_set_user(uint32_t state) {


uint32_t default_layer_state_set_user(uint32_t state) {
  return default_layer_state_set_keymap(state);
  state = default_layer_state_set_keymap(state);
#ifdef RGBLIGHT_ENABLE
  state = default_layer_state_set_rgb(state);
#endif // RGBLIGHT_ENABLE
  return state;
}



M users/drashna/drashna.h => users/drashna/drashna.h +6 -2
@@ 73,6 73,8 @@ typedef union {
  };
} userspace_config_t;

extern userspace_config_t userspace_config;

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


@@ 80,8 82,7 @@ typedef union {
#endif

enum userspace_custom_keycodes {
  EPRM = PLACEHOLDER_SAFE_RANGE, // Resets EEPROM do defaults (as in eeconfig_init)
  VRSN,              // Prints QMK Firmware and board info
  VRSN = PLACEHOLDER_SAFE_RANGE,              // Prints QMK Firmware and board info
  KC_QWERTY,         // Sets default layer to QWERTY
  KC_COLEMAK,        // Sets default layer to COLEMAK
  KC_DVORAK,         // Sets default layer to DVORAK


@@ 159,6 160,9 @@ enum userspace_custom_keycodes {
#define OS_RCTL OSM(MOD_RCTL)
#define OS_LALT OSM(MOD_LALT)
#define OS_RALT OSM(MOD_RALT)
#define OS_MEH  OSM(MOD_MEH)
#define OS_HYPR OSM(MOD_HYPR)

#define ALT_APP ALT_T(KC_APP)

#define MG_NKRO MAGIC_TOGGLE_NKRO

M users/drashna/rgb_stuff.c => users/drashna/rgb_stuff.c +60 -26
@@ 2,8 2,11 @@
#include "rgb_stuff.h"
#include "eeprom.h"

#if defined(RGBLIGHT_ENABLE)
extern rgblight_config_t rgblight_config;
extern userspace_config_t userspace_config;
#elif defined(RGB_MATRIX_ENABLE)
extern rgb_config_t rgb_matrix_config;
#endif

#ifdef RGBLIGHT_ENABLE
void rgblight_sethsv_default_helper(uint8_t index) {


@@ 209,7 212,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
      return true; break;
#endif // RGBLIGHT_TWINKLE
  case KC_RGB_T:  // This allows me to use underglow as layer indication, or as normal
#ifdef RGBLIGHT_ENABLE
#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);


@@ 237,24 240,25 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {



void matrix_init_rgb(void) {
 void matrix_init_rgb(void) {

  if (userspace_config.rgb_layer_change) {
    rgblight_init();
    rgblight_enable_noeeprom();
    switch (biton32(eeconfig_read_default_layer())) {
      case _COLEMAK:
        rgblight_sethsv_noeeprom_magenta(); break;
      case _DVORAK:
        rgblight_sethsv_noeeprom_springgreen(); break;
      case _WORKMAN:
        rgblight_sethsv_noeeprom_goldenrod(); break;
      default:
        rgblight_sethsv_noeeprom_cyan(); break;
    }
    rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
  }
}
// #ifdef RGBLIGHT_ENABLE
//   if (userspace_config.rgb_layer_change) {
//     rgblight_enable_noeeprom();
//     switch (biton32(eeconfig_read_default_layer())) {
//       case _COLEMAK:
//         rgblight_sethsv_noeeprom_magenta(); break;
//       case _DVORAK:
//         rgblight_sethsv_noeeprom_springgreen(); break;
//       case _WORKMAN:
//         rgblight_sethsv_noeeprom_goldenrod(); break;
//       default:
//         rgblight_sethsv_noeeprom_cyan(); break;
//     }
//     rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
//   }
// #endif
 }

void matrix_scan_rgb(void) {
#ifdef RGBLIGHT_TWINKLE


@@ 270,7 274,6 @@ void matrix_scan_rgb(void) {

uint32_t layer_state_set_rgb(uint32_t state) {
#ifdef RGBLIGHT_ENABLE
  static bool has_ran;
  if (userspace_config.rgb_layer_change) {
    switch (biton32(state)) {
    case _MACROS:


@@ 312,12 315,7 @@ uint32_t layer_state_set_rgb(uint32_t state) {
        default:
          rgblight_sethsv_noeeprom_cyan(); break;
      }
      if (has_ran) {
        biton32(state) == _MODS ? rgblight_mode(RGBLIGHT_MODE_BREATHING) : rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); // if _MODS layer is on, then breath to denote it
      } else {
        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
        has_ran = true;
      }
      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;
    }
//    layer_state_set_indicator(); // Runs every scan, so need to call this here .... since I can't get it working "right" anyhow


@@ 326,3 324,39 @@ uint32_t layer_state_set_rgb(uint32_t state) {

  return state;
}

uint32_t default_layer_state_set_rgb(uint32_t state) {
#ifdef RGBLIGHT_ENABLE
  if (userspace_config.rgb_layer_change) {
    rgblight_config_t temp_rgblight_config = rgblight_config;
    switch (biton32(state)) {
      case _COLEMAK:
        temp_rgblight_config.hue = 300;
        temp_rgblight_config.val = 255;
        temp_rgblight_config.sat = 255;
        temp_rgblight_config.mode = 1;
        break;
      case _DVORAK:
        temp_rgblight_config.hue = 150;
        temp_rgblight_config.val = 255;
        temp_rgblight_config.sat = 255;
        temp_rgblight_config.mode = 1;
      case _WORKMAN:
        temp_rgblight_config.hue = 43;
        temp_rgblight_config.val = 218;
        temp_rgblight_config.sat = 218;
        temp_rgblight_config.mode = 1;
      default:
        temp_rgblight_config.hue = 180;
        temp_rgblight_config.val = 255;
        temp_rgblight_config.sat = 255;
        temp_rgblight_config.mode = 1;
    }
    if (temp_rgblight_config.raw != eeconfig_read_rgblight()) {
      xprintf("rgblight set default layer hsv [EEPROM]: %u,%u,%u,%u\n", temp_rgblight_config.hue, temp_rgblight_config.sat, temp_rgblight_config.val, temp_rgblight_config.mode);
      eeconfig_update_rgblight(temp_rgblight_config.raw);
    }
  }
#endif // RGBLIGHT_ENABLE
  return state;
}

M users/drashna/rgb_stuff.h => users/drashna/rgb_stuff.h +1 -1
@@ 12,4 12,4 @@ void scan_rgblight_fadeout(void);
void matrix_init_rgb(void);
void matrix_scan_rgb(void);
uint32_t layer_state_set_rgb(uint32_t state);

uint32_t default_layer_state_set_rgb(uint32_t state);

M users/drashna/rules.mk => users/drashna/rules.mk +17 -0
@@ 27,6 27,11 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
  endif
endif

ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
  SRC += rgb_stuff.c
endif


ifeq ($(strip $(MACROS_ENABLED)), yes)
    OPT_DEFS += -DMACROS_ENABLED
endif


@@ 37,3 42,15 @@ ifdef CONSOLE_ENABLE
  endif
endif


ifeq ($(strip $(UCIS_ENABLE)), yes)
  SRC += send_unicode.c
endif

ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
  SRC += send_unicode.c
endif

ifeq ($(strip $(UNICODE_ENABLE)), yes)
  SRC += send_unicode.c
endif

M users/drashna/send_unicode.c => users/drashna/send_unicode.c +54 -0
@@ 56,3 56,57 @@ void send_unicode_hex_string(const char* str) {


// If you need a good converter: https://r12a.github.io/app-conversion/
uint8_t saved_mods;

void unicode_input_start (void) {
  // save current mods
  saved_mods = get_mods(); // Save current mods
  clear_mods(); // Unregister mods to start from a clean state

  switch(get_unicode_input_mode()) {
  case UC_OSX:
    register_code(KC_LALT);
    break;
  case UC_OSX_RALT:
    register_code(KC_RALT);
    break;
  case UC_LNX:
    register_code(KC_LCTL);
    register_code(KC_LSFT);
    register_code(KC_U);
    unregister_code(KC_U);
    unregister_code(KC_LSFT);
    unregister_code(KC_LCTL);
    break;
  case UC_WIN:
    register_code(KC_LALT);
    register_code(KC_PPLS);
    unregister_code(KC_PPLS);
    break;
  case UC_WINC:
    register_code(KC_RALT);
    unregister_code(KC_RALT);
    register_code(KC_U);
    unregister_code(KC_U);
    break;
  }
  wait_ms(UNICODE_TYPE_DELAY);
}

void unicode_input_finish (void) {
  switch(get_unicode_input_mode()) {
    case UC_OSX:
    case UC_WIN:
      unregister_code(KC_LALT);
      break;
    case UC_OSX_RALT:
      unregister_code(KC_RALT);
      break;
    case UC_LNX:
      register_code(KC_SPC);
      unregister_code(KC_SPC);
      break;
  }

  set_mods(saved_mods); // Reregister previously set mods
}

M users/drashna/template.c => users/drashna/template.c +0 -7
@@ 50,12 50,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    return false;
    break;

  case EPRM:
    if (record->event.pressed) {
      eeconfig_init();
    }
    return false;
    break;
  case VRSN:
    if (record->event.pressed) {
      SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);


@@ 128,4 122,3 @@ void shutdown_keymap(void) {}
void shutdown_user (void) {
  shutdown_keymap();
}


M users/drashna/template.h => users/drashna/template.h +1 -3
@@ 9,9 9,7 @@
#define BASE 0

enum custom_keycodes {
  PLACEHOLDER = SAFE_RANGE, // can always be here
  EPRM,
  VRSN,
  VRSN = SAFE_RANGE, // can always be here
  KC_MAKE,
  KC_RESET,
  NEWPLACEHOLDER  //use "NEWPLACEHOLDER for keymap specific codes