keymap.c 20 KB

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