1 #include QMK_KEYBOARD_H
6 // Each layer gets a name for readability, which is then used in the keymap matrix below.
7 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
8 // Layer names don't all need to be of the same length, obviously, and you can also skip them
9 // entirely and just use numbers.
10 #define _BL 0 // BASE Layer
11 #define _FL 1 // Function Layer
12 #define _ME 2 // Media Layer
13 #define _CL 3 // Control Layer
14 #define _ML 4 // Mouse Layer
15 #if defined(MIDI_ENABLE)
16 #define _MI 5 // MIDI Layer
17 #define TO_MIDI TO(_MI)
19 #define TO_MIDI _______
22 // go back to base layer
23 #define TO_BASE TO(_BL)
25 // switch to function layer while helde
26 #define MO_FUNC MO(_FL)
28 // switch to media layer while held
31 // switch to Control layer while helde
32 #define MO_CTL MO(_CL)
34 // switch to mouse layer if held, else space
35 #define L_MOUSE LT(_ML, KC_SPC)
37 // Function key when held, else ESC
38 #define ESC_FUN LT(_FL, KC_ESC)
40 // Hyper (CTRL+ALT+SHIFT+SUPER) when held, TAB when tapped
41 #define HPR_TAB ALL_T(KC_TAB)
43 // CTRL when held, ESC when tapped
44 #define CTL_ESC CTL_T(KC_ESC)
46 // Reset RGB mode to layer signalling
49 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
50 /* Keymap _BL: Base Layer (Default Layer) */
52 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, KC_INS,
53 HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
54 ESC_FUN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
55 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, KC_RSFT, KC_UP,
56 KC_LCTL, KC_LGUI, KC_LALT,_______, L_MOUSE, L_MOUSE, _______, KC_RALT, KC_RCTL, MO_FUNC, KC_LEFT, KC_DOWN, KC_RGHT),
58 /* Keymap _FL: Function layer */
60 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_STEP,
61 _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, KC_PAUS, _______, _______, _______, _______,
62 _______, _______, MO_CTL, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
63 KC_LSPO, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, TO_MIDI, _______, KC_RSPC, KC_PGUP,
64 _______, _______, _______, _______, _______, _______, _______, _______, _______, MO_FUNC, KC_HOME, KC_PGDN, KC_END),
66 /* Keymap _ME: Media layer */
68 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU,
69 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD,
70 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
71 _______, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, _______, _______, _______, _______,
72 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT),
74 /* Keymap _CL: Control layer */
76 _______, RGB_RST, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
77 _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD,
78 _______, _______, MO_CTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
79 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI,
80 _______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
82 /* Keymap _ML: Mouse layer */
84 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
85 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
86 _______, _______, KC_BTN2, KC_BTN3, KC_BTN1, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______, _______,
87 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U,
88 _______, _______, _______, _______, L_MOUSE, L_MOUSE, _______, KC_BTN1, KC_BTN3, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R),
90 #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
91 /* Keymap _MI: MIDI layer (Advanced)*/
93 TO_BASE,MI_VEL_1,MI_VEL_2,MI_VEL_3,MI_VEL_4,MI_VEL_5,MI_VEL_6,MI_VEL_7,MI_VEL_8,MI_VEL_9,MI_VEL_10, MI_CHD, MI_CHU, xxxxxxx, xxxxxxx, xxxxxxx,
94 xxxxxxx, xxxxxxx, MI_Cs, MI_Ds, xxxxxxx, MI_Fs, MI_Gs, MI_As, xxxxxxx, MI_Cs_1, MI_Ds_1, xxxxxxx, MI_Fs_1, xxxxxxx, xxxxxxx,
95 MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, MI_G_1, xxxxxxx,
96 MI_SUS, xxxxxxx, MI_OCTD, MI_OCTU,MI_MODSD,MI_MODSU, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, MI_TRNSD,MI_TRNSU,MI_TRNS_0, MI_SUS, xxxxxxx,
97 xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx, MI_ALLOFF, MI_ALLOFF, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx),
98 #elif defined(MIDI_ENABLE) && defined(MIDI_BASIC)
99 /* Keymap _MI: MIDI layer (Basic)*/
101 TO_BASE, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,
102 xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,
103 xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,
104 xxxxxxx, xxxxxxx, MI_ON, MI_OFF, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,
105 xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx),
109 /* This is a list of user defined functions. F(N) corresponds to item N
112 const uint16_t PROGMEM fn_actions[] = {
113 [0] = ACTION_FUNCTION(0), // Calls action_function()
116 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
119 if (record->event.pressed) {
121 rgblight_sethsv(206, 255, 255);
132 #if defined(MIDI_ENABLE)
137 void clueboard_set_led(uint8_t id, uint8_t val) {
140 rgblight_sethsv_noeeprom(190, 255, val);
143 rgblight_sethsv_noeeprom(46, 255, val);
146 rgblight_sethsv_noeeprom(86, 255, val);
149 rgblight_sethsv_noeeprom(346, 255, val);
152 rgblight_sethsv_noeeprom(206, 255, val);
154 #if defined(MIDI_ENABLE)
156 rgblight_sethsv_noeeprom(316, 255, val);
162 const uint16_t oct_hues[10] = {
177 void clueboard_set_midi_led(uint8_t base_oct, uint8_t val)
181 for (uint8_t i = 0; i < RGBLED_NUM; i++) {
182 sethsv(oct_hues[base_oct], sat, val, (LED_TYPE *)&led[i]);
185 uint8_t next_oct = base_oct < MAX_OCT ? base_oct + 1 : base_oct;
187 uint16_t next_hue = base_oct < MAX_OCT ? oct_hues[next_oct] : 0;
188 uint8_t next_val = base_oct < MAX_OCT ? val : 0;
189 uint8_t next_sat = base_oct < MAX_OCT ? sat : 0;
192 for (uint8_t i = 0; i < 3; i++) {
193 sethsv(next_hue, next_sat, next_val, (LED_TYPE *)&led[i]);
196 for (uint8_t i = 11; i < 14; i++) {
197 sethsv(next_hue, next_sat, next_val, (LED_TYPE *)&led[i]);
203 void matrix_scan_user(void) {
204 rgblight_config_t rgblight_config;
205 rgblight_config.raw = eeconfig_read_rgblight();
207 if (!rgblight_config.enable || rgblight_config.mode != 1) { return; }
209 uint32_t layer = layer_state;
210 uint8_t val = rgblight_config.val;
212 if (layer & (1<<_FL)) {
213 if (layer & (1<<_ME)) {
214 clueboard_set_led(LAYER_MEDIA, val);
215 } else if (layer & (1<<_CL)) {
216 clueboard_set_led(LAYER_CONTROL, val);
218 clueboard_set_led(LAYER_FUNCTION, val);
220 } else if (layer & (1<<_ML)) {
221 clueboard_set_led(LAYER_MOUSE, val);
222 #if defined(MIDI_ENABLE)
223 } else if (layer & (1<<_MI)) {
224 clueboard_set_midi_led(midi_config.octave, val);
227 clueboard_set_led(LAYER_BASE, val);