keymap.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. #include QMK_KEYBOARD_H
  2. extern keymap_config_t keymap_config;
  3. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  4. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  5. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  6. // entirely and just use numbers.
  7. #define _COLEMAK 0
  8. #define _SYMB 1
  9. #define _NAV 2
  10. #define _INTER 3
  11. #define _ADJUST 4
  12. enum custom_keycodes {
  13. COLEMAK = SAFE_RANGE,
  14. SYMB,
  15. NAV,
  16. INTER,
  17. ADJUST,
  18. // These use process_record_user()
  19. M_BRACKET_LEFT,
  20. M_BRACKET_RIGHT,
  21. SHRUG,
  22. WAVE,
  23. YOSHI,
  24. THUMB_UP,
  25. NBSP
  26. };
  27. // Make macros a bit simpler with this shortcut.
  28. #define TAP_ONCE(code) \
  29. register_code (code); \
  30. unregister_code (code)
  31. // Is shift being held? Let's store this in a bool.
  32. static bool shift_held = false;
  33. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  34. switch(keycode) {
  35. case SHRUG:
  36. if (record->event.pressed) {
  37. unicode_input_start(); register_hex(0xaf); unicode_input_finish();
  38. TAP_ONCE (KC_BSLS);
  39. register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
  40. unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
  41. register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
  42. TAP_ONCE (KC_SLSH);
  43. unicode_input_start (); register_hex(0xaf); unicode_input_finish();
  44. }
  45. return false;
  46. break;
  47. case YOSHI:
  48. if (record->event.pressed) {
  49. SEND_STRING(":yellow_yoshi:");
  50. }
  51. return false;
  52. break;
  53. case THUMB_UP:
  54. if (record->event.pressed) {
  55. SEND_STRING(SS_LALT("D83D+DC4D"));
  56. }
  57. return false;
  58. break;
  59. case WAVE:
  60. if (record->event.pressed) {
  61. SEND_STRING(SS_LALT("D83D+DC4B"));
  62. }
  63. return false;
  64. break;
  65. case NBSP:
  66. if (record->event.pressed) {
  67. SEND_STRING(" ");
  68. }
  69. return false;
  70. break;
  71. case KC_LSFT:
  72. shift_held = record->event.pressed;
  73. return true;
  74. break;
  75. case KC_RSFT:
  76. shift_held = record->event.pressed;
  77. return true;
  78. break;
  79. case M_BRACKET_LEFT: {
  80. if (record->event.pressed) {
  81. if (shift_held) {
  82. unregister_code(KC_LSFT);
  83. unregister_code(KC_RSFT);
  84. register_code(KC_LBRC);
  85. } else {
  86. register_code(KC_LSFT);
  87. register_code(KC_9);
  88. }
  89. } else { // Release the key
  90. unregister_code(KC_LBRC);
  91. unregister_code(KC_LSFT);
  92. unregister_code(KC_RSFT);
  93. unregister_code(KC_9);
  94. }
  95. return false;
  96. break;
  97. }
  98. case M_BRACKET_RIGHT: {
  99. if (record->event.pressed) {
  100. if (shift_held) {
  101. unregister_code(KC_LSFT);
  102. unregister_code(KC_RSFT);
  103. register_code(KC_RBRC);
  104. } else {
  105. register_code(KC_LSFT);
  106. register_code(KC_0);
  107. }
  108. } else { // Release the key
  109. unregister_code(KC_RBRC);
  110. unregister_code(KC_LSFT);
  111. unregister_code(KC_RSFT);
  112. unregister_code(KC_0);
  113. }
  114. return false;
  115. break;
  116. }
  117. }
  118. return true;
  119. };
  120. // Shortcut to make keymap more readable
  121. #define KC_CTDN LCTL(KC_DOWN)
  122. #define KC_SYQT LT(_SYMB,KC_QUOT)
  123. #define SYM_L MO(_SYMB)
  124. #define MO_INTR MO(_INTER)
  125. #define TT_ADJ TT(_ADJUST)
  126. #define UC_00E0 UC(0x00E0)
  127. #define UC_00FC UC(0x00FC)
  128. #define UC_00E8 UC(0x00E8)
  129. #define UC_00F6 UC(0x00F6)
  130. #define UC_00E1 UC(0x00E1)
  131. #define UC_00F9 UC(0x00F9)
  132. #define UC_00E9 UC(0x00E9)
  133. #define UC_00ED UC(0x00ED)
  134. #define UC_00F3 UC(0x00F3)
  135. #define UC_00E2 UC(0x00E2)
  136. #define UC_00E7 UC(0x00E7)
  137. #define UC_0171 UC(0x0171)
  138. #define UC_00EA UC(0x00EA)
  139. #define UC_0151 UC(0x0151)
  140. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  141. [_COLEMAK] = LAYOUT(
  142. //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
  143. KC_GRV ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_EQL ,
  144. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  145. KC_TAB ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_G ,KC_ESC , KC_CTDN ,KC_J ,KC_L ,KC_U ,KC_Y ,KC_SCLN ,KC_BSLS ,
  146. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  147. SYM_L ,KC_A ,KC_R ,KC_S ,KC_T ,KC_D ,M_BRACKET_LEFT, M_BRACKET_RIGHT ,KC_H ,KC_N ,KC_E ,KC_I ,KC_O ,KC_SYQT ,
  148. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  149. KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,TT(_NAV),TT(_SYMB), TT(_SYMB),TT(_NAV),KC_K ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSFT ,
  150. //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
  151. MO_INTR ,KC_LCTL ,KC_HYPR ,KC_LALT , KC_LCMD , KC_BSPC ,KC_LCTL , KC_ENT ,KC_SPC , KC_RCMD , TT_ADJ ,KC_HYPR ,KC_RCTL ,MO_INTR
  152. //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
  153. ),
  154. [_SYMB] = LAYOUT(
  155. //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
  156. _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
  157. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  158. _______ ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,_______ , _______ ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,_______ ,
  159. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  160. _______ ,KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC ,KC_LCBR , KC_RCBR ,KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_MINS ,KC_UNDS ,_______ ,
  161. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  162. _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
  163. //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
  164. _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , _______ , _______ ,_______ ,_______ ,_______
  165. //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
  166. ),
  167. [_NAV] = LAYOUT(
  168. //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
  169. _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
  170. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  171. XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
  172. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  173. XXXXXXX ,XXXXXXX ,KC_VOLD ,KC_VOLU ,KC_MUTE ,XXXXXXX ,_______ , _______ ,XXXXXXX ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,
  174. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  175. XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
  176. //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
  177. _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,XXXXXXX , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______
  178. //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
  179. ),
  180. [_INTER] = LAYOUT(
  181. //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
  182. XXXXXXX ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
  183. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  184. XXXXXXX ,UC_00E0 ,WAVE ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,UC_00FC ,UC_00E8 ,YOSHI ,UC_00F6 ,XXXXXXX ,
  185. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  186. _______ ,UC_00E1 ,XXXXXXX ,SHRUG ,THUMB_UP,XXXXXXX ,_______ , _______ ,XXXXXXX ,UC_00F9 ,UC_00E9 ,UC_00ED ,UC_00F3 ,_______ ,
  187. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  188. XXXXXXX ,UC_00E2 ,XXXXXXX ,UC_00E7 ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,UC_0171 ,UC_00EA ,XXXXXXX ,UC_0151 ,XXXXXXX ,
  189. //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
  190. _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,NBSP , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______
  191. //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
  192. ),
  193. [_ADJUST] = LAYOUT(
  194. //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
  195. XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
  196. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  197. XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
  198. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  199. _______ ,XXXXXXX ,RGB_VAD ,RGB_VAI ,RGB_TOG ,XXXXXXX ,_______ , _______ ,XXXXXXX ,RESET ,DEBUG ,AU_TOG ,XXXXXXX ,_______ ,
  200. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  201. XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
  202. //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
  203. _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,XXXXXXX , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______
  204. //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
  205. )
  206. };
  207. #ifdef AUDIO_ENABLE
  208. float tone_colemak[][2] = SONG(ZELDA_TREASURE);
  209. #endif
  210. void persistent_default_layer_set(uint16_t default_layer) {
  211. eeconfig_update_default_layer(default_layer);
  212. default_layer_set(default_layer);
  213. }
  214. // Set unicode in Mac OS.
  215. void matrix_init_user(void) {
  216. set_unicode_input_mode(UC_OSX);
  217. };
  218. // Change LED colors depending on the layer.
  219. uint32_t layer_state_set_user(uint32_t state) {
  220. switch (biton32(state)) {
  221. case _SYMB:
  222. rgblight_setrgb_orange();
  223. break;
  224. case _NAV:
  225. rgblight_setrgb_springgreen();
  226. break;
  227. case _INTER:
  228. rgblight_setrgb_teal();
  229. break;
  230. case _ADJUST:
  231. rgblight_setrgb_red();
  232. break;
  233. default: // for any other layers, or the default layer
  234. rgblight_setrgb_yellow();
  235. break;
  236. }
  237. return state;
  238. };