2
0

keymap.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #include QMK_KEYBOARD_H
  2. enum layers {
  3. _BASE, // base layer
  4. _LAYERS, // layer of all layers
  5. _MUSIC, // music mode
  6. _MUSIC_4_LIFE, // music mode until unplugged
  7. _MOUSE, // mousekeys
  8. _TERMINAL, // terminal
  9. _ADMIN // admin duties
  10. };
  11. enum custom_keycodes {
  12. TERM_ABOUT = SAFE_RANGE,
  13. TERM_PRINT,
  14. TERM_FLUSH,
  15. TERM_HELP,
  16. CKEYS_ABOUT,
  17. };
  18. extern keymap_config_t keymap_config;
  19. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  20. /* BASE (numpad)
  21. * ,-----------------------.
  22. * | 7 | 8 | 9 | / | <-- Hold for LAYERS
  23. * |-----+-----+-----+-----|
  24. * | 4 | 5 | 6 | * |
  25. * |-----+-----+-----+-----|
  26. * | 1 | 2 | 3 | - |
  27. * |-----+-----+-----+-----|
  28. * | 0 | . | = | + |
  29. * `---------------------- '
  30. */
  31. [_BASE] = LAYOUT(
  32. KC_KP_7, KC_KP_8, KC_KP_9, LT(MO(_LAYERS), KC_PSLS), \
  33. KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST, \
  34. KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, \
  35. KC_KP_0, KC_KP_DOT, KC_KP_EQUAL, KC_PPLS \
  36. ),
  37. /* LAYERS
  38. * ,---------------------------.
  39. * | MUSIC | | | X |
  40. * |---------+-----+-----+-----|
  41. * | MOUSE | | | |
  42. * |---------+-----+-----+-----|
  43. * |TERMINAL | | | |
  44. * |---------+-----+-----+-----|
  45. * | ADMIN | | | |
  46. * `---------------------------'
  47. */
  48. [_LAYERS] = LAYOUT(
  49. TG(_MUSIC), _______, _______, _______, \
  50. TG(_MOUSE), _______, _______, _______, \
  51. TG(_TERMINAL), _______, _______, _______, \
  52. TG(_ADMIN), _______, _______, _______\
  53. ),
  54. /* MUSIC
  55. * ,-----------------------.
  56. * | X | | | X |
  57. * |-----+-----+-----+-----|
  58. * | | | |4EVER|
  59. * |-----+-----+-----+-----|
  60. * | OFF | | | |
  61. * |-----+-----+-----+-----|
  62. * | ON | | |MODES|
  63. * `---------------------- '
  64. */
  65. // TODO: Make this music layer the one to jump to other music layers (different octaves)
  66. [_MUSIC] = LAYOUT(
  67. _______, _______, _______, _______, \
  68. _______, _______, _______, TG(_MUSIC_4_LIFE), \
  69. MU_OFF, _______, _______, _______, \
  70. MU_ON, _______, _______, MU_MOD \
  71. ),
  72. /* MUSIC_4_LIFE
  73. * ,-----------------------.
  74. * | ♫ | ♫ | ♫ | ♫ |
  75. * |-----+-----+-----+-----|
  76. * | ♫ | ♫ | ♫ | ♫ |
  77. * |-----+-----+-----+-----|
  78. * | ♫ | ♫ | ♫ | ♫ |
  79. * |-----+-----+-----+-----|
  80. * | ♫ | ♫ | ♫ | ♫ |
  81. * `---------------------- '
  82. */
  83. [_MUSIC_4_LIFE] = LAYOUT(
  84. KC_M, KC_M, KC_M, KC_M, \
  85. KC_M, KC_M, KC_M, KC_M, \
  86. KC_M, KC_M, KC_M, KC_M, \
  87. KC_M, KC_M, KC_M, KC_M \
  88. ),
  89. /* MOUSE
  90. * ,-------------------------------------------------.
  91. * | BUTTON 5 | | SCROLL UP | X |
  92. * |-----------+-----------+------------+------------|
  93. * | X |LEFT CLICK | UP |RIGHT CLICK |
  94. * |-----------+-----------+------------+------------|
  95. * | BUTTON 4 | LEFT | DOWN | RIGHT |
  96. * |-----------+-----------+------------+------=-----|
  97. * | BUTTON 3 |SCROLL LEFT|SCROLL DOWN |SCROLL RIGHT|
  98. * `-------------------------------------------------'
  99. */
  100. [_MOUSE] = LAYOUT(
  101. KC_MS_BTN5, _______, KC_MS_WH_UP, _______, \
  102. _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, \
  103. KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, \
  104. KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT \
  105. ),
  106. /* TERMINAL
  107. * ,---------------------------------------.
  108. * | |ABOUT| | X |
  109. * |------------+-----+----------+---------|
  110. * |TERMINAL OFF|PRINT| | |
  111. * |------------+-----+----------+---------|
  112. * | X |FLUSH| | |
  113. * |------------+-----+----------+---------|
  114. * |TERMINAL ON |HELP | | |
  115. * `--------=======------------------------'
  116. */
  117. [_TERMINAL] = LAYOUT(
  118. _______, TERM_ABOUT, _______, _______, \
  119. TERM_OFF, TERM_PRINT, _______, _______, \
  120. _______, TERM_FLUSH, _______, _______, \
  121. TERM_ON, TERM_HELP , _______, _______\
  122. ),
  123. /* ADMIN
  124. * ,-----------------------------------------.
  125. * | RESET | | | X |
  126. * |------------+-----+-----------+----------|
  127. * |ABOUT CKEYS | | | |
  128. * |------------+-----+-----------+----------|
  129. * | | |CLICKY UP |CLICKY OFF|
  130. * |------------+-----+-----------+----------|
  131. * | X | |CLICKY DOWN|CLICKY ON |
  132. * `-----------------------------------------'
  133. */
  134. [_ADMIN] = LAYOUT(
  135. RESET, _______, _______, _______, \
  136. CKEYS_ABOUT, _______, _______, _______, \
  137. _______, _______, _______, CK_OFF, \
  138. _______, _______, _______, CK_ON \
  139. ),
  140. };
  141. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  142. switch (keycode) {
  143. case TERM_ABOUT:
  144. if (record->event.pressed) {
  145. // when keycode TERM_ABOUT is pressed
  146. SEND_STRING("about"SS_TAP(X_ENTER));
  147. } else {
  148. // when keycode TERM_ABOUT is released
  149. }
  150. break;
  151. case TERM_PRINT:
  152. if (record->event.pressed) {
  153. SEND_STRING("print"SS_TAP(X_ENTER));
  154. } else { }
  155. break;
  156. case TERM_FLUSH:
  157. if (record->event.pressed) {
  158. SEND_STRING("flush"SS_TAP(X_ENTER));
  159. } else { }
  160. break;
  161. case TERM_HELP:
  162. if (record->event.pressed) {
  163. SEND_STRING("help"SS_TAP(X_ENTER));
  164. } else { }
  165. break;
  166. case CKEYS_ABOUT:
  167. if (record->event.pressed) {
  168. SEND_STRING("https://cKeys.org"SS_TAP(X_ENTER)"Making people smile one keyboard at a time."SS_TAP(X_ENTER)"cKeys is a volunteer-run 501(c)(3) nonprofit organization."SS_TAP(X_ENTER));
  169. } else { }
  170. break;
  171. }
  172. return true;
  173. };