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