keymap.c 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /* Copyright 2019 Branden Byers
  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. enum layers {
  18. _BASE, // base layer
  19. _LAYERS, // layer of all layers
  20. _MUSIC, // music mode
  21. _MUSIC_4_LIFE, // music mode until unplugged
  22. _MOUSE, // mousekeys
  23. _TERMINAL, // terminal
  24. _ADMIN // admin duties
  25. };
  26. enum custom_keycodes {
  27. TERM_ABOUT = SAFE_RANGE,
  28. TERM_PRINT,
  29. TERM_FLUSH,
  30. TERM_HELP,
  31. CKEYS_ABOUT,
  32. };
  33. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  34. /* BASE (numpad)
  35. * ,-----------------------.
  36. * | 7 | 8 | 9 | / | <-- Hold for LAYERS
  37. * |-----+-----+-----+-----|
  38. * | 4 | 5 | 6 | * |
  39. * |-----+-----+-----+-----|
  40. * | 1 | 2 | 3 | - |
  41. * |-----+-----+-----+-----|
  42. * | 0 | . | = | + |
  43. * `-----------------------'
  44. */
  45. [_BASE] = LAYOUT_ortho_4x4(
  46. KC_P7, KC_P8, KC_P9, LT(_LAYERS, KC_PSLS),
  47. KC_P4, KC_P5, KC_P6, KC_PAST,
  48. KC_P1, KC_P2, KC_P3, KC_PMNS,
  49. KC_P0, KC_PDOT, KC_PEQL, KC_PPLS
  50. ),
  51. /* LAYERS
  52. * ,---------------------------.
  53. * | MUSIC | | | X |
  54. * |---------+-----+-----+-----|
  55. * | MOUSE | | | |
  56. * |---------+-----+-----+-----|
  57. * |TERMINAL | | | |
  58. * |---------+-----+-----+-----|
  59. * | ADMIN | | | |
  60. * `---------------------------'
  61. */
  62. [_LAYERS] = LAYOUT_ortho_4x4(
  63. TG(_MUSIC), _______, _______, _______,
  64. TG(_MOUSE), _______, _______, _______,
  65. TG(_TERMINAL), _______, _______, _______,
  66. TG(_ADMIN), _______, _______, _______
  67. ),
  68. /* MUSIC
  69. * ,-----------------------.
  70. * | X | | | X |
  71. * |-----+-----+-----+-----|
  72. * | | | |4EVER|
  73. * |-----+-----+-----+-----|
  74. * | OFF | | | |
  75. * |-----+-----+-----+-----|
  76. * | ON | | |MODES|
  77. * `-----------------------'
  78. */
  79. // TODO: Make this music layer the one to jump to other music layers (different octaves)
  80. [_MUSIC] = LAYOUT_ortho_4x4(
  81. _______, _______, _______, _______,
  82. _______, _______, _______, TG(_MUSIC_4_LIFE),
  83. MU_OFF, _______, _______, _______,
  84. MU_ON, _______, _______, MU_MOD
  85. ),
  86. /* MUSIC_4_LIFE
  87. * ,-----------------------.
  88. * | ♫ | ♫ | ♫ | ♫ |
  89. * |-----+-----+-----+-----|
  90. * | ♫ | ♫ | ♫ | ♫ |
  91. * |-----+-----+-----+-----|
  92. * | ♫ | ♫ | ♫ | ♫ |
  93. * |-----+-----+-----+-----|
  94. * | ♫ | ♫ | ♫ | ♫ |
  95. * `-----------------------'
  96. */
  97. [_MUSIC_4_LIFE] = LAYOUT_ortho_4x4(
  98. KC_M, KC_M, KC_M, KC_M,
  99. KC_M, KC_M, KC_M, KC_M,
  100. KC_M, KC_M, KC_M, KC_M,
  101. KC_M, KC_M, KC_M, KC_M
  102. ),
  103. /* MOUSE
  104. * ,-------------------------------------------------.
  105. * | BUTTON 5 | | SCROLL UP | X |
  106. * |-----------+-----------+------------+------------|
  107. * | X |LEFT CLICK | UP |RIGHT CLICK |
  108. * |-----------+-----------+------------+------------|
  109. * | BUTTON 4 | LEFT | DOWN | RIGHT |
  110. * |-----------+-----------+------------+------=-----|
  111. * | BUTTON 3 |SCROLL LEFT|SCROLL DOWN |SCROLL RIGHT|
  112. * `-------------------------------------------------'
  113. */
  114. [_MOUSE] = LAYOUT_ortho_4x4(
  115. KC_BTN5, _______, KC_WH_U, _______,
  116. _______, KC_BTN1, KC_MS_U, KC_BTN2,
  117. KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R,
  118. KC_BTN3, KC_WH_L, KC_WH_D, KC_WH_R
  119. ),
  120. /* TERMINAL
  121. * ,---------------------------------------.
  122. * | |ABOUT| | X |
  123. * |------------+-----+----------+---------|
  124. * |TERMINAL OFF|PRINT| | |
  125. * |------------+-----+----------+---------|
  126. * | X |FLUSH| | |
  127. * |------------+-----+----------+---------|
  128. * |TERMINAL ON |HELP | | |
  129. * `--------=======------------------------'
  130. */
  131. [_TERMINAL] = LAYOUT_ortho_4x4(
  132. _______, TERM_ABOUT, _______, _______,
  133. _______, TERM_PRINT, _______, _______,
  134. _______, TERM_FLUSH, _______, _______,
  135. _______, TERM_HELP , _______, _______
  136. ),
  137. /* ADMIN
  138. * ,-----------------------------------------.
  139. * | QK_BOOT | | | X |
  140. * |------------+-----+-----------+----------|
  141. * |ABOUT CKEYS | | | |
  142. * |------------+-----+-----------+----------|
  143. * | | |CLICKY UP |CLICKY OFF|
  144. * |------------+-----+-----------+----------|
  145. * | X | |CLICKY DOWN|CLICKY ON |
  146. * `-----------------------------------------'
  147. */
  148. [_ADMIN] = LAYOUT_ortho_4x4(
  149. QK_BOOT, _______, _______, _______,
  150. CKEYS_ABOUT, _______, _______, _______,
  151. _______, _______, _______, CK_OFF,
  152. _______, _______, _______, CK_ON
  153. ),
  154. };
  155. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  156. switch (keycode) {
  157. case TERM_ABOUT:
  158. if (record->event.pressed) {
  159. // when keycode TERM_ABOUT is pressed
  160. SEND_STRING("about\n");
  161. }
  162. break;
  163. case TERM_PRINT:
  164. if (record->event.pressed) {
  165. SEND_STRING("print\n");
  166. }
  167. break;
  168. case TERM_FLUSH:
  169. if (record->event.pressed) {
  170. SEND_STRING("flush\n");
  171. }
  172. break;
  173. case TERM_HELP:
  174. if (record->event.pressed) {
  175. SEND_STRING("help\n");
  176. }
  177. break;
  178. case CKEYS_ABOUT:
  179. if (record->event.pressed) {
  180. SEND_STRING("https://cKeys.org\nMaking people smile one keyboard at a time.\ncKeys is a volunteer-run 501(c)(3) nonprofit organization.\n");
  181. }
  182. break;
  183. }
  184. return true;
  185. };