forked from mfulz_github/qmk_firmware
		
	Rework drashna userspace to be more modular (#4544)
* Break up files to make more readable * Add comments to ortho 4x12 layout rules.mk * Small tweaks * Update GitLab CI scripts * Make ortho boards smaller
This commit is contained in:
		
							parent
							
								
									106de349fb
								
							
						
					
					
						commit
						6d0dc910d9
					
				@ -31,11 +31,11 @@
 | 
				
			|||||||
#define EE_HANDS
 | 
					#define EE_HANDS
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(KEYBOARD_planck_rev5)
 | 
					#if !defined(KEYBOARD_planck_light)
 | 
				
			||||||
#ifdef RGBLIGHT_ENABLE
 | 
					#ifdef RGBLIGHT_ENABLE
 | 
				
			||||||
#define NO_MUSIC_MODE
 | 
					#define NO_MUSIC_MODE
 | 
				
			||||||
#endif // RGBLIGHT_ENABLE
 | 
					#endif // RGBLIGHT_ENABLE
 | 
				
			||||||
#endif // KEYBOARD_planck_rev5
 | 
					#endif // KEYBOARD_planck_light
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 | 
				
			|||||||
@ -5,12 +5,12 @@ CONSOLE_ENABLE    = no         # Console for debug(+400)
 | 
				
			|||||||
COMMAND_ENABLE    = no        # Commands for debug and configuration
 | 
					COMMAND_ENABLE    = no        # Commands for debug and configuration
 | 
				
			||||||
TAP_DANCE_ENABLE  = no
 | 
					TAP_DANCE_ENABLE  = no
 | 
				
			||||||
AUDIO_ENABLE      = yes
 | 
					AUDIO_ENABLE      = yes
 | 
				
			||||||
ifeq (,$(findstring planck/rev6,$(KEYBOARD)))
 | 
					ifeq (,$(findstring planck/rev6,$(KEYBOARD))) # Make sure it's NOT the Planck Rev6
 | 
				
			||||||
  RGBLIGHT_ENABLE   = yes
 | 
					  RGBLIGHT_ENABLE   = yes
 | 
				
			||||||
  INDICATOR_LIGHTS  = yes
 | 
					  INDICATOR_LIGHTS  = yes
 | 
				
			||||||
  RGBLIGHT_TWINKLE  = yes
 | 
					  RGBLIGHT_TWINKLE  = yes
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
ifneq (,$(findstring planck/light,$(KEYBOARD)))
 | 
					ifneq (,$(findstring planck/light,$(KEYBOARD))) # Make sure it IS the Planck Light
 | 
				
			||||||
  RGB_MATRIX_ENABLE   = yes
 | 
					  RGB_MATRIX_ENABLE   = yes
 | 
				
			||||||
  RGBLIGHT_ENABLE     = no
 | 
					  RGBLIGHT_ENABLE     = no
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
@ -23,4 +23,3 @@ endif
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MACROS_ENABLED    = no
 | 
					MACROS_ENABLED    = no
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@ qmk_firmware:
 | 
				
			|||||||
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util diffutils gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
 | 
					    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util diffutils gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
 | 
				
			||||||
    - avr-gcc --version
 | 
					    - avr-gcc --version
 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
    - make iris/rev2:drashna iris/rev2:drashna_old ergodox_ez:drashna viterbi/rev1:drashna orthodox/rev1:drashna orthodox/rev3:drashna crkbd:drashna planck/light:drashna
 | 
					    - make iris/rev2:drashna:production iris/rev2:drashna_old:production ergodox_ez:drashna ergodox_ez:drashna_glow viterbi/rev1:drashna:production orthodox/rev1:drashna:production orthodox/rev3:drashna:production crkbd:drashna:production planck/light:drashna:production
 | 
				
			||||||
  artifacts:
 | 
					  artifacts:
 | 
				
			||||||
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
 | 
					    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
 | 
				
			||||||
    paths:
 | 
					    paths:
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#ifdef AUDIO_ENABLE
 | 
					#ifdef AUDIO_ENABLE
 | 
				
			||||||
#define AUDIO_CLICKY
 | 
					#define AUDIO_CLICKY
 | 
				
			||||||
#define STARTUP_SONG SONG(E1M1_DOOM)
 | 
					#define STARTUP_SONG SONG(RICK_ROLL)
 | 
				
			||||||
#define GOODBYE_SONG  SONG(SONIC_RING)
 | 
					#define GOODBYE_SONG  SONG(SONIC_RING)
 | 
				
			||||||
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
 | 
					#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
 | 
				
			||||||
                                  SONG(COLEMAK_SOUND), \
 | 
					                                  SONG(COLEMAK_SOUND), \
 | 
				
			||||||
@ -44,7 +44,7 @@
 | 
				
			|||||||
// and when this option isn't enabled, z rapidly followed by x
 | 
					// and when this option isn't enabled, z rapidly followed by x
 | 
				
			||||||
// actually sends Ctrl-x. That's bad.)
 | 
					// actually sends Ctrl-x. That's bad.)
 | 
				
			||||||
#define IGNORE_MOD_TAP_INTERRUPT
 | 
					#define IGNORE_MOD_TAP_INTERRUPT
 | 
				
			||||||
#define PERMISSIVE_HOLD
 | 
					#undef PERMISSIVE_HOLD
 | 
				
			||||||
//#define TAPPING_FORCE_HOLD
 | 
					//#define TAPPING_FORCE_HOLD
 | 
				
			||||||
//#define RETRO_TAPPING
 | 
					//#define RETRO_TAPPING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -16,8 +16,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "drashna.h"
 | 
					#include "drashna.h"
 | 
				
			||||||
#include "tap_dances.h"
 | 
					 | 
				
			||||||
#include "rgb_stuff.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
userspace_config_t userspace_config;
 | 
					userspace_config_t userspace_config;
 | 
				
			||||||
#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
 | 
					#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
 | 
				
			||||||
@ -27,9 +25,6 @@ userspace_config_t userspace_config;
 | 
				
			|||||||
  #define DRASHNA_UNICODE_MODE 2
 | 
					  #define DRASHNA_UNICODE_MODE 2
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint16_t copy_paste_timer;
 | 
					 | 
				
			||||||
//  Helper Functions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This block is for all of the gaming macros, as they were all doing
 | 
					// This block is for all of the gaming macros, as they were all doing
 | 
				
			||||||
// the same thing, but with differring text sent.
 | 
					// the same thing, but with differring text sent.
 | 
				
			||||||
@ -109,55 +104,9 @@ void bootmagic_lite(void) {
 | 
				
			|||||||
__attribute__ ((weak))
 | 
					__attribute__ ((weak))
 | 
				
			||||||
void matrix_init_keymap(void) {}
 | 
					void matrix_init_keymap(void) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
void startup_keymap(void) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
void shutdown_keymap(void) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
void suspend_power_down_keymap(void) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
void suspend_wakeup_init_keymap(void) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
void matrix_scan_keymap(void) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 | 
					 | 
				
			||||||
  return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
 | 
					 | 
				
			||||||
  return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
uint32_t layer_state_set_keymap (uint32_t state) {
 | 
					 | 
				
			||||||
  return state;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
uint32_t default_layer_state_set_keymap (uint32_t state) {
 | 
					 | 
				
			||||||
  return state;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
void led_set_keymap(uint8_t usb_led) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
void eeconfig_init_keymap(void) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Call user matrix init, set default RGB colors and then
 | 
					// Call user matrix init, set default RGB colors and then
 | 
				
			||||||
// call the keymap's init function
 | 
					// call the keymap's init function
 | 
				
			||||||
void matrix_init_user(void) {
 | 
					void matrix_init_user(void) {
 | 
				
			||||||
  #if !defined(BOOTMAGIC_LITE) && !defined(BOOTMAGIC_ENABLE)
 | 
					 | 
				
			||||||
    bootmagic_lite();
 | 
					 | 
				
			||||||
  #endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  userspace_config.raw = eeconfig_read_user();
 | 
					  userspace_config.raw = eeconfig_read_user();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  #ifdef BOOTLOADER_CATERINA
 | 
					  #ifdef BOOTLOADER_CATERINA
 | 
				
			||||||
@ -178,12 +127,9 @@ void matrix_init_user(void) {
 | 
				
			|||||||
  #endif //RGBLIGHT_ENABLE
 | 
					  #endif //RGBLIGHT_ENABLE
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void startup_user (void) {
 | 
					
 | 
				
			||||||
  // #ifdef RGBLIGHT_ENABLE
 | 
					__attribute__ ((weak))
 | 
				
			||||||
  //   matrix_init_rgb();
 | 
					void shutdown_keymap(void) {}
 | 
				
			||||||
  // #endif //RGBLIGHT_ENABLE
 | 
					 | 
				
			||||||
  startup_keymap();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void shutdown_user (void) {
 | 
					void shutdown_user (void) {
 | 
				
			||||||
  #ifdef RGBLIGHT_ENABLE
 | 
					  #ifdef RGBLIGHT_ENABLE
 | 
				
			||||||
@ -192,26 +138,31 @@ void shutdown_user (void) {
 | 
				
			|||||||
    rgblight_setrgb_red();
 | 
					    rgblight_setrgb_red();
 | 
				
			||||||
  #endif // RGBLIGHT_ENABLE
 | 
					  #endif // RGBLIGHT_ENABLE
 | 
				
			||||||
  #ifdef RGB_MATRIX_ENABLE
 | 
					  #ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
  rgb_led led;
 | 
					    uint16_t timer_start = timer_read();
 | 
				
			||||||
  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
 | 
					    rgb_matrix_set_color_all( 0xFF, 0x00, 0x00 );
 | 
				
			||||||
    led = g_rgb_leds[i];
 | 
					    while(timer_elapsed(timer_start) < 250) { wait_ms(1); }
 | 
				
			||||||
    if (led.matrix_co.raw < 0xFF) {
 | 
					 | 
				
			||||||
      rgb_matrix_set_color( i, 0xFF, 0x00, 0x00 );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  #endif //RGB_MATRIX_ENABLE
 | 
					  #endif //RGB_MATRIX_ENABLE
 | 
				
			||||||
  shutdown_keymap();
 | 
					  shutdown_keymap();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					void suspend_power_down_keymap(void) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void suspend_power_down_user(void) {
 | 
					void suspend_power_down_user(void) {
 | 
				
			||||||
    suspend_power_down_keymap();
 | 
					    suspend_power_down_keymap();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					void suspend_wakeup_init_keymap(void) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void suspend_wakeup_init_user(void) {
 | 
					void suspend_wakeup_init_user(void) {
 | 
				
			||||||
  suspend_wakeup_init_keymap();
 | 
					  suspend_wakeup_init_keymap();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					void matrix_scan_keymap(void) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// No global matrix scan code, so just run keymap's matrix
 | 
					// No global matrix scan code, so just run keymap's matrix
 | 
				
			||||||
// scan function
 | 
					// scan function
 | 
				
			||||||
void matrix_scan_user(void) {
 | 
					void matrix_scan_user(void) {
 | 
				
			||||||
@ -233,172 +184,11 @@ void matrix_scan_user(void) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					uint32_t layer_state_set_keymap (uint32_t state) {
 | 
				
			||||||
// Defines actions tor my global custom keycodes. Defined in drashna.h file
 | 
					  return state;
 | 
				
			||||||
// Then runs the _keymap's record handier if not processed here
 | 
					 | 
				
			||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // If console is enabled, it will print the matrix position and status of each key pressed
 | 
					 | 
				
			||||||
#ifdef KEYLOGGER_ENABLE
 | 
					 | 
				
			||||||
  #if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2)
 | 
					 | 
				
			||||||
    xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed);
 | 
					 | 
				
			||||||
  #else
 | 
					 | 
				
			||||||
    xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
 | 
					 | 
				
			||||||
  #endif
 | 
					 | 
				
			||||||
#endif //KEYLOGGER_ENABLE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  switch (keycode) {
 | 
					 | 
				
			||||||
  case KC_QWERTY:
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
      set_single_persistent_default_layer(_QWERTY);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
  case KC_COLEMAK:
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
      set_single_persistent_default_layer(_COLEMAK);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
  case KC_DVORAK:
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
      set_single_persistent_default_layer(_DVORAK);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
  case KC_WORKMAN:
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
      set_single_persistent_default_layer(_WORKMAN);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  case KC_MAKE:  // Compiles the firmware, and adds the flash command based on keyboard bootloader
 | 
					 | 
				
			||||||
    if (!record->event.pressed) {
 | 
					 | 
				
			||||||
      uint8_t temp_mod = get_mods();
 | 
					 | 
				
			||||||
      uint8_t temp_osm = get_oneshot_mods();
 | 
					 | 
				
			||||||
      clear_mods(); clear_oneshot_mods();
 | 
					 | 
				
			||||||
      send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
 | 
					 | 
				
			||||||
      if (temp_mod & MODS_SHIFT_MASK || temp_osm & MODS_SHIFT_MASK) {
 | 
					 | 
				
			||||||
        #if defined(__ARM__)
 | 
					 | 
				
			||||||
          send_string_with_delay_P(PSTR(":dfu-util"), 10);
 | 
					 | 
				
			||||||
        #elif defined(BOOTLOADER_DFU)
 | 
					 | 
				
			||||||
          send_string_with_delay_P(PSTR(":dfu"), 10);
 | 
					 | 
				
			||||||
        #elif defined(BOOTLOADER_HALFKAY)
 | 
					 | 
				
			||||||
          send_string_with_delay_P(PSTR(":teensy"), 10);
 | 
					 | 
				
			||||||
        #elif defined(BOOTLOADER_CATERINA)
 | 
					 | 
				
			||||||
          send_string_with_delay_P(PSTR(":avrdude"), 10);
 | 
					 | 
				
			||||||
        #endif // bootloader options
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      #if defined(KEYBOARD_viterbi)
 | 
					 | 
				
			||||||
        send_string_with_delay_P(PSTR(":dfu"), 10);
 | 
					 | 
				
			||||||
      #endif
 | 
					 | 
				
			||||||
      if (temp_mod & MODS_CTRL_MASK || temp_osm & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10); }
 | 
					 | 
				
			||||||
      send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
 | 
					 | 
				
			||||||
      set_mods(temp_mod);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    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);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// These are a serious of gaming macros.
 | 
					 | 
				
			||||||
// Only enables for the viterbi, basically,
 | 
					 | 
				
			||||||
// to save on firmware space, since it's limited.
 | 
					 | 
				
			||||||
#ifdef MACROS_ENABLED
 | 
					 | 
				
			||||||
  case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros
 | 
					 | 
				
			||||||
    if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeconfig_update_user(userspace_config.raw); }
 | 
					 | 
				
			||||||
#ifdef RGBLIGHT_ENABLE
 | 
					 | 
				
			||||||
    userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18);
 | 
					 | 
				
			||||||
#endif //RGBLIGHT_ENABLE
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
  case KC_SALT:
 | 
					 | 
				
			||||||
    return send_game_macro("Salt, salt, salt...", record, false);
 | 
					 | 
				
			||||||
  case KC_MORESALT:
 | 
					 | 
				
			||||||
    return  send_game_macro("Please sir, can I have some more salt?!", record, false);
 | 
					 | 
				
			||||||
  case KC_SALTHARD:
 | 
					 | 
				
			||||||
    return send_game_macro("Your salt only makes me harder, and even more aggressive!", record, false);
 | 
					 | 
				
			||||||
  case KC_GOODGAME:
 | 
					 | 
				
			||||||
    return send_game_macro("Good game, everyone!", record, false);
 | 
					 | 
				
			||||||
  case KC_GLHF:
 | 
					 | 
				
			||||||
    return send_game_macro("Good luck, have fun!!!", record, false);
 | 
					 | 
				
			||||||
  case KC_SYMM:
 | 
					 | 
				
			||||||
    return send_game_macro("Left click to win!", record, false);
 | 
					 | 
				
			||||||
  case KC_JUSTGAME:
 | 
					 | 
				
			||||||
    return send_game_macro("It may be a game, but if you don't want to actually try, please go play AI, so that people that actually want to take the game seriously and \"get good\" have a place to do so without trolls like you throwing games.", record, false);
 | 
					 | 
				
			||||||
  case KC_TORB:
 | 
					 | 
				
			||||||
    return send_game_macro("That was positively riveting!", record, false);
 | 
					 | 
				
			||||||
  case KC_AIM:
 | 
					 | 
				
			||||||
    send_game_macro("That aim is absolutely amazing. It's almost like you're a machine!", record, true);
 | 
					 | 
				
			||||||
    return send_game_macro("Wait! That aim is TOO good!  You're clearly using an aim hack! CHEATER!", record, false);
 | 
					 | 
				
			||||||
  case KC_C9:
 | 
					 | 
				
			||||||
    return send_game_macro("OMG!!!  C9!!!", record, false);
 | 
					 | 
				
			||||||
  case KC_GGEZ:
 | 
					 | 
				
			||||||
    return send_game_macro("That was a fantastic game, though it was a bit easy. Try harder next time!", record, false);
 | 
					 | 
				
			||||||
#endif // MACROS_ENABLED
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  case KC_DIABLO_CLEAR:  // reset all Diablo timers, disabling them
 | 
					 | 
				
			||||||
#ifdef TAP_DANCE_ENABLE
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
      uint8_t dtime;
 | 
					 | 
				
			||||||
      for (dtime = 0; dtime < 4; dtime++) {
 | 
					 | 
				
			||||||
        diablo_key_time[dtime] = diablo_times[0];
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif // TAP_DANCE_ENABLE
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  case KC_CCCV:                                    // One key copy/paste
 | 
					 | 
				
			||||||
    if(record->event.pressed){
 | 
					 | 
				
			||||||
      copy_paste_timer = timer_read();
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) {   // Hold, copy
 | 
					 | 
				
			||||||
        register_code(KC_LCTL);
 | 
					 | 
				
			||||||
        tap_code(KC_C);
 | 
					 | 
				
			||||||
        unregister_code(KC_LCTL);
 | 
					 | 
				
			||||||
      } else {                                // Tap, paste
 | 
					 | 
				
			||||||
        register_code(KC_LCTL);
 | 
					 | 
				
			||||||
        tap_code(KC_V);
 | 
					 | 
				
			||||||
        unregister_code(KC_LCTL);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
#ifdef UNICODE_ENABLE
 | 
					 | 
				
			||||||
  case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
      send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
  case UC_TABL: // ┬─┬ノ( º _ ºノ)
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
      send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
  case UC_SHRG: // ¯\_(ツ)_/¯
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
      send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
  case UC_DISA: // ಠ_ಠ
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
      send_unicode_hex_string("0CA0 005F 0CA0");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return process_record_keymap(keycode, record) &&
 | 
					 | 
				
			||||||
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
 | 
					 | 
				
			||||||
    process_record_user_rgb(keycode, record) &&
 | 
					 | 
				
			||||||
#endif // RGBLIGHT_ENABLE
 | 
					 | 
				
			||||||
    process_record_secrets(keycode, record);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Runs state check and changes underglow color and animation
 | 
					 | 
				
			||||||
// on layer change, no matter where the change was initiated
 | 
					// on layer change, no matter where the change was initiated
 | 
				
			||||||
// Then runs keymap's layer change check
 | 
					// Then runs keymap's layer change check
 | 
				
			||||||
uint32_t layer_state_set_user(uint32_t state) {
 | 
					uint32_t layer_state_set_user(uint32_t state) {
 | 
				
			||||||
@ -410,6 +200,12 @@ uint32_t layer_state_set_user(uint32_t state) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					uint32_t default_layer_state_set_keymap (uint32_t state) {
 | 
				
			||||||
 | 
					  return state;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs state check and changes underglow color and animation
 | 
				
			||||||
uint32_t default_layer_state_set_user(uint32_t state) {
 | 
					uint32_t default_layer_state_set_user(uint32_t state) {
 | 
				
			||||||
  state = default_layer_state_set_keymap(state);
 | 
					  state = default_layer_state_set_keymap(state);
 | 
				
			||||||
#ifdef RGBLIGHT_ENABLE
 | 
					#ifdef RGBLIGHT_ENABLE
 | 
				
			||||||
@ -418,6 +214,8 @@ uint32_t default_layer_state_set_user(uint32_t state) {
 | 
				
			|||||||
  return state;
 | 
					  return state;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					void led_set_keymap(uint8_t usb_led) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Any custom LED code goes here.
 | 
					// Any custom LED code goes here.
 | 
				
			||||||
// So far, I only have keyboard specific code,
 | 
					// So far, I only have keyboard specific code,
 | 
				
			||||||
@ -426,6 +224,9 @@ void led_set_user(uint8_t usb_led) {
 | 
				
			|||||||
  led_set_keymap(usb_led);
 | 
					  led_set_keymap(usb_led);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					void eeconfig_init_keymap(void) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void eeconfig_init_user(void) {
 | 
					void eeconfig_init_user(void) {
 | 
				
			||||||
  userspace_config.raw = 0;
 | 
					  userspace_config.raw = 0;
 | 
				
			||||||
  userspace_config.rgb_layer_change = true;
 | 
					  userspace_config.rgb_layer_change = true;
 | 
				
			||||||
 | 
				
			|||||||
@ -19,9 +19,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#include "quantum.h"
 | 
					#include "quantum.h"
 | 
				
			||||||
#include "version.h"
 | 
					#include "version.h"
 | 
				
			||||||
#include "eeprom.h"
 | 
					#include "eeprom.h"
 | 
				
			||||||
 | 
					#include "wrappers.h"
 | 
				
			||||||
#ifdef RGB_MATRIX_ENABLE
 | 
					#include "process_records.h"
 | 
				
			||||||
#include "rgb_matrix.h"
 | 
					#ifdef TAP_DANCE_ENABLE
 | 
				
			||||||
 | 
					  #include "tap_dances.h"
 | 
				
			||||||
 | 
					#endif // TAP_DANCE_ENABLE
 | 
				
			||||||
 | 
					#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
 | 
				
			||||||
 | 
					  #include "rgb_stuff.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -51,17 +55,19 @@ define modifiers here, since MOD_* doesn't seem to work for these
 | 
				
			|||||||
#define MODS_GUI_MASK  (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
 | 
					#define MODS_GUI_MASK  (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
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
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef RGBLIGHT_ENABLE
 | 
					 | 
				
			||||||
void rgblight_sethsv_default_helper(uint8_t index);
 | 
					 | 
				
			||||||
#endif // RGBLIGHT_ENABLE
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed);
 | 
					bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed);
 | 
				
			||||||
bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
 | 
					bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
 | 
				
			||||||
 | 
					bool send_game_macro(const char *str, keyrecord_t *record, bool override);
 | 
				
			||||||
 | 
					void matrix_init_keymap(void);
 | 
				
			||||||
 | 
					void shutdown_keymap(void);
 | 
				
			||||||
 | 
					void suspend_power_down_keymap(void);
 | 
				
			||||||
 | 
					void suspend_wakeup_init_keymap(void);
 | 
				
			||||||
 | 
					void matrix_scan_keymap(void);
 | 
				
			||||||
 | 
					uint32_t layer_state_set_keymap (uint32_t state);
 | 
				
			||||||
 | 
					uint32_t default_layer_state_set_keymap (uint32_t state);
 | 
				
			||||||
 | 
					void led_set_keymap(uint8_t usb_led);
 | 
				
			||||||
 | 
					void eeconfig_init_keymap(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef union {
 | 
					typedef union {
 | 
				
			||||||
  uint32_t raw;
 | 
					  uint32_t raw;
 | 
				
			||||||
@ -75,110 +81,6 @@ typedef union {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern userspace_config_t userspace_config;
 | 
					extern userspace_config_t userspace_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(KEYMAP_SAFE_RANGE)
 | 
					 | 
				
			||||||
  #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
  #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
enum userspace_custom_keycodes {
 | 
					 | 
				
			||||||
  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
 | 
					 | 
				
			||||||
  KC_WORKMAN,        // Sets default layer to WORKMAN
 | 
					 | 
				
			||||||
  KC_DIABLO_CLEAR,   // Clears all Diablo Timers
 | 
					 | 
				
			||||||
  KC_OVERWATCH,      // Toggles game macro input mode (so in OW, it defaults to game chat)
 | 
					 | 
				
			||||||
  KC_SALT,           // See drashna.c for details
 | 
					 | 
				
			||||||
  KC_MORESALT,
 | 
					 | 
				
			||||||
  KC_SALTHARD,
 | 
					 | 
				
			||||||
  KC_GOODGAME,
 | 
					 | 
				
			||||||
  KC_SYMM,
 | 
					 | 
				
			||||||
  KC_JUSTGAME,
 | 
					 | 
				
			||||||
  KC_GLHF,
 | 
					 | 
				
			||||||
  KC_TORB,
 | 
					 | 
				
			||||||
  KC_AIM,
 | 
					 | 
				
			||||||
  KC_C9,
 | 
					 | 
				
			||||||
  KC_GGEZ,
 | 
					 | 
				
			||||||
  KC_MAKE,           // Run keyboard's customized make command
 | 
					 | 
				
			||||||
  KC_RGB_T,          // Toggles RGB Layer Indication mode
 | 
					 | 
				
			||||||
  KC_SECRET_1,       // test1
 | 
					 | 
				
			||||||
  KC_SECRET_2,       // test2
 | 
					 | 
				
			||||||
  KC_SECRET_3,       // test3
 | 
					 | 
				
			||||||
  KC_SECRET_4,       // test4
 | 
					 | 
				
			||||||
  KC_SECRET_5,       // test5
 | 
					 | 
				
			||||||
  KC_CCCV,           // Hold to copy, tap to paste
 | 
					 | 
				
			||||||
  KC_NUKE,           // NUCLEAR LAUNCH DETECTED!!!
 | 
					 | 
				
			||||||
  UC_FLIP,           // (ಠ痊ಠ)┻━┻
 | 
					 | 
				
			||||||
  UC_TABL,           // ┬─┬ノ( º _ ºノ)
 | 
					 | 
				
			||||||
  UC_SHRG,           // ¯\_(ツ)_/¯
 | 
					 | 
				
			||||||
  UC_DISA,           // ಠ_ಠ
 | 
					 | 
				
			||||||
  NEW_SAFE_RANGE     //use "NEWPLACEHOLDER for keymap specific codes
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define LOWER MO(_LOWER)
 | 
					 | 
				
			||||||
#define RAISE MO(_RAISE)
 | 
					 | 
				
			||||||
#define ADJUST MO(_ADJUST)
 | 
					 | 
				
			||||||
#define TG_MODS TG(_MODS)
 | 
					 | 
				
			||||||
#define TG_GAME TG(_GAMEPAD)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define KC_SEC1 KC_SECRET_1
 | 
					 | 
				
			||||||
#define KC_SEC2 KC_SECRET_2
 | 
					 | 
				
			||||||
#define KC_SEC3 KC_SECRET_3
 | 
					 | 
				
			||||||
#define KC_SEC4 KC_SECRET_4
 | 
					 | 
				
			||||||
#define KC_SEC5 KC_SECRET_5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QWERTY KC_QWERTY
 | 
					 | 
				
			||||||
#define DVORAK KC_DVORAK
 | 
					 | 
				
			||||||
#define COLEMAK KC_COLEMAK
 | 
					 | 
				
			||||||
#define WORKMAN KC_WORKMAN
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define KC_RESET RESET
 | 
					 | 
				
			||||||
#define KC_RST KC_RESET
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef SWAP_HANDS_ENABLE
 | 
					 | 
				
			||||||
#define KC_C1R3 SH_TT
 | 
					 | 
				
			||||||
#else // SWAP_HANDS_ENABLE
 | 
					 | 
				
			||||||
#define KC_C1R3 KC_BSPC
 | 
					 | 
				
			||||||
#endif // SWAP_HANDS_ENABLE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define BK_LWER LT(_LOWER, KC_BSPC)
 | 
					 | 
				
			||||||
#define SP_LWER LT(_LOWER, KC_SPC)
 | 
					 | 
				
			||||||
#define DL_RAIS LT(_RAISE, KC_DEL)
 | 
					 | 
				
			||||||
#define ET_RAIS LT(_RAISE, KC_ENTER)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* OSM keycodes, to keep things clean and easy to change */
 | 
					 | 
				
			||||||
#define KC_MLSF OSM(MOD_LSFT)
 | 
					 | 
				
			||||||
#define KC_MRSF OSM(MOD_RSFT)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define OS_LGUI OSM(MOD_LGUI)
 | 
					 | 
				
			||||||
#define OS_RGUI OSM(MOD_RGUI)
 | 
					 | 
				
			||||||
#define OS_LSFT OSM(MOD_LSFT)
 | 
					 | 
				
			||||||
#define OS_RSFT OSM(MOD_RSFT)
 | 
					 | 
				
			||||||
#define OS_LCTL OSM(MOD_LCTL)
 | 
					 | 
				
			||||||
#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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UC_IRNY UC(0x2E2E)
 | 
					 | 
				
			||||||
#define UC_CLUE UC(0x203D)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef TAP_DANCE_ENABLE
 | 
					 | 
				
			||||||
enum {
 | 
					 | 
				
			||||||
  TD_D3_1 = 0,
 | 
					 | 
				
			||||||
  TD_D3_2,
 | 
					 | 
				
			||||||
  TD_D3_3,
 | 
					 | 
				
			||||||
  TD_D3_4
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
#endif // TAP_DANCE_ENABLE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
Custom Keycodes for Diablo 3 layer
 | 
					Custom Keycodes for Diablo 3 layer
 | 
				
			||||||
@ -196,172 +98,3 @@ We use custom codes here, so we can substitute the right stuff
 | 
				
			|||||||
#define KC_D3_3 KC_3
 | 
					#define KC_D3_3 KC_3
 | 
				
			||||||
#define KC_D3_4 KC_4
 | 
					#define KC_D3_4 KC_4
 | 
				
			||||||
#endif // TAP_DANCE_ENABLE
 | 
					#endif // TAP_DANCE_ENABLE
 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
Since our quirky block definitions are basically a list of comma separated
 | 
					 | 
				
			||||||
arguments, we need a wrapper in order for these definitions to be
 | 
					 | 
				
			||||||
expanded before being used as arguments to the LAYOUT_xxx macro.
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
#if (!defined(LAYOUT) && defined(KEYMAP))
 | 
					 | 
				
			||||||
#define LAYOUT KEYMAP
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define LAYOUT_ergodox_wrapper(...)          LAYOUT_ergodox(__VA_ARGS__)
 | 
					 | 
				
			||||||
#define LAYOUT_ergodox_pretty_wrapper(...)   LAYOUT_ergodox_pretty(__VA_ARGS__)
 | 
					 | 
				
			||||||
#define KEYMAP_wrapper(...)                  LAYOUT(__VA_ARGS__)
 | 
					 | 
				
			||||||
#define LAYOUT_wrapper(...)                  LAYOUT(__VA_ARGS__)
 | 
					 | 
				
			||||||
#define LAYOUT_ortho_4x12_wrapper(...)       LAYOUT_ortho_4x12(__VA_ARGS__)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
Blocks for each of the four major keyboard layouts
 | 
					 | 
				
			||||||
Organized so we can quickly adapt and modify all of them
 | 
					 | 
				
			||||||
at once, rather than for each keyboard, one at a time.
 | 
					 | 
				
			||||||
And this allows for much cleaner blocks in the keymaps.
 | 
					 | 
				
			||||||
For instance Tap/Hold for Control on all of the layouts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
NOTE: These are all the same length.  If you do a search/replace
 | 
					 | 
				
			||||||
  then you need to add/remove underscores to keep the
 | 
					 | 
				
			||||||
  lengths consistent.
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________QWERTY_L1_________________        KC_Q,    KC_W,    KC_E,    KC_R,    KC_T
 | 
					 | 
				
			||||||
#define _________________QWERTY_L2_________________        KC_A,    KC_S,    KC_D,    KC_F,    KC_G
 | 
					 | 
				
			||||||
#define _________________QWERTY_L3_________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________QWERTY_R1_________________        KC_Y,    KC_U,    KC_I,    KC_O,    KC_P
 | 
					 | 
				
			||||||
#define _________________QWERTY_R2_________________        KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN
 | 
					 | 
				
			||||||
#define _________________QWERTY_R3_________________        KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________COLEMAK_L1________________       KC_Q,    KC_W,    KC_F,    KC_P,    KC_G
 | 
					 | 
				
			||||||
#define _________________COLEMAK_L2________________       KC_A,    KC_R,    KC_S,    KC_T,    KC_D
 | 
					 | 
				
			||||||
#define _________________COLEMAK_L3________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________COLEMAK_R1________________       KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN
 | 
					 | 
				
			||||||
#define _________________COLEMAK_R2________________       KC_H,    KC_N,    KC_E,    KC_I,    KC_O
 | 
					 | 
				
			||||||
#define _________________COLEMAK_R3________________       KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define ______________COLEMAK_MOD_DH_L1____________       KC_Q,    KC_W,    KC_F,    KC_P,    KC_B
 | 
					 | 
				
			||||||
#define ______________COLEMAK_MOD_DH_L2____________       KC_A,    KC_R,    KC_S,    KC_T,    KC_G
 | 
					 | 
				
			||||||
#define ______________COLEMAK_MOD_DH_L3____________       KC_Z,    KC_X,    KC_C,    KC_D,    KC_V
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define ______________COLEMAK_MOD_DH_R1____________       KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN
 | 
					 | 
				
			||||||
#define ______________COLEMAK_MOD_DH_R2____________       KC_M,    KC_N,    KC_E,    KC_I,    KC_O
 | 
					 | 
				
			||||||
#define ______________COLEMAK_MOD_DH_R3____________       KC_K,    KC_H,    KC_COMM, KC_DOT,  KC_SLASH
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________DVORAK_L1_________________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y
 | 
					 | 
				
			||||||
#define _________________DVORAK_L2_________________        KC_A,    KC_O,    KC_E,   KC_U,     KC_I
 | 
					 | 
				
			||||||
#define _________________DVORAK_L3_________________        KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________DVORAK_R1_________________        KC_F,    KC_G,    KC_C,    KC_R,    KC_L
 | 
					 | 
				
			||||||
#define _________________DVORAK_R2_________________        KC_D,    KC_H,    KC_T,    KC_N,    KC_S
 | 
					 | 
				
			||||||
#define _________________DVORAK_R3_________________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define ________________DVORAK_AU_L1_______________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y
 | 
					 | 
				
			||||||
#define ________________DVORAK_AU_L2_______________        KC_O,    KC_A,    KC_E,   KC_I,     KC_U
 | 
					 | 
				
			||||||
#define ________________DVORAK_AU_L3_______________        KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define ________________DVORAK_AU_R1_______________        KC_F,    KC_G,    KC_C,    KC_R,    KC_L
 | 
					 | 
				
			||||||
#define ________________DVORAK_AU_R2_______________        KC_D,    KC_H,    KC_T,    KC_N,    KC_S
 | 
					 | 
				
			||||||
#define ________________DVORAK_AU_R3_______________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________WORKMAN_L1________________       KC_Q,    KC_D,    KC_R,   KC_W,     KC_B
 | 
					 | 
				
			||||||
#define _________________WORKMAN_L2________________       KC_A,    KC_S,    KC_H,   KC_T,     KC_G
 | 
					 | 
				
			||||||
#define _________________WORKMAN_L3________________       KC_Z,    KC_X,    KC_M,   KC_C,     KC_V
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________WORKMAN_R1________________       KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN
 | 
					 | 
				
			||||||
#define _________________WORKMAN_R2________________       KC_Y,    KC_N,    KC_E,    KC_O,    KC_I
 | 
					 | 
				
			||||||
#define _________________WORKMAN_R3________________       KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLASH
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________NORMAN_L1_________________       KC_Q,    KC_W,    KC_D,    KC_F,    KC_K
 | 
					 | 
				
			||||||
#define _________________NORMAN_L2_________________       KC_A,    KC_S,    KC_E,    KC_T,    KC_G
 | 
					 | 
				
			||||||
#define _________________NORMAN_L3_________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________NORMAN_R1_________________       KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN
 | 
					 | 
				
			||||||
#define _________________NORMAN_R2_________________       KC_Y,    KC_N,    KC_I,    KC_O,    KC_U
 | 
					 | 
				
			||||||
#define _________________NORMAN_R3_________________       KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________MALTRON_L1________________       KC_Q,    KC_P,    KC_Y,    KC_C,    KC_B
 | 
					 | 
				
			||||||
#define _________________MALTRON_L2________________       KC_A,    KC_N,    KC_I,    KC_S,    KC_F
 | 
					 | 
				
			||||||
#define _________________MALTRON_L3________________       KC_SCLN, KC_SLSH, KC_J     KC_G,    KC_COMM
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________MALTRON_R1________________       KC_V,    KC_M,    KC_U,    KC_Z,    KC_L
 | 
					 | 
				
			||||||
#define _________________MALTRON_R2________________       KC_D,    KC_T,    KC_D,    KC_O,    KC_R
 | 
					 | 
				
			||||||
#define _________________MALTRON_R3________________       KC_DOT,  KC_W,    KC_K,    KC_MINS,  KC_X
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________EUCALYN_L1________________       KC_SLSH, KC_COMM, KC_DOT,  KC_F,    KC_Q
 | 
					 | 
				
			||||||
#define _________________EUCALYN_L2________________       KC_A,    KC_O,    KC_E,    KC_I,    KC_U
 | 
					 | 
				
			||||||
#define _________________EUCALYN_L3________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_W
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________EUCALYN_R1________________       KC_M,    KC_R,    KC_D,    KC_Y,    KC_P
 | 
					 | 
				
			||||||
#define _________________EUCALYN_R2________________       KC_G,    KC_T,    KC_K,    KC_S,    KC_N
 | 
					 | 
				
			||||||
#define _________________EUCALYN_R3________________       KC_B,    KC_H,    KC_J,    KC_L,    KC_SCLN
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QFMLWY_L1_____________       KC_Q,    KC_F,    KC_M,    KC_L,    KC_W
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QFMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QFMLWY_L3_____________       KC_Z,    KC_V,    KC_G,    KC_C,    KC_X
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QFMLWY_R1_____________       KC_Y,    KC_U,    KC_O,    KC_B,    KC_J
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QFMLWY_R2_____________       KC_I,    KC_A,    KC_E,    KC_H,    KC_SCLN
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QFMLWY_R3_____________       KC_P,    KC_K,    KC_COMM, KC_DOT,  KC_SLSH
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWB_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWB_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWB_L3_____________       KC_Z,   KC_X,    KC_C,    KC_F,    KC_J
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWB_R1_____________       KC_B,    KC_Y,    KC_U,    KC_V,    KC_SCLN
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWB_R2_____________       KC_I,    KC_A,    KC_E,    KC_O,    KC_H
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWB_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWY_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWY_L3_____________       KC_Z,   KC_X,    KC_C,    KC_V,    KC_J
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWY_R1_____________       KC_Y,    KC_F,    KC_U,    KC_B,    KC_SCLN
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWY_R2_____________       KC_I,    KC_A,    KC_E,    KC_O,    KC_H
 | 
					 | 
				
			||||||
#define _____________CARPLAX_QGMLWY_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define ___________________BLANK___________________        _______, _______, _______, _______, _______
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________LOWER_L1__________________        KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC
 | 
					 | 
				
			||||||
#define _________________LOWER_L2__________________        _________________FUNC_LEFT_________________
 | 
					 | 
				
			||||||
#define _________________LOWER_L3__________________        _________________FUNC_RIGHT________________
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________LOWER_R1__________________        KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
 | 
					 | 
				
			||||||
#define _________________LOWER_R2__________________        _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
 | 
					 | 
				
			||||||
#define _________________LOWER_R3__________________        _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________RAISE_L1__________________        ________________NUMBER_LEFT________________
 | 
					 | 
				
			||||||
#define _________________RAISE_L2__________________        ___________________BLANK___________________
 | 
					 | 
				
			||||||
#define _________________RAISE_L3__________________        ___________________BLANK___________________
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________RAISE_R1__________________        ________________NUMBER_RIGHT_______________
 | 
					 | 
				
			||||||
#define _________________RAISE_R2__________________        _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC
 | 
					 | 
				
			||||||
#define _________________RAISE_R3__________________        _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________ADJUST_L1_________________        RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
 | 
					 | 
				
			||||||
#define _________________ADJUST_L2_________________        MU_TOG , CK_TOGG, AU_ON,   AU_OFF,  AG_NORM
 | 
					 | 
				
			||||||
#define _________________ADJUST_L3_________________        RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _________________ADJUST_R1_________________        KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
 | 
					 | 
				
			||||||
#define _________________ADJUST_R2_________________        AG_SWAP, QWERTY,  COLEMAK, DVORAK,  WORKMAN
 | 
					 | 
				
			||||||
#define _________________ADJUST_R3_________________        MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										175
									
								
								users/drashna/process_records.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								users/drashna/process_records.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,175 @@
 | 
				
			|||||||
 | 
					#include "drashna.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint16_t copy_paste_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					  return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					  return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Defines actions tor my global custom keycodes. Defined in drashna.h file
 | 
				
			||||||
 | 
					// Then runs the _keymap's record handier if not processed here
 | 
				
			||||||
 | 
					bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // If console is enabled, it will print the matrix position and status of each key pressed
 | 
				
			||||||
 | 
					#ifdef KEYLOGGER_ENABLE
 | 
				
			||||||
 | 
					  #if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2)
 | 
				
			||||||
 | 
					    xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed);
 | 
				
			||||||
 | 
					  #else
 | 
				
			||||||
 | 
					    xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					#endif //KEYLOGGER_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  switch (keycode) {
 | 
				
			||||||
 | 
					  case KC_QWERTY:
 | 
				
			||||||
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
 | 
					      set_single_persistent_default_layer(_QWERTY);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					  case KC_COLEMAK:
 | 
				
			||||||
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
 | 
					      set_single_persistent_default_layer(_COLEMAK);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					  case KC_DVORAK:
 | 
				
			||||||
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
 | 
					      set_single_persistent_default_layer(_DVORAK);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					  case KC_WORKMAN:
 | 
				
			||||||
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
 | 
					      set_single_persistent_default_layer(_WORKMAN);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  case KC_MAKE:  // Compiles the firmware, and adds the flash command based on keyboard bootloader
 | 
				
			||||||
 | 
					    if (!record->event.pressed) {
 | 
				
			||||||
 | 
					      uint8_t temp_mod = get_mods();
 | 
				
			||||||
 | 
					      uint8_t temp_osm = get_oneshot_mods();
 | 
				
			||||||
 | 
					      clear_mods(); clear_oneshot_mods();
 | 
				
			||||||
 | 
					      send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
 | 
				
			||||||
 | 
					      if (temp_mod & MODS_SHIFT_MASK || temp_osm & MODS_SHIFT_MASK) {
 | 
				
			||||||
 | 
					        #if defined(__ARM__)
 | 
				
			||||||
 | 
					          send_string_with_delay_P(PSTR(":dfu-util"), 10);
 | 
				
			||||||
 | 
					        #elif defined(BOOTLOADER_DFU)
 | 
				
			||||||
 | 
					          send_string_with_delay_P(PSTR(":dfu"), 10);
 | 
				
			||||||
 | 
					        #elif defined(BOOTLOADER_HALFKAY)
 | 
				
			||||||
 | 
					          send_string_with_delay_P(PSTR(":teensy"), 10);
 | 
				
			||||||
 | 
					        #elif defined(BOOTLOADER_CATERINA)
 | 
				
			||||||
 | 
					          send_string_with_delay_P(PSTR(":avrdude"), 10);
 | 
				
			||||||
 | 
					        #endif // bootloader options
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      #if defined(KEYBOARD_viterbi)
 | 
				
			||||||
 | 
					        send_string_with_delay_P(PSTR(":dfu"), 10);
 | 
				
			||||||
 | 
					      #endif
 | 
				
			||||||
 | 
					      if (temp_mod & MODS_CTRL_MASK || temp_osm & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10); }
 | 
				
			||||||
 | 
					      send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
 | 
				
			||||||
 | 
					      set_mods(temp_mod);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// These are a serious of gaming macros.
 | 
				
			||||||
 | 
					// Only enables for the viterbi, basically,
 | 
				
			||||||
 | 
					// to save on firmware space, since it's limited.
 | 
				
			||||||
 | 
					#ifdef MACROS_ENABLED
 | 
				
			||||||
 | 
					  case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros
 | 
				
			||||||
 | 
					    if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeconfig_update_user(userspace_config.raw); }
 | 
				
			||||||
 | 
					#ifdef RGBLIGHT_ENABLE
 | 
				
			||||||
 | 
					    userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18);
 | 
				
			||||||
 | 
					#endif //RGBLIGHT_ENABLE
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					  case KC_SALT:
 | 
				
			||||||
 | 
					    return send_game_macro("Salt, salt, salt...", record, false);
 | 
				
			||||||
 | 
					  case KC_MORESALT:
 | 
				
			||||||
 | 
					    return  send_game_macro("Please sir, can I have some more salt?!", record, false);
 | 
				
			||||||
 | 
					  case KC_SALTHARD:
 | 
				
			||||||
 | 
					    return send_game_macro("Your salt only makes me harder, and even more aggressive!", record, false);
 | 
				
			||||||
 | 
					  case KC_GOODGAME:
 | 
				
			||||||
 | 
					    return send_game_macro("Good game, everyone!", record, false);
 | 
				
			||||||
 | 
					  case KC_GLHF:
 | 
				
			||||||
 | 
					    return send_game_macro("Good luck, have fun!!!", record, false);
 | 
				
			||||||
 | 
					  case KC_SYMM:
 | 
				
			||||||
 | 
					    return send_game_macro("Left click to win!", record, false);
 | 
				
			||||||
 | 
					  case KC_JUSTGAME:
 | 
				
			||||||
 | 
					    return send_game_macro("It may be a game, but if you don't want to actually try, please go play AI, so that people that actually want to take the game seriously and \"get good\" have a place to do so without trolls like you throwing games.", record, false);
 | 
				
			||||||
 | 
					  case KC_TORB:
 | 
				
			||||||
 | 
					    return send_game_macro("That was positively riveting!", record, false);
 | 
				
			||||||
 | 
					  case KC_AIM:
 | 
				
			||||||
 | 
					    send_game_macro("That aim is absolutely amazing. It's almost like you're a machine!", record, true);
 | 
				
			||||||
 | 
					    return send_game_macro("Wait! That aim is TOO good!  You're clearly using an aim hack! CHEATER!", record, false);
 | 
				
			||||||
 | 
					  case KC_C9:
 | 
				
			||||||
 | 
					    return send_game_macro("OMG!!!  C9!!!", record, false);
 | 
				
			||||||
 | 
					  case KC_GGEZ:
 | 
				
			||||||
 | 
					    return send_game_macro("That was a fantastic game, though it was a bit easy. Try harder next time!", record, false);
 | 
				
			||||||
 | 
					#endif // MACROS_ENABLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  case KC_DIABLO_CLEAR:  // reset all Diablo timers, disabling them
 | 
				
			||||||
 | 
					#ifdef TAP_DANCE_ENABLE
 | 
				
			||||||
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
 | 
					      uint8_t dtime;
 | 
				
			||||||
 | 
					      for (dtime = 0; dtime < 4; dtime++) {
 | 
				
			||||||
 | 
					        diablo_key_time[dtime] = diablo_times[0];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif // TAP_DANCE_ENABLE
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  case KC_CCCV:                                    // One key copy/paste
 | 
				
			||||||
 | 
					    if(record->event.pressed){
 | 
				
			||||||
 | 
					      copy_paste_timer = timer_read();
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) {   // Hold, copy
 | 
				
			||||||
 | 
					        register_code(KC_LCTL);
 | 
				
			||||||
 | 
					        tap_code(KC_C);
 | 
				
			||||||
 | 
					        unregister_code(KC_LCTL);
 | 
				
			||||||
 | 
					      } else {                                // Tap, paste
 | 
				
			||||||
 | 
					        register_code(KC_LCTL);
 | 
				
			||||||
 | 
					        tap_code(KC_V);
 | 
				
			||||||
 | 
					        unregister_code(KC_LCTL);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					#ifdef UNICODE_ENABLE
 | 
				
			||||||
 | 
					  case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
 | 
				
			||||||
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
 | 
					      send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					  case UC_TABL: // ┬─┬ノ( º _ ºノ)
 | 
				
			||||||
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
 | 
					      send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					  case UC_SHRG: // ¯\_(ツ)_/¯
 | 
				
			||||||
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
 | 
					      send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					  case UC_DISA: // ಠ_ಠ
 | 
				
			||||||
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
 | 
					      send_unicode_hex_string("0CA0 005F 0CA0");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return process_record_keymap(keycode, record) &&
 | 
				
			||||||
 | 
					#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
 | 
				
			||||||
 | 
					    process_record_user_rgb(keycode, record) &&
 | 
				
			||||||
 | 
					#endif // RGBLIGHT_ENABLE
 | 
				
			||||||
 | 
					    process_record_secrets(keycode, record);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										101
									
								
								users/drashna/process_records.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								users/drashna/process_records.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,101 @@
 | 
				
			|||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include "drashna.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(KEYMAP_SAFE_RANGE)
 | 
				
			||||||
 | 
					  #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					  #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum userspace_custom_keycodes {
 | 
				
			||||||
 | 
					  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
 | 
				
			||||||
 | 
					  KC_WORKMAN,        // Sets default layer to WORKMAN
 | 
				
			||||||
 | 
					  KC_DIABLO_CLEAR,   // Clears all Diablo Timers
 | 
				
			||||||
 | 
					  KC_OVERWATCH,      // Toggles game macro input mode (so in OW, it defaults to game chat)
 | 
				
			||||||
 | 
					  KC_SALT,           // See drashna.c for details
 | 
				
			||||||
 | 
					  KC_MORESALT,
 | 
				
			||||||
 | 
					  KC_SALTHARD,
 | 
				
			||||||
 | 
					  KC_GOODGAME,
 | 
				
			||||||
 | 
					  KC_SYMM,
 | 
				
			||||||
 | 
					  KC_JUSTGAME,
 | 
				
			||||||
 | 
					  KC_GLHF,
 | 
				
			||||||
 | 
					  KC_TORB,
 | 
				
			||||||
 | 
					  KC_AIM,
 | 
				
			||||||
 | 
					  KC_C9,
 | 
				
			||||||
 | 
					  KC_GGEZ,
 | 
				
			||||||
 | 
					  KC_MAKE,           // Run keyboard's customized make command
 | 
				
			||||||
 | 
					  KC_RGB_T,          // Toggles RGB Layer Indication mode
 | 
				
			||||||
 | 
					  KC_SECRET_1,       // test1
 | 
				
			||||||
 | 
					  KC_SECRET_2,       // test2
 | 
				
			||||||
 | 
					  KC_SECRET_3,       // test3
 | 
				
			||||||
 | 
					  KC_SECRET_4,       // test4
 | 
				
			||||||
 | 
					  KC_SECRET_5,       // test5
 | 
				
			||||||
 | 
					  KC_CCCV,           // Hold to copy, tap to paste
 | 
				
			||||||
 | 
					  KC_NUKE,           // NUCLEAR LAUNCH DETECTED!!!
 | 
				
			||||||
 | 
					  UC_FLIP,           // (ಠ痊ಠ)┻━┻
 | 
				
			||||||
 | 
					  UC_TABL,           // ┬─┬ノ( º _ ºノ)
 | 
				
			||||||
 | 
					  UC_SHRG,           // ¯\_(ツ)_/¯
 | 
				
			||||||
 | 
					  UC_DISA,           // ಠ_ಠ
 | 
				
			||||||
 | 
					  NEW_SAFE_RANGE     //use "NEWPLACEHOLDER for keymap specific codes
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
 | 
				
			||||||
 | 
					bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LOWER MO(_LOWER)
 | 
				
			||||||
 | 
					#define RAISE MO(_RAISE)
 | 
				
			||||||
 | 
					#define ADJUST MO(_ADJUST)
 | 
				
			||||||
 | 
					#define TG_MODS TG(_MODS)
 | 
				
			||||||
 | 
					#define TG_GAME TG(_GAMEPAD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KC_SEC1 KC_SECRET_1
 | 
				
			||||||
 | 
					#define KC_SEC2 KC_SECRET_2
 | 
				
			||||||
 | 
					#define KC_SEC3 KC_SECRET_3
 | 
				
			||||||
 | 
					#define KC_SEC4 KC_SECRET_4
 | 
				
			||||||
 | 
					#define KC_SEC5 KC_SECRET_5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define QWERTY KC_QWERTY
 | 
				
			||||||
 | 
					#define DVORAK KC_DVORAK
 | 
				
			||||||
 | 
					#define COLEMAK KC_COLEMAK
 | 
				
			||||||
 | 
					#define WORKMAN KC_WORKMAN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KC_RESET RESET
 | 
				
			||||||
 | 
					#define KC_RST KC_RESET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef SWAP_HANDS_ENABLE
 | 
				
			||||||
 | 
					#define KC_C1R3 SH_TT
 | 
				
			||||||
 | 
					#else // SWAP_HANDS_ENABLE
 | 
				
			||||||
 | 
					#define KC_C1R3 KC_BSPC
 | 
				
			||||||
 | 
					#endif // SWAP_HANDS_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BK_LWER LT(_LOWER, KC_BSPC)
 | 
				
			||||||
 | 
					#define SP_LWER LT(_LOWER, KC_SPC)
 | 
				
			||||||
 | 
					#define DL_RAIS LT(_RAISE, KC_DEL)
 | 
				
			||||||
 | 
					#define ET_RAIS LT(_RAISE, KC_ENTER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* OSM keycodes, to keep things clean and easy to change */
 | 
				
			||||||
 | 
					#define KC_MLSF OSM(MOD_LSFT)
 | 
				
			||||||
 | 
					#define KC_MRSF OSM(MOD_RSFT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define OS_LGUI OSM(MOD_LGUI)
 | 
				
			||||||
 | 
					#define OS_RGUI OSM(MOD_RGUI)
 | 
				
			||||||
 | 
					#define OS_LSFT OSM(MOD_LSFT)
 | 
				
			||||||
 | 
					#define OS_RSFT OSM(MOD_RSFT)
 | 
				
			||||||
 | 
					#define OS_LCTL OSM(MOD_LCTL)
 | 
				
			||||||
 | 
					#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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_IRNY UC(0x2E2E)
 | 
				
			||||||
 | 
					#define UC_CLUE UC(0x203D)
 | 
				
			||||||
@ -1,4 +1,8 @@
 | 
				
			|||||||
 | 
					#pragma once
 | 
				
			||||||
#include "quantum.h"
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
 | 
					  #include "rgb_matrix.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
    bool enabled;
 | 
					    bool enabled;
 | 
				
			||||||
@ -13,3 +17,5 @@ void matrix_init_rgb(void);
 | 
				
			|||||||
void matrix_scan_rgb(void);
 | 
					void matrix_scan_rgb(void);
 | 
				
			||||||
uint32_t layer_state_set_rgb(uint32_t state);
 | 
					uint32_t layer_state_set_rgb(uint32_t state);
 | 
				
			||||||
uint32_t default_layer_state_set_rgb(uint32_t state);
 | 
					uint32_t default_layer_state_set_rgb(uint32_t state);
 | 
				
			||||||
 | 
					void rgblight_sethsv_default_helper(uint8_t index);
 | 
				
			||||||
 | 
					void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
SRC += drashna.c
 | 
					SRC += drashna.c \
 | 
				
			||||||
 | 
					       process_records.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
 | 
					ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
 | 
				
			||||||
  SRC += secrets.c
 | 
					  SRC += secrets.c
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,3 @@
 | 
				
			|||||||
#include "drashna.h"
 | 
					 | 
				
			||||||
#include "tap_dances.h"
 | 
					#include "tap_dances.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,6 @@
 | 
				
			|||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include "drashna.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//define diablo macro timer variables
 | 
					//define diablo macro timer variables
 | 
				
			||||||
extern uint16_t diablo_timer[4];
 | 
					extern uint16_t diablo_timer[4];
 | 
				
			||||||
extern uint8_t diablo_times[];
 | 
					extern uint8_t diablo_times[];
 | 
				
			||||||
@ -5,3 +8,12 @@ extern uint8_t diablo_key_time[4];
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void run_diablo_macro_check(void);
 | 
					void run_diablo_macro_check(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef TAP_DANCE_ENABLE
 | 
				
			||||||
 | 
					enum {
 | 
				
			||||||
 | 
					  TD_D3_1 = 0,
 | 
				
			||||||
 | 
					  TD_D3_2,
 | 
				
			||||||
 | 
					  TD_D3_3,
 | 
				
			||||||
 | 
					  TD_D3_4
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif // TAP_DANCE_ENABLE
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										170
									
								
								users/drashna/wrappers.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								users/drashna/wrappers.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,170 @@
 | 
				
			|||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include "drashna.h"
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Since our quirky block definitions are basically a list of comma separated
 | 
				
			||||||
 | 
					arguments, we need a wrapper in order for these definitions to be
 | 
				
			||||||
 | 
					expanded before being used as arguments to the LAYOUT_xxx macro.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#if (!defined(LAYOUT) && defined(KEYMAP))
 | 
				
			||||||
 | 
					#define LAYOUT KEYMAP
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LAYOUT_ergodox_wrapper(...)          LAYOUT_ergodox(__VA_ARGS__)
 | 
				
			||||||
 | 
					#define LAYOUT_ergodox_pretty_wrapper(...)   LAYOUT_ergodox_pretty(__VA_ARGS__)
 | 
				
			||||||
 | 
					#define KEYMAP_wrapper(...)                  LAYOUT(__VA_ARGS__)
 | 
				
			||||||
 | 
					#define LAYOUT_wrapper(...)                  LAYOUT(__VA_ARGS__)
 | 
				
			||||||
 | 
					#define LAYOUT_ortho_4x12_wrapper(...)       LAYOUT_ortho_4x12(__VA_ARGS__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Blocks for each of the four major keyboard layouts
 | 
				
			||||||
 | 
					Organized so we can quickly adapt and modify all of them
 | 
				
			||||||
 | 
					at once, rather than for each keyboard, one at a time.
 | 
				
			||||||
 | 
					And this allows for much cleaner blocks in the keymaps.
 | 
				
			||||||
 | 
					For instance Tap/Hold for Control on all of the layouts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: These are all the same length.  If you do a search/replace
 | 
				
			||||||
 | 
					  then you need to add/remove underscores to keep the
 | 
				
			||||||
 | 
					  lengths consistent.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________QWERTY_L1_________________        KC_Q,    KC_W,    KC_E,    KC_R,    KC_T
 | 
				
			||||||
 | 
					#define _________________QWERTY_L2_________________        KC_A,    KC_S,    KC_D,    KC_F,    KC_G
 | 
				
			||||||
 | 
					#define _________________QWERTY_L3_________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________QWERTY_R1_________________        KC_Y,    KC_U,    KC_I,    KC_O,    KC_P
 | 
				
			||||||
 | 
					#define _________________QWERTY_R2_________________        KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN
 | 
				
			||||||
 | 
					#define _________________QWERTY_R3_________________        KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________COLEMAK_L1________________       KC_Q,    KC_W,    KC_F,    KC_P,    KC_G
 | 
				
			||||||
 | 
					#define _________________COLEMAK_L2________________       KC_A,    KC_R,    KC_S,    KC_T,    KC_D
 | 
				
			||||||
 | 
					#define _________________COLEMAK_L3________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________COLEMAK_R1________________       KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN
 | 
				
			||||||
 | 
					#define _________________COLEMAK_R2________________       KC_H,    KC_N,    KC_E,    KC_I,    KC_O
 | 
				
			||||||
 | 
					#define _________________COLEMAK_R3________________       KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ______________COLEMAK_MOD_DH_L1____________       KC_Q,    KC_W,    KC_F,    KC_P,    KC_B
 | 
				
			||||||
 | 
					#define ______________COLEMAK_MOD_DH_L2____________       KC_A,    KC_R,    KC_S,    KC_T,    KC_G
 | 
				
			||||||
 | 
					#define ______________COLEMAK_MOD_DH_L3____________       KC_Z,    KC_X,    KC_C,    KC_D,    KC_V
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ______________COLEMAK_MOD_DH_R1____________       KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN
 | 
				
			||||||
 | 
					#define ______________COLEMAK_MOD_DH_R2____________       KC_M,    KC_N,    KC_E,    KC_I,    KC_O
 | 
				
			||||||
 | 
					#define ______________COLEMAK_MOD_DH_R3____________       KC_K,    KC_H,    KC_COMM, KC_DOT,  KC_SLASH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________DVORAK_L1_________________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y
 | 
				
			||||||
 | 
					#define _________________DVORAK_L2_________________        KC_A,    KC_O,    KC_E,   KC_U,     KC_I
 | 
				
			||||||
 | 
					#define _________________DVORAK_L3_________________        KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________DVORAK_R1_________________        KC_F,    KC_G,    KC_C,    KC_R,    KC_L
 | 
				
			||||||
 | 
					#define _________________DVORAK_R2_________________        KC_D,    KC_H,    KC_T,    KC_N,    KC_S
 | 
				
			||||||
 | 
					#define _________________DVORAK_R3_________________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ________________DVORAK_AU_L1_______________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y
 | 
				
			||||||
 | 
					#define ________________DVORAK_AU_L2_______________        KC_O,    KC_A,    KC_E,   KC_I,     KC_U
 | 
				
			||||||
 | 
					#define ________________DVORAK_AU_L3_______________        KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ________________DVORAK_AU_R1_______________        KC_F,    KC_G,    KC_C,    KC_R,    KC_L
 | 
				
			||||||
 | 
					#define ________________DVORAK_AU_R2_______________        KC_D,    KC_H,    KC_T,    KC_N,    KC_S
 | 
				
			||||||
 | 
					#define ________________DVORAK_AU_R3_______________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________WORKMAN_L1________________       KC_Q,    KC_D,    KC_R,   KC_W,     KC_B
 | 
				
			||||||
 | 
					#define _________________WORKMAN_L2________________       KC_A,    KC_S,    KC_H,   KC_T,     KC_G
 | 
				
			||||||
 | 
					#define _________________WORKMAN_L3________________       KC_Z,    KC_X,    KC_M,   KC_C,     KC_V
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________WORKMAN_R1________________       KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN
 | 
				
			||||||
 | 
					#define _________________WORKMAN_R2________________       KC_Y,    KC_N,    KC_E,    KC_O,    KC_I
 | 
				
			||||||
 | 
					#define _________________WORKMAN_R3________________       KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLASH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________NORMAN_L1_________________       KC_Q,    KC_W,    KC_D,    KC_F,    KC_K
 | 
				
			||||||
 | 
					#define _________________NORMAN_L2_________________       KC_A,    KC_S,    KC_E,    KC_T,    KC_G
 | 
				
			||||||
 | 
					#define _________________NORMAN_L3_________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________NORMAN_R1_________________       KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN
 | 
				
			||||||
 | 
					#define _________________NORMAN_R2_________________       KC_Y,    KC_N,    KC_I,    KC_O,    KC_U
 | 
				
			||||||
 | 
					#define _________________NORMAN_R3_________________       KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________MALTRON_L1________________       KC_Q,    KC_P,    KC_Y,    KC_C,    KC_B
 | 
				
			||||||
 | 
					#define _________________MALTRON_L2________________       KC_A,    KC_N,    KC_I,    KC_S,    KC_F
 | 
				
			||||||
 | 
					#define _________________MALTRON_L3________________       KC_SCLN, KC_SLSH, KC_J     KC_G,    KC_COMM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________MALTRON_R1________________       KC_V,    KC_M,    KC_U,    KC_Z,    KC_L
 | 
				
			||||||
 | 
					#define _________________MALTRON_R2________________       KC_D,    KC_T,    KC_D,    KC_O,    KC_R
 | 
				
			||||||
 | 
					#define _________________MALTRON_R3________________       KC_DOT,  KC_W,    KC_K,    KC_MINS,  KC_X
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________EUCALYN_L1________________       KC_SLSH, KC_COMM, KC_DOT,  KC_F,    KC_Q
 | 
				
			||||||
 | 
					#define _________________EUCALYN_L2________________       KC_A,    KC_O,    KC_E,    KC_I,    KC_U
 | 
				
			||||||
 | 
					#define _________________EUCALYN_L3________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_W
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________EUCALYN_R1________________       KC_M,    KC_R,    KC_D,    KC_Y,    KC_P
 | 
				
			||||||
 | 
					#define _________________EUCALYN_R2________________       KC_G,    KC_T,    KC_K,    KC_S,    KC_N
 | 
				
			||||||
 | 
					#define _________________EUCALYN_R3________________       KC_B,    KC_H,    KC_J,    KC_L,    KC_SCLN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QFMLWY_L1_____________       KC_Q,    KC_F,    KC_M,    KC_L,    KC_W
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QFMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QFMLWY_L3_____________       KC_Z,    KC_V,    KC_G,    KC_C,    KC_X
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QFMLWY_R1_____________       KC_Y,    KC_U,    KC_O,    KC_B,    KC_J
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QFMLWY_R2_____________       KC_I,    KC_A,    KC_E,    KC_H,    KC_SCLN
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QFMLWY_R3_____________       KC_P,    KC_K,    KC_COMM, KC_DOT,  KC_SLSH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWB_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWB_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWB_L3_____________       KC_Z,   KC_X,    KC_C,    KC_F,    KC_J
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWB_R1_____________       KC_B,    KC_Y,    KC_U,    KC_V,    KC_SCLN
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWB_R2_____________       KC_I,    KC_A,    KC_E,    KC_O,    KC_H
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWB_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWY_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWY_L3_____________       KC_Z,   KC_X,    KC_C,    KC_V,    KC_J
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWY_R1_____________       KC_Y,    KC_F,    KC_U,    KC_B,    KC_SCLN
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWY_R2_____________       KC_I,    KC_A,    KC_E,    KC_O,    KC_H
 | 
				
			||||||
 | 
					#define _____________CARPLAX_QGMLWY_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ___________________BLANK___________________        _______, _______, _______, _______, _______
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________LOWER_L1__________________        KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC
 | 
				
			||||||
 | 
					#define _________________LOWER_L2__________________        _________________FUNC_LEFT_________________
 | 
				
			||||||
 | 
					#define _________________LOWER_L3__________________        _________________FUNC_RIGHT________________
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________LOWER_R1__________________        KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
 | 
				
			||||||
 | 
					#define _________________LOWER_R2__________________        _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
 | 
				
			||||||
 | 
					#define _________________LOWER_R3__________________        _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________RAISE_L1__________________        ________________NUMBER_LEFT________________
 | 
				
			||||||
 | 
					#define _________________RAISE_L2__________________        ___________________BLANK___________________
 | 
				
			||||||
 | 
					#define _________________RAISE_L3__________________        ___________________BLANK___________________
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________RAISE_R1__________________        ________________NUMBER_RIGHT_______________
 | 
				
			||||||
 | 
					#define _________________RAISE_R2__________________        _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC
 | 
				
			||||||
 | 
					#define _________________RAISE_R3__________________        _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________ADJUST_L1_________________        RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
 | 
				
			||||||
 | 
					#define _________________ADJUST_L2_________________        MU_TOG , CK_TOGG, AU_ON,   AU_OFF,  AG_NORM
 | 
				
			||||||
 | 
					#define _________________ADJUST_L3_________________        RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _________________ADJUST_R1_________________        KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
 | 
				
			||||||
 | 
					#define _________________ADJUST_R2_________________        AG_SWAP, QWERTY,  COLEMAK, DVORAK,  WORKMAN
 | 
				
			||||||
 | 
					#define _________________ADJUST_R3_________________        MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user