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.

848 lines
42 KiB

  1. #include QMK_KEYBOARD_H
  2. // #include "debug.h"
  3. #include "action_layer.h"
  4. #include "version.h"
  5. #include "eeconfig.h"
  6. #include "eeprom.h"
  7. #include "keymap_colemak.h"
  8. extern keymap_config_t keymap_config;
  9. enum ergodox_layers {
  10. _QWERTY,
  11. _COLEMAK,
  12. _QWOC,
  13. _LOWER,
  14. _RAISE,
  15. _PLOVER,
  16. // Intermediate layers for SuperDuper (Combo keys does not work on Infinity yet)
  17. _SUPER,
  18. _DUPER,
  19. _SUPERDUPER,
  20. _MOUSE,
  21. _ADJUST,
  22. _MDIA,
  23. _SYMB,
  24. };
  25. enum ergodox_keycodes {
  26. QWERTY = SAFE_RANGE,
  27. COLEMAK,
  28. QWOC,
  29. PLOVER,
  30. SUPER,
  31. DUPER,
  32. SUPERDUPER,
  33. MOUSE,
  34. LOWER,
  35. RAISE,
  36. BACKLIT,
  37. EXT_PLV,
  38. SDTOGG, // Toggle SuperDuper
  39. EPRM,
  40. VRSN,
  41. RGB_SLD
  42. };
  43. enum functions {
  44. M_GUI_UNDS, // Simulate GUI_T(KC_UNDS)
  45. M_SFT_PO, // SFT_T(KC_LPRN)
  46. M_SFT_PC, // SFT_T(KC_RPRN)
  47. };
  48. // Timer for custom mod tap
  49. static uint16_t m_gui_unds_timer;
  50. static uint16_t m_sft_po_timer;
  51. static uint16_t m_sft_pc_timer;
  52. // Narze : Custom Macros
  53. #define HPR_ESC ALL_T(KC_ESC)
  54. #define SFT_ENT SFT_T(KC_ENT)
  55. #define SFT_PO F(M_SFT_PO)
  56. #define SFT_PC F(M_SFT_PC)
  57. #define GUI_MINS GUI_T(KC_MINS)
  58. #define GUI_UNDS F(M_GUI_UNDS)
  59. // Combo : SuperDuper layer from S+D (R+S in Colemak)
  60. // #define COMBO_COUNT 1
  61. // #define SUPERDUPER_COMBO_COUNT 3
  62. // #define EECONFIG_SUPERDUPER_INDEX (uint8_t *) 19
  63. // enum process_combo_event {
  64. // CB_SUPERDUPER,
  65. // };
  66. // const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = {
  67. // [_QWERTY] = {KC_S, KC_D, COMBO_END},
  68. // [_COLEMAK] = {KC_R, KC_S, COMBO_END},
  69. // [_QWOC] = {CM_S, CM_D, COMBO_END},
  70. // };
  71. // combo_t PROGMEM key_combos[COMBO_COUNT] = {
  72. // [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]),
  73. // };
  74. // volatile bool superduper_enabled = true;
  75. // const uint16_t empty_combo[] = {COMBO_END};
  76. // void set_superduper_key_combos(void);
  77. // void clear_superduper_key_combos(void);
  78. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  79. /* Qwerty
  80. *
  81. * ,--------------------------------------------------. ,--------------------------------------------------.
  82. * | ` | 1 | 2 | 3 | 4 | 5 | Mdia | | Mdia | 6 | 7 | 8 | 9 | 0 | - |
  83. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  84. * | Tab | Q | W | E | R | T | Symb | | Symb | Y | U | I | O | P | \ |
  85. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  86. * | Hp/Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
  87. * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
  88. * | Sft/( | Z/Mo | X | C | V | B | | | | N | M | , | . | SD-/ | Sft/) |
  89. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  90. * |Rse/[ | Ctrl | Alt | Gui/_| Lwr | | Rse | GUI/-| Alt | Ctrl | Low/] |
  91. * `----------------------------------' `----------------------------------'
  92. * ,-------------. ,-------------.
  93. * | Enter| LGui | | Alt |Ctrl/Esc|
  94. * ,------|------|------| |------+--------+------.
  95. * | | | Home | | PgUp | | |
  96. * | Space| Back |------| |------| Back |Enter |
  97. * | | Space| End | | PgDn | Space | |
  98. * `--------------------' `----------------------'
  99. */
  100. [_QWERTY] = LAYOUT_ergodox(
  101. // left hand
  102. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
  103. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LT(_SYMB, KC_NO),
  104. HPR_ESC, KC_A, LT(_SUPER, KC_S), LT(_DUPER, KC_D), KC_F, KC_G,
  105. SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
  106. LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
  107. KC_ENT, KC_LGUI,
  108. KC_HOME,
  109. KC_SPC,KC_BSPC,KC_END,
  110. // right hand
  111. LT(_MDIA, KC_NO), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  112. LT(_SYMB, KC_NO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
  113. KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  114. MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
  115. RAISE, GUI_MINS,KC_RALT,KC_RCTL, LT(_LOWER, KC_RBRC),
  116. KC_LALT, CTL_T(KC_ESC),
  117. KC_PGUP,
  118. KC_PGDN,KC_BSPC, KC_ENT
  119. ),
  120. /* Colemak
  121. *
  122. * ,--------------------------------------------------. ,--------------------------------------------------.
  123. * | ` | 1 | 2 | 3 | 4 | 5 | Mdia | | Mdia | 6 | 7 | 8 | 9 | 0 | - |
  124. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  125. * | Tab | Q | W | F | P | G | Symb | | Symb | J | L | U | Y | ; | \ |
  126. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  127. * | Hp/Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
  128. * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
  129. * | Sft/( | Z/Mo | X | C | V | B | | | | K | M | , | . | SD-/ | Sft/) |
  130. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  131. * |Rse/[ | Ctrl | Alt | Gui/_| Lwr | | Rse | GUI/-| Alt | Ctrl | Low/] |
  132. * `----------------------------------' `----------------------------------'
  133. * ,-------------. ,-------------.
  134. * | Enter| LGui | | Alt |Ctrl/Esc|
  135. * ,------|------|------| |------+--------+------.
  136. * | | | Home | | PgUp | | |
  137. * | Space| Back |------| |------| Back |Enter |
  138. * | | Space| End | | PgDn | Space | |
  139. * `--------------------' `----------------------'
  140. */
  141. [_COLEMAK] = LAYOUT_ergodox(
  142. // left hand
  143. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
  144. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, LT(_SYMB, KC_NO),
  145. HPR_ESC, KC_A, LT(_SUPER,KC_R), LT(_DUPER,KC_S), KC_T, KC_D,
  146. SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
  147. LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
  148. KC_ENT, KC_LGUI,
  149. KC_HOME,
  150. KC_SPC,KC_BSPC,KC_END,
  151. // right hand
  152. LT(_MDIA, KC_NO), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  153. LT(_SYMB, KC_NO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
  154. KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  155. MEH_T(KC_NO),KC_K, KC_M, KC_COMM,KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
  156. RAISE, GUI_MINS,KC_RALT,KC_RCTL, LT(_LOWER, KC_RBRC),
  157. KC_LALT, CTL_T(KC_ESC),
  158. KC_PGUP,
  159. KC_PGDN,KC_BSPC, KC_ENT
  160. ),
  161. /* Qwerty on software Colemak : Useful for gaming with qwerty keymaps! */
  162. [_QWOC] = LAYOUT_ergodox(
  163. // left hand
  164. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
  165. KC_TAB, CM_Q, CM_W, CM_E, CM_R, CM_T, LT(_SYMB, KC_NO),
  166. HPR_ESC, CM_A, LT(_SUPER,CM_S), LT(_DUPER,CM_D), CM_F, CM_G,
  167. SFT_PO, LT(_MOUSE, CM_Z), CM_X, CM_C, CM_V, CM_B, ALL_T(KC_NO),
  168. LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
  169. KC_ENT, KC_LGUI,
  170. KC_HOME,
  171. KC_SPC,KC_BSPC,KC_END,
  172. // right hand
  173. LT(_MDIA, KC_NO), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  174. LT(_SYMB, KC_NO), CM_Y, CM_U, CM_I, CM_O, CM_P, KC_BSLS,
  175. CM_H, CM_J, CM_K, CM_L, CM_SCLN, KC_QUOT,
  176. MEH_T(KC_NO),CM_N, CM_M, CM_COMM,CM_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
  177. RAISE, GUI_MINS,KC_RALT,KC_RCTL, LT(_LOWER, KC_RBRC),
  178. KC_LALT, CTL_T(KC_ESC),
  179. KC_PGUP,
  180. KC_PGDN,KC_BSPC, KC_ENT
  181. ),
  182. /* Lower
  183. *
  184. * ,--------------------------------------------------. ,--------------------------------------------------.
  185. * | | | | | | | | | | | | | | | |
  186. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  187. * | | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | |
  188. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  189. * | | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | _ | + | { | } | | |
  190. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  191. * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | | | |
  192. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  193. * | | | | | | | | | | | |
  194. * `----------------------------------' `----------------------------------'
  195. * ,-------------. ,-------------.
  196. * | | | | | |
  197. * ,------|------|------| |------+------+------.
  198. * | | | | | | | |
  199. * | | |------| |------| | |
  200. * | | | | | | | |
  201. * `--------------------' `--------------------'
  202. */
  203. [_LOWER] = LAYOUT_ergodox(
  204. _______, _______, _______, _______, _______, _______, _______,
  205. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
  206. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
  207. _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______,
  208. _______, _______, _______, KC_BTN1, KC_BTN2,
  209. _______, _______,
  210. _______,
  211. _______, _______, _______,
  212. // right hand
  213. _______, _______, _______, _______, _______, _______, _______,
  214. _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
  215. KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
  216. _______, KC_F12,S(KC_NUHS),S(KC_NUBS), _______, _______, _______,
  217. _______, _______, _______, _______, _______,
  218. _______, _______,
  219. _______,
  220. _______, _______, _______
  221. ),
  222. /* Raise
  223. *
  224. * ,--------------------------------------------------. ,--------------------------------------------------.
  225. * | | | | | | | | | | | | | | | |
  226. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  227. * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
  228. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  229. * | | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | - | = | [ | ] | \ |
  230. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  231. * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | | | |
  232. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  233. * | | | | | | | | | | | |
  234. * `----------------------------------' `----------------------------------'
  235. * ,-------------. ,-------------.
  236. * | | | | | |
  237. * ,------|------|------| |------+------+------.
  238. * | | | | | | | |
  239. * | | |------| |------| | |
  240. * | | | | | | | |
  241. * `--------------------' `--------------------'
  242. */
  243. [_RAISE] = LAYOUT_ergodox(
  244. _______, _______, _______, _______, _______, _______, _______,
  245. _______, KC_1, KC_2, KC_3, KC_4, KC_5, _______,
  246. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
  247. _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______,
  248. _______, _______, _______, KC_BTN1, KC_BTN2,
  249. _______, _______,
  250. _______,
  251. _______, _______, _______,
  252. // right hand
  253. _______, _______, _______, _______, _______, _______, _______,
  254. _______, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
  255. KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
  256. _______, KC_F12,S(KC_NUHS),S(KC_NUBS), _______, _______, _______,
  257. _______, _______, _______, _______, _______,
  258. _______, _______,
  259. _______,
  260. _______, _______, _______
  261. ),
  262. /* Plover
  263. *
  264. * ,--------------------------------------------------. ,--------------------------------------------------.
  265. * | # | # | # | # | # | # | | | | # | # | # | # | # | # |
  266. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  267. * | | # | # | # | # | # | | | | # | # | # | # | # | # |
  268. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  269. * | Hp/Esc | S | T | P | H | * |------| |------| * | F | P | L | T | D |
  270. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  271. * | Sft/( | S | K | W | R | * | | | | * | R | B | G | S | Z |
  272. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  273. * | Exit | | | A | O | | E | U | | | |
  274. * `----------------------------------' `----------------------------------'
  275. * ,-------------. ,-------------.
  276. * | Enter| LGui | | Alt |Ctrl/Esc|
  277. * ,------|------|------| |------+--------+------.
  278. * | | | Home | | PgUp | | |
  279. * | Space| Back |------| |------| Back |Enter |
  280. * | | Space| End | | PgDn | Space | |
  281. * `--------------------' `----------------------'
  282. */
  283. [_PLOVER] = LAYOUT_ergodox(
  284. // left hand
  285. KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX,
  286. XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX,
  287. XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T,
  288. XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX,
  289. EXT_PLV, XXXXXXX, XXXXXXX,KC_C, KC_V,
  290. KC_ENT, KC_LGUI,
  291. KC_HOME,
  292. KC_SPC,KC_BSPC,KC_END,
  293. // right hand
  294. XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX,
  295. XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX,
  296. KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
  297. XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  298. KC_N, KC_M,XXXXXXX,XXXXXXX, XXXXXXX,
  299. KC_LALT, CTL_T(KC_ESC),
  300. KC_PGUP,
  301. KC_PGDN,KC_BSPC, KC_ENT
  302. ),
  303. /* SuperDuper : https://gist.github.com/narze/861e2167784842d38771
  304. *
  305. * ,--------------------------------------------------. ,--------------------------------------------------.
  306. * | | | | | | | | | | | | | | | |
  307. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  308. * | | | | | | | | | | | | T | T | | |
  309. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  310. * | | A | [SuperDuper]| Bksp | Gui |------| |------| | | | | Del | |
  311. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  312. * | | | | | | | | | | | | | | | |
  313. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  314. * | | | | | | | | | | | |
  315. * `----------------------------------' `----------------------------------'
  316. * ,-------------. ,-------------.
  317. * | | | | | |
  318. * ,------|------|------| |------+--------+------.
  319. * | | | | | | | |
  320. * | Shift| |------| |------| |Shift |
  321. * | | | | | | | |
  322. * `--------------------' `----------------------'
  323. */
  324. [_SUPERDUPER] = LAYOUT_ergodox(
  325. // left hand
  326. _______, _______, _______, _______, _______, _______, _______,
  327. _______, _______, _______, _______, _______, _______, _______,
  328. _______, KC_LALT, _______, _______, KC_BSPC, KC_LGUI,
  329. _______, _______, _______, _______, _______, _______, _______,
  330. _______, _______, _______, _______, _______,
  331. _______, _______,
  332. _______,
  333. KC_LSFT,_______,_______,
  334. // right hand
  335. _______, _______, _______, _______, _______, _______, _______,
  336. _______, _______, _______, S(LGUI(KC_LBRC)), S(LGUI(KC_RBRC)), _______, _______,
  337. KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, _______,
  338. _______, _______, _______, _______, _______, _______, _______,
  339. _______, _______, _______, _______, _______,
  340. _______, _______,
  341. _______,
  342. _______,_______, KC_LSFT
  343. ),
  344. // Intermediate keymaps for SuperDuper (Combo keys does not work on Infinity yet)
  345. [_SUPER] = LAYOUT_ergodox(
  346. // left hand
  347. _______, _______, _______, _______, _______, _______, _______,
  348. _______, _______, _______, _______, _______, _______, _______,
  349. _______, _______, _______, DUPER, _______, _______,
  350. _______, _______, _______, _______, _______, _______, _______,
  351. _______, _______, _______, _______, _______,
  352. _______, _______,
  353. _______,
  354. _______,_______,_______,
  355. // right hand
  356. _______, _______, _______, _______, _______, _______, _______,
  357. _______, _______, _______, _______, _______, _______, _______,
  358. _______, _______, _______, _______, _______, _______,
  359. _______, _______, _______, _______, _______, _______, _______,
  360. _______, _______, _______, _______, _______,
  361. _______, _______,
  362. _______,
  363. _______,_______, _______
  364. ),
  365. [_DUPER] = LAYOUT_ergodox(
  366. // left hand
  367. _______, _______, _______, _______, _______, _______, _______,
  368. _______, _______, _______, _______, _______, _______, _______,
  369. _______, _______, SUPER, _______, _______, _______,
  370. _______, _______, _______, _______, _______, _______, _______,
  371. _______, _______, _______, _______, _______,
  372. _______, _______,
  373. _______,
  374. _______,_______,_______,
  375. // right hand
  376. _______, _______, _______, _______, _______, _______, _______,
  377. _______, _______, _______, _______, _______, _______, _______,
  378. _______, _______, _______, _______, _______, _______,
  379. _______, _______, _______, _______, _______, _______, _______,
  380. _______, _______, _______, _______, _______,
  381. _______, _______,
  382. _______,
  383. _______,_______, _______
  384. ),
  385. /* Mouse
  386. *
  387. * ,--------------------------------------------------. ,--------------------------------------------------.
  388. * | | | | | | | | | | | | | | | |
  389. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  390. * | | | S | M | S | | | | | | | S | S | | |
  391. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  392. * | | | M | M | M | |------| |------| M | M | M | M | | |
  393. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  394. * | |[Mouse| | | | M3 | | | | M3 | | | | | |
  395. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  396. * | | | | | M2 | | M2 | | | | |
  397. * `----------------------------------' `----------------------------------'
  398. * ,-------------. ,-------------.
  399. * | | | | | |
  400. * ,------|------|------| |------+--------+------.
  401. * | | | | | | | |
  402. * | Left | |------| |------| | Left |
  403. * | Click| | | | | | Click|
  404. * `--------------------' `----------------------'
  405. */
  406. [_MOUSE] = LAYOUT_ergodox(
  407. // left hand
  408. _______, _______, _______, _______, _______, _______, _______,
  409. _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______,
  410. _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
  411. _______, _______, _______, _______, _______, KC_BTN3, _______,
  412. _______, _______, _______, _______, KC_BTN2,
  413. _______, _______,
  414. _______,
  415. KC_BTN1,_______,_______,
  416. // right hand
  417. _______, _______, _______, _______, _______, _______, _______,
  418. _______, _______, _______, KC_WH_U, KC_WH_D, _______, _______,
  419. KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______,
  420. _______, KC_BTN3, _______, _______, _______, _______, _______,
  421. KC_BTN2, _______, _______, _______, _______,
  422. _______, _______,
  423. _______,
  424. _______,_______, KC_BTN1
  425. ),
  426. /* Adjust (Lower + Raise)
  427. *
  428. * ,--------------------------------------------------. ,--------------------------------------------------.
  429. * | | | | | | | | | | | | | | | |
  430. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  431. * | |Reset | | | | | | | | | | | | | Del |
  432. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  433. * | | | | | |AGnorm|------| |------|AGswap|Qwerty|Colemk|QwOnCo|Plover| |
  434. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  435. * | | | | | | | | | |SDTogg| | | | | |
  436. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  437. * | | | | | | | | | | | |
  438. * `----------------------------------' `----------------------------------'
  439. * ,-------------. ,-------------.
  440. * | | | | | |
  441. * ,------|------|------| |------+--------+------.
  442. * | | | | | | | |
  443. * | | |------| |------| | |
  444. * | | | | | | | |
  445. * `--------------------' `----------------------'
  446. */
  447. [_ADJUST] = LAYOUT_ergodox(
  448. // left hand
  449. _______, _______, _______, _______, _______, _______, _______,
  450. _______, RESET, _______, _______, _______, _______, _______,
  451. _______, _______, _______, _______, _______, AG_NORM,
  452. _______, _______, _______, _______, _______, _______, _______,
  453. _______, _______, _______, _______, _______,
  454. _______, _______,
  455. _______,
  456. _______,_______,_______,
  457. // right hand
  458. _______, _______, _______, _______, _______, _______, _______,
  459. _______, _______, _______, _______, _______, _______, KC_DEL,
  460. AG_SWAP, QWERTY, COLEMAK, QWOC, PLOVER, _______,
  461. _______, SDTOGG, _______, _______, _______, _______, _______,
  462. _______, _______, _______, _______, _______,
  463. _______, _______,
  464. _______,
  465. _______,_______, _______
  466. ),
  467. /* Layers below are not actively used but kept for future reference */
  468. /* Symbol
  469. * ,---------------------------------------------------. ,--------------------------------------------------.
  470. * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
  471. * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
  472. * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
  473. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  474. * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
  475. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  476. * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
  477. * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  478. * | EPRM | | | | | | | . | 0 | = | |
  479. * `-----------------------------------' `----------------------------------'
  480. * ,-------------. ,-------------.
  481. * |Animat| | |Toggle|Solid |
  482. * ,------|------|------| |------+------+------.
  483. * |Bright|Bright| | | |Hue- |Hue+ |
  484. * |ness- |ness+ |------| |------| | |
  485. * | | | | | | | |
  486. * `--------------------' `--------------------'
  487. */
  488. // SYMBOLS
  489. [_SYMB] = LAYOUT_ergodox(
  490. // left hand
  491. VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
  492. _______,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,_______,
  493. _______,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
  494. _______,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,_______,
  495. EPRM,_______,_______,_______,_______,
  496. RGB_MOD,_______,
  497. _______,
  498. RGB_VAD,RGB_VAI,_______,
  499. // right hand
  500. _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  501. _______, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
  502. KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, _______,
  503. _______, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, _______,
  504. _______,KC_DOT, KC_0, KC_EQL, _______,
  505. RGB_TOG, RGB_SLD,
  506. _______,
  507. _______, RGB_HUD, RGB_HUI
  508. ),
  509. /* Media and mouse keys
  510. *
  511. * ,--------------------------------------------------. ,--------------------------------------------------.
  512. * | | | | | | | | | | | | | | | |
  513. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  514. * | | | | MsUp | | | | | | | | | | | |
  515. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  516. * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
  517. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  518. * | | | | | | | | | | | | Prev | Next | | |
  519. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  520. * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
  521. * `----------------------------------' `----------------------------------'
  522. * ,-------------. ,-------------.
  523. * | | | | | |
  524. * ,------|------|------| |------+------+------.
  525. * | | | | | | |Brwser|
  526. * | | |------| |------| |Back |
  527. * | | | | | | | |
  528. * `--------------------' `--------------------'
  529. */
  530. // MEDIA AND MOUSE
  531. [_MDIA] = LAYOUT_ergodox(
  532. _______, _______, _______, _______, _______, _______, _______,
  533. _______, _______, _______, KC_MS_U, _______, _______, _______,
  534. _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
  535. _______, _______, _______, _______, _______, _______, _______,
  536. _______, _______, _______, KC_BTN1, KC_BTN2,
  537. _______, _______,
  538. _______,
  539. _______, _______, _______,
  540. // right hand
  541. _______, _______, _______, _______, _______, _______, _______,
  542. _______, _______, _______, _______, _______, _______, _______,
  543. _______, _______, _______, _______, _______, KC_MPLY,
  544. _______, _______, _______, KC_MPRV, KC_MNXT, _______, _______,
  545. KC_VOLU, KC_VOLD, KC_MUTE, _______, _______,
  546. _______, _______,
  547. _______,
  548. _______, _______, KC_WBAK
  549. )
  550. };
  551. void persistant_default_layer_set(uint16_t default_layer) {
  552. eeconfig_update_default_layer(default_layer);
  553. default_layer_set(default_layer);
  554. }
  555. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  556. switch (keycode) {
  557. case QWERTY:
  558. if (record->event.pressed) {
  559. persistant_default_layer_set(1UL<<_QWERTY);
  560. // key_combos[CB_SUPERDUPER].keys = superduper_combos[_QWERTY];
  561. // eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, _QWERTY);
  562. }
  563. return false;
  564. break;
  565. case COLEMAK:
  566. if (record->event.pressed) {
  567. persistant_default_layer_set(1UL<<_COLEMAK);
  568. // key_combos[CB_SUPERDUPER].keys = superduper_combos[_COLEMAK];
  569. // eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, _COLEMAK);
  570. }
  571. return false;
  572. break;
  573. case QWOC:
  574. if (record->event.pressed) {
  575. persistant_default_layer_set(1UL<<_QWOC);
  576. // key_combos[CB_SUPERDUPER].keys = superduper_combos[_QWOC];
  577. // eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, _QWOC);
  578. }
  579. return false;
  580. break;
  581. case LOWER:
  582. if (record->event.pressed) {
  583. layer_on(_LOWER);
  584. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  585. } else {
  586. layer_off(_LOWER);
  587. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  588. }
  589. return false;
  590. break;
  591. case RAISE:
  592. if (record->event.pressed) {
  593. layer_on(_RAISE);
  594. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  595. } else {
  596. layer_off(_RAISE);
  597. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  598. }
  599. return false;
  600. break;
  601. case SUPER:
  602. if (record->event.pressed) {
  603. layer_on(_SUPER);
  604. update_tri_layer(_SUPER, _DUPER, _SUPERDUPER);
  605. } else {
  606. layer_off(_SUPER);
  607. update_tri_layer(_SUPER, _DUPER, _SUPERDUPER);
  608. }
  609. return false;
  610. break;
  611. case DUPER:
  612. if (record->event.pressed) {
  613. layer_on(_DUPER);
  614. update_tri_layer(_SUPER, _DUPER, _SUPERDUPER);
  615. } else {
  616. layer_off(_DUPER);
  617. update_tri_layer(_SUPER, _DUPER, _SUPERDUPER);
  618. }
  619. return false;
  620. break;
  621. case BACKLIT:
  622. if (record->event.pressed) {
  623. register_code(KC_RSFT);
  624. #ifdef BACKLIGHT_ENABLE
  625. backlight_step();
  626. #endif
  627. } else {
  628. unregister_code(KC_RSFT);
  629. }
  630. return false;
  631. break;
  632. case PLOVER:
  633. if (record->event.pressed) {
  634. layer_off(_RAISE);
  635. layer_off(_LOWER);
  636. layer_off(_ADJUST);
  637. layer_on(_PLOVER);
  638. if (!eeconfig_is_enabled()) {
  639. eeconfig_init();
  640. }
  641. keymap_config.raw = eeconfig_read_keymap();
  642. keymap_config.nkro = 1;
  643. eeconfig_update_keymap(keymap_config.raw);
  644. }
  645. return false;
  646. break;
  647. case EXT_PLV:
  648. if (record->event.pressed) {
  649. layer_off(_PLOVER);
  650. }
  651. return false;
  652. break;
  653. case SDTOGG:
  654. if (record->event.pressed) {
  655. // superduper_enabled = !superduper_enabled;
  656. // if (superduper_enabled) {
  657. // set_superduper_key_combos();
  658. // } else {
  659. // clear_superduper_key_combos();
  660. // }
  661. }
  662. return false;
  663. break;
  664. case EPRM:
  665. if (record->event.pressed) {
  666. eeconfig_init();
  667. }
  668. return false;
  669. break;
  670. case VRSN:
  671. if (record->event.pressed) {
  672. SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
  673. }
  674. return false;
  675. break;
  676. case RGB_SLD:
  677. if (record->event.pressed) {
  678. #ifdef RGBLIGHT_ENABLE
  679. rgblight_mode(1);
  680. #endif
  681. }
  682. return false;
  683. break;
  684. }
  685. return true;
  686. }
  687. void matrix_init_user(void) {
  688. }
  689. void matrix_setup(void) {
  690. // set_superduper_key_combos();
  691. }
  692. // void set_superduper_key_combos(void) {
  693. // uint8_t layer = eeprom_read_byte(EECONFIG_SUPERDUPER_INDEX);
  694. // switch (layer) {
  695. // case _QWERTY:
  696. // case _COLEMAK:
  697. // case _QWOC:
  698. // key_combos[CB_SUPERDUPER].keys = superduper_combos[layer];
  699. // break;
  700. // }
  701. // }
  702. // void clear_superduper_key_combos(void) {
  703. // key_combos[CB_SUPERDUPER].keys = empty_combo;
  704. // }
  705. void matrix_scan_user(void) {
  706. // uint8_t layer = biton32(layer_state);
  707. // ergodox_board_led_off();
  708. // ergodox_right_led_1_off();
  709. // ergodox_right_led_2_off();
  710. // ergodox_right_led_3_off();
  711. // switch (layer) {
  712. // // TODO: Make this relevant to the ErgoDox EZ.
  713. // case 1:
  714. // ergodox_right_led_1_on();
  715. // break;
  716. // case 2:
  717. // ergodox_right_led_2_on();
  718. // break;
  719. // default:
  720. // // none
  721. // break;
  722. // }
  723. }
  724. // Combos
  725. // void process_combo_event(uint8_t combo_index, bool pressed) {
  726. // if (pressed) {
  727. // switch(combo_index) {
  728. // case CB_SUPERDUPER:
  729. // layer_on(_SUPERDUPER);
  730. // ergodox_board_led_on();
  731. // break;
  732. // }
  733. // } else {
  734. // layer_off(_SUPERDUPER);
  735. // ergodox_board_led_off();
  736. // unregister_mods(MOD_BIT(KC_LGUI) | MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT)); // Sometimes mods are held, unregister them
  737. // }
  738. // }
  739. // Macros
  740. const uint16_t PROGMEM fn_actions[] = {
  741. [M_GUI_UNDS] = ACTION_MACRO_TAP(M_GUI_UNDS),
  742. [M_SFT_PO] = ACTION_MACRO_TAP(M_SFT_PO),
  743. [M_SFT_PC] = ACTION_MACRO_TAP(M_SFT_PC),
  744. };
  745. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  746. {
  747. bool tap_not_interrupted = record->tap.count > 0 && !record->tap.interrupted;
  748. switch(id) {
  749. // Hold for LGUI, tap for Underscore
  750. case M_GUI_UNDS:
  751. if (record->event.pressed) {
  752. m_gui_unds_timer = timer_read();
  753. if (!tap_not_interrupted) {
  754. register_mods(MOD_BIT(KC_LGUI));
  755. }
  756. } else {
  757. if (tap_not_interrupted && timer_elapsed(m_gui_unds_timer) < TAPPING_TERM) {
  758. add_weak_mods(MOD_BIT(KC_LSFT));
  759. send_keyboard_report();
  760. register_code(KC_MINS);
  761. unregister_code(KC_MINS);
  762. del_weak_mods(MOD_BIT(KC_LSFT));
  763. send_keyboard_report();
  764. record->tap.count = 0; // ad hoc: cancel tap
  765. } else {
  766. unregister_mods(MOD_BIT(KC_LGUI));
  767. }
  768. }
  769. break;
  770. // Hold for LSHIFT, tap for Parens open
  771. case M_SFT_PO:
  772. if (record->event.pressed) {
  773. m_sft_po_timer = timer_read();
  774. if (!tap_not_interrupted) {
  775. register_mods(MOD_BIT(KC_LSFT));
  776. }
  777. } else {
  778. if (tap_not_interrupted && timer_elapsed(m_sft_po_timer) < TAPPING_TERM) {
  779. record->tap.count = 0;
  780. return MACRO(D(RSFT), T(9), U(RSFT), END);
  781. } else {
  782. unregister_mods(MOD_BIT(KC_LSFT));
  783. }
  784. }
  785. break;
  786. // Hold for RSHIFT, tap for Parens close
  787. case M_SFT_PC:
  788. if (record->event.pressed) {
  789. m_sft_pc_timer = timer_read();
  790. if (!tap_not_interrupted) {
  791. register_mods(MOD_BIT(KC_RSFT));
  792. }
  793. } else {
  794. if (tap_not_interrupted && timer_elapsed(m_sft_pc_timer) < TAPPING_TERM) {
  795. record->tap.count = 0;
  796. return MACRO(D(LSFT), T(0), U(LSFT), END);
  797. } else {
  798. unregister_mods(MOD_BIT(KC_RSFT));
  799. }
  800. }
  801. break;
  802. }
  803. return MACRO_NONE;
  804. };