251 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			251 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include QMK_KEYBOARD_H
 | 
						|
 | 
						|
// Custom user includes
 | 
						|
#include "issmirnov.h"
 | 
						|
#include "tap_tog.h"
 | 
						|
 | 
						|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
						|
[_QWERTY] = LAYOUT_ergodox_wrapper(
 | 
						|
KC_ESCAPE,      KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EXLM,
 | 
						|
LCTL(KC_SPACE), _________________QWERTY_L1_________________,   KC_ASTR,
 | 
						|
KC_TAB,         _________________QWERTY_L2_________________,
 | 
						|
OSM(MOD_LSFT),  _________________QWERTY_L3_________________,   KC_SLASH,
 | 
						|
KC_LCTL, LSFT(KC_LGUI), LSFT(KC_LALT),  KC_LALT,   KC_LGUI,
 | 
						|
                                        XXXXXXX,  XXXXXXX,
 | 
						|
                                                XXXXXXX,
 | 
						|
                        KC_SPACE,   KC_BSPACE,  KC_DEL,
 | 
						|
 | 
						|
KC_EQL    , KC_6    , KC_7    , KC_8    , KC_9          , KC_0    , KC_ESCAPE      ,
 | 
						|
KC_PLUS   , _________________QWERTY_R1_________________  , LGUI(KC_SPACE) ,
 | 
						|
            _________________QWERTY_R2_________________  , MO(_NAVI) ,
 | 
						|
KC_MINS   , _________________QWERTY_R3_________________  , KC_QUOTE       ,
 | 
						|
KC_ESCAPE , KC_COLN , KC_PERC , XXXXXXX , LGUI(KC_L)    ,
 | 
						|
 | 
						|
KC_LEFT,  KC_RGHT,
 | 
						|
KC_UP,
 | 
						|
KC_DOWN,  KC_TAB, KC_ENTER
 | 
						|
),
 | 
						|
 | 
						|
  // layer 1
 | 
						|
[_SYMB] = LAYOUT_ergodox_wrapper(
 | 
						|
KC_ESCAPE , KC_F1         , KC_F2         , KC_F3       , KC_F4            , KC_F5    , KC_F6    ,
 | 
						|
XXXXXXX   , _________________SYMB_L1___________________ ,KC_ASTR  ,
 | 
						|
KC_TAB    ,  _________________SYMB_L2___________________,
 | 
						|
KC_LSHIFT ,  _________________SYMB_L3___________________, KC_SLASH ,
 | 
						|
KC_LCTL   , LSFT(KC_LGUI) , LSFT(KC_LALT) , KC_LALT     , WKSP_LEFT  ,
 | 
						|
 | 
						|
                                              XXXXXXX,        XXXXXXX,
 | 
						|
                                                            XXXXXXX,
 | 
						|
                                    WKSP_RIGHT, KC_BSPACE,    KC_DEL,
 | 
						|
 | 
						|
KC_F7     , KC_F8    , KC_F9   , KC_F10    , KC_F11    , KC_F12  , XXXXXXX  ,
 | 
						|
KC_PLUS   , _________________SYMB_R1___________________ , MO(_NAVI)  ,
 | 
						|
           _________________SYMB_R2___________________  , KC_DQUO ,
 | 
						|
KC_MINS  , _________________SYMB_R3___________________ , KC_QUOTE ,
 | 
						|
KC_ESCAPE , KC_COLN  , KC_PERC , XXXXXXX   , XXXXXXX   ,
 | 
						|
 | 
						|
KC_LEFT,  KC_RGHT,
 | 
						|
KC_UP,
 | 
						|
KC_DOWN,  KC_TAB, KC_ENTER
 | 
						|
),
 | 
						|
 | 
						|
  // layer 2
 | 
						|
[_NUMP] = LAYOUT_ergodox_wrapper(
 | 
						|
XXXXXXX ,  ___________________XXXXX___________________, XXXXXXX  ,
 | 
						|
XXXXXXX , _________________NUMP_L1___________________ , KC_ASTR  ,
 | 
						|
KC_TAB  , _________________NUMP_L2___________________ ,
 | 
						|
XXXXXXX , _________________NUMP_L3___________________ , KC_SLASH ,
 | 
						|
TO(0)   , XXXXXXX,   XXXXXXX,   XXXXXXX,   XXXXXXX,
 | 
						|
 | 
						|
                                            XXXXXXX  ,  XXXXXXX  ,
 | 
						|
                                                        XXXXXXX  ,
 | 
						|
                                            KC_SPACE , KC_BSPACE , KC_DEL ,
 | 
						|
 | 
						|
KC_EQL  , ___________________XXXXX___________________ , RESET   ,
 | 
						|
KC_PLUS , _________________NUMP_R1___________________ , XXXXXXX ,
 | 
						|
          _________________NUMP_R2___________________ , XXXXXXX                                     ,
 | 
						|
KC_MINS , _________________NUMP_R3___________________ , XXXXXXX ,
 | 
						|
                KC_0    , XXXXXXX , XXXXXXX , TO(3)   , XXXXXXX ,
 | 
						|
 | 
						|
KC_LEFT,  KC_RGHT,
 | 
						|
KC_UP,
 | 
						|
KC_DOWN,  KC_LALT, KC_LSFT
 | 
						|
),
 | 
						|
 | 
						|
  // layer 3
 | 
						|
[_OVERWATCH] = LAYOUT_ergodox_wrapper(
 | 
						|
KC_ESCAPE, KC_1    , KC_2 , KC_3 , KC_4 , KC_5 , TO(0) ,
 | 
						|
______________OVERWATCH_L1_________________ , XXXXXXX ,
 | 
						|
______________OVERWATCH_L2_________________ ,
 | 
						|
______________OVERWATCH_L3_________________ , XXXXXXX ,
 | 
						|
______________OVERWATCH_L4_________________ ,
 | 
						|
 | 
						|
XXXXXXX  , XXXXXXX ,
 | 
						|
XXXXXXX  ,
 | 
						|
KC_SPACE , XXXXXXX , XXXXXXX ,
 | 
						|
 | 
						|
 | 
						|
_______, _______, _______, _______, _______, _______, _______,
 | 
						|
_______, _______, _______, _______, _______, _______, _______,
 | 
						|
         _______, _______, _______, _______, _______, _______,
 | 
						|
_______, _______, _______, _______, _______, _______, _______,
 | 
						|
_______, _______, _______, _______, _______,
 | 
						|
 | 
						|
_______, _______,
 | 
						|
_______,
 | 
						|
_______, _______, _______
 | 
						|
 | 
						|
),
 | 
						|
// layer 4
 | 
						|
[_NAVI] = LAYOUT_ergodox_wrapper(
 | 
						|
KC_ESCAPE, KC_1    , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 ,
 | 
						|
XXXXXXX, _________________NAVI_L1___________________ , XXXXXXX ,
 | 
						|
XXXXXXX, _________________NAVI_L2___________________ ,
 | 
						|
XXXXXXX, _________________NAVI_L3___________________ , XXXXXXX ,
 | 
						|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, WKSP_LEFT,
 | 
						|
 | 
						|
XXXXXXX  , XXXXXXX ,
 | 
						|
XXXXXXX  ,
 | 
						|
WKSP_RIGHT , XXXXXXX , XXXXXXX ,
 | 
						|
 | 
						|
 | 
						|
_______, _______, _______, _______, _______, _______, _______,
 | 
						|
_______, _________________NAVI_R1___________________, _______,
 | 
						|
         _________________NAVI_R2___________________, _______,
 | 
						|
_______, _________________NAVI_R3___________________, _______,
 | 
						|
MODSFT, _______, _______, _______, _______,
 | 
						|
 | 
						|
_______, _______,
 | 
						|
_______,
 | 
						|
_______, _______, KC_LGUI
 | 
						|
 | 
						|
),
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
// called by QMK during key processing before the actual key event is handled. Useful for macros.
 | 
						|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
						|
  uint8_t layer = biton32(layer_state);
 | 
						|
  switch (keycode) {
 | 
						|
    case TAP_TOG_LAYER:
 | 
						|
      process_tap_tog(_SYMB,record);
 | 
						|
      return false;
 | 
						|
      break;
 | 
						|
 | 
						|
    case WKSP_LEFT:
 | 
						|
      // Only if TAP_TOG_LAYER is being held right now do we want to do actions.
 | 
						|
      if (record->event.pressed && (!tap_tog_layer_toggled_on || layer == _NAVI)) {
 | 
						|
        tap_code16(LGUI(LSFT(KC_Z)));
 | 
						|
        tap_tog_layer_other_key_pressed = true; // Add flag so layer resets
 | 
						|
      }
 | 
						|
      break;
 | 
						|
    case WKSP_RIGHT:
 | 
						|
      // Only if TAP_TOG_LAYER is being held right now do we want to do actions.
 | 
						|
      if (record->event.pressed && (!tap_tog_layer_toggled_on || layer == _NAVI)) {
 | 
						|
        tap_code16(LGUI(LSFT(KC_X)));
 | 
						|
        tap_tog_layer_other_key_pressed = true; // Add flag so layer resets
 | 
						|
      }
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      tap_tog_count = 0; // reset counter.
 | 
						|
      tap_tog_layer_other_key_pressed = true; // always set this to true, TAP_TOG_LAYER handlers will handle interpreting this
 | 
						|
      break;
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
// Runs constantly in the background, in a loop every 100ms or so.
 | 
						|
// Best used for LED status output triggered when user isn't actively typing.
 | 
						|
void matrix_scan_user(void) {
 | 
						|
  uint8_t layer = biton32(layer_state);
 | 
						|
  if (layer == 0) {
 | 
						|
    // Set up LED indicators for stuck modifier keys.
 | 
						|
    // https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/report.h#L118
 | 
						|
    switch (keyboard_report->mods) {
 | 
						|
      case MOD_BIT(KC_LSFT): // LSHIFT
 | 
						|
        ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
 | 
						|
        ergodox_right_led_1_on ();
 | 
						|
        ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
 | 
						|
        ergodox_right_led_2_on ();
 | 
						|
        ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
 | 
						|
        ergodox_right_led_3_off ();
 | 
						|
        break;
 | 
						|
 | 
						|
      case MOD_BIT(KC_LGUI): // LGUI
 | 
						|
        ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
 | 
						|
        ergodox_right_led_1_off ();
 | 
						|
        ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
 | 
						|
        ergodox_right_led_2_on ();
 | 
						|
        ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
 | 
						|
        ergodox_right_led_3_on ();
 | 
						|
        break;
 | 
						|
 | 
						|
      case MOD_BIT(KC_LSFT) ^ MOD_BIT(KC_LGUI):
 | 
						|
        ergodox_right_led_1_set (70);
 | 
						|
        ergodox_right_led_1_on ();
 | 
						|
        ergodox_right_led_2_set (70);
 | 
						|
        ergodox_right_led_2_on ();
 | 
						|
        ergodox_right_led_3_set (70);
 | 
						|
        ergodox_right_led_3_on ();
 | 
						|
        break;
 | 
						|
 | 
						|
      default: // reset leds
 | 
						|
        ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
 | 
						|
        ergodox_right_led_1_off ();
 | 
						|
        ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
 | 
						|
        ergodox_right_led_2_off ();
 | 
						|
        ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
 | 
						|
        ergodox_right_led_3_off ();
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
// only runs when when the layer is changed, good for updating LED's and clearing sticky state
 | 
						|
layer_state_t layer_state_set_user(layer_state_t state) {
 | 
						|
  uint8_t layer = biton32(state);
 | 
						|
 | 
						|
  ergodox_board_led_off();
 | 
						|
  ergodox_right_led_1_off();
 | 
						|
  ergodox_right_led_2_off();
 | 
						|
  ergodox_right_led_3_off();
 | 
						|
 | 
						|
  combo_enable(); // by default, enable combos.
 | 
						|
  switch (layer) {
 | 
						|
    case 0:
 | 
						|
      break;
 | 
						|
    case 1:
 | 
						|
      clear_mods();
 | 
						|
      ergodox_right_led_1_on();
 | 
						|
      break;
 | 
						|
    case 2:
 | 
						|
      clear_mods();
 | 
						|
      ergodox_right_led_2_on();
 | 
						|
      break;
 | 
						|
    case _OVERWATCH:
 | 
						|
      clear_mods();
 | 
						|
      combo_disable(); // We don't want combos in overwatch
 | 
						|
      ergodox_right_led_3_on();
 | 
						|
      break;
 | 
						|
    case 4:
 | 
						|
      ergodox_right_led_1_on();
 | 
						|
      ergodox_right_led_2_on();
 | 
						|
      break;
 | 
						|
    case 5:
 | 
						|
      ergodox_right_led_1_on();
 | 
						|
      ergodox_right_led_3_on();
 | 
						|
      break;
 | 
						|
    case 6:
 | 
						|
      ergodox_right_led_2_on();
 | 
						|
      ergodox_right_led_3_on();
 | 
						|
      break;
 | 
						|
    case 7:
 | 
						|
      ergodox_right_led_1_on();
 | 
						|
      ergodox_right_led_2_on();
 | 
						|
      ergodox_right_led_3_on();
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      break;
 | 
						|
  }
 | 
						|
  return state;
 | 
						|
};
 |