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 smallerdaktil_manuform
parent
106de349fb
commit
6d0dc910d9
|
@ -31,11 +31,11 @@
|
|||
#define EE_HANDS
|
||||
#endif
|
||||
|
||||
#if defined(KEYBOARD_planck_rev5)
|
||||
#if !defined(KEYBOARD_planck_light)
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
#define NO_MUSIC_MODE
|
||||
#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
|
||||
TAP_DANCE_ENABLE = no
|
||||
AUDIO_ENABLE = yes
|
||||
ifeq (,$(findstring planck/rev6,$(KEYBOARD)))
|
||||
ifeq (,$(findstring planck/rev6,$(KEYBOARD))) # Make sure it's NOT the Planck Rev6
|
||||
RGBLIGHT_ENABLE = yes
|
||||
INDICATOR_LIGHTS = yes
|
||||
RGBLIGHT_TWINKLE = yes
|
||||
endif
|
||||
ifneq (,$(findstring planck/light,$(KEYBOARD)))
|
||||
ifneq (,$(findstring planck/light,$(KEYBOARD))) # Make sure it IS the Planck Light
|
||||
RGB_MATRIX_ENABLE = yes
|
||||
RGBLIGHT_ENABLE = no
|
||||
endif
|
||||
|
@ -23,4 +23,3 @@ endif
|
|||
|
||||
|
||||
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
|
||||
- avr-gcc --version
|
||||
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:
|
||||
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
|
||||
paths:
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#ifdef AUDIO_ENABLE
|
||||
#define AUDIO_CLICKY
|
||||
#define STARTUP_SONG SONG(E1M1_DOOM)
|
||||
#define STARTUP_SONG SONG(RICK_ROLL)
|
||||
#define GOODBYE_SONG SONG(SONIC_RING)
|
||||
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
|
||||
SONG(COLEMAK_SOUND), \
|
||||
|
@ -44,7 +44,7 @@
|
|||
// and when this option isn't enabled, z rapidly followed by x
|
||||
// actually sends Ctrl-x. That's bad.)
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
#define PERMISSIVE_HOLD
|
||||
#undef PERMISSIVE_HOLD
|
||||
//#define TAPPING_FORCE_HOLD
|
||||
//#define RETRO_TAPPING
|
||||
|
||||
|
|
|
@ -16,8 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/
|
||||
|
||||
#include "drashna.h"
|
||||
#include "tap_dances.h"
|
||||
#include "rgb_stuff.h"
|
||||
|
||||
userspace_config_t userspace_config;
|
||||
#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
|
||||
|
@ -27,9 +25,6 @@ userspace_config_t userspace_config;
|
|||
#define DRASHNA_UNICODE_MODE 2
|
||||
#endif
|
||||
|
||||
uint16_t copy_paste_timer;
|
||||
// Helper Functions
|
||||
|
||||
|
||||
// This block is for all of the gaming macros, as they were all doing
|
||||
// the same thing, but with differring text sent.
|
||||
|
@ -109,55 +104,9 @@ void bootmagic_lite(void) {
|
|||
__attribute__ ((weak))
|
||||
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 the keymap's init function
|
||||
void matrix_init_user(void) {
|
||||
#if !defined(BOOTMAGIC_LITE) && !defined(BOOTMAGIC_ENABLE)
|
||||
bootmagic_lite();
|
||||
#endif
|
||||
|
||||
userspace_config.raw = eeconfig_read_user();
|
||||
|
||||
#ifdef BOOTLOADER_CATERINA
|
||||
|
@ -178,40 +127,42 @@ void matrix_init_user(void) {
|
|||
#endif //RGBLIGHT_ENABLE
|
||||
}
|
||||
|
||||
void startup_user (void) {
|
||||
// #ifdef RGBLIGHT_ENABLE
|
||||
// matrix_init_rgb();
|
||||
// #endif //RGBLIGHT_ENABLE
|
||||
startup_keymap();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void shutdown_keymap(void) {}
|
||||
|
||||
void shutdown_user (void) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable_noeeprom();
|
||||
rgblight_mode_noeeprom(1);
|
||||
rgblight_setrgb_red();
|
||||
#endif // RGBLIGHT_ENABLE
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
rgb_led led;
|
||||
for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
|
||||
led = g_rgb_leds[i];
|
||||
if (led.matrix_co.raw < 0xFF) {
|
||||
rgb_matrix_set_color( i, 0xFF, 0x00, 0x00 );
|
||||
}
|
||||
}
|
||||
#endif //RGB_MATRIX_ENABLE
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable_noeeprom();
|
||||
rgblight_mode_noeeprom(1);
|
||||
rgblight_setrgb_red();
|
||||
#endif // RGBLIGHT_ENABLE
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
uint16_t timer_start = timer_read();
|
||||
rgb_matrix_set_color_all( 0xFF, 0x00, 0x00 );
|
||||
while(timer_elapsed(timer_start) < 250) { wait_ms(1); }
|
||||
#endif //RGB_MATRIX_ENABLE
|
||||
shutdown_keymap();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void suspend_power_down_keymap(void) {}
|
||||
|
||||
void suspend_power_down_user(void) {
|
||||
suspend_power_down_keymap();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void suspend_wakeup_init_keymap(void) {}
|
||||
|
||||
void suspend_wakeup_init_user(void) {
|
||||
suspend_wakeup_init_keymap();
|
||||
}
|
||||
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_keymap(void) {}
|
||||
|
||||
// No global matrix scan code, so just run keymap's matrix
|
||||
// scan function
|
||||
void matrix_scan_user(void) {
|
||||
|
@ -233,172 +184,11 @@ void matrix_scan_user(void) {
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 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);
|
||||
__attribute__ ((weak))
|
||||
uint32_t layer_state_set_keymap (uint32_t state) {
|
||||
return state;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Runs state check and changes underglow color and animation
|
||||
// on layer change, no matter where the change was initiated
|
||||
// Then runs keymap's layer change check
|
||||
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) {
|
||||
state = default_layer_state_set_keymap(state);
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
|
@ -418,6 +214,8 @@ uint32_t default_layer_state_set_user(uint32_t state) {
|
|||
return state;
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void led_set_keymap(uint8_t usb_led) {}
|
||||
|
||||
// Any custom LED code goes here.
|
||||
// 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);
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void eeconfig_init_keymap(void) {}
|
||||
|
||||
void eeconfig_init_user(void) {
|
||||
userspace_config.raw = 0;
|
||||
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 "version.h"
|
||||
#include "eeprom.h"
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
#include "rgb_matrix.h"
|
||||
#include "wrappers.h"
|
||||
#include "process_records.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
|
||||
|
||||
|
||||
|
@ -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))
|
||||
|
||||
|
||||
/*
|
||||
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 (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 {
|
||||
uint32_t raw;
|
||||
|
@ -75,110 +81,6 @@ typedef union {
|
|||
|
||||
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
|
||||
|
@ -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_4 KC_4
|
||||
#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
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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"
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
#include "rgb_matrix.h"
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
bool enabled;
|
||||
|
@ -13,3 +17,5 @@ void matrix_init_rgb(void);
|
|||
void matrix_scan_rgb(void);
|
||||
uint32_t layer_state_set_rgb(uint32_t state);
|
||||
uint32_t default_layer_state_set_rgb(uint32_t state);
|
||||
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)","")
|
||||
SRC += secrets.c
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#include "drashna.h"
|
||||
#include "tap_dances.h"
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
#pragma once
|
||||
#include "drashna.h"
|
||||
|
||||
//define diablo macro timer variables
|
||||
extern uint16_t diablo_timer[4];
|
||||
extern uint8_t diablo_times[];
|
||||
|
@ -5,3 +8,12 @@ extern uint8_t diablo_key_time[4];
|
|||
|
||||
|
||||
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
|
||||
|
|
|
@ -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…
Reference in New Issue