# 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 )  { 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      # if !defined(KEYBOARD_viterbi) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        uint8_t  temp_mod  =  get_mods ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        uint8_t  temp_osm  =  get_oneshot_mods ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        clear_mods ( ) ;  clear_oneshot_mods ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      send_string_with_delay_P ( PSTR ( " make  "  QMK_KEYBOARD  " : "  QMK_KEYMAP ) ,  MACRO_TIMER ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # if defined(KEYBOARD_viterbi) 
 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								        send_string_with_delay_P ( PSTR ( " :dfu "  SS_TAP ( X_ENTER ) ) ,  MACRO_TIMER ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( temp_mod  &  MODS_SHIFT_MASK  | |  temp_osm  &  MODS_SHIFT_MASK )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          # if defined(__arm__) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            send_string_with_delay_P ( PSTR ( " :dfu-util " ) ,  MACRO_TIMER ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          # elif defined(BOOTLOADER_DFU) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            send_string_with_delay_P ( PSTR ( " :dfu " ) ,  MACRO_TIMER ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          # elif defined(BOOTLOADER_HALFKAY) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            send_string_with_delay_P ( PSTR ( " :teensy " ) ,  MACRO_TIMER ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          # elif defined(BOOTLOADER_CATERINA) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            send_string_with_delay_P ( PSTR ( " :avrdude " ) ,  MACRO_TIMER ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          # endif  // bootloader options
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( temp_mod  &  MODS_CTRL_MASK  | |  temp_osm  &  MODS_CTRL_MASK )  {  send_string_with_delay_P ( PSTR ( "  -j8 --output-sync " ) ,  MACRO_TIMER ) ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        send_string_with_delay_P ( PSTR ( SS_TAP ( X_ENTER ) ) ,  MACRO_TIMER ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        set_mods ( temp_mod ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}