keymap.c 43 KB

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