You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

250 lines
8.4 KiB

  1. #include QMK_KEYBOARD_H
  2. // Custom user includes
  3. #include "issmirnov.h"
  4. #include "tap_tog.h"
  5. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  6. [_QWERTY] = LAYOUT_ergodox_wrapper(
  7. KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EXLM,
  8. LCTL(KC_SPACE), _________________QWERTY_L1_________________, KC_ASTR,
  9. KC_TAB, _________________QWERTY_L2_________________,
  10. OSM(MOD_LSFT), _________________QWERTY_L3_________________, KC_SLASH,
  11. KC_LCTL, LSFT(KC_LGUI), LSFT(KC_LALT), KC_LALT, KC_LGUI,
  12. XXXXXXX, XXXXXXX,
  13. XXXXXXX,
  14. KC_SPACE, KC_BSPACE, KC_DEL,
  15. KC_EQL , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESCAPE ,
  16. KC_PLUS , _________________QWERTY_R1_________________ , LGUI(KC_SPACE) ,
  17. _________________QWERTY_R2_________________ , MO(_NAVI) ,
  18. KC_MINS , _________________QWERTY_R3_________________ , KC_QUOTE ,
  19. KC_ESCAPE , KC_COLN , KC_PERC , XXXXXXX , LGUI(KC_L) ,
  20. KC_LEFT, KC_RGHT,
  21. KC_UP,
  22. KC_DOWN, KC_TAB, KC_ENTER
  23. ),
  24. // layer 1
  25. [_SYMB] = LAYOUT_ergodox_wrapper(
  26. KC_ESCAPE , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,
  27. XXXXXXX , _________________SYMB_L1___________________ ,KC_ASTR ,
  28. KC_TAB , _________________SYMB_L2___________________,
  29. KC_LSHIFT , _________________SYMB_L3___________________, KC_SLASH ,
  30. KC_LCTL , LSFT(KC_LGUI) , LSFT(KC_LALT) , KC_LALT , WKSP_LEFT ,
  31. XXXXXXX, XXXXXXX,
  32. XXXXXXX,
  33. WKSP_RIGHT, KC_BSPACE, KC_DEL,
  34. KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , XXXXXXX ,
  35. KC_PLUS , _________________SYMB_R1___________________ , MO(_NAVI) ,
  36. _________________SYMB_R2___________________ , KC_DQUO ,
  37. KC_MINS , _________________SYMB_R3___________________ , KC_QUOTE ,
  38. KC_ESCAPE , KC_COLN , KC_PERC , XXXXXXX , XXXXXXX ,
  39. KC_LEFT, KC_RGHT,
  40. KC_UP,
  41. KC_DOWN, KC_TAB, KC_ENTER
  42. ),
  43. // layer 2
  44. [_NUMP] = LAYOUT_ergodox_wrapper(
  45. XXXXXXX , ___________________XXXXX___________________, XXXXXXX ,
  46. XXXXXXX , _________________NUMP_L1___________________ , KC_ASTR ,
  47. KC_TAB , _________________NUMP_L2___________________ ,
  48. XXXXXXX , _________________NUMP_L3___________________ , KC_SLASH ,
  49. TO(0) , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  50. XXXXXXX , XXXXXXX ,
  51. XXXXXXX ,
  52. KC_SPACE , KC_BSPACE , KC_DEL ,
  53. KC_EQL , ___________________XXXXX___________________ , RESET ,
  54. KC_PLUS , _________________NUMP_R1___________________ , XXXXXXX ,
  55. _________________NUMP_R2___________________ , XXXXXXX ,
  56. KC_MINS , _________________NUMP_R3___________________ , XXXXXXX ,
  57. KC_0 , XXXXXXX , XXXXXXX , TO(3) , XXXXXXX ,
  58. KC_LEFT, KC_RGHT,
  59. KC_UP,
  60. KC_DOWN, KC_LALT, KC_LSFT
  61. ),
  62. // layer 3
  63. [_OVERWATCH] = LAYOUT_ergodox_wrapper(
  64. KC_ESCAPE, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , TO(0) ,
  65. ______________OVERWATCH_L1_________________ , XXXXXXX ,
  66. ______________OVERWATCH_L2_________________ ,
  67. ______________OVERWATCH_L3_________________ , XXXXXXX ,
  68. ______________OVERWATCH_L4_________________ ,
  69. XXXXXXX , XXXXXXX ,
  70. XXXXXXX ,
  71. KC_SPACE , XXXXXXX , XXXXXXX ,
  72. _______, _______, _______, _______, _______, _______, _______,
  73. _______, _______, _______, _______, _______, _______, _______,
  74. _______, _______, _______, _______, _______, _______,
  75. _______, _______, _______, _______, _______, _______, _______,
  76. _______, _______, _______, _______, _______,
  77. _______, _______,
  78. _______,
  79. _______, _______, _______
  80. ),
  81. // layer 4
  82. [_NAVI] = LAYOUT_ergodox_wrapper(
  83. KC_ESCAPE, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 ,
  84. XXXXXXX, _________________NAVI_L1___________________ , XXXXXXX ,
  85. XXXXXXX, _________________NAVI_L2___________________ ,
  86. XXXXXXX, _________________NAVI_L3___________________ , XXXXXXX ,
  87. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, WKSP_LEFT,
  88. XXXXXXX , XXXXXXX ,
  89. XXXXXXX ,
  90. WKSP_RIGHT , XXXXXXX , XXXXXXX ,
  91. _______, _______, _______, _______, _______, _______, _______,
  92. _______, _________________NAVI_R1___________________, _______,
  93. _________________NAVI_R2___________________, _______,
  94. _______, _________________NAVI_R3___________________, _______,
  95. MODSFT, _______, _______, _______, _______,
  96. _______, _______,
  97. _______,
  98. _______, _______, KC_LGUI
  99. ),
  100. };
  101. // called by QMK during key processing before the actual key event is handled. Useful for macros.
  102. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  103. uint8_t layer = biton32(layer_state);
  104. switch (keycode) {
  105. case TAP_TOG_LAYER:
  106. process_tap_tog(_SYMB,record);
  107. return false;
  108. break;
  109. case WKSP_LEFT:
  110. // Only if TAP_TOG_LAYER is being held right now do we want to do actions.
  111. if (record->event.pressed && (!tap_tog_layer_toggled_on || layer == _NAVI)) {
  112. tap_code16(LGUI(LSFT(KC_Z)));
  113. tap_tog_layer_other_key_pressed = true; // Add flag so layer resets
  114. }
  115. break;
  116. case WKSP_RIGHT:
  117. // Only if TAP_TOG_LAYER is being held right now do we want to do actions.
  118. if (record->event.pressed && (!tap_tog_layer_toggled_on || layer == _NAVI)) {
  119. tap_code16(LGUI(LSFT(KC_X)));
  120. tap_tog_layer_other_key_pressed = true; // Add flag so layer resets
  121. }
  122. break;
  123. default:
  124. tap_tog_count = 0; // reset counter.
  125. tap_tog_layer_other_key_pressed = true; // always set this to true, TAP_TOG_LAYER handlers will handle interpreting this
  126. break;
  127. }
  128. return true;
  129. }
  130. // Runs constantly in the background, in a loop every 100ms or so.
  131. // Best used for LED status output triggered when user isn't actively typing.
  132. void matrix_scan_user(void) {
  133. uint8_t layer = biton32(layer_state);
  134. if (layer == 0) {
  135. // Set up LED indicators for stuck modifier keys.
  136. // https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/report.h#L118
  137. switch (keyboard_report->mods) {
  138. case MOD_BIT(KC_LSFT): // LSHIFT
  139. ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
  140. ergodox_right_led_1_on ();
  141. ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
  142. ergodox_right_led_2_on ();
  143. ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
  144. ergodox_right_led_3_off ();
  145. break;
  146. case MOD_BIT(KC_LGUI): // LGUI
  147. ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
  148. ergodox_right_led_1_off ();
  149. ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
  150. ergodox_right_led_2_on ();
  151. ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
  152. ergodox_right_led_3_on ();
  153. break;
  154. case MOD_BIT(KC_LSFT) ^ MOD_BIT(KC_LGUI):
  155. ergodox_right_led_1_set (70);
  156. ergodox_right_led_1_on ();
  157. ergodox_right_led_2_set (70);
  158. ergodox_right_led_2_on ();
  159. ergodox_right_led_3_set (70);
  160. ergodox_right_led_3_on ();
  161. break;
  162. default: // reset leds
  163. ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
  164. ergodox_right_led_1_off ();
  165. ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
  166. ergodox_right_led_2_off ();
  167. ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
  168. ergodox_right_led_3_off ();
  169. }
  170. }
  171. }
  172. // only runs when when the layer is changed, good for updating LED's and clearing sticky state
  173. layer_state_t layer_state_set_user(layer_state_t state) {
  174. uint8_t layer = biton32(state);
  175. ergodox_board_led_off();
  176. ergodox_right_led_1_off();
  177. ergodox_right_led_2_off();
  178. ergodox_right_led_3_off();
  179. combo_enable(); // by default, enable combos.
  180. switch (layer) {
  181. case 0:
  182. break;
  183. case 1:
  184. clear_mods();
  185. ergodox_right_led_1_on();
  186. break;
  187. case 2:
  188. clear_mods();
  189. ergodox_right_led_2_on();
  190. break;
  191. case _OVERWATCH:
  192. clear_mods();
  193. combo_disable(); // We don't want combos in overwatch
  194. ergodox_right_led_3_on();
  195. break;
  196. case 4:
  197. ergodox_right_led_1_on();
  198. ergodox_right_led_2_on();
  199. break;
  200. case 5:
  201. ergodox_right_led_1_on();
  202. ergodox_right_led_3_on();
  203. break;
  204. case 6:
  205. ergodox_right_led_2_on();
  206. ergodox_right_led_3_on();
  207. break;
  208. case 7:
  209. ergodox_right_led_1_on();
  210. ergodox_right_led_2_on();
  211. ergodox_right_led_3_on();
  212. break;
  213. default:
  214. break;
  215. }
  216. return state;
  217. };