keymap.c 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. /* Copyright 2020 Rustam Zagirov
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. #include "version.h"
  18. #define KC_MAC_UNDO LGUI(KC_Z)
  19. #define KC_MAC_CUT LGUI(KC_X)
  20. #define KC_MAC_COPY LGUI(KC_C)
  21. #define KC_MAC_PASTE LGUI(KC_V)
  22. #define KC_PC_UNDO LCTL(KC_Z)
  23. #define KC_PC_CUT LCTL(KC_X)
  24. #define KC_PC_COPY LCTL(KC_C)
  25. #define KC_PC_PASTE LCTL(KC_V)
  26. #define ES_LABK_MAC KC_GRAVE
  27. #define ES_RABK_MAC LSFT(KC_GRAVE)
  28. #define ES_BSLS_MAC ALGR(KC_6)
  29. #define NO_PIPE_ALT KC_GRAVE
  30. #define NO_BSLS_ALT KC_EQUAL
  31. #define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc)
  32. #define E_NUMBERS LT(_1_NUMBERS, KC_E)
  33. #define R_MOUSE LT(_2_MOUSE, KC_R)
  34. #define ARROWS MO(_3_ARROW)
  35. enum custom_keycodes {
  36. RGB_SLD = EZ_SAFE_RANGE,
  37. ALT_TAB,
  38. };
  39. bool is_alt_tab_active = false; // ADD this near the begining of keymap.c
  40. uint16_t alt_tab_timer = 0; // we will be using them soon.
  41. enum layers {
  42. _0_BASE,
  43. _1_NUMBERS,
  44. _2_MOUSE,
  45. _3_ARROW,
  46. };
  47. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  48. [_0_BASE] = LAYOUT_ergodox(
  49. KC_NUBS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_AUDIO_MUTE,
  50. QK_LEAD, KC_Q, KC_W, E_NUMBERS, R_MOUSE, KC_T, XXXXXXX,
  51. LCTL(KC_B), LSFT_T(KC_A), LCTL_T(KC_S), LALT_T(KC_D), LGUI_T(KC_F), KC_G,
  52. KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX,
  53. ALT_TAB, XXXXXXX, XXXXXXX, MO(_1_NUMBERS), ARROWS,
  54. KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP,
  55. XXXXXXX,
  56. KC_ENTER, KC_TAB, KC_ESCAPE,
  57. KC_CAPS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINUS,
  58. XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
  59. KC_H, RGUI_T(KC_J), RALT_T(KC_K), RCTL_T(KC_L), RSFT_T(KC_SCLN), KC_QUOTE,
  60. KC_RBRC, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_EQUAL,
  61. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  62. KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK,
  63. XXXXXXX,
  64. KC_ESCAPE, KC_BSPC, KC_SPACE
  65. ),
  66. [_1_NUMBERS] = LAYOUT_ergodox(
  67. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______,
  68. _______, _______, _______, _______, _______, _______, _______,
  69. _______, _______, _______, _______, _______, _______,
  70. _______, _______, _______, _______, _______, _______, _______,
  71. QK_BOOT, _______, _______, _______, _______,
  72. _______, _______,
  73. _______,
  74. _______, _______, _______,
  75. _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  76. _______, _______, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
  77. _______, KC_4, KC_5, KC_6, KC_PLUS, _______,
  78. _______, _______, KC_1, KC_2, KC_3, KC_BSLS, _______,
  79. KC_0, KC_KP_DOT, _______, KC_EQUAL, _______,
  80. _______, _______,
  81. _______,
  82. _______, _______, _______
  83. ),
  84. [_2_MOUSE] = LAYOUT_ergodox(
  85. _______, _______, _______, _______, _______, _______, _______,
  86. _______, _______, _______, _______, _______, _______, _______,
  87. _______, _______, _______, _______, _______, _______,
  88. _______, _______, _______, _______, _______, _______, _______,
  89. _______, _______, _______, _______, _______,
  90. RGB_HUI, RGB_HUD,
  91. _______,
  92. _______, _______, _______,
  93. _______, _______, _______, _______, _______, _______, _______,
  94. RGB_MOD, RGB_TOG, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, _______, _______,
  95. RGB_SLD, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______,
  96. TOGGLE_LAYER_COLOR, _______, KC_MS_WH_UP, _______, KC_MS_WH_DOWN, _______, _______,
  97. _______, _______, _______, _______, _______,
  98. RGB_VAD, RGB_VAI,
  99. _______,
  100. _______, _______, _______
  101. ),
  102. [_3_ARROW] = LAYOUT_ergodox(
  103. _______, _______, _______, _______, _______, _______, _______,
  104. _______, _______, _______, _______, _______, _______, _______,
  105. _______, _______, _______, _______, _______, _______,
  106. _______, _______, _______, _______, _______, _______, _______,
  107. _______, _______, _______, _______, _______,
  108. _______, _______,
  109. _______,
  110. _______, _______, _______,
  111. _______, _______, _______, _______, _______, _______, _______,
  112. _______, _______, _______, _______, _______, _______, _______,
  113. KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
  114. _______, _______, _______, _______, _______, _______, _______,
  115. _______, _______, _______, _______, _______,
  116. _______, _______,
  117. _______,
  118. _______, _______, _______
  119. ),
  120. };
  121. /* bool suspended = false; */
  122. void keyboard_post_init_user(void) {
  123. rgblight_disable();
  124. }
  125. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  126. switch (keycode) {
  127. case RGB_SLD:
  128. if (record->event.pressed) {
  129. rgblight_mode(1);
  130. }
  131. return false;
  132. case ALT_TAB:
  133. if (record->event.pressed) {
  134. if (!is_alt_tab_active) {
  135. is_alt_tab_active = true;
  136. register_code(KC_LGUI);
  137. }
  138. alt_tab_timer = timer_read();
  139. register_code(KC_TAB);
  140. } else {
  141. unregister_code(KC_TAB);
  142. }
  143. break;
  144. }
  145. return true;
  146. }
  147. layer_state_t layer_state_set_user(layer_state_t state) {
  148. ergodox_led_all_off();
  149. /* rgblight_disable(); */
  150. switch (get_highest_layer(state)) {
  151. case _1_NUMBERS:
  152. ergodox_right_led_1_on();
  153. /* rgblight_enable();
  154. rgblight_mode(1);
  155. rgblight_sethsv(HSV_BLUE);*/
  156. break;
  157. case _2_MOUSE:
  158. ergodox_right_led_2_on();
  159. break;
  160. case _3_ARROW:
  161. ergodox_right_led_3_on();
  162. break;
  163. /* case 7: */
  164. /* ergodox_right_led_1_on(); */
  165. /* ergodox_right_led_2_on(); */
  166. /* ergodox_right_led_3_on(); */
  167. /* break; */
  168. default:
  169. break;
  170. }
  171. return state;
  172. };
  173. uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
  174. switch (keycode) {
  175. /* case SFT_T(KC_SPC): */
  176. /* return TAPPING_TERM + 1250; */
  177. case E_NUMBERS:
  178. return 200;
  179. case LT(_2_MOUSE, KC_R):
  180. return 200;
  181. /* case LGUI_T(KC_F): */
  182. /* return 50; */
  183. default:
  184. return TAPPING_TERM;
  185. }
  186. }
  187. bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
  188. switch (keycode) {
  189. case E_NUMBERS:
  190. case R_MOUSE:
  191. case LSFT_T(KC_A):
  192. case LCTL_T(KC_S):
  193. case LALT_T(KC_D):
  194. case LGUI_T(KC_F):
  195. case RGUI_T(KC_J):
  196. case RALT_T(KC_K):
  197. case RCTL_T(KC_L):
  198. case RSFT_T(KC_SEMICOLON):
  199. case ARROWS:
  200. return true;
  201. default:
  202. return false;
  203. }
  204. }
  205. bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
  206. switch (keycode) {
  207. case LT(_1_NUMBERS, KC_E):
  208. case R_MOUSE:
  209. case LSFT_T(KC_A):
  210. case LCTL_T(KC_S):
  211. case LALT_T(KC_D):
  212. case LGUI_T(KC_F):
  213. case RGUI_T(KC_J):
  214. case RALT_T(KC_K):
  215. case RCTL_T(KC_L):
  216. case RSFT_T(KC_SEMICOLON):
  217. case ARROWS:
  218. return false;
  219. default:
  220. return true;
  221. }
  222. }
  223. LEADER_EXTERNS();
  224. void matrix_scan_user(void) {
  225. if (is_alt_tab_active) {
  226. if (timer_elapsed(alt_tab_timer) > 1000) {
  227. unregister_code(KC_LGUI);
  228. is_alt_tab_active = false;
  229. }
  230. }
  231. LEADER_DICTIONARY() {
  232. leading = false;
  233. leader_end();
  234. SEQ_ONE_KEY(KC_F) {
  235. SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
  236. }
  237. SEQ_ONE_KEY(KC_S) {
  238. SEND_STRING ("sudo -i\n");
  239. }
  240. SEQ_ONE_KEY(KC_H) {
  241. SEND_STRING ("--help\n");
  242. }
  243. SEQ_TWO_KEYS(KC_D, KC_D) {
  244. SEND_STRING(SS_LGUI("ac"));
  245. /* SEND_STRING(SS_LGUI("a") SS_LGUI("c")); */
  246. }
  247. SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
  248. SEND_STRING("https://start.duckduckgo.com\n");
  249. }
  250. SEQ_TWO_KEYS(KC_A, KC_S) {
  251. register_code(KC_LGUI);
  252. register_code(KC_S);
  253. unregister_code(KC_S);
  254. unregister_code(KC_LGUI);
  255. }
  256. }
  257. }