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.

229 lines
11 KiB

  1. #include QMK_KEYBOARD_H
  2. #include "version.h"
  3. #include "bootmagic.h"
  4. #define QWERTY 0 // qwerty layer
  5. #define COLEMAK 1 // colemak layer
  6. #define FN 2 // function layer
  7. enum custom_keycodes {
  8. QWRTY = SAFE_RANGE, // can always be here
  9. CLMK,
  10. VRSN,
  11. FNCTN
  12. };
  13. /* false: Caps Lock LED is off
  14. true: Caps Lock LED is on */
  15. bool CAPS_LED = false;
  16. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  17. /* Keymap 0: Qwerty layer
  18. *
  19. * ,--------------------------------------------------. ,--------------------------------------------------.
  20. * | ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep |
  21. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  22. * | Tab | Q | W | E | R | T | Mute | | { | Y | U | I | O | P | \ |
  23. * |--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------|
  24. * | Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
  25. * |--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------|
  26. * | LShift | Z | X | C | V | B | | | ] | N | M | , | . | / | RShift |
  27. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  28. * |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl |
  29. * `----------------------------------' `----------------------------------'
  30. * ,-------------. ,-------------.
  31. * | Caps | LGui | | Ins | Del |
  32. * ,------|------|------| |------+--------+------.
  33. * | | | Home | | PgUp | | |
  34. * | Space|Backsp|------| |------| Tab |Enter |
  35. * | |ace | End | | PgDn | | |
  36. * `--------------------' `----------------------'
  37. */
  38. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
  39. // Otherwise, it needs KC_*
  40. [QWERTY] = LAYOUT_ergodox( // layer 0 : qwerty
  41. // left hand
  42. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_COPY,
  43. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MUTE,
  44. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
  45. KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, TT(FN),
  46. KC_LCTL, KC_LGUI, KC_LALT, KC_LEFT, KC_RGHT,
  47. KC_CAPS, KC_LGUI,
  48. KC_HOME,
  49. KC_SPC, KC_BSPC, KC_END,
  50. // right hand
  51. KC_PASTE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLEP,
  52. KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
  53. KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE,
  54. KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
  55. KC_DOWN, KC_UP, KC_MINS, KC_EQL, KC_RCTL,
  56. KC_INS, KC_DEL,
  57. KC_PGUP,
  58. KC_PGDN, KC_TAB, KC_ENT
  59. ),
  60. /* Keymap 1: Colemak layer
  61. *
  62. * ,--------------------------------------------------. ,--------------------------------------------------.
  63. * | ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep |
  64. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  65. * | Tab | Q | W | F | P | B | Mute | | { | J | L | U | Y | ; | \ |
  66. * |--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------|
  67. * | Esc | A | R | S | T | G |------| |------| M | N | E | I | O | ' |
  68. * |--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------|
  69. * | LShift | Z | X | C | D | V | | | ] | K | H | , | . | / | RShift |
  70. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  71. * |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl |
  72. * `----------------------------------' `----------------------------------'
  73. * ,-------------. ,-------------.
  74. * | Caps | LGui | | Ins | Del |
  75. * ,------|------|------| |------+--------+------.
  76. * | | | Home | | PgUp | | |
  77. * | Space|Backsp|------| |------| Tab |Enter |
  78. * | |ace | End | | PgDn | | |
  79. * `--------------------' `----------------------'
  80. */
  81. [COLEMAK] = LAYOUT_ergodox( // layer 1 : colemak
  82. // left hand
  83. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_COPY,
  84. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_MUTE,
  85. KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G,
  86. KC_LSPO, KC_Z, KC_X, KC_C, KC_D, KC_V, TT(FN),
  87. KC_LCTL, KC_LGUI, KC_LALT, KC_LEFT, KC_RGHT,
  88. KC_CAPS, KC_LGUI,
  89. KC_HOME,
  90. KC_SPC, KC_BSPC, KC_END,
  91. // right hand
  92. KC_PASTE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLEP,
  93. KC_LBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
  94. KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE,
  95. KC_RBRC, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
  96. KC_DOWN, KC_UP, KC_MINS, KC_EQL, KC_RCTL,
  97. KC_INS, KC_DEL,
  98. KC_PGUP,
  99. KC_PGDN, KC_TAB, KC_ENT
  100. ),
  101. /* Keymap 2: Function Layer
  102. *
  103. * ,---------------------------------------------------. ,--------------------------------------------------.
  104. * |Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
  105. * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
  106. * | | | | Prev | Play | Next | | | | | | | | | |
  107. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  108. * | | | | |VolDn | VolUp|------| |------| |QWRTY | CLMK | | | |
  109. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  110. * | | | | | | | | | | | | | | | |
  111. * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  112. * | | | | | | | | | | | |
  113. * `-----------------------------------' `----------------------------------'
  114. * ,-------------. ,-------------.
  115. * | | | | | |
  116. * ,------|------|------| |------+------+------.
  117. * | | | | | | | |
  118. * | | |------| |------| | |
  119. * | | | | | | | |
  120. * `--------------------' `--------------------'
  121. */
  122. // Functions
  123. [FN] = LAYOUT_ergodox(
  124. // left hand
  125. VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
  126. KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS,
  127. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU,
  128. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  129. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  130. KC_TRNS, KC_TRNS,
  131. KC_TRNS,
  132. KC_TRNS, KC_TRNS, KC_TRNS,
  133. // right hand
  134. KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
  135. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  136. KC_TRNS, QWRTY, CLMK, KC_TRNS, KC_TRNS, KC_TRNS,
  137. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  138. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  139. KC_TRNS, KC_TRNS,
  140. KC_TRNS,
  141. KC_TRNS, KC_TRNS, KC_TRNS
  142. ),
  143. };
  144. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  145. switch (keycode) {
  146. case VRSN:
  147. if (record->event.pressed) {
  148. SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
  149. }
  150. return false;
  151. break;
  152. case QWRTY:
  153. if (record->event.pressed) {
  154. set_single_persistent_default_layer(QWERTY);
  155. }
  156. return false;
  157. break;
  158. case CLMK:
  159. if (record->event.pressed) {
  160. set_single_persistent_default_layer(COLEMAK);
  161. }
  162. return false;
  163. break;
  164. case KC_CAPS:
  165. if (record->event.pressed) {
  166. // Turn LED1 On/Off for Caps Lock
  167. if (CAPS_LED) {
  168. ergodox_right_led_1_off();
  169. CAPS_LED = false;
  170. } else {
  171. ergodox_right_led_1_on();
  172. CAPS_LED = true;
  173. }
  174. }
  175. return true;
  176. break;
  177. }
  178. return true;
  179. };
  180. // Set LED according to the default layer
  181. void default_layer_led_set(void) {
  182. switch (biton32(eeconfig_read_default_layer())) {
  183. case COLEMAK:
  184. // LED2 for COLEMAK
  185. ergodox_right_led_2_on();
  186. break;
  187. case QWERTY:
  188. // LED3 for QWERTY
  189. ergodox_right_led_3_on();
  190. break;
  191. };
  192. };
  193. // Runs just one time when the keyboard initializes.
  194. void matrix_init_user(void) {
  195. default_layer_led_set();
  196. };
  197. uint32_t layer_state_set_user(uint32_t state) {
  198. ergodox_led_all_off();
  199. switch (biton32(state)) {
  200. case FN:
  201. // Red led on Pro Micro for Fn layer
  202. ergodox_board_led_on();
  203. break;
  204. };
  205. if (CAPS_LED) {
  206. ergodox_right_led_1_on();
  207. }
  208. default_layer_led_set();
  209. return state;
  210. };
  211. void suspend_power_down_user(void) {
  212. ergodox_led_all_off();
  213. };
  214. void suspend_wakeup_init_user(void) {
  215. default_layer_led_set();
  216. };