keymap.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. #include "ergodox_ez.h"
  2. #include "led.h"
  3. #include "debug.h"
  4. #include "action_layer.h"
  5. #define BASE 0 // default layer
  6. #define LOCK 1 // layer lock keys
  7. #define SYMB_MO 2 // symbols momentary layer
  8. #define SYMB_TG 3 // symbols lock layer
  9. #define SYMB_XX 4 // symbols exit layer
  10. #define MDIA_MO 5 // media momentary layer
  11. #define MDIA_TG 6 // media lock layer
  12. #define MDIA_XX 7 // media exit layer
  13. #define UNLOCK 8 // clear to base layer
  14. /*
  15. * Ordinary Ergodox EZ keyboard layout, v3
  16. * modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
  17. * Details: http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html
  18. */
  19. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  20. /* Keymap 0: Basic layer
  21. *
  22. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  23. * | LOCK Grv | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = LOCK |
  24. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  25. * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ Media |
  26. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  27. * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | ' Symbol |
  28. * |-----------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+-----------|
  29. * | LShift | Z | X | C | V | B | -Tab | | | N | M | , | . | / | RShift |
  30. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  31. * |LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh |RCtrl |
  32. * `----------------------------------' `----------------------------------'
  33. * ,-------------. ,-------------.
  34. * | Home | End | | Left | Right|
  35. * ,------|------|------| |------+------+------.
  36. * | | | PgUp | | Up | | |
  37. * |Backsp| Del |------| |------| Enter| Space|
  38. * | | | PgDn | | Down | | |
  39. * `--------------------' `--------------------'
  40. */
  41. [BASE] = KEYMAP(
  42. // left hand
  43. LT(LOCK, KC_GRV),KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
  44. ,LT(MDIA_MO, KC_TAB),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
  45. ,MO(SYMB_MO) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
  46. ,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
  47. ,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
  48. ,KC_HOME,KC_END
  49. ,KC_PGUP
  50. ,KC_BSPC,KC_DEL ,KC_PGDN
  51. // right hand
  52. ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,LT(LOCK, KC_EQL)
  53. ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,LT(MDIA_MO, KC_BSLS)
  54. ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,LT(SYMB_MO, KC_QUOT)
  55. ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT
  56. ,KC_RGUI,KC_RALT,ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
  57. ,KC_LEFT ,KC_RGHT
  58. ,KC_UP
  59. ,KC_DOWN ,KC_ENT ,KC_SPC
  60. ),
  61. /* Keymap 1: Layer Lock Keys
  62. *
  63. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  64. * | | Esc | | | | | | | | | | | | | |
  65. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  66. * | Media LOCK| | | | | | | | | | | | | | Media LOCK|
  67. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  68. * |Symbol LOCK| | | | | |------| |------| | | | | |Symbol LOCK|
  69. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  70. * | Caps LOCK| | | | | | | | | | | | | | Caps LOCK|
  71. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  72. * | | | | | | | | | | | |
  73. * `----------------------------------' `----------------------------------'
  74. * ,-------------. ,-------------.
  75. * | | | | | |
  76. * ,------|------|------| |------+------+------.
  77. * | | | | | | | |
  78. * | | |------| |------| | |
  79. * | | | | | | | |
  80. * `--------------------' `--------------------'
  81. */
  82. [LOCK] = KEYMAP(
  83. // left hand
  84. KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  85. ,KC_FN3 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  86. ,KC_FN2 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  87. ,KC_CAPS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  88. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  89. ,KC_TRNS ,KC_TRNS
  90. ,KC_TRNS
  91. ,KC_TRNS,KC_TRNS ,KC_TRNS
  92. // right hand
  93. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  94. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN3
  95. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN2
  96. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
  97. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  98. ,KC_TRNS ,KC_TRNS
  99. ,KC_TRNS
  100. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  101. ),
  102. /* Keymap 10: Symbol Momentary Layer
  103. *
  104. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  105. * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
  106. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  107. * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
  108. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  109. * | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
  110. * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
  111. * | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift |
  112. * `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
  113. * | | | | | | | 0 | . | = | + | Entr |
  114. * `----------------------------------' `----------------------------------'
  115. * ,-------------. ,-------------.
  116. * | Left | Right| | Home | End |
  117. * ,------|------|------| |------+------+------.
  118. * | | | Up | | PgUp | | |
  119. * |Space |Enter |------| |------|BackSp| Del |
  120. * | | | Down | | PgDn | | |
  121. * `--------------------' `--------------------'
  122. */
  123. [SYMB_MO] = KEYMAP(
  124. // left hand
  125. KC_FN2 ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
  126. ,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
  127. ,MO(SYMB_MO) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
  128. ,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
  129. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  130. ,KC_LEFT ,KC_RGHT
  131. ,KC_UP
  132. ,KC_SPC ,KC_ENT ,KC_DOWN
  133. // right hand
  134. ,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_FN2
  135. ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO)
  136. ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(SYMB_MO)
  137. ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
  138. ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
  139. ,KC_HOME ,KC_END
  140. ,KC_PGUP
  141. ,KC_PGDN ,KC_BSPC ,KC_DEL
  142. ),
  143. /* Keymap 11: Symbol Lock Layer
  144. *
  145. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  146. * | Lock | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | Lock |
  147. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  148. * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
  149. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  150. * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
  151. * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
  152. * | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift |
  153. * `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
  154. * | | | | | | | 0 | . | = | + | Entr |
  155. * `----------------------------------' `----------------------------------'
  156. * ,-------------. ,-------------.
  157. * | Left | Right| | Home | End |
  158. * ,------|------|------| |------+------+------.
  159. * | | | Up | | PgUp | | |
  160. * |Space |Enter |------| |------|BackSp| Del |
  161. * | | | Down | | PgDn | | |
  162. * `--------------------' `--------------------'
  163. */
  164. [SYMB_TG] = KEYMAP( // layer 3 : return key for symbol lock layer
  165. // left hand
  166. MO(SYMB_XX) ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
  167. ,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
  168. ,MO(UNLOCK) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
  169. ,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
  170. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  171. ,KC_LEFT ,KC_RGHT
  172. ,KC_UP
  173. ,KC_SPC ,KC_ENT ,KC_DOWN
  174. // right hand
  175. ,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,MO(SYMB_XX)
  176. ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO)
  177. ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(UNLOCK)
  178. ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
  179. ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
  180. ,KC_HOME ,KC_END
  181. ,KC_PGUP
  182. ,KC_PGDN ,KC_BSPC ,KC_DEL
  183. ),
  184. /* Keymap 12: Symbol Unlock Layer
  185. *
  186. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  187. * | | Esc | | | | | | | | | | | | | |
  188. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  189. * | Unlock | | | | | | | | | | | | | | Unlock |
  190. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  191. * | | | | | | |------| |------| | | | | | |
  192. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  193. * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
  194. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  195. * | | | | | | | | | | | |
  196. * `----------------------------------' `----------------------------------'
  197. * ,-------------. ,-------------.
  198. * | | | | | |
  199. * ,------|------|------| |------+------+------.
  200. * | | | | | | | |
  201. * | | |------| |------| | |
  202. * | | | | | | | |
  203. * `--------------------' `--------------------'
  204. */
  205. [SYMB_XX] = KEYMAP(
  206. // left hand
  207. KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  208. ,TG(MDIA_TG) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  209. ,KC_FN1 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  210. ,KC_CAPS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  211. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  212. ,KC_TRNS ,KC_TRNS
  213. ,KC_TRNS
  214. ,KC_TRNS,KC_TRNS ,KC_TRNS
  215. // right hand
  216. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  217. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TG(MDIA_TG)
  218. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
  219. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
  220. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  221. ,KC_TRNS ,KC_TRNS
  222. ,KC_TRNS
  223. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  224. ),
  225. /* Keymap 20: Media and mouse keys
  226. *
  227. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  228. * | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | |
  229. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  230. * | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | |
  231. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  232. * | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| |
  233. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  234. * | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | |
  235. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  236. * | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | |
  237. * `----------------------------------' `----------------------------------'
  238. * ,-------------. ,-------------.
  239. * | Stop |Refrsh| | Prev | Next |
  240. * ,------|------|------| |------+------+------.
  241. * |Brwser|Brwser|Search| |VolUp | | |
  242. * |Back | Fwd |------| |------| Stop | Play-|
  243. * | | | Home | |VolDn | | Pause|
  244. * `--------------------' `--------------------'
  245. */
  246. [MDIA_MO] = KEYMAP(
  247. // left hand
  248. KC_FN3 ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS
  249. ,MO(MDIA_MO) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U
  250. ,MO(SYMB_MO) ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS
  251. ,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D
  252. ,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2
  253. ,KC_WSTP ,KC_WREF
  254. ,KC_WSCH
  255. ,KC_WBAK ,KC_TRNS ,KC_WHOM
  256. // right hand
  257. ,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_FN3
  258. ,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(MDIA_MO)
  259. ,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,MO(SYMB_MO)
  260. ,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT
  261. ,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS
  262. ,KC_MPRV ,KC_MNXT
  263. ,KC_VOLU
  264. ,KC_VOLD ,KC_MSTP ,KC_MPLY
  265. ),
  266. /* Keymap 21: Media Lock Layer
  267. *
  268. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  269. * | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | |
  270. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  271. * | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | |
  272. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  273. * | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| |
  274. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  275. * | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | |
  276. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  277. * | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | |
  278. * `----------------------------------' `----------------------------------'
  279. * ,-------------. ,-------------.
  280. * | Stop |Refrsh| | Prev | Next |
  281. * ,------|------|------| |------+------+------.
  282. * |Brwser|Brwser|Search| |VolUp | | |
  283. * |Back | Fwd |------| |------| Stop | Play-|
  284. * | | | Home | |VolDn | | Pause|
  285. * `--------------------' `--------------------'
  286. */
  287. [MDIA_TG] = KEYMAP(
  288. // left hand
  289. MO(MDIA_XX) ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS
  290. ,MO(UNLOCK) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U
  291. ,KC_NO ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS
  292. ,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D
  293. ,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2
  294. ,KC_WSTP ,KC_WREF
  295. ,KC_WSCH
  296. ,KC_WBAK ,KC_TRNS ,KC_WHOM
  297. // right hand
  298. ,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,MO(MDIA_XX)
  299. ,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(UNLOCK)
  300. ,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_NO
  301. ,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT
  302. ,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS
  303. ,KC_MPRV ,KC_MNXT
  304. ,KC_VOLU
  305. ,KC_VOLD ,KC_MSTP ,KC_MPLY
  306. ),
  307. /* Keymap 22: Media Unlock Layer
  308. *
  309. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  310. * | | Esc | | | | | | | | | | | | | |
  311. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  312. * | Unlock | | | | | | | | | | | | | | Unlock |
  313. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  314. * | | | | | | |------| |------| | | | | | |
  315. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  316. * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
  317. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  318. * | | | | | | | | | | | |
  319. * `----------------------------------' `----------------------------------'
  320. * ,-------------. ,-------------.
  321. * | | | | | |
  322. * ,------|------|------| |------+------+------.
  323. * | | | | | | | |
  324. * | | |------| |------| | |
  325. * | | | | | | | |
  326. * `--------------------' `--------------------'
  327. */
  328. [MDIA_XX] = KEYMAP(
  329. // left hand
  330. KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  331. ,KC_FN1 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  332. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  333. ,KC_CAPS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  334. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  335. ,KC_TRNS ,KC_TRNS
  336. ,KC_TRNS
  337. ,KC_TRNS,KC_TRNS ,KC_TRNS
  338. // right hand
  339. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  340. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
  341. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  342. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
  343. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  344. ,KC_TRNS ,KC_TRNS
  345. ,KC_TRNS
  346. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  347. ),
  348. /* Keymap 22: Unlock Layer
  349. *
  350. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  351. * | Unlock | | | | | | | | | | | | | | Unlock |
  352. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  353. * | | | | | | | | | | | | | | | |
  354. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  355. * | | | | | | |------| |------| | | | | | |
  356. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  357. * | | | | | | | | | | | | | | | |
  358. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  359. * | | | | | | | | | | | |
  360. * `----------------------------------' `----------------------------------'
  361. * ,-------------. ,-------------.
  362. * | | | | | |
  363. * ,------|------|------| |------+------+------.
  364. * | | | | | | | |
  365. * | | |------| |------| | |
  366. * | | | | | | | |
  367. * `--------------------' `--------------------'
  368. */
  369. [UNLOCK] = KEYMAP(
  370. // left hand
  371. KC_FN1 ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  372. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  373. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  374. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  375. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  376. ,KC_TRNS ,KC_TRNS
  377. ,KC_TRNS
  378. ,KC_TRNS,KC_TRNS ,KC_TRNS
  379. // right hand
  380. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
  381. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  382. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  383. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  384. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  385. ,KC_TRNS ,KC_TRNS
  386. ,KC_TRNS
  387. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  388. )
  389. };
  390. const uint16_t PROGMEM fn_actions[] = {
  391. [1] = ACTION_LAYER_CLEAR(ON_PRESS) // FN1 - clear to base layer
  392. ,[2] = ACTION_LAYER_INVERT(SYMB_TG, ON_PRESS) // FN2 - toggle to Symbols on press
  393. ,[3] = ACTION_LAYER_INVERT(MDIA_TG, ON_PRESS) // FN3 - toggle to Media on press
  394. };
  395. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  396. {
  397. // MACRODOWN only works in this function
  398. switch(id) {
  399. case 0:
  400. if (record->event.pressed) {
  401. register_code(KC_RSFT);
  402. } else {
  403. unregister_code(KC_RSFT);
  404. }
  405. break;
  406. }
  407. return MACRO_NONE;
  408. };
  409. // Runs just one time when the keyboard initializes.
  410. void matrix_init_user(void) {
  411. };
  412. // Runs constantly in the background, in a loop.
  413. void matrix_scan_user(void) {
  414. uint8_t layer = biton32(layer_state);
  415. // do not change lights for locking and unlocking
  416. if(layer == UNLOCK || layer == LOCK || layer == SYMB_XX || layer == MDIA_XX) {
  417. return;
  418. }
  419. ergodox_board_led_off();
  420. ergodox_right_led_1_off();
  421. ergodox_right_led_2_off();
  422. ergodox_right_led_3_off();
  423. // caps lock turns on red light
  424. if(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
  425. ergodox_right_led_1_on();
  426. }
  427. // symbol lock turns on green light
  428. if(layer == SYMB_MO || layer == SYMB_TG) {
  429. ergodox_right_led_2_on();
  430. }
  431. // media lock turns on blue light
  432. if(layer == MDIA_MO || layer == MDIA_TG) {
  433. ergodox_right_led_3_on();
  434. }
  435. };