keymap.c 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. /* Copyright 2021 Sean Johnson
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. #include "muse.h"
  18. #define a KC_A
  19. #define b KC_B
  20. #define c KC_C
  21. #define d KC_D
  22. #define e KC_E
  23. #define f KC_F
  24. #define g KC_G
  25. #define h KC_H
  26. #define i KC_I
  27. #define j KC_J
  28. #define k KC_K
  29. #define l KC_L
  30. #define m KC_M
  31. #define n KC_N
  32. #define o KC_O
  33. #define p KC_P
  34. #define q KC_Q
  35. #define r KC_R
  36. #define s KC_S
  37. #define t KC_T
  38. #define u KC_U
  39. #define v KC_V
  40. #define w KC_W
  41. #define x KC_X
  42. #define y KC_Y
  43. #define z KC_Z
  44. #define lopt KC_LALT
  45. #define lctl KC_LCTL
  46. #define lsft KC_LSFT
  47. #define ropt KC_RALT
  48. #define rctl KC_RCTL
  49. #define rsft KC_RSFT
  50. #define n0 KC_0
  51. #define n1 KC_1
  52. #define n2 KC_2
  53. #define n3 KC_3
  54. #define n4 KC_4
  55. #define n5 KC_5
  56. #define n6 KC_6
  57. #define n7 KC_7
  58. #define n8 KC_8
  59. #define n9 KC_9
  60. #define bspc KC_BSPC
  61. #define caps KC_CAPS
  62. #define comm KC_COMM
  63. #define dash A(KC_MINS)
  64. #define scln KC_SCLN
  65. #define slsh KC_SLSH
  66. #define spc KC_SPC
  67. #define tab KC_TAB
  68. #define del KC_DEL
  69. #define dot KC_DOT
  70. #define ent KC_ENT
  71. #define mins KC_MINS
  72. #define quot KC_QUOT
  73. #define esc KC_ESC
  74. #define escg KC_GESC
  75. #define down KC_DOWN
  76. #define home G(KC_LEFT)
  77. #define end G(KC_RGHT)
  78. #define up KC_UP
  79. #define pgdn KC_PGDN
  80. #define pgup KC_PGUP
  81. #define left KC_LEFT
  82. #define rght KC_RGHT
  83. #define tabl G(S(KC_LBRC))
  84. #define tabr G(S(KC_RBRC))
  85. #define fwd G(KC_RBRC)
  86. #define back G(KC_LBRC)
  87. #define dtl C(KC_LEFT)
  88. #define dtr C(KC_RGHT)
  89. #define slup S(A(KC_UP))
  90. #define sldn S(A(KC_DOWN))
  91. #define f1 KC_F1
  92. #define f2 KC_F2
  93. #define f3 KC_F3
  94. #define f4 KC_F4
  95. #define f5 KC_F5
  96. #define f6 KC_F6
  97. #define f7 KC_F7
  98. #define f8 KC_F8
  99. #define f9 KC_F9
  100. #define f10 KC_F10
  101. #define f11 KC_F11
  102. #define f12 KC_F12
  103. #define f13 KC_F13
  104. #define f14 KC_F14
  105. #define f15 KC_F15
  106. #define f16 KC_F16
  107. #define f17 KC_F17
  108. #define f18 KC_F18
  109. #define f19 KC_F19
  110. #define f20 KC_F20
  111. #define mute KC_MUTE
  112. #define next KC_MNXT
  113. #define play KC_MPLY
  114. #define prev KC_MPRV
  115. #define vold KC_VOLD
  116. #define volu KC_VOLU
  117. #define symb MO(SYMB)
  118. #define move MO(MOVE)
  119. #define func MO(FUNC)
  120. #define rset RESET
  121. #define powr KC_POWER
  122. #define ____ KC_TRNS
  123. #define xxxx KC_NO
  124. #define emji LCMD(LCTL(KC_SPC))
  125. #define hypr OSM(MOD_HYPR)
  126. #define brup KC_BRMU
  127. #define brdn KC_BRMD
  128. #define escf LT(FUNC,KC_ESC)
  129. enum planck_layers {
  130. BASE,
  131. SYMB,
  132. MOVE,
  133. FUNC,
  134. };
  135. enum planck_keycodes {
  136. ampr = SAFE_RANGE,
  137. astr,
  138. at,
  139. bsls,
  140. circ,
  141. dlr,
  142. eql,
  143. exlm,
  144. grv,
  145. hash,
  146. lbrc,
  147. lcbr,
  148. lprn,
  149. perc,
  150. pipe,
  151. plus,
  152. rbrc,
  153. rcbr,
  154. rprn,
  155. tild,
  156. cmd,
  157. };
  158. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  159. [BASE] = LAYOUT_planck_grid(
  160. tab, q, w, f, p, g, j, l, u, y, scln, mins,
  161. bspc, a, r, s, t, d, h, n, e, i, o, quot,
  162. lsft, z, x, c, v, b, k, m, comm, dot, slsh, rsft,
  163. hypr, lctl, lopt, cmd, move, ent, spc, symb, cmd, ropt, rctl, func
  164. ),
  165. [SYMB] = LAYOUT_planck_grid(
  166. esc, n7, n5, n3, n1, n9, n8, n0, n2, n4, n6, dash,
  167. bspc, lbrc, lcbr, lprn, hash, pipe, astr, dlr, rprn, rcbr, rbrc, at,
  168. ____, grv, exlm, circ, tild, perc, ampr, plus, mins, eql, bsls, ____,
  169. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
  170. ),
  171. [MOVE] = LAYOUT_planck_grid(
  172. esc, xxxx, slup, dtl, dtr, xxxx, xxxx, home, up, end, xxxx, ____,
  173. del, xxxx, sldn, tabl, tabr, xxxx, xxxx, left, down, rght, xxxx, ____,
  174. ____, xxxx, xxxx, back, fwd, xxxx, xxxx, pgdn, pgup, xxxx, xxxx, ____,
  175. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
  176. ),
  177. [FUNC] = LAYOUT_planck_grid(
  178. rset, f7, f5, f3, f1, f9, f8, f10, f2, f4, f6, volu,
  179. powr, f17, f15, f13, f11, f19, f18, f20, f12, f14, f16, vold,
  180. brup, ____, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, mute,
  181. brdn, caps, ____, ____, ____, ____, ____, ____, prev, next, play, ____
  182. ),
  183. };
  184. bool send_string_if_keydown(keyrecord_t *record, const char *s) {
  185. if (record->event.pressed) {
  186. send_string(s);
  187. }
  188. return true;
  189. }
  190. int cmd_keys_down = 0;
  191. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  192. switch (keycode) {
  193. // Override the default auto shifted symbols to use SEND_STRING See
  194. // https://github.com/qmk/qmk_firmware/issues/4072
  195. case ampr:
  196. return send_string_if_keydown(record, "&");
  197. case astr:
  198. return send_string_if_keydown(record, "*");
  199. case at:
  200. return send_string_if_keydown(record, "@");
  201. case bsls:
  202. return send_string_if_keydown(record, "\\");
  203. case circ:
  204. return send_string_if_keydown(record, "^");
  205. case dlr:
  206. return send_string_if_keydown(record, "$");
  207. case eql:
  208. return send_string_if_keydown(record, "=");
  209. case exlm:
  210. return send_string_if_keydown(record, "!");
  211. case grv:
  212. return send_string_if_keydown(record, "`");
  213. case hash:
  214. return send_string_if_keydown(record, "#");
  215. case lbrc:
  216. return send_string_if_keydown(record, "[");
  217. case lcbr:
  218. return send_string_if_keydown(record, "{");
  219. case lprn:
  220. return send_string_if_keydown(record, "(");
  221. case perc:
  222. return send_string_if_keydown(record, "%");
  223. case pipe:
  224. return send_string_if_keydown(record, "|");
  225. case plus:
  226. return send_string_if_keydown(record, "+");
  227. case rbrc:
  228. return send_string_if_keydown(record, "]");
  229. case rcbr:
  230. return send_string_if_keydown(record, "}");
  231. case rprn:
  232. return send_string_if_keydown(record, ")");
  233. case tild:
  234. return send_string_if_keydown(record, "~");
  235. // cmd + cmd -> cmd + ctl
  236. case cmd:
  237. if (record->event.pressed) {
  238. if (cmd_keys_down == 0) {
  239. register_code(KC_LCMD);
  240. } else {
  241. register_code(KC_LCTL);
  242. }
  243. cmd_keys_down++;
  244. } else {
  245. if (cmd_keys_down == 1) {
  246. unregister_code(KC_LCMD);
  247. } else {
  248. unregister_code(KC_LCTL);
  249. }
  250. cmd_keys_down--;
  251. }
  252. return true;
  253. }
  254. return true;
  255. }