keymap.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. #include QMK_KEYBOARD_H
  2. #include "action_layer.h"
  3. #include "action_util.h"
  4. #include "debug.h"
  5. #include "eeconfig.h"
  6. #include "version.h"
  7. #include "wait.h"
  8. /* Aliases */
  9. #define ____ KC_TRNS
  10. /* Layers */
  11. enum
  12. {
  13. COLE = 0,
  14. LOWER, // right hand 10 key
  15. RAISE, // Function keys
  16. AUX, // Things like rebooting the board to be flashed. NUM + RAISE
  17. };
  18. /* Macros */
  19. enum
  20. {
  21. NONE = 0,
  22. // OS Functions
  23. F_PASTE,
  24. // Config Macros
  25. CF_EPRM,
  26. CF_VERS,
  27. // RGB Macro
  28. RGB_ANI,
  29. };
  30. /* Tap Dancery */
  31. enum
  32. {
  33. TD_BTK,
  34. TD_TDE,
  35. TD_LPRN,
  36. TD_RPRN,
  37. TD_MIN,
  38. TD_USC,
  39. TD_COPY,
  40. TD_UNDO,
  41. TD_FIND,
  42. };
  43. /* OS Identifier */
  44. enum
  45. {
  46. OS_WIN = 0,
  47. OS_OSX,
  48. OS_LIN,
  49. };
  50. uint8_t os_type = OS_WIN;
  51. static uint16_t rgb_timer;
  52. bool time_travel = false;
  53. bool skip_leds = false;
  54. /* Keymaps */
  55. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  56. /* Keymap 0: Colemak Layer
  57. *
  58. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  59. * | Find | 1 ! | 2 @ | 3 # | 4 $ | 5 % | Undo | | VOLUP| 6 ^ | 7 & | 8 * | 9 ( | 0 ) | LOCK |
  60. * | | | | | | | | | | | | | | | |
  61. * |-----------+------+------+------+------+------+------| |------+------+------+------+------+------+-----------|
  62. * | ' " ` | Q | W | F | P | G | CCopy| | VOLDN| J | L | U Ü | Y | = + | ~ : ; |
  63. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  64. * | ( [ { | A Ä | R | S ß | T | D |------| |------| H | N | E | I | O Ö | ) ] } |
  65. * |-----------+------+------+------+------+------| Paste| | MUTE |------+------+------+------+------+-----------|
  66. * | - , < | Z | X | C | V | B | | | | K | M | / ? | \ | | ^ | _ . > |
  67. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  68. * | AUX | RAISE | LOWER | LEAD | GUI | | ESC | RUN | < | v | > |
  69. * `-----------------------------------' `-----------------------------------'
  70. * ,-------------. ,-------------.
  71. * | ALT | CTRL | | HOME | END |
  72. * ,------|------|------| |------+------+------.
  73. * | | | Del | | PGUP | | |
  74. * | Space|Backsp|------| |------| Enter| Shift|
  75. * | | | Tab | | PGDN | | |
  76. * `--------------------' `--------------------'
  77. */
  78. [COLE] = LAYOUT_ergodox(
  79. // Left Hand
  80. TD(TD_FIND), KC_1, KC_2, KC_3, KC_4, KC_5, TD(TD_UNDO),
  81. TD(TD_BTK), KC_Q, KC_W, KC_F, KC_P, KC_G, TD(TD_COPY),
  82. TD(TD_LPRN), KC_A, KC_R, KC_S, KC_T, KC_D,
  83. TD(TD_MIN), KC_Z, KC_X, KC_C, KC_V, KC_B, M(F_PASTE),
  84. TT(AUX), TT(RAISE), TT(LOWER), KC_LEAD, OSM(MOD_LGUI),
  85. OSM(MOD_LALT), OSM(MOD_LCTL),
  86. KC_DEL,
  87. KC_SPC, KC_BSPC, KC_TAB,
  88. // Right Hand
  89. KC_VOLU, KC_6, KC_7, KC_8, KC_9, KC_0, LGUI(KC_L),
  90. KC_VOLD, KC_J, KC_L, KC_U, KC_Y, KC_EQL, TD(TD_TDE),
  91. KC_H, KC_N, KC_E, KC_I, KC_O, TD(TD_RPRN),
  92. KC_MUTE, KC_K, KC_M, KC_SLSH, KC_BSLS, KC_UP, TD(TD_USC),
  93. KC_ESC, LGUI(KC_R), KC_LEFT, KC_DOWN, KC_RGHT,
  94. KC_HOME, KC_END,
  95. KC_PGUP,
  96. KC_PGDOWN, KC_ENT, OSM(MOD_LSFT)),
  97. /* Keymap 2: LOWER Layer
  98. *
  99. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  100. * | ---- | ---- | ---- | ---- | ---- | ---- | | | | ( | ) | ^ | / | ---- | |
  101. * | | | | | | | ---- | | ---- | | | | | | ---- |
  102. * |-----------+------+------+------+------+------+------| |------+------+------+------+------+------+-----------|
  103. * | ---- | ---- | ---- | ---- | ---- | ---- | | | | 7 | 8 | 9 | * | ---- | ---- |
  104. * |-----------+------+------+------+------+------| ---- | | ---- |------+------+------+------+------+-----------|
  105. * | ---- | ---- | ---- | ---- | ---- | ---- |------| |------| 4 | 5 | 6 | - | ---- | ---- |
  106. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  107. * | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | ---- | 1 | 2 | 3 | + | ---- | ---- |
  108. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  109. * | ---- | ---- | ---- | ---- | ---- | | 0 | = | ---- | ---- | ---- |
  110. * `-----------------------------------' `-------------------------------------'
  111. * ,-------------. ,-------------.
  112. * | ---- | ---- | | ---- | ---- |
  113. * ,------|------|------| |------+------+------.
  114. * | | | ---- | | ---- | | |
  115. * | ---- | ---- |------| |------| ---- | ---- |
  116. * | | | ---- | | ---- | | |
  117. * `--------------------' `--------------------'
  118. */
  119. [LOWER] = LAYOUT_ergodox(
  120. // Left Hand
  121. ____, ____, ____, ____, ____, ____, ____,
  122. ____, ____, ____, ____, ____, ____, ____,
  123. ____, ____, ____, ____, ____, ____,
  124. ____, ____, ____, ____, ____, ____, ____,
  125. ____, ____, ____, ____, ____,
  126. ____, ____,
  127. ____,
  128. ____, ____, ____,
  129. // Right Hand
  130. ____, KC_LPRN, KC_RPRN, KC_CIRC, KC_PSLS, ____, ____,
  131. ____, KC_7, KC_8, KC_9, KC_PAST, ____, ____,
  132. KC_4, KC_5, KC_6, KC_PMNS, ____, ____,
  133. ____, KC_1, KC_2, KC_3, KC_PPLS, ____, ____,
  134. KC_0, KC_PEQL, ____, ____, ____,
  135. ____, ____,
  136. ____,
  137. ____, ____, ____),
  138. /* Keymap 3: RAISE Layer
  139. *
  140. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  141. * | F1 | F2 | F3 | F4 | F5 | F6 | ---- | | ---- | ! | @ | # | $ | % | ` ~ |
  142. * | | | | | | | | | | | | | | | |
  143. * |-----------+------+------+------+------+------+------| |------+------+------+------+------+------+-----------|
  144. * | F7 | F8 | F9 | F10 | F11 | F12 | ---- | | ---- | ^ | & | * | ( | ) | - _ |
  145. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  146. * | ---- | ---- | ---- | ---- | ---- | ---- |------| |------| [ { | } ] | \ | | ; : | ' " | = + |
  147. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  148. * | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | ---- | , < | > . | / ? | ---- | ---- | ---- |
  149. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  150. * | ---- | ---- | ---- | ---- | ---- | | ---- | ---- | ---- | ---- | ---- |
  151. * `-----------------------------------' `-----------------------------------'
  152. * ,-------------. ,-------------.
  153. * | ---- | ---- | | ---- | ---- |
  154. * ,------|------|------| |------+------+------.
  155. * | | | ---- | | ---- | | |
  156. * | ---- | ---- |------| |------| ---- | ---- |
  157. * | | | ---- | | ---- | | |
  158. * `--------------------' `--------------------'
  159. */
  160. [RAISE] = LAYOUT_ergodox(
  161. // Left Hand
  162. KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, ____,
  163. KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ____,
  164. ____, ____, ____, ____, ____, ____,
  165. ____, ____, ____, ____, ____, ____, ____,
  166. ____, ____, ____, ____, ____,
  167. ____, ____,
  168. ____,
  169. ____, ____, ____,
  170. // Right Hand
  171. ____, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_GRV,
  172. ____, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS,
  173. KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_QUOT, KC_EQL,
  174. ____, KC_COMM, KC_DOT, KC_SLSH, ____, ____, ____,
  175. ____, ____, ____, ____, ____,
  176. ____, ____,
  177. ____,
  178. ____, ____, ____),
  179. /* Keymap 7: Configuration Layer
  180. *
  181. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  182. * | EEPROM | ---- | ---- | ---- | ---- | ---- | ---- | | PWR | ---- | ---- | ---- | ---- | ---- | |
  183. * | | | | | | | | | | | | | | | VERSION |
  184. * |-----------+------+------+------+------+------+------| |------+------+------+------+------+------+-----------|
  185. * | ---- | ---- | ---- | ---- | ---- | ---- | | | | ---- | ---- | ---- | ---- | ---- | ---- |
  186. * |-----------+------+------+------+------+------| ---- | | SLP |------+------+------+------+------+-----------|
  187. * | ---- | ---- | ---- | ---- | ---- | ---- |------| |------| ---- | ---- | ---- | ---- | ---- | ---- |
  188. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  189. * | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | WAKE | ---- | ---- | ---- | ---- | ---- | ---- |
  190. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  191. * | ---- | ---- | ---- | ---- | ---- | | ---- | ---- | ---- | ---- | ---- |
  192. * `-----------------------------------' `-----------------------------------'
  193. * ,-------------. ,-------------.
  194. * | ---- | ---- | | TOG | ANI |
  195. * ,------|------|------| |------+------+------.
  196. * | | | ---- | | VAI | | |
  197. * | ---- | ---- |------| |------| HUI | HUID |
  198. * | | | ---- | | VAD | | |
  199. * `--------------------' `--------------------'
  200. */
  201. [AUX] = LAYOUT_ergodox(
  202. // Left Hand
  203. M(CF_EPRM), ____, ____, ____, ____, ____, KC_PWR,
  204. ____, ____, ____, ____, ____, ____, KC_SLEP,
  205. ____, ____, ____, ____, ____, ____,
  206. ____, ____, ____, ____, ____, ____, KC_WAKE,
  207. ____, ____, ____, ____, ____,
  208. ____, ____,
  209. ____,
  210. ____, ____, ____,
  211. // Right Hand
  212. KC_PWR, ____, ____, ____, ____, ____, M(CF_VERS),
  213. KC_SLEP, ____, ____, ____, ____, ____, ____,
  214. ____, ____, ____, ____, ____, ____,
  215. KC_WAKE, ____, ____, ____, ____, ____, ____,
  216. ____, ____, ____, ____, ____,
  217. RGB_TOG, M(RGB_ANI),
  218. RGB_VAI,
  219. RGB_VAD, RGB_HUI, RGB_HUD),
  220. };
  221. void unredo(qk_tap_dance_state_t *state, void *user_data)
  222. {
  223. if (state->count > 1)
  224. {
  225. register_code(KC_LCTL);
  226. register_code(KC_Y);
  227. unregister_code(KC_Y);
  228. unregister_code(KC_LCTL);
  229. }
  230. else
  231. {
  232. register_code(KC_LCTL);
  233. register_code(KC_Z);
  234. unregister_code(KC_Z);
  235. unregister_code(KC_LCTL);
  236. }
  237. reset_tap_dance(state);
  238. }
  239. void ccopy(qk_tap_dance_state_t *state, void *user_data)
  240. {
  241. if (state->count > 1)
  242. {
  243. register_code(KC_LCTL);
  244. register_code(KC_X);
  245. unregister_code(KC_X);
  246. unregister_code(KC_LCTL);
  247. }
  248. else
  249. {
  250. register_code(KC_LCTL);
  251. register_code(KC_C);
  252. unregister_code(KC_C);
  253. unregister_code(KC_LCTL);
  254. }
  255. reset_tap_dance(state);
  256. }
  257. void findreplace(qk_tap_dance_state_t *state, void *user_data)
  258. {
  259. if (state->count > 1)
  260. {
  261. register_code(KC_LCTL);
  262. register_code(KC_H);
  263. unregister_code(KC_H);
  264. unregister_code(KC_LCTL);
  265. }
  266. else
  267. {
  268. register_code(KC_LCTL);
  269. register_code(KC_F);
  270. unregister_code(KC_F);
  271. unregister_code(KC_LCTL);
  272. }
  273. reset_tap_dance(state);
  274. }
  275. qk_tap_dance_action_t tap_dance_actions[] = {
  276. [TD_BTK] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_GRV),
  277. [TD_TDE] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_TILD),
  278. [TD_LPRN] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LPRN),
  279. [TD_RPRN] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RPRN),
  280. [TD_MIN] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_MINS),
  281. [TD_USC] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_UNDS),
  282. [TD_COPY] = ACTION_TAP_DANCE_FN(ccopy),
  283. [TD_UNDO] = ACTION_TAP_DANCE_FN(unredo),
  284. [TD_FIND] = ACTION_TAP_DANCE_FN(findreplace)};
  285. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  286. {
  287. switch (id)
  288. {
  289. case F_PASTE:
  290. if (record->event.pressed)
  291. {
  292. register_code(KC_LCTL);
  293. register_code(KC_V);
  294. unregister_code(KC_V);
  295. unregister_code(KC_LCTL);
  296. }
  297. break;
  298. case RGB_ANI:
  299. if (record->event.pressed)
  300. {
  301. rgb_timer = timer_read();
  302. }
  303. else
  304. {
  305. if (timer_elapsed(rgb_timer) > 300)
  306. {
  307. rgblight_mode(1);
  308. }
  309. else
  310. {
  311. rgblight_step();
  312. }
  313. }
  314. case CF_EPRM:
  315. if (record->event.pressed)
  316. {
  317. eeconfig_init();
  318. }
  319. return false;
  320. break;
  321. case CF_VERS:
  322. if (record->event.pressed)
  323. {
  324. SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
  325. }
  326. return false;
  327. break;
  328. }
  329. return MACRO_NONE;
  330. };
  331. /*
  332. bool process_record_user(uint16_t keycode, keyrecord_t *record)
  333. {}
  334. */
  335. void tap(uint16_t code)
  336. {
  337. register_code(code);
  338. unregister_code(code);
  339. }
  340. LEADER_EXTERNS();
  341. void matrix_scan_user(void)
  342. {
  343. uint8_t layer = get_highest_layer(layer_state);
  344. if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
  345. ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) &&
  346. !has_oneshot_mods_timed_out()))
  347. {
  348. ergodox_right_led_1_set(LED_BRIGHTNESS_HI);
  349. ergodox_right_led_1_on();
  350. }
  351. else if (layer == RAISE || layer == AUX)
  352. {
  353. ergodox_right_led_1_set(LED_BRIGHTNESS_LO);
  354. ergodox_right_led_1_on();
  355. }
  356. else
  357. {
  358. ergodox_right_led_1_off();
  359. }
  360. if (keyboard_report->mods & MOD_BIT(KC_LCTL) ||
  361. ((get_oneshot_mods() & MOD_BIT(KC_LCTL)) &&
  362. !has_oneshot_mods_timed_out()))
  363. {
  364. ergodox_right_led_2_set(LED_BRIGHTNESS_HI);
  365. ergodox_right_led_2_on();
  366. }
  367. else if (layer == LOWER || layer == AUX)
  368. {
  369. ergodox_right_led_2_set(LED_BRIGHTNESS_LO);
  370. ergodox_right_led_2_on();
  371. }
  372. else
  373. {
  374. ergodox_right_led_2_off();
  375. }
  376. if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
  377. ((get_oneshot_mods() & MOD_BIT(KC_LALT)) &&
  378. !has_oneshot_mods_timed_out()))
  379. {
  380. ergodox_right_led_3_set(LED_BRIGHTNESS_HI);
  381. ergodox_right_led_3_on();
  382. }
  383. else if (layer == COLE || layer == AUX)
  384. {
  385. ergodox_right_led_3_set(LED_BRIGHTNESS_LO);
  386. ergodox_right_led_3_on();
  387. }
  388. else
  389. {
  390. ergodox_right_led_3_off();
  391. }
  392. LEADER_DICTIONARY()
  393. {
  394. leading = false;
  395. leader_end();
  396. SEQ_THREE_KEYS(KC_W, KC_I, KC_N) { os_type = OS_WIN; };
  397. SEQ_THREE_KEYS(KC_O, KC_S, KC_X) { os_type = OS_OSX; };
  398. SEQ_THREE_KEYS(KC_L, KC_I, KC_N) { os_type = OS_LIN; };
  399. SEQ_ONE_KEY(KC_A)
  400. {
  401. switch (os_type)
  402. {
  403. case OS_WIN:
  404. tap(KC_NLCK);
  405. register_code(KC_RALT);
  406. tap(KC_KP_0);
  407. tap(KC_KP_2);
  408. tap(KC_KP_2);
  409. tap(KC_KP_8);
  410. unregister_code(KC_RALT);
  411. tap(KC_NLCK);
  412. break;
  413. case OS_OSX:
  414. register_code(KC_RALT);
  415. register_code(KC_RSFT);
  416. register_code(KC_SCLN);
  417. unregister_code(KC_SCLN);
  418. unregister_code(KC_RSFT);
  419. unregister_code(KC_RALT);
  420. tap(KC_A);
  421. break;
  422. case OS_LIN:
  423. tap(KC_RALT);
  424. tap(KC_DQT);
  425. tap(KC_A);
  426. break;
  427. }
  428. }
  429. SEQ_TWO_KEYS(KC_A, KC_A)
  430. {
  431. switch (os_type)
  432. {
  433. case OS_WIN:
  434. tap(KC_NLCK);
  435. register_code(KC_RALT);
  436. tap(KC_KP_0);
  437. tap(KC_KP_1);
  438. tap(KC_KP_9);
  439. tap(KC_KP_6);
  440. unregister_code(KC_RALT);
  441. tap(KC_NLCK);
  442. break;
  443. case OS_OSX:
  444. register_code(KC_RALT);
  445. register_code(KC_RSFT);
  446. register_code(KC_SCLN);
  447. unregister_code(KC_SCLN);
  448. unregister_code(KC_RSFT);
  449. unregister_code(KC_RALT);
  450. register_code(KC_LSFT);
  451. register_code(KC_A);
  452. unregister_code(KC_A);
  453. unregister_code(KC_LSFT);
  454. break;
  455. case OS_LIN:
  456. tap(KC_RALT);
  457. tap(KC_DQT);
  458. register_code(KC_LSFT);
  459. register_code(KC_A);
  460. unregister_code(KC_A);
  461. unregister_code(KC_LSFT);
  462. break;
  463. }
  464. }
  465. SEQ_ONE_KEY(KC_O)
  466. {
  467. switch (os_type)
  468. {
  469. case OS_WIN:
  470. tap(KC_NLCK);
  471. register_code(KC_RALT);
  472. tap(KC_KP_0);
  473. tap(KC_KP_2);
  474. tap(KC_KP_4);
  475. tap(KC_KP_6);
  476. unregister_code(KC_RALT);
  477. tap(KC_NLCK);
  478. break;
  479. case OS_OSX:
  480. register_code(KC_RALT);
  481. register_code(KC_RSFT);
  482. register_code(KC_SCLN);
  483. unregister_code(KC_SCLN);
  484. unregister_code(KC_RSFT);
  485. unregister_code(KC_RALT);
  486. tap(KC_O);
  487. break;
  488. case OS_LIN:
  489. tap(KC_RALT);
  490. tap(KC_DQT);
  491. tap(KC_O);
  492. break;
  493. }
  494. }
  495. SEQ_TWO_KEYS(KC_O, KC_O)
  496. {
  497. switch (os_type)
  498. {
  499. case OS_WIN:
  500. tap(KC_NLCK);
  501. register_code(KC_RALT);
  502. tap(KC_KP_0);
  503. tap(KC_KP_2);
  504. tap(KC_KP_1);
  505. tap(KC_KP_4);
  506. unregister_code(KC_RALT);
  507. tap(KC_NLCK);
  508. break;
  509. case OS_OSX:
  510. register_code(KC_RALT);
  511. register_code(KC_RSFT);
  512. register_code(KC_SCLN);
  513. unregister_code(KC_SCLN);
  514. unregister_code(KC_RSFT);
  515. unregister_code(KC_RALT);
  516. tap(LSFT(KC_O));
  517. break;
  518. case OS_LIN:
  519. tap(KC_RALT);
  520. tap(KC_DQT);
  521. register_code(KC_LSFT);
  522. register_code(KC_O);
  523. unregister_code(KC_O);
  524. unregister_code(KC_LSFT);
  525. break;
  526. }
  527. }
  528. SEQ_ONE_KEY(KC_U)
  529. {
  530. switch (os_type)
  531. {
  532. case OS_WIN:
  533. tap(KC_NLCK);
  534. register_code(KC_RALT);
  535. tap(KC_KP_0);
  536. tap(KC_KP_2);
  537. tap(KC_KP_5);
  538. tap(KC_KP_2);
  539. unregister_code(KC_RALT);
  540. tap(KC_NLCK);
  541. break;
  542. case OS_OSX:
  543. register_code(KC_RALT);
  544. register_code(KC_RSFT);
  545. register_code(KC_SCLN);
  546. unregister_code(KC_SCLN);
  547. unregister_code(KC_RSFT);
  548. unregister_code(KC_RALT);
  549. tap(KC_U);
  550. break;
  551. case OS_LIN:
  552. tap(KC_RALT);
  553. tap(KC_DQT);
  554. tap(KC_U);
  555. break;
  556. }
  557. }
  558. SEQ_TWO_KEYS(KC_U, KC_U)
  559. {
  560. switch (os_type)
  561. {
  562. case OS_WIN:
  563. tap(KC_NLCK);
  564. register_code(KC_RALT);
  565. tap(KC_KP_0);
  566. tap(KC_KP_2);
  567. tap(KC_KP_2);
  568. tap(KC_KP_0);
  569. unregister_code(KC_RALT);
  570. tap(KC_NLCK);
  571. break;
  572. case OS_OSX:
  573. register_code(KC_RALT);
  574. register_code(KC_RSFT);
  575. register_code(KC_SCLN);
  576. unregister_code(KC_SCLN);
  577. unregister_code(KC_RSFT);
  578. unregister_code(KC_RALT);
  579. tap(LSFT(KC_U));
  580. break;
  581. case OS_LIN:
  582. tap(KC_RALT);
  583. tap(KC_DQT);
  584. register_code(KC_LSFT);
  585. register_code(KC_U);
  586. unregister_code(KC_U);
  587. unregister_code(KC_LSFT);
  588. break;
  589. }
  590. }
  591. SEQ_ONE_KEY(KC_S)
  592. {
  593. switch (os_type)
  594. {
  595. case OS_WIN:
  596. tap(KC_NLCK);
  597. register_code(KC_RALT);
  598. tap(KC_KP_0);
  599. tap(KC_KP_2);
  600. tap(KC_KP_2);
  601. tap(KC_KP_3);
  602. unregister_code(KC_RALT);
  603. tap(KC_NLCK);
  604. break;
  605. case OS_OSX:
  606. register_code(KC_RALT);
  607. tap(KC_S);
  608. unregister_code(KC_RALT);
  609. break;
  610. case OS_LIN:
  611. tap(KC_RALT);
  612. tap(KC_S);
  613. tap(KC_S);
  614. break;
  615. }
  616. }
  617. }
  618. }
  619. void matrix_init_user(void)
  620. {
  621. ergodox_led_all_on();
  622. rgblight_init();
  623. rgblight_enable();
  624. rgblight_setrgb(255, 0, 0);
  625. for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--)
  626. {
  627. ergodox_led_all_set(i);
  628. wait_ms(5);
  629. }
  630. rgblight_setrgb(255, 255, 0);
  631. wait_ms(1000);
  632. for (int i = LED_BRIGHTNESS_LO; i > 0; i--)
  633. {
  634. ergodox_led_all_set(i);
  635. wait_ms(10);
  636. }
  637. rgblight_setrgb(0, 255, 255);
  638. ergodox_led_all_off();
  639. wait_ms(1000);
  640. rgblight_effect_knight(50);
  641. }