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.

380 lines
14 KiB

  1. // this is the style you want to emulate.
  2. // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
  3. #include QMK_KEYBOARD_H
  4. #include "version.h"
  5. #include "gordon.h"
  6. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  7. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  8. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  9. // entirely and just use numbers.
  10. #define CALTDEL LCTL(LALT(KC_DEL))
  11. #define TSKMGR LCTL(LSFT(KC_ESC))
  12. #define KC_SNAPLEFT LGUI(KC_LEFT)
  13. #define KC_SNAPRIGHT LGUI(KC_RIGHT)
  14. #define KC_SNAPUP LGUI(KC_UP)
  15. #define KC_SNAPDOWN LGUI(KC_DOWN)
  16. #define KC_PREVTAB LCTL(LSFT(KC_TAB))
  17. #define KC_NEXTTAB LCTL(KC_TAB)
  18. #define KC_WORKRIGHT LCTL(LGUI(KC_RIGHT))
  19. #define KC_WORKLEFT LCTL(LGUI(KC_LEFT))
  20. #define KC_NMPD TG(_NUMPAD)
  21. #define KC_SYMB TG(_SYMBOLS)
  22. #define KC_SCTL MT(MOD_LCTL, KC_LBRC)
  23. #define KC_SCTR MT(MOD_LCTL, KC_RBRC)
  24. #define KC_SPLT MT(MOD_LALT, KC_MINS)
  25. #define KC_SPRT MT(MOD_LALT, KC_1)
  26. #define KC_GBRC MT(MOD_RGUI, KC_8)
  27. #define KC_GQOT MT(MOD_LGUI, KC_QUOT)
  28. #define KC_CSHW MT(MOD_LCTL|MOD_LSFT,KC_W)
  29. #define KC_CDEL LCTL(KC_DEL)
  30. #define KC_AUDUP KC_AUDIO_VOL_UP
  31. #define KC_AUDOWN KC_AUDIO_VOL_DOWN
  32. #define KC_MEHS MEH_T(KC_S)
  33. #define KC_MEHL MEH_T(KC_L)
  34. #define KC_GWIN GUI_T(KC_G)
  35. #define KC_FCTL CTL_T(KC_F)
  36. #define KC_JCTL CTL_T(KC_J)
  37. #define KC_ZCTL CTL_T(KC_Z)
  38. #define KC_ALTV ALT_T(KC_V)
  39. #define KC_ALTN ALT_T(KC_N)
  40. #define KC_MEHX ALL_T(KC_X)
  41. #define KC_RESET RESET
  42. //LTs
  43. #define KC_MESC LT(_MACROS, KC_ESC)
  44. #define KC_DNUM LT(_NUMPAD, KC_D)
  45. #define KC_SPFN LT(_NAV,KC_EQL)
  46. #define KC_EMAUS LT(_MOUSE,KC_E)
  47. #define KC_ENAV LT(_NAV,KC_E)
  48. #define KC_INAV LT(_TEXTNAV,KC_I)
  49. #define KC_BSPSYM LT(_SYMBOLS,KC_BSPACE)
  50. #define KC_ENTSYM LT(_SYMBOLS,KC_ENTER)
  51. #define KC_CLNMAUS LT(_MOUSE,KC_SCOLON)
  52. #define KC_FUNC TT(_FUNCTION)
  53. //TAP DANCE
  54. #define KC_F6F7 TD(F6F7)
  55. #define KC_ALF4 TD(ALTF4)
  56. #define KC_TTT TD(TTT)
  57. #define KC_ENHM TD(HOME_END)
  58. #define KC_CLPS TD(CALC_PRINTSCREEN)
  59. #define KC_INCL M(0)
  60. #define KC_PULL M(1)
  61. #define KC_PUSH M(2)
  62. #define KC_SCAP M(3)
  63. #define KC_SCOF M(4)
  64. #define KC_CAD LALT(LCTL(KC_DEL))
  65. #define LONGPRESS_DELAY 150
  66. //#define LAYER_TOGGLE_DELAY 300
  67. // Fillers to make layering more clear
  68. #define KC_ KC_TRNS
  69. /* TODO:
  70. *
  71. * DONE: RESET and CAD into macro layer.
  72. * DONE: WINUP AND WINDOWN in NAV layer
  73. * DONE: Get rid of caps layer. not sure what it is even for.
  74. * DONE: LMEH
  75. * DONE: plus, divide, multiply on left hand for num layer
  76. * DONE: F1 - F12 on a layer toggle (not a temp toggle but a one shot or something)
  77. * DONE: Volume, page up and down for mouse layer.
  78. * DONE: Add full user files - without using anything.
  79. * DONE: Insert, ctrl delete
  80. * DONE: Home and End
  81. * DONE: Printscreen
  82. * Easier way to open new terminal (instead of alt + F2)
  83. * Intellij/text navigation layer (ctrl delete could be here).
  84. * Macro for "System.exit(0)" probably macro layer and "c"
  85. * Some sort of tap dance for comma, H, right pinky, and possibly other corners.
  86. * Something more with the right hand. not sure what.
  87. * Mouse: Left scroll, right scroll
  88. * Passwords and any other macros.
  89. * LED for control
  90. * All modifiers reset
  91. * Russain layer
  92. * Hebrew layer
  93. * Get rid of stupid git pull and push macros.
  94. *
  95. */
  96. //Tap dance enums
  97. enum {
  98. F12ETAPS = 0,
  99. CALCCOMP,
  100. ALTF4,
  101. F6F7,
  102. TTT,
  103. HOME_END,
  104. CALC_PRINTSCREEN
  105. };
  106. static xtap ttt_state = {
  107. .is_press_action = true,
  108. .state = 0
  109. };
  110. //Already exists in gordon.c, shouldn't need this anymore
  111. /*// To activate SINGLE_HOLD, you will need to hold for 200ms first.
  112. // This tap dance favors keys that are used frequently in typing like 'f'
  113. int cur_dance (qk_tap_dance_state_t *state) {
  114. if (state->count == 1) {
  115. if (state->interrupted) {
  116. return SINGLE_TAP;
  117. }
  118. else {
  119. if (!state->pressed) return SINGLE_TAP;
  120. else return SINGLE_HOLD;
  121. }
  122. }
  123. //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
  124. //with single tap.
  125. else if (state->count == 2) {
  126. if (state->interrupted) return DOUBLE_SINGLE_TAP;
  127. else if (state->pressed) return DOUBLE_HOLD;
  128. else return DOUBLE_TAP;
  129. }
  130. else if ((state->count == 3) && ((state->interrupted) || (!state->pressed))) return TRIPLE_TAP;
  131. else if (state->count == 3) return TRIPLE_HOLD;
  132. else return 8; //magic number. At some point this method will expand to work for more presses
  133. }*/
  134. /* "Super tap toggle"
  135. * Basically, TT but for two or more layers for a single key.
  136. * This particular dance:
  137. * Single tap/hold - TT for Function layer
  138. * Double tap/hold - TT for Numpad layer
  139. * Triple tap/hold - TT for Mouse layer
  140. *
  141. */
  142. void TTT_finished (qk_tap_dance_state_t *state, void *user_data) {
  143. ttt_state.state = cur_dance(state);
  144. switch (ttt_state.state) {
  145. case SINGLE_TAP: layer_invert(_FUNCTION); break;
  146. case SINGLE_HOLD: layer_on(_FUNCTION); break;
  147. case DOUBLE_TAP: layer_invert(_NUMPAD); break;
  148. case DOUBLE_HOLD: layer_on(_NUMPAD); break;
  149. case DOUBLE_SINGLE_TAP: layer_invert(_NUMPAD); break;
  150. case TRIPLE_TAP: layer_invert(_MOUSE); break;
  151. case TRIPLE_HOLD: layer_on(_MOUSE); break;
  152. }
  153. }
  154. void TTT_reset (qk_tap_dance_state_t *state, void *user_data) {
  155. switch (ttt_state.state) {
  156. case SINGLE_TAP: break;
  157. case SINGLE_HOLD: layer_off(_FUNCTION); break;
  158. case DOUBLE_TAP: break;
  159. case DOUBLE_HOLD: layer_off(_NUMPAD); break;
  160. case DOUBLE_SINGLE_TAP: break;
  161. case TRIPLE_TAP: break;
  162. case TRIPLE_HOLD: layer_off(_MOUSE); break;
  163. }
  164. ttt_state.state = 0;
  165. }
  166. qk_tap_dance_action_t tap_dance_actions[] = {
  167. // simple tap dance
  168. [F12ETAPS] = ACTION_TAP_DANCE_DOUBLE(KC_F12,LSFT(LCTL(KC_F10))),
  169. [CALCCOMP] = ACTION_TAP_DANCE_DOUBLE(KC_CALCULATOR, KC_MY_COMPUTER),
  170. [CALC_PRINTSCREEN] = ACTION_TAP_DANCE_DOUBLE(KC_CALCULATOR, KC_PSCR),
  171. [ALTF4] = ACTION_TAP_DANCE_DOUBLE(KC_F4,LALT(KC_F4)),
  172. [F6F7] = ACTION_TAP_DANCE_DOUBLE(LSFT(KC_F6), LALT(KC_F7)),
  173. [HOME_END] = ACTION_TAP_DANCE_DOUBLE(KC_END, KC_HOME),
  174. [TTT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,TTT_finished, TTT_reset),
  175. };
  176. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  177. [_QWERTY] = LAYOUT_kc(
  178. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  179. MESC, Q ,CSHW,ENAV, R , T ,SPC , CLPS, Y , U ,INAV, O , P ,TTT,
  180. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  181. TAB , A , MEHS,DNUM,FCTL,GWIN,GRAVE, TILD, H ,JCTL, K ,MEHL,CLNMAUS,ENHM,
  182. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  183. MINUS,ZCTL,MEHX, C ,ALTV, B ,DELETE, INS ,ALTN, M ,COMM,DOT ,SLSH,UNDS,
  184. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  185. LSHIFT,BSPSYM, SPC ,ENTSYM
  186. // \------------------+----+----+---/ \---+----+----+-------------------/
  187. ),
  188. [_NUMPAD] = LAYOUT_kc(
  189. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  190. , , , ,ASTR, , , , , 7 , 8 , 9 ,ASTR,/**/,
  191. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  192. ,MINS,PLUS,/**/,EQUAL, , , , , 4 , 5 , 6 ,PLUS, ,
  193. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  194. , , , ,SLSH, , , , , 1 , 2 , 3 ,SLSH, ,
  195. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  196. , , , 0
  197. // \------------------+----+----+---/ \---+----+----+-------------------/
  198. ),
  199. [_SYMBOLS] = LAYOUT_kc(
  200. //,----+----+-----+----+----+----+----. ,----+----+----+----+----+----+----.
  201. ,EXLM, AT ,LCBR,RCBR,HASH, , ,CIRC,AMPR,ASTR,LPRN,RPRN,/**/,
  202. //|----+----+-----+----+----+----+----| |----+----+----+----+----+----+----|
  203. ,EXLM,EXLM,LPRN,RPRN , , , , ,DQUO,EQUAL,QUOTE,RCBR, ,
  204. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  205. ,DOLLAR, PERC,LBRACKET,RBRACKET, , , ,PIPE,BSLASH,PLUS, , , ,
  206. //|----+----+-----+----+----+----+----| |----+----+----+----+----+----+----|
  207. UNDS,/**/, ,/**/
  208. // \-------------------+----+----+---/ \---+----+----+-------------------/
  209. ),
  210. [_FUNCTION] = LAYOUT_kc(
  211. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  212. F6F7 ,F1 ,F2 ,F3 ,ALF4,F5 ,F6 , F7 ,F8 ,F9 ,F10 ,F11 ,F12 ,/**/,
  213. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  214. , , , , , , , , , , , , , ,
  215. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  216. , , , , , , , , , , , , , ,
  217. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  218. , , ,
  219. // \------------------+----+----+---/ \---+----+----+-------------------/
  220. ),
  221. [_NAV] = LAYOUT_kc(
  222. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  223. , ,SNAPLEFT,/**/,SNAPRIGHT,, , , , , UP , , , ,
  224. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  225. ,SNAPUP,PREVTAB, ,NEXTTAB,SNAPDOWN,, , ,LEFT,DOWN,RGHT, , ,
  226. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  227. , ,WORKLEFT, ,WORKRIGHT,, , , ,PGUP,PGDN, , , ,
  228. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  229. CDEL ,DEL, ,
  230. // \------------------+----+----+---/ \---+----+----+-------------------/
  231. ),
  232. [_TEXTNAV] = LAYOUT_kc(
  233. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  234. , , , , , , , , , ,/**/, , , ,
  235. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  236. , , , , , , , , , , , , , ,
  237. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  238. , , , , , , , , , , , , , ,
  239. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  240. , , ,
  241. // \------------------+----+----+---/ \---+----+----+-------------------/
  242. ),
  243. [_MOUSE] = LAYOUT_kc(
  244. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  245. , , ,MS_UP, , , , , , , UP , , , ,/**/
  246. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  247. , ,MS_LEFT,MS_DOWN,MS_RIGHT, , , , ,LEFT,DOWN,RGHT,/**/, ,
  248. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  249. , , , , , , , , , , , , , ,
  250. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  251. ,MS_BTN1 ,MS_BTN2 ,
  252. // \------------------+----+----+---/ \---+----+----+-------------------/
  253. ),
  254. [_MACROS] = LAYOUT_kc(
  255. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  256. /**/,RESET,SECRET_2,SECRET_3, , , ,SYSTEM_SLEEP, , ,INCL, , , ,
  257. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  258. CAD ,SECRET_1, , , , , , , , , , , , ,
  259. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  260. SCAP, , , , , , , , , , , , ,SCAP,
  261. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  262. , , ,
  263. // \------------------+----+----+---/ \---+----+----+-------------------/
  264. )
  265. };
  266. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  267. {
  268. switch(id) {
  269. /* include some kind of library or header */
  270. case 0:
  271. if (record->event.pressed) {
  272. SEND_STRING("#include <>");
  273. return MACRO( T(LEFT), END);
  274. }
  275. break;
  276. case 1:
  277. if (record->event.pressed) {
  278. SEND_STRING("git pull");
  279. return MACRO( T(ENT), END );
  280. }
  281. break;
  282. case 2:
  283. if (record->event.pressed){
  284. SEND_STRING("git push");
  285. return MACRO( T(ENT), END );
  286. }
  287. break;
  288. case 3:
  289. if (record->event.pressed){
  290. // layer_on(_CAPS);
  291. // register_code(KC_CAPSLOCK);
  292. // unregister_code(KC_CAPSLOCK);
  293. }
  294. break;
  295. case 4:
  296. if (record->event.pressed){
  297. // layer_off(_CAPS);
  298. // register_code(KC_CAPSLOCK);
  299. // unregister_code(KC_CAPSLOCK);
  300. }
  301. break;
  302. }
  303. return MACRO_NONE;
  304. };
  305. void matrix_scan_user(void) {
  306. uint8_t layer = biton32(layer_state);
  307. switch (layer) {
  308. case _QWERTY:
  309. set_led_green;
  310. break;
  311. case _MOUSE:
  312. set_led_yellow;
  313. break;
  314. case _NUMPAD:
  315. set_led_blue;
  316. break;
  317. case _SYMBOLS:
  318. set_led_red;
  319. break;
  320. case _NAV:
  321. set_led_magenta;
  322. break;
  323. case _MACROS:
  324. set_led_green;
  325. _delay_ms(45);
  326. set_led_red;
  327. _delay_ms(45);
  328. break;
  329. case _FUNCTION:
  330. set_led_green;
  331. _delay_ms(45);
  332. set_led_blue;
  333. _delay_ms(45);
  334. break;
  335. default:
  336. set_led_green;
  337. break;
  338. }
  339. };