keymap.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  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 down KC_DOWN
  75. #define home G(KC_LEFT)
  76. #define end G(KC_RGHT)
  77. #define up KC_UP
  78. #define pgdn KC_PGDN
  79. #define pgup KC_PGUP
  80. #define left KC_LEFT
  81. #define rght KC_RGHT
  82. #define tabl G(S(KC_LBRC))
  83. #define tabr G(S(KC_RBRC))
  84. #define fwd G(KC_RBRC)
  85. #define back G(KC_LBRC)
  86. #define dtl C(KC_LEFT)
  87. #define dtr C(KC_RGHT)
  88. #define slup S(A(KC_UP))
  89. #define sldn S(A(KC_DOWN))
  90. #define f1 KC_F1
  91. #define f2 KC_F2
  92. #define f3 KC_F3
  93. #define f4 KC_F4
  94. #define f5 KC_F5
  95. #define f6 KC_F6
  96. #define f7 KC_F7
  97. #define f8 KC_F8
  98. #define f9 KC_F9
  99. #define f10 KC_F10
  100. #define f11 KC_F11
  101. #define f12 KC_F12
  102. #define f13 KC_F13
  103. #define f14 KC_F14
  104. #define f15 KC_F15
  105. #define f16 KC_F16
  106. #define f17 KC_F17
  107. #define f18 KC_F18
  108. #define f19 KC_F19
  109. #define f20 KC_F20
  110. #define mute KC_MUTE
  111. #define next KC_MNXT
  112. #define play KC_MPLY
  113. #define prev KC_MPRV
  114. #define vold KC_VOLD
  115. #define volu KC_VOLU
  116. #define symb MO(SYMB)
  117. #define move MO(MOVE)
  118. #define func MO(FUNC)
  119. #define rset QK_BOOT
  120. #define powr KC_PWR
  121. #define ____ KC_TRNS
  122. #define xxxx KC_NO
  123. #define emji LCMD(LCTL(KC_SPC))
  124. #define hypr OSM(MOD_HYPR)
  125. #define brup KC_BRMU
  126. #define brdn KC_BRMD
  127. #define escf LT(FUNC,KC_ESC)
  128. enum preonic_layers {
  129. BASE,
  130. SYMB,
  131. MOVE,
  132. FUNC,
  133. };
  134. enum preonic_keycodes {
  135. ampr = SAFE_RANGE,
  136. astr,
  137. at,
  138. bsls,
  139. circ,
  140. dlr,
  141. eql,
  142. exlm,
  143. grv,
  144. hash,
  145. lbrc,
  146. lcbr,
  147. lprn,
  148. perc,
  149. pipe,
  150. plus,
  151. rbrc,
  152. rcbr,
  153. rprn,
  154. tild,
  155. cmd,
  156. };
  157. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  158. [BASE] = LAYOUT_preonic_grid(
  159. tild, n7, n5, n3, n1, n9, n8, n0, n2, n4, n6, mins,
  160. tab, q, w, f, p, g, j, l, u, y, scln, pipe,
  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, escf
  164. ),
  165. [SYMB] = LAYOUT_preonic_grid(
  166. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  167. tild, n7, n5, n3, n1, n9, n8, n0, n2, n4, n6, dash,
  168. bspc, lbrc, lcbr, lprn, hash, pipe, astr, dlr, rprn, rcbr, rbrc, at,
  169. ____, grv, exlm, circ, ampr, ____, ____, plus, mins, eql, bsls, perc,
  170. caps, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
  171. ),
  172. [MOVE] = LAYOUT_preonic_grid(
  173. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  174. ____, xxxx, slup, dtl, dtr, xxxx, xxxx, home, up, end, xxxx, xxxx,
  175. del, xxxx, sldn, tabl, tabr, xxxx, xxxx, left, down, rght, xxxx, xxxx,
  176. ____, xxxx, xxxx, back, fwd, xxxx, xxxx, pgdn, pgup, xxxx, xxxx, ____,
  177. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
  178. ),
  179. [FUNC] = LAYOUT_preonic_grid(
  180. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  181. rset, f7, f5, f3, f1, f9, f8, f10, f2, f4, f6, volu,
  182. powr, f17, f15, f13, f11, f19, f18, f20, f12, f14, f16, vold,
  183. brup, brdn, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, ____,
  184. ____, ____, ____, ____, ____, ____, ____, mute, play, prev, next, ____
  185. ),
  186. };
  187. bool send_string_if_keydown(keyrecord_t *record, const char *s) {
  188. if (record->event.pressed) {
  189. send_string(s);
  190. }
  191. return true;
  192. }
  193. int cmd_keys_down = 0;
  194. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  195. switch (keycode) {
  196. // Override the default auto shifted symbols to use SEND_STRING See
  197. // https://github.com/qmk/qmk_firmware/issues/4072
  198. case ampr:
  199. return send_string_if_keydown(record, "&");
  200. case astr:
  201. return send_string_if_keydown(record, "*");
  202. case at:
  203. return send_string_if_keydown(record, "@");
  204. case bsls:
  205. return send_string_if_keydown(record, "\\");
  206. case circ:
  207. return send_string_if_keydown(record, "^");
  208. case dlr:
  209. return send_string_if_keydown(record, "$");
  210. case eql:
  211. return send_string_if_keydown(record, "=");
  212. case exlm:
  213. return send_string_if_keydown(record, "!");
  214. case grv:
  215. return send_string_if_keydown(record, "`");
  216. case hash:
  217. return send_string_if_keydown(record, "#");
  218. case lbrc:
  219. return send_string_if_keydown(record, "[");
  220. case lcbr:
  221. return send_string_if_keydown(record, "{");
  222. case lprn:
  223. return send_string_if_keydown(record, "(");
  224. case perc:
  225. return send_string_if_keydown(record, "%");
  226. case pipe:
  227. return send_string_if_keydown(record, "|");
  228. case plus:
  229. return send_string_if_keydown(record, "+");
  230. case rbrc:
  231. return send_string_if_keydown(record, "]");
  232. case rcbr:
  233. return send_string_if_keydown(record, "}");
  234. case rprn:
  235. return send_string_if_keydown(record, ")");
  236. case tild:
  237. return send_string_if_keydown(record, "~");
  238. // cmd + cmd -> cmd + ctl
  239. case cmd:
  240. if (record->event.pressed) {
  241. if (cmd_keys_down == 0) {
  242. register_code(KC_LCMD);
  243. } else {
  244. register_code(KC_LCTL);
  245. }
  246. cmd_keys_down++;
  247. } else {
  248. if (cmd_keys_down == 1) {
  249. unregister_code(KC_LCMD);
  250. } else {
  251. unregister_code(KC_LCTL);
  252. }
  253. cmd_keys_down--;
  254. }
  255. return true;
  256. }
  257. return true;
  258. }