keymap.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. #include QMK_KEYBOARD_H
  2. #include "version.h"
  3. #include <sendstring_dvorak.h>
  4. //#include <sendstring_colemak.h>
  5. #include <print.h>
  6. /**********************
  7. ** LAYER DEFINITIONS **
  8. **********************/
  9. enum layers_keymap {
  10. // BASE LAYERS
  11. _QWERTY = 0,
  12. _DVORAK,
  13. _COLEMAK,
  14. _MAC,
  15. _QUAKE2,
  16. _QUAKE2_DVORAK,
  17. _QUAKE2_CONSOLE,
  18. // FUNCTION LAYERS
  19. _FUNCWIN,
  20. _FUNCMAC,
  21. _FUNCQ2,
  22. // OTHER LAYERS
  23. _NUMPAD,
  24. _MACROS,
  25. _SYSTEM
  26. };
  27. // LAYER SHORT CODES
  28. #define _QW _QWERTY
  29. #define _DV _DVORAK
  30. #define _CM _COLEMAK
  31. #define _MC _MAC
  32. #define _Q2 _QUAKE2
  33. #define _QD _QUAKE2_DVORAK
  34. #define _QC _QUAKE2_CONSOLE
  35. #define _FW _FUNCWIN
  36. #define _FM _FUNCMAC
  37. #define _FQ _FUNCQ2
  38. #define _NP _NUMPAD
  39. #define _MA _MACROS
  40. #define _SY _SYSTEM
  41. // KEYCODE DEFINITIONS
  42. #define NO_CHNG KC_TRNS // Note for me for keys I need to leave as Pass-through
  43. #define FW_CAPS LT(_FUNCWIN, KC_CAPS) // _FUNCWIN when held, Caps Lock when tapped
  44. #define FM_CAPS LT(_FUNCMAC, KC_CAPS) // _FUNCMAC when held, Caps Lock when tapped
  45. #define Q2_CAPS LT(_FUNCQ2, KC_CAPS) // _FUNCQ2 when held, Caps Lock when tapped
  46. #define WN_SALL LCTL(DV_A) // Windows/Linux Select All
  47. #define WN_UNDO LCTL(DV_Z) // Windows/Linux Undo
  48. #define WN_CUT LCTL(DV_X) // Windows/Linux Cut
  49. #define WN_COPY LCTL(DV_C) // Windows/Linux Copy
  50. #define WN_PSTE LCTL(DV_V) // Windows/Linux Paste
  51. #define MC_PSCR LGUI(LSFT(KC_3)) // MacOS Print Screen (Command + Shift + 3)
  52. #define MC_HOME LGUI(KC_LEFT) // MacOS Home (Command + Left Arrow)
  53. #define MC_END LGUI(KC_RGHT) // MacOS End (Command + Right Arrow)
  54. #define MC_SALL LGUI(KC_A) // MacOS Select All
  55. //#define MC_UNDO LGUI(KC_Z) // MacOS Undo // replaced by macro
  56. #define MC_CUT LGUI(KC_X) // MacOS Cut
  57. #define MC_COPY LGUI(KC_C) // MacOS Copy
  58. //#define MC_PSTE LGUI(KC_V) // MacOS Paste // replaced by macro
  59. // MACRO DEFINITIONS
  60. enum custom_keycodes {
  61. F_CAPS = SAFE_RANGE,
  62. T_L3DED,
  63. G_PUSH,
  64. G_FTCH,
  65. G_COMM,
  66. G_RST,
  67. G_C10R,
  68. G_BRCH,
  69. SIGNA,
  70. GO_Q2,
  71. Q2_ON,
  72. Q2_OFF,
  73. Q2_ESC,
  74. Q2_GRV,
  75. MC_UNDO,
  76. MC_PSTE,
  77. NUBS_Z,
  78. VRSN
  79. };
  80. /*******************
  81. ** MODIFIER MASKS **
  82. *******************/
  83. #define MOD_MASK_RALT (MOD_BIT(KC_RALT))
  84. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  85. switch(keycode) {
  86. // these are our macros!
  87. case F_CAPS:
  88. /*
  89. Objective: write a macro that checks the current layers that are
  90. enabled, and activates the appropriate function layer.
  91. */
  92. if ( biton32(layer_state) == _MAC ) {
  93. if (record->event.pressed) {
  94. layer_on(_FUNCMAC);
  95. } else {
  96. layer_off(_FUNCMAC);
  97. }
  98. } else {
  99. if (record->event.pressed) {
  100. layer_on(_FUNCWIN);
  101. } else {
  102. layer_off(_FUNCWIN);
  103. }
  104. };
  105. return false;
  106. case T_L3DED:
  107. if (record->event.pressed) {
  108. SEND_STRING("lavak3DED ");
  109. };
  110. return false;
  111. case G_PUSH:
  112. if (record->event.pressed) {
  113. SEND_STRING("git push origin ");
  114. };
  115. return false;
  116. case G_FTCH:
  117. if (record->event.pressed) {
  118. if ( get_mods() & MOD_MASK_SHIFT ) {
  119. clear_mods();
  120. SEND_STRING("git pull upstream ");
  121. } else {
  122. SEND_STRING("git fetch upstream ");
  123. }
  124. };
  125. return false;
  126. case G_COMM:
  127. if (record->event.pressed) {
  128. SEND_STRING("git commit -m \"\"" SS_TAP(X_LEFT));
  129. layer_off(_MACROS);
  130. };
  131. return false;
  132. case G_BRCH:
  133. if (record->event.pressed) {
  134. if ( get_mods() & MOD_MASK_SHIFT ) {
  135. clear_mods();
  136. SEND_STRING("master");
  137. } else {
  138. SEND_STRING("$(git branch-name)");
  139. }
  140. layer_off(_MACROS);
  141. };
  142. return false;
  143. case SIGNA:
  144. if (record->event.pressed) {
  145. SEND_STRING("\\- @noroadsleft" SS_TAP(X_ENTER));
  146. layer_off(_MACROS);
  147. };
  148. return false;
  149. case GO_Q2:
  150. if (record->event.pressed) {
  151. //default_layer_set(_QWERTY);
  152. layer_move(_QWERTY); // TO(_QWERTY);
  153. layer_on(_QUAKE2);
  154. //layer_off(_SYSTEM);
  155. };
  156. return false;
  157. case Q2_ON:
  158. if (record->event.pressed) {
  159. SEND_STRING(SS_TAP(X_ENTER));
  160. layer_on(_DVORAK);
  161. layer_on(_QUAKE2_DVORAK);
  162. };
  163. return false;
  164. case Q2_OFF:
  165. if (record->event.pressed) {
  166. SEND_STRING(SS_TAP(X_ENTER));
  167. layer_move(_QWERTY); // TO(_QWERTY);
  168. layer_on(_QUAKE2);
  169. };
  170. return false;
  171. case Q2_ESC:
  172. if (record->event.pressed) {
  173. SEND_STRING(SS_TAP(X_ESCAPE));
  174. layer_move(_QWERTY); // TO(_QWERTY);
  175. layer_on(_QUAKE2);
  176. };
  177. return false;
  178. case Q2_GRV:
  179. if (record->event.pressed) {
  180. SEND_STRING(SS_TAP(X_GRAVE));
  181. layer_on(_DVORAK);
  182. layer_on(_QUAKE2_DVORAK);
  183. layer_on(_QUAKE2_CONSOLE);
  184. };
  185. return false;
  186. case MC_UNDO:
  187. if (record->event.pressed) {
  188. if ( get_mods() & MOD_MASK_SHIFT ) {
  189. SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
  190. } else {
  191. SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) );
  192. }
  193. };
  194. return false;
  195. case MC_PSTE:
  196. if (record->event.pressed) {
  197. if ( get_mods() & MOD_MASK_SHIFT ) {
  198. SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_DOWN(X_LALT) SS_TAP(X_V) SS_UP(X_LALT) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
  199. } else {
  200. SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_V) SS_UP(X_LGUI) );
  201. }
  202. };
  203. return false;
  204. case NUBS_Z:
  205. if (record->event.pressed) {
  206. if ( get_mods() & MOD_MASK_RALT ) {
  207. SEND_STRING( SS_TAP(X_NONUS_BSLASH) );
  208. } else {
  209. SEND_STRING( SS_TAP(X_Z) );
  210. }
  211. };
  212. return false;
  213. case VRSN:
  214. if (record->event.pressed) {
  215. SEND_STRING( QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION );
  216. }
  217. return false;
  218. } // switch()
  219. return true;
  220. };
  221. // KEYMAPS
  222. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  223. /****************
  224. ** BASE LAYERS **
  225. ****************/
  226. /* QWERTY */
  227. [_QWERTY] = LAYOUT_60_ansi(
  228. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  229. KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
  230. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
  231. FW_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
  232. KC_LSFT, NUBS_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
  233. KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \
  234. ),
  235. /* Dvorak */
  236. [_DVORAK] = LAYOUT_60_ansi(
  237. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  238. KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, \
  239. KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \
  240. FW_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \
  241. KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
  242. KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \
  243. ),
  244. /* Colemak */
  245. [_COLEMAK] = LAYOUT_60_ansi(
  246. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  247. KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
  248. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
  249. FW_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, \
  250. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
  251. KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \
  252. ),
  253. /****************
  254. ** OS OVERLAYS **
  255. ****************/
  256. /* Mac */
  257. [_MAC] = LAYOUT_60_ansi(
  258. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  259. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  260. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  261. FM_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  262. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  263. _______, _______, _______, _______, _______, _______, MO(_FM), _______ \
  264. ),
  265. /*********************
  266. ** QUAKE 2 OVERLAYS **
  267. *********************/
  268. /* Quake 2 */
  269. [_QUAKE2] = LAYOUT_60_ansi(
  270. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  271. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  272. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  273. Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_ON, \
  274. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  275. _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \
  276. ),
  277. [_QUAKE2_DVORAK] = LAYOUT_60_ansi(
  278. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  279. Q2_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  280. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  281. Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_OFF, \
  282. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  283. _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \
  284. ),
  285. [_QUAKE2_CONSOLE] = LAYOUT_60_ansi(
  286. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  287. Q2_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  288. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  289. Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT, \
  290. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  291. _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \
  292. ),
  293. /********************
  294. ** FUNCTION LAYERS **
  295. ********************/
  296. /* Windows Fn layer */
  297. [_FUNCWIN] = LAYOUT_60_ansi(
  298. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  299. KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
  300. _______, KC_CALC, KC_APP, _______, _______, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \
  301. NO_CHNG, WN_SALL, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_PENT, \
  302. _______, WN_UNDO, WN_CUT, WN_COPY, WN_PSTE, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, TG(_SY), _______, \
  303. _______, _______, _______, TG(_NP), _______, TG(_MA), NO_CHNG, _______ \
  304. ),
  305. /* MacOS Fn layer */
  306. [_FUNCMAC] = LAYOUT_60_ansi(
  307. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  308. KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
  309. _______, _______, _______, _______, _______, _______, KC_INS, MC_HOME, KC_UP, MC_END, KC_PGUP, MC_PSCR, _______, _______, \
  310. NO_CHNG, MC_SALL, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, \
  311. _______, MC_UNDO, MC_CUT, MC_COPY, MC_PSTE, _______, _______, _______, _______, _______, TG(_SY), _______, \
  312. _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______ \
  313. ),
  314. /* Quake 2 Fn layer */
  315. [_FUNCQ2] = LAYOUT_60_ansi(
  316. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  317. Q2_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
  318. _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \
  319. NO_CHNG, _______, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_ENT, \
  320. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TG(_SY), _______, \
  321. _______, _______, _______, _______, _______, _______, NO_CHNG, _______ \
  322. ),
  323. /*****************
  324. ** OTHER LAYERS **
  325. *****************/
  326. /* Numpad layer */
  327. [_NUMPAD] = LAYOUT_60_ansi(
  328. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  329. _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, _______, _______, \
  330. _______, _______, _______, _______, KC_E, KC_F, _______, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS, KC_PEQL, _______, \
  331. _______, _______, _______, _______, KC_C, KC_D, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PMNS, KC_PENT, \
  332. _______, _______, _______, _______, KC_A, KC_B, _______, KC_P0, _______, KC_PDOT, _______, _______, \
  333. _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______ \
  334. ),
  335. /* Macro layer */
  336. [_MACROS] = LAYOUT_60_ansi(
  337. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  338. TG(_MA), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  339. _______, _______, _______, G_PUSH, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  340. _______, _______, _______, G_FTCH, G_COMM, _______, _______, _______, _______, T_L3DED, _______, _______, _______, \
  341. _______, _______, _______, _______, _______, G_BRCH, SIGNA, _______, _______, _______, _______, _______, \
  342. _______, _______, _______, _______, _______, _______, NO_CHNG, _______ \
  343. ),
  344. /* System layer */
  345. [_SYSTEM] = LAYOUT_60_ansi(
  346. // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  347. TG(_SY), TO(_QW), TO(_DV), TO(_CM), GO_Q2, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, DEBUG, XXXXXXX, VRSN, XXXXXXX, \
  348. XXXXXXX, XXXXXXX, TG(_MC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  349. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  350. XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_BRTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  351. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_CHNG, XXXXXXX \
  352. ),
  353. };