2
0

keymap.c 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841
  1. // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
  2. // this is the style you want to emulate.
  3. #include "promethium.h"
  4. #include "action_layer.h"
  5. #ifdef AUDIO_ENABLE
  6. #include "audio.h"
  7. #include "musical_notes.h"
  8. #endif
  9. #include "eeconfig.h"
  10. #include "process_unicode.h"
  11. #include "quantum.h"
  12. #include "rgbsps.h"
  13. #include "ps2_mouse.h"
  14. #include "ps2.h"
  15. #define COUNT(x) (sizeof (x) / sizeof (*(x)))
  16. // #define RGBLED_NUM 5
  17. // struct cRGB led[RGBLED_NUM];
  18. extern keymap_config_t keymap_config;
  19. enum layers {
  20. _QWERTY,
  21. _COLEMAK,
  22. _WORKMAN,
  23. _PUNC,
  24. _NUM,
  25. _FUNC,
  26. _EMOJI,
  27. _GUI,
  28. };
  29. enum planck_keycodes {
  30. // layouts
  31. QWERTY = SAFE_RANGE,
  32. COLEMAK,
  33. WORKMAN,
  34. // layer switchers
  35. PUNC,
  36. NUM,
  37. FUNC,
  38. EMOJI,
  39. GUI,
  40. // os switchers
  41. LINUX,
  42. WIN,
  43. OSX,
  44. };
  45. // Fillers to make layering clearer
  46. #define _______ KC_TRNS
  47. #define XXXXXXX KC_NO
  48. // unicode map
  49. enum unicode_name {
  50. GRIN, // grinning face 😊
  51. TJOY, // tears of joy 😂
  52. SMILE, // grining face with smiling eyes 😁
  53. HEART, // heart ❤
  54. EYERT, // smiling face with heart shaped eyes 😍
  55. CRY, // crying face 😭
  56. SMEYE, // smiling face with smiling eyes 😊
  57. UNAMU, // unamused 😒
  58. KISS, // kiss 😘
  59. HART2, // two hearts 💕
  60. WEARY, // weary 😩
  61. OKHND, // ok hand sign 👌
  62. PENSV, // pensive 😔
  63. SMIRK, // smirk 😏
  64. RECYC, // recycle ♻
  65. WINK, // wink 😉
  66. THMUP, // thumb up 👍
  67. THMDN, // thumb down 👎
  68. PRAY, // pray 🙏
  69. PHEW, // relieved 😌
  70. MUSIC, // musical notes
  71. FLUSH, // flushed 😳
  72. CELEB, // celebration 🙌
  73. CRY2, // crying face 😢
  74. COOL, // smile with sunglasses 😎
  75. NOEVS, // see no evil
  76. NOEVH, // hear no evil
  77. NOEVK, // speak no evil
  78. POO, // pile of poo
  79. EYES, // eyes
  80. VIC, // victory hand
  81. BHART, // broken heart
  82. SLEEP, // sleeping face
  83. SMIL2, // smiling face with open mouth & sweat
  84. HUNRD, // 100
  85. CONFU, // confused
  86. TONGU, // face with tongue & winking eye
  87. DISAP, // disappointed
  88. YUMMY, // face savoring delicious food
  89. CLAP, // hand clapping
  90. FEAR, // face screaming in fear
  91. HORNS, // smiling face with horns
  92. HALO, // smiling face with halo
  93. BYE, // waving hand
  94. SUN, // sun
  95. MOON, // moon
  96. SKULL, // skull
  97. };
  98. const uint32_t PROGMEM unicode_map[] = {
  99. [GRIN] = 0x1F600,
  100. [TJOY] = 0x1F602,
  101. [SMILE] = 0x1F601,
  102. [HEART] = 0x2764,
  103. [EYERT] = 0x1f60d,
  104. [CRY] = 0x1f62d,
  105. [SMEYE] = 0x1F60A,
  106. [UNAMU] = 0x1F612,
  107. [KISS] = 0x1F618,
  108. [HART2] = 0x1F495,
  109. [WEARY] = 0x1F629,
  110. [OKHND] = 0x1F44C,
  111. [PENSV] = 0x1F614,
  112. [SMIRK] = 0x1F60F,
  113. [RECYC] = 0x267B,
  114. [WINK] = 0x1F609,
  115. [THMUP] = 0x1F44D,
  116. [THMDN] = 0x1F44E,
  117. [PRAY] = 0x1F64F,
  118. [PHEW] = 0x1F60C,
  119. [MUSIC] = 0x1F3B6,
  120. [FLUSH] = 0x1F633,
  121. [CELEB] = 0x1F64C,
  122. [CRY2] = 0x1F622,
  123. [COOL] = 0x1F60E,
  124. [NOEVS] = 0x1F648,
  125. [NOEVH] = 0x1F649,
  126. [NOEVK] = 0x1F64A,
  127. [POO] = 0x1F4A9,
  128. [EYES] = 0x1F440,
  129. [VIC] = 0x270C,
  130. [BHART] = 0x1F494,
  131. [SLEEP] = 0x1F634,
  132. [SMIL2] = 0x1F605,
  133. [HUNRD] = 0x1F4AF,
  134. [CONFU] = 0x1F615,
  135. [TONGU] = 0x1F61C,
  136. [DISAP] = 0x1F61E,
  137. [YUMMY] = 0x1F60B,
  138. [CLAP] = 0x1F44F,
  139. [FEAR] = 0x1F631,
  140. [HORNS] = 0x1F608,
  141. [HALO] = 0x1F607,
  142. [BYE] = 0x1F44B,
  143. [SUN] = 0x2600,
  144. [MOON] = 0x1F314,
  145. [SKULL] = 0x1F480,
  146. };
  147. // hybrid shift - =
  148. // #undef KC_LSFT
  149. // #define KC_LSFT MT(MOD_LSFT, KC_MINS)
  150. // #undef KC_RSFT
  151. // #define KC_RSFT MT(MOD_LSFT, KC_EQL)
  152. // hybrid right-gui & scroll lock (mapped to Compose in OS)
  153. #undef KC_RCTL
  154. #define KC_RCTL MT(MOD_LCTL, KC_SLCK)
  155. // RGBSPS
  156. const uint8_t PROGMEM LED_ALNUM[] = {
  157. LED_Z,
  158. LED_A,
  159. LED_Q,
  160. LED_W,
  161. LED_S,
  162. LED_X,
  163. LED_C,
  164. LED_D,
  165. LED_E,
  166. LED_R,
  167. LED_F,
  168. LED_V,
  169. LED_B,
  170. LED_G,
  171. LED_T,
  172. LED_N,
  173. LED_HH,
  174. LED_Y,
  175. LED_U,
  176. LED_J,
  177. LED_M,
  178. LED_COMM,
  179. LED_K,
  180. LED_I,
  181. LED_O,
  182. LED_L,
  183. LED_DOT,
  184. LED_SLSH,
  185. LED_SCLN,
  186. LED_P,
  187. LED_LSPC,
  188. LED_RSPC
  189. };
  190. const uint8_t PROGMEM LED_MODS[] = {
  191. LED_TAB,
  192. LED_ESC,
  193. LED_LSFT,
  194. LED_LCTL,
  195. LED_LGUI,
  196. LED_LALT,
  197. LED_RALT,
  198. LED_RGUI,
  199. LED_BKSP,
  200. LED_ENT,
  201. LED_RSFT,
  202. LED_RCTL
  203. };
  204. const uint8_t PROGMEM LED_FN[] = {
  205. LED_PUNC,
  206. LED_NUM,
  207. LED_FUNC,
  208. LED_EMOJI
  209. };
  210. const uint8_t PROGMEM LED_INDICATORS[] = {
  211. LED_IND_EMOJI,
  212. LED_IND_NUM,
  213. LED_IND_FUNC,
  214. LED_IND_BATTERY,
  215. LED_IND_USB,
  216. LED_IND_BLUETOOTH,
  217. };
  218. const uint8_t PROGMEM LED_TRACKPOINT[] = {
  219. LED_TRACKPOINT1,
  220. LED_TRACKPOINT2,
  221. LED_TRACKPOINT3,
  222. };
  223. void led_reset(void) {
  224. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  225. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 6, 0);
  226. }
  227. for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
  228. rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 0, 0);
  229. }
  230. for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
  231. rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 15);
  232. }
  233. }
  234. void led_layer_normal(void) {
  235. rgbsps_set(LED_IND_FUNC, 0, 0, 0);
  236. rgbsps_set(LED_IND_NUM, 0, 0, 0);
  237. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  238. led_reset();
  239. rgbsps_send();
  240. }
  241. void led_layer_func(void) {
  242. rgbsps_set(LED_IND_FUNC, 0, 15, 0);
  243. rgbsps_set(LED_IND_NUM, 0, 0, 0);
  244. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  245. led_reset();
  246. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  247. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
  248. }
  249. rgbsps_set(LED_I, 15, 0, 15);
  250. rgbsps_set(LED_J, 15, 0, 15);
  251. rgbsps_set(LED_K, 15, 0, 15);
  252. rgbsps_set(LED_L, 15, 0, 15);
  253. rgbsps_set(LED_U, 15, 0, 0);
  254. rgbsps_set(LED_O, 15, 0, 0);
  255. rgbsps_set(LED_COMM, 15, 0, 0);
  256. rgbsps_set(LED_DOT, 15, 0, 0);
  257. rgbsps_set(LED_SCLN, 15, 0, 0);
  258. rgbsps_set(LED_P, 15, 0, 0);
  259. rgbsps_set(LED_Q, 0, 15, 0);
  260. rgbsps_set(LED_W, 0, 15, 0);
  261. rgbsps_set(LED_E, 0, 15, 0);
  262. rgbsps_set(LED_R, 0, 15, 0);
  263. rgbsps_set(LED_A, 0, 15, 0);
  264. rgbsps_set(LED_S, 0, 15, 0);
  265. rgbsps_set(LED_D, 0, 15, 0);
  266. rgbsps_set(LED_F, 0, 15, 0);
  267. rgbsps_set(LED_Z, 0, 15, 0);
  268. rgbsps_set(LED_X, 0, 15, 0);
  269. rgbsps_set(LED_C, 0, 15, 0);
  270. rgbsps_set(LED_V, 0, 15, 0);
  271. rgbsps_send();
  272. }
  273. void led_layer_punc(void) {
  274. rgbsps_set(LED_IND_FUNC, 0, 15, 0);
  275. rgbsps_set(LED_IND_NUM, 0, 0, 15);
  276. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  277. led_reset();
  278. rgbsps_send();
  279. }
  280. void led_layer_num(void) {
  281. rgbsps_set(LED_IND_FUNC, 0, 0, 0);
  282. rgbsps_set(LED_IND_NUM, 0, 0, 15);
  283. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  284. led_reset();
  285. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  286. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
  287. }
  288. rgbsps_set(LED_U, 0, 5, 15);
  289. rgbsps_set(LED_I, 0, 5, 15);
  290. rgbsps_set(LED_O, 0, 5, 15);
  291. rgbsps_set(LED_J, 0, 5, 15);
  292. rgbsps_set(LED_K, 0, 5, 15);
  293. rgbsps_set(LED_L, 0, 5, 15);
  294. rgbsps_set(LED_M, 0, 5, 15);
  295. rgbsps_set(LED_COMM, 0, 5, 15);
  296. rgbsps_set(LED_DOT, 0, 5, 15);
  297. rgbsps_set(LED_FUNC, 0, 5, 15);
  298. rgbsps_set(LED_EMOJI, 0, 10, 15);
  299. rgbsps_set(LED_RALT, 0, 10, 15);
  300. rgbsps_set(LED_Q, 0, 10, 15);
  301. rgbsps_set(LED_W, 0, 10, 15);
  302. rgbsps_set(LED_E, 0, 10, 15);
  303. rgbsps_set(LED_R, 0, 10, 15);
  304. rgbsps_set(LED_T, 0, 10, 15);
  305. rgbsps_set(LED_Y, 0, 10, 15);
  306. rgbsps_set(LED_P, 0, 10, 15);
  307. rgbsps_set(LED_A, 0, 15, 15);
  308. rgbsps_set(LED_S, 0, 15, 15);
  309. rgbsps_set(LED_D, 0, 15, 15);
  310. rgbsps_set(LED_F, 0, 15, 15);
  311. rgbsps_set(LED_Z, 0, 15, 15);
  312. rgbsps_set(LED_X, 0, 15, 15);
  313. rgbsps_set(LED_C, 0, 15, 15);
  314. rgbsps_set(LED_V, 0, 15, 15);
  315. rgbsps_send();
  316. }
  317. void led_layer_emoji(void) {
  318. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  319. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 15, 0);
  320. }
  321. for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
  322. rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 15, 0);
  323. }
  324. for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
  325. rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 0);
  326. }
  327. rgbsps_set(LED_IND_FUNC, 0, 0, 0);
  328. rgbsps_set(LED_IND_NUM, 0, 0, 0);
  329. rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
  330. rgbsps_set(LED_PUNC, 15, 15, 15);
  331. rgbsps_set(LED_EMOJI, 15, 15, 15);
  332. rgbsps_send();
  333. }
  334. void led_layer_gui(void) {
  335. rgbsps_set(LED_IND_FUNC, 15, 10, 15);
  336. rgbsps_set(LED_IND_NUM, 15, 10, 15);
  337. rgbsps_set(LED_IND_EMOJI, 15, 10, 15);
  338. rgbsps_send();
  339. }
  340. void led_init(void) {
  341. // turn off all
  342. rgbsps_turnoff();
  343. // set trackpoint color
  344. rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
  345. rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
  346. rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
  347. // // hardcode indicator for now
  348. rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
  349. rgbsps_set(LED_IND_USB, 15, 15, 15);
  350. rgbsps_set(LED_IND_BATTERY, 0, 15, 0);
  351. led_layer_normal();
  352. }
  353. // keymaps
  354. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  355. /* Qwerty
  356. * ,-----------------------------------------------------------------------------------.
  357. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
  358. * |------+------+------+------+------+-------------+------+------+------+------+------|
  359. * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter |
  360. * |------+------+------+------+------+------|------+------+------+------+------+------|
  361. * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
  362. * |------+------+------+------+------+------+------+------+------+------+------+------|
  363. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  364. * `-----------------------------------------------------------------------------------'
  365. */
  366. [_QWERTY] = KEYMAP(
  367. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  368. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT ,
  369. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  370. KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
  371. ),
  372. /* Colemak
  373. * ,-----------------------------------------------------------------------------------.
  374. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
  375. * |------+------+------+------+------+-------------+------+------+------+------+------|
  376. * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
  377. * |------+------+------+------+------+------|------+------+------+------+------+------|
  378. * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
  379. * |------+------+------+------+------+------+------+------+------+------+------+------|
  380. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  381. * `-----------------------------------------------------------------------------------'
  382. */
  383. [_COLEMAK] = KEYMAP(
  384. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
  385. KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT ,
  386. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  387. KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
  388. ),
  389. /* Workman
  390. * ,-----------------------------------------------------------------------------------.
  391. * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
  392. * |------+------+------+------+------+-------------+------+------+------+------+------|
  393. * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
  394. * |------+------+------+------+------+------|------+------+------+------+------+------|
  395. * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
  396. * |------+------+------+------+------+------+------+------+------+------+------+------|
  397. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  398. * `-----------------------------------------------------------------------------------'
  399. */
  400. [_WORKMAN] = KEYMAP(
  401. KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC,
  402. KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_ENT ,
  403. KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  404. KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
  405. ),
  406. /* Punc
  407. * ,-----------------------------------------------------------------------------------.
  408. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
  409. * |------+------+------+------+------+-------------+------+------+------+------+------|
  410. * | | | \ | - | = | < | > | ( | ) | ' | | |
  411. * |------+------+------+------+------+------|------+------+------+------+------+------|
  412. * | | | | | _ | + | { | } | [ | ] | " | | |
  413. * |------+------+------+------+------+------+------+------+------+------+------+------|
  414. * | | | | | | | | | | | |
  415. * `-----------------------------------------------------------------------------------'
  416. */
  417. [_PUNC] = KEYMAP(
  418. KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV ,
  419. XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX,
  420. XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX,
  421. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  422. ),
  423. /* Num
  424. * ,-----------------------------------------------------------------------------------.
  425. * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  426. * |------+------+------+------+------+-------------+------+------+------+------+------|
  427. * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter |
  428. * |------+------+------+------+------+------|------+------+------+------+------+------|
  429. * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * |
  430. * |------+------+------+------+------+------+------+------+------+------+------+------|
  431. * | | | | x | | | 0 | , | . | + | - |
  432. * `-----------------------------------------------------------------------------------'
  433. */
  434. [_NUM] = KEYMAP(
  435. KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
  436. KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT,
  437. KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR,
  438. _______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS
  439. ),
  440. /* Func
  441. * ,-----------------------------------------------------------------------------------.
  442. * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
  443. * |------+------+------+------+------+-------------+------+------+------+------+------|
  444. * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
  445. * |------+------+------+------+------+------|------+------+------+------+------+------|
  446. * | | F9 | F10 | F11 | F12 | | | | Home | End | | |
  447. * |------+------+------+------+------+------+------+------+------+------+------+------|
  448. * | | | | | | | | | | | |
  449. * `-----------------------------------------------------------------------------------'
  450. */
  451. [_FUNC] = KEYMAP(
  452. XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
  453. XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS,
  454. _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
  455. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  456. ),
  457. /* Emoji
  458. * ,-----------------------------------------------------------------------------------.
  459. * | | | | | | | | | | | | |
  460. * |------+------+------+------+------+-------------+------+------+------+------+------|
  461. * | | | | | | | | | | | | |
  462. * |------+------+------+------+------+------+------+------+------+------+------+------|
  463. * | | | | | | | | | | | | |
  464. * |------+------+------+------+------+------+------+------+------+------+------+------|
  465. * | | | | | | | | | | | | |
  466. * `-----------------------------------------------------------------------------------'
  467. */
  468. [_EMOJI] = KEYMAP(
  469. X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
  470. X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
  471. X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
  472. X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)
  473. ),
  474. /* GUI
  475. * ,-----------------------------------------------------------------------------------.
  476. * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
  477. * |------+------+------+------+------+-------------+------+------+------+------+------|
  478. * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty|
  479. * |------+------+------+------+------+------+------+------+------+------+------+------|
  480. * | Win | | Prev | Play | Next | | | | | | |Colmak|
  481. * |------+------+------+------+------+------+------+------+------+------+------+------|
  482. * | OSX | | | | | BL- | BL+ | | | | |Workmn|
  483. * `-----------------------------------------------------------------------------------'
  484. */
  485. [_GUI] = KEYMAP(
  486. _______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______,
  487. LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY,
  488. WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK,
  489. OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN
  490. ),
  491. };
  492. #ifdef AUDIO_ENABLE
  493. float tone_startup[][2] = SONG(STARTUP_SOUND);
  494. float tone_qwerty[][2] = SONG(QWERTY_SOUND);
  495. float tone_colemak[][2] = SONG(COLEMAK_SOUND);
  496. float tone_workman[][2] = SONG(DVORAK_SOUND);
  497. float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
  498. float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
  499. float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
  500. float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
  501. float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
  502. #endif
  503. void persistant_default_layer_set(uint16_t default_layer) {
  504. eeconfig_update_default_layer(default_layer);
  505. default_layer_set(default_layer);
  506. }
  507. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  508. #ifdef AUDIO_ENABLE
  509. // faux clicky
  510. if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
  511. #endif
  512. switch (keycode) {
  513. case QWERTY:
  514. if (record->event.pressed) {
  515. #ifdef AUDIO_ENABLE
  516. PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
  517. #endif
  518. persistant_default_layer_set(1UL<<_QWERTY);
  519. }
  520. return false;
  521. break;
  522. case COLEMAK:
  523. if (record->event.pressed) {
  524. #ifdef AUDIO_ENABLE
  525. PLAY_NOTE_ARRAY(tone_colemak, false, 0);
  526. #endif
  527. persistant_default_layer_set(1UL<<_COLEMAK);
  528. }
  529. return false;
  530. break;
  531. case WORKMAN:
  532. if (record->event.pressed) {
  533. #ifdef AUDIO_ENABLE
  534. PLAY_NOTE_ARRAY(tone_workman, false, 0);
  535. #endif
  536. persistant_default_layer_set(1UL<<_WORKMAN);
  537. }
  538. return false;
  539. break;
  540. case PUNC:
  541. if (record->event.pressed) {
  542. layer_on(_PUNC);
  543. update_tri_layer(_PUNC, _EMOJI, _GUI);
  544. if (IS_LAYER_ON(_GUI)) {
  545. led_layer_gui();
  546. } else {
  547. led_layer_punc();;
  548. }
  549. } else {
  550. layer_off(_PUNC);
  551. update_tri_layer(_PUNC, _EMOJI, _GUI);
  552. if (IS_LAYER_ON(_EMOJI)) {
  553. led_layer_emoji();
  554. } else {
  555. led_layer_normal();;
  556. }
  557. }
  558. return false;
  559. break;
  560. case EMOJI:
  561. if (record->event.pressed) {
  562. layer_on(_EMOJI);
  563. update_tri_layer(_PUNC, _EMOJI, _GUI);
  564. if (IS_LAYER_ON(_GUI)) {
  565. led_layer_gui();
  566. } else {
  567. led_layer_emoji();;
  568. }
  569. } else {
  570. layer_off(_EMOJI);
  571. update_tri_layer(_PUNC, _EMOJI, _GUI);
  572. if (IS_LAYER_ON(_PUNC)) {
  573. led_layer_punc();
  574. } else {
  575. led_layer_normal();;
  576. }
  577. }
  578. return false;
  579. break;
  580. case NUM:
  581. if (record->event.pressed) {
  582. layer_on(_NUM);
  583. led_layer_num();
  584. } else {
  585. layer_off(_NUM);
  586. led_layer_normal();
  587. }
  588. return false;
  589. break;
  590. case FUNC:
  591. if (record->event.pressed) {
  592. layer_on(_FUNC);
  593. led_layer_func();
  594. } else {
  595. layer_off(_FUNC);
  596. led_layer_normal();
  597. }
  598. return false;
  599. break;
  600. case LINUX:
  601. set_unicode_input_mode(UC_LNX);
  602. #ifdef AUDIO_ENABLE
  603. PLAY_NOTE_ARRAY(tone_linux, false, 0);
  604. #endif
  605. return false;
  606. break;
  607. case WIN:
  608. set_unicode_input_mode(UC_WINC);
  609. #ifdef AUDIO_ENABLE
  610. PLAY_NOTE_ARRAY(tone_windows, false, 0);
  611. #endif
  612. return false;
  613. break;
  614. case OSX:
  615. set_unicode_input_mode(UC_OSX);
  616. #ifdef AUDIO_ENABLE
  617. PLAY_NOTE_ARRAY(tone_osx, false, 0);
  618. #endif
  619. return false;
  620. break;
  621. }
  622. return true;
  623. }
  624. void matrix_init_user(void) {
  625. #ifdef AUDIO_ENABLE
  626. startup_user();
  627. #endif
  628. set_unicode_input_mode(UC_LNX);
  629. led_init();
  630. }
  631. // void init_rgblight(void) {
  632. // for (uint8_t i = 0; i < RGBLED_NUM; i++) {
  633. // led[i].r = 255;
  634. // led[i].g = 85;
  635. // led[i].b = 0;
  636. // }
  637. // ws2812_setleds(led, RGBLED_NUM);
  638. // }
  639. #ifdef AUDIO_ENABLE
  640. void startup_user()
  641. {
  642. _delay_ms(20); // gets rid of tick
  643. PLAY_NOTE_ARRAY(tone_startup, false, 0);
  644. }
  645. void shutdown_user()
  646. {
  647. PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
  648. _delay_ms(150);
  649. stop_all_notes();
  650. }
  651. #endif
  652. void ps2_mouse_init_user() {
  653. // set TrackPoint sensitivity
  654. PS2_MOUSE_SEND(0xE2, "set trackpoint sensitivity: 0xE2");
  655. PS2_MOUSE_SEND(0x81, "set trackpoint sensitivity: 0x81");
  656. PS2_MOUSE_SEND(0x4A, "set trackpoint sensitivity: 0x4A");
  657. PS2_MOUSE_SEND(0x60, "set trackpoint sensitivity: 0x60");
  658. // set TrackPoint speed
  659. // (transfer function upper plateau speed)
  660. PS2_MOUSE_SEND(0xE2, "set trackpoint speed: 0xE2");
  661. PS2_MOUSE_SEND(0x81, "set trackpoint speed: 0x81");
  662. PS2_MOUSE_SEND(0x60, "set trackpoint speed: 0x60");
  663. PS2_MOUSE_SEND(0x90, "set trackpoint speed: 0x90");
  664. // set TrackPoint Negative Inertia factor
  665. PS2_MOUSE_SEND(0xE2, "set negative inertia factor: 0xE2");
  666. PS2_MOUSE_SEND(0x81, "set negative inertia factor: 0x81");
  667. PS2_MOUSE_SEND(0x4D, "set negative inertia factor: 0x4D");
  668. PS2_MOUSE_SEND(0x03, "set negative inertia factor: 0x03");
  669. // disable up threshold (click)
  670. PS2_MOUSE_SEND(0xE2, "set disable up threshold: 0xE2");
  671. PS2_MOUSE_SEND(0x47, "set disable up threshold: 0x47");
  672. PS2_MOUSE_SEND(0x2C, "set disable up threshold: 0x2C");
  673. PS2_MOUSE_SEND(0x01, "set disable up threshold: 0x01");
  674. // enable TrackPoint Press to Select (PtS)
  675. // print("ps2_mouse_init: send 0xE2: ");
  676. // rcv = ps2_host_send(0xE2);
  677. // phex(rcv); phex(ps2_error); print("\n");
  678. // print("ps2_mouse_init: send 0x47: ");
  679. // rcv = ps2_host_send(0x47);
  680. // phex(rcv); phex(ps2_error); print("\n");
  681. // print("ps2_mouse_init: send 0x2C: ");
  682. // rcv = ps2_host_send(0x2C);
  683. // phex(rcv); phex(ps2_error); print("\n");
  684. // print("ps2_mouse_init: send 0x00: ");
  685. // rcv = ps2_host_send(0x00);
  686. // phex(rcv); phex(ps2_error); print("\n");
  687. // set TrackPoint Press to Select threshold
  688. // print("ps2_mouse_init: send 0xE2: ");
  689. // rcv = ps2_host_send(0xE2);
  690. // phex(rcv); phex(ps2_error); print("\n");
  691. // print("ps2_mouse_init: send 0x81: ");
  692. // rcv = ps2_host_send(0x81);
  693. // phex(rcv); phex(ps2_error); print("\n");
  694. // print("ps2_mouse_init: send 0x5C: ");
  695. // rcv = ps2_host_send(0x5C);
  696. // phex(rcv); phex(ps2_error); print("\n");
  697. // // default PtS threshold is 0x08
  698. // print("ps2_mouse_init: send 0x04: ");
  699. // rcv = ps2_host_send(0x04);
  700. // phex(rcv); phex(ps2_error); print("\n");
  701. // set TrackPoint Press to Select time constant (zTc)
  702. // print("ps2_mouse_init: send 0xE2: ");
  703. // rcv = ps2_host_send(0xE2);
  704. // phex(rcv); phex(ps2_error); print("\n");
  705. // print("ps2_mouse_init: send 0x81: ");
  706. // rcv = ps2_host_send(0x81);
  707. // phex(rcv); phex(ps2_error); print("\n");
  708. // print("ps2_mouse_init: send 0x5E: ");
  709. // rcv = ps2_host_send(0x5E);
  710. // phex(rcv); phex(ps2_error); print("\n");
  711. // // default zTc is 0x26
  712. // print("ps2_mouse_init: send 0x45: ");
  713. // rcv = ps2_host_send(0x45);
  714. // phex(rcv); phex(ps2_error); print("\n");
  715. /*
  716. // set TrackPoint Press to Select Jenks Curvature (jkcur)
  717. print("ps2_mouse_init: send 0xE2: ");
  718. rcv = ps2_host_send(0xE2);
  719. phex(rcv); phex(ps2_error); print("\n");
  720. print("ps2_mouse_init: send 0x81: ");
  721. rcv = ps2_host_send(0x81);
  722. phex(rcv); phex(ps2_error); print("\n");
  723. print("ps2_mouse_init: send 0x5D: ");
  724. rcv = ps2_host_send(0x5D);
  725. phex(rcv); phex(ps2_error); print("\n");
  726. // default jkcur is 0x87
  727. print("ps2_mouse_init: send 0x87: ");
  728. rcv = ps2_host_send(0x87);
  729. phex(rcv); phex(ps2_error); print("\n");
  730. */
  731. /*
  732. // set TrackPoint Minimum Drag (mindrag)
  733. print("ps2_mouse_init: send 0xE2: ");
  734. rcv = ps2_host_send(0xE2);
  735. phex(rcv); phex(ps2_error); print("\n");
  736. print("ps2_mouse_init: send 0x81: ");
  737. rcv = ps2_host_send(0x81);
  738. phex(rcv); phex(ps2_error); print("\n");
  739. print("ps2_mouse_init: send 0x59: ");
  740. rcv = ps2_host_send(0x59);
  741. phex(rcv); phex(ps2_error); print("\n");
  742. // default PtS mindrag is 0x14
  743. print("ps2_mouse_init: send 0x14: ");
  744. rcv = ps2_host_send(0x14);
  745. phex(rcv); phex(ps2_error); print("\n");
  746. */
  747. }