summaryrefslogtreecommitdiffstats
path: root/layouts/community/ergodox/issmirnov/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'layouts/community/ergodox/issmirnov/keymap.c')
-rw-r--r--layouts/community/ergodox/issmirnov/keymap.c250
1 files changed, 250 insertions, 0 deletions
diff --git a/layouts/community/ergodox/issmirnov/keymap.c b/layouts/community/ergodox/issmirnov/keymap.c
new file mode 100644
index 0000000000..ce853f3d32
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/keymap.c
@@ -0,0 +1,250 @@
+#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
+uint32_t layer_state_set_user(uint32_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;
+};