Commit d6f0d7622b5b
Changed files (10)
keyboards
keyboards/moonlander/config/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2020 ZSA Technology Labs, Inc <@zsa>
+ * Copyright 2020 Jack Humbert <jack.humb@gmail.com>
+ * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define ORYX_CONFIGURATOR
keyboards/moonlander/config/config.voyagevoyage.h
@@ -0,0 +1,56 @@
+#define CHORDAL_HOLD
+#define USB_SUSPEND_WAKEUP_DELAY 0
+#define SERIAL_NUMBER "nA4oW/x9M7NW"
+#define LAYER_STATE_8BIT
+#define COMBO_COUNT 5
+
+#define RGB_MATRIX_STARTUP_SPD 60
+
+#undef ENABLE_RGB_MATRIX_ALPHAS_MODS
+#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_BREATHING
+#undef ENABLE_RGB_MATRIX_BAND_SAT
+#undef ENABLE_RGB_MATRIX_BAND_VAL
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#undef ENABLE_RGB_MATRIX_CYCLE_ALL
+#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#undef ENABLE_RGB_MATRIX_DUAL_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#undef ENABLE_RGB_MATRIX_FLOWER_BLOOMING
+#undef ENABLE_RGB_MATRIX_RAINDROPS
+#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#undef ENABLE_RGB_MATRIX_HUE_BREATHING
+#undef ENABLE_RGB_MATRIX_HUE_PENDULUM
+#undef ENABLE_RGB_MATRIX_HUE_WAVE
+#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+#undef ENABLE_RGB_MATRIX_PIXEL_FLOW
+#undef ENABLE_RGB_MATRIX_PIXEL_RAIN
+#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#undef ENABLE_RGB_MATRIX_SPLASH
+#undef ENABLE_RGB_MATRIX_MULTISPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#undef ENABLE_RGB_MATRIX_STARLIGHT
+#undef ENABLE_RGB_MATRIX_STARLIGHT_DUAL_HUE
+#undef ENABLE_RGB_MATRIX_STARLIGHT_DUAL_SAT
+#undef ENABLE_RGB_MATRIX_RIVERFLOW
keyboards/moonlander/config/keymap.c
@@ -0,0 +1,73 @@
+/* Copyright 2020 ZSA Technology Labs, Inc <@zsa>
+ * Copyright 2020 Jack Humbert <jack.humb@gmail.com>
+ * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+enum layers {
+ BASE, // default layer
+ SYMB, // symbols
+ MDIA, // media keys
+};
+
+enum custom_keycodes {
+ VRSN = SAFE_RANGE,
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT(
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HYPR, KC_MEH, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), LGUI_T(KC_QUOT),
+ KC_LSFT, LCTL_T(KC_Z),KC_X,KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RCTL_T(KC_SLSH), KC_RSFT,
+ LT(SYMB,KC_GRV),WEBUSB_PAIR,A(KC_LSFT),KC_LEFT, KC_RGHT, LALT_T(KC_APP), RCTL_T(KC_ESC), KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, MO(SYMB),
+ KC_SPC, KC_BSPC, KC_LGUI, KC_LALT, KC_TAB, KC_ENT
+ ),
+
+ [SYMB] = LAYOUT(
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ _______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, _______, _______, KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, _______,
+ _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, _______,
+ EE_CLR, _______, _______, _______, _______, RM_VALU, RM_TOGG, _______, KC_DOT, KC_0, KC_EQL, _______,
+ RM_HUED, RM_VALD, RM_HUEU, TOGGLE_LAYER_COLOR,_______, _______
+ ),
+
+ [MDIA] = LAYOUT(
+ LED_LEVEL,_______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, MS_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, MS_LEFT, MS_DOWN, MS_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, _______, _______,
+ _______, _______, _______, MS_BTN1, MS_BTN2, _______, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch (keycode) {
+ case VRSN:
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ return false;
+ }
+ }
+ return true;
+}
keyboards/moonlander/config/keymap.voyagevoyage.c
@@ -0,0 +1,1048 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+#include "i18n.h"
+#define MOON_LED_LEVEL LED_LEVEL
+#ifndef ZSA_SAFE_RANGE
+#define ZSA_SAFE_RANGE SAFE_RANGE
+#endif
+
+enum custom_keycodes {
+ RGB_SLD = ZSA_SAFE_RANGE,
+};
+
+
+
+enum tap_dance_codes {
+ DANCE_0,
+ DANCE_1,
+ DANCE_2,
+ DANCE_3,
+ DANCE_4,
+ DANCE_5,
+ DANCE_6,
+ DANCE_7,
+ DANCE_8,
+ DANCE_9,
+ DANCE_10,
+ DANCE_11,
+ DANCE_12,
+ DANCE_13,
+ DANCE_14,
+ DANCE_15,
+ DANCE_16,
+ DANCE_17,
+ DANCE_18,
+ DANCE_19,
+ DANCE_20,
+ DANCE_21,
+ DANCE_22,
+ DANCE_23,
+ DANCE_24,
+};
+
+#define DUAL_FUNC_0 LT(15, KC_F8)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_moonlander(
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRANSPARENT, KC_TRANSPARENT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
+ LT(5, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRANSPARENT, KC_TRANSPARENT, KC_Y, KC_U, KC_I, KC_O, KC_P, LT(4, KC_LBRC),
+ LT(3, KC_EQUAL),MT(MOD_LGUI, KC_A),MT(MOD_LALT, KC_S),MT(MOD_LSFT, KC_D),MT(MOD_LCTL, KC_F),ALL_T(KC_G), KC_TRANSPARENT, KC_TRANSPARENT, ALL_T(KC_H), MT(MOD_RCTL, KC_J),MT(MOD_RSFT, KC_K),MT(MOD_RALT, KC_L),MT(MOD_RGUI, KC_SCLN),LT(2, KC_QUOTE),
+ KC_GRAVE, KC_Z, TD(DANCE_0), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, TD(DANCE_1),
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, LT(2, KC_DELETE),KC_TRANSPARENT, KC_TRANSPARENT, KC_RIGHT_ALT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, BP_CCED,
+ LT(2, KC_SPACE),LT(3, KC_BSPC), KC_TRANSPARENT, KC_TRANSPARENT, KC_RIGHT_SHIFT, LT(1, KC_ENTER)
+ ),
+ [1] = LAYOUT_moonlander(
+ KC_TRANSPARENT, BP_7, BP_8, BP_9, BP_ASTR, BP_EQL, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, BP_4, BP_5, BP_6, BP_MINS, BP_SLSH, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, BP_1, BP_2, BP_3, BP_PLUS, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_RIGHT_CTRL, KC_RIGHT_SHIFT, KC_LEFT_ALT, KC_RIGHT_GUI, KC_TRANSPARENT,
+ KC_TRANSPARENT, BP_0, BP_COMM, BP_DOT, BP_BSLS, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ ),
+ [2] = LAYOUT_moonlander(
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, BP_GRV, BP_LESS, BP_GRTR, BP_MINS, BP_PIPE, KC_TRANSPARENT, KC_TRANSPARENT, BP_CIRC, BP_LCBR, BP_RCBR, BP_DLR, BP_DCRC, KC_TRANSPARENT,
+ KC_TRANSPARENT, BP_EXLM, BP_ASTR, BP_SLSH, BP_EQL, BP_AMPR, KC_TRANSPARENT, KC_TRANSPARENT, BP_HASH, BP_LPRN, BP_RPRN, BP_SCLN, BP_DQOT, KC_TRANSPARENT,
+ KC_TRANSPARENT, BP_TILD, BP_PLUS, BP_LBRC, BP_RBRC, BP_PERC, BP_AT, BP_COLN, BP_COMM, BP_DOT, BP_APOS, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ ),
+ [3] = LAYOUT_moonlander(
+ KC_TRANSPARENT, TD(DANCE_2), TD(DANCE_3), TD(DANCE_4), TD(DANCE_5), TD(DANCE_6), KC_TRANSPARENT, KC_TRANSPARENT, TD(DANCE_7), DUAL_FUNC_0, TD(DANCE_8), TD(DANCE_9), TD(DANCE_10), KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_HOME, KC_UP, KC_END, KC_PAGE_UP, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_LEFT_GUI, KC_LEFT_ALT, KC_LEFT_SHIFT, KC_LEFT_CTRL, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ ),
+ [4] = LAYOUT_moonlander(
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_MS_WH_UP, KC_MS_WH_LEFT, KC_MS_UP, KC_MS_WH_RIGHT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ TD(DANCE_11), KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_RIGHT_CTRL, KC_RIGHT_SHIFT, KC_LEFT_ALT, KC_RIGHT_GUI, TD(DANCE_12),
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_MS_BTN1, KC_MS_BTN4, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_BTN3, KC_MS_BTN2
+ ),
+ [5] = LAYOUT_moonlander(
+ KC_TRANSPARENT, TD(DANCE_13), TD(DANCE_14), TD(DANCE_15), TD(DANCE_16), TD(DANCE_17), KC_TRANSPARENT, KC_TRANSPARENT, TD(DANCE_19), TD(DANCE_20), TD(DANCE_21), TD(DANCE_22), TD(DANCE_23), KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_VOL_UP,KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ TD(DANCE_18), KC_LEFT_GUI, KC_LEFT_ALT, KC_LEFT_SHIFT, KC_LEFT_CTRL, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_VOL_DOWN,KC_MEDIA_PREV_TRACK,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_NEXT_TRACK,KC_TRANSPARENT, TD(DANCE_24),
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_MUTE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ ),
+ [6] = LAYOUT_moonlander(
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_INSERT, KC_EQUAL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRANSPARENT, KC_TRANSPARENT, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ TO(0), MT(MOD_LGUI, KC_A),MT(MOD_LALT, KC_S),MT(MOD_LSFT, KC_D),MT(MOD_LCTL, KC_F),KC_G, KC_PAGE_UP, KC_PGDN, KC_H, MT(MOD_RCTL, KC_J),MT(MOD_RSFT, KC_K),MT(MOD_RALT, KC_L),MT(MOD_RGUI, KC_SCLN),MT(MOD_LGUI, KC_QUOTE),
+ KC_ESCAPE, MT(MOD_LCTL, KC_Z),KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, MT(MOD_RCTL, KC_SLASH),MT(MOD_RSFT, KC_RBRC),
+ KC_GRAVE, KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_LEFT_GUI, MT(MOD_LALT, KC_ESCAPE),KC_DELETE, KC_TRANSPARENT, KC_RIGHT_ALT, KC_DOWN, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_SPACE, KC_BSPC, KC_LEFT_GUI, KC_RIGHT_CTRL, KC_RIGHT_SHIFT, KC_ENTER
+ ),
+};
+
+const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM = LAYOUT(
+ 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'L', 'L', 'L', 'R', 'R', 'R'
+);
+
+const uint16_t PROGMEM combo0[] = { MT(MOD_RALT, KC_L), MT(MOD_RGUI, KC_SCLN), COMBO_END};
+const uint16_t PROGMEM combo1[] = { KC_V, KC_B, COMBO_END};
+const uint16_t PROGMEM combo2[] = { KC_Q, KC_P, COMBO_END};
+const uint16_t PROGMEM combo3[] = { KC_Z, KC_SLASH, COMBO_END};
+const uint16_t PROGMEM combo4[] = { MT(MOD_RCTL, KC_J), ALL_T(KC_H), COMBO_END};
+
+combo_t key_combos[COMBO_COUNT] = {
+ COMBO(combo0, KC_ESCAPE),
+ COMBO(combo1, KC_MEDIA_PLAY_PAUSE),
+ COMBO(combo2, CW_TOGG),
+ COMBO(combo3, KC_CAPS),
+ COMBO(combo4, OSL(6)),
+};
+
+
+extern rgb_config_t rgb_matrix_config;
+
+void keyboard_post_init_user(void) {
+ rgb_matrix_enable();
+}
+
+
+const uint8_t PROGMEM ledmap[][RGB_MATRIX_LED_COUNT][3] = {
+ [0] = { {12,244,245}, {29,255,213}, {80,255,213}, {114,255,255}, {0,0,0}, {12,244,245}, {29,255,213}, {86,48,255}, {114,255,255}, {0,0,0}, {12,244,245}, {29,255,213}, {86,48,255}, {114,255,255}, {0,0,0}, {12,244,245}, {29,255,213}, {86,48,255}, {114,255,255}, {0,0,0}, {12,244,245}, {29,255,213}, {86,48,255}, {114,255,255}, {152,255,255}, {12,244,245}, {29,255,213}, {80,255,213}, {114,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {152,255,255}, {152,255,255}, {0,0,0}, {0,0,0}, {12,244,245}, {29,255,213}, {80,255,213}, {114,255,255}, {0,0,0}, {12,244,245}, {29,255,213}, {86,48,255}, {114,255,255}, {0,0,0}, {12,244,245}, {29,255,213}, {86,48,255}, {114,255,255}, {0,0,0}, {12,244,245}, {29,255,213}, {86,48,255}, {114,255,255}, {0,0,0}, {12,244,245}, {29,255,213}, {86,48,255}, {114,255,255}, {152,255,255}, {12,244,245}, {29,255,213}, {80,255,213}, {114,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {152,255,255}, {152,255,255}, {0,0,0}, {0,0,0} },
+
+ [1] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {33,255,255}, {33,255,255}, {33,255,255}, {33,255,255}, {0,0,0}, {33,255,255}, {33,255,255}, {33,255,255}, {30,96,255}, {0,0,0}, {33,255,255}, {33,255,255}, {33,255,255}, {30,96,255}, {0,0,0}, {30,96,255}, {30,96,255}, {30,96,255}, {30,96,255}, {0,0,0}, {30,96,255}, {30,96,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+ [2] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {148,11,205}, {207,218,204}, {148,11,205}, {0,0,0}, {0,0,0}, {207,218,204}, {95,218,204}, {95,218,204}, {0,0,0}, {0,0,0}, {207,218,204}, {95,218,204}, {42,218,204}, {0,0,0}, {0,0,0}, {95,218,204}, {207,218,204}, {42,218,204}, {0,0,0}, {0,0,0}, {148,11,205}, {148,11,205}, {148,11,205}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {148,11,205}, {148,11,205}, {148,11,205}, {0,0,0}, {0,0,0}, {148,11,205}, {148,11,205}, {149,218,204}, {0,0,0}, {0,0,0}, {42,218,204}, {42,218,204}, {149,218,204}, {0,0,0}, {0,0,0}, {42,218,204}, {42,218,204}, {148,11,205}, {0,0,0}, {0,0,0}, {148,11,205}, {148,11,205}, {148,11,205}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+ [3] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {33,255,255}, {152,255,155}, {152,255,155}, {0,0,0}, {0,0,0}, {33,255,255}, {152,142,255}, {152,255,255}, {0,0,0}, {0,0,0}, {33,255,255}, {152,255,255}, {152,255,255}, {0,0,0}, {0,0,0}, {33,255,255}, {152,142,255}, {152,255,255}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+ [4] = { {0,0,0}, {0,0,0}, {0,218,204}, {0,0,0}, {0,0,0}, {0,0,0}, {200,255,161}, {200,255,161}, {0,0,0}, {0,0,0}, {0,0,0}, {200,255,161}, {200,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {200,255,255}, {200,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {200,255,161}, {200,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {200,187,255}, {200,187,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,218,204}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {200,187,255}, {200,187,255}, {0,0,0}, {0,0,0} },
+
+ [5] = { {0,0,0}, {0,0,0}, {0,218,204}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,218,204}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {141,255,233}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {141,255,233}, {0,0,0}, {0,0,0}, {33,255,255}, {0,0,0}, {141,255,233}, {0,0,0}, {0,0,0}, {33,255,255}, {141,255,233}, {141,255,233}, {141,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+};
+
+void set_layer_color(int layer) {
+ for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
+ HSV hsv = {
+ .h = pgm_read_byte(&ledmap[layer][i][0]),
+ .s = pgm_read_byte(&ledmap[layer][i][1]),
+ .v = pgm_read_byte(&ledmap[layer][i][2]),
+ };
+ if (!hsv.h && !hsv.s && !hsv.v) {
+ rgb_matrix_set_color( i, 0, 0, 0 );
+ } else {
+ RGB rgb = hsv_to_rgb( hsv );
+ float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX;
+ rgb_matrix_set_color( i, f * rgb.r, f * rgb.g, f * rgb.b );
+ }
+ }
+}
+
+bool rgb_matrix_indicators_user(void) {
+ if (rawhid_state.rgb_control) {
+ return false;
+ }
+ if (keyboard_config.disable_layer_led) { return false; }
+ switch (biton32(layer_state)) {
+ case 0:
+ set_layer_color(0);
+ break;
+ case 1:
+ set_layer_color(1);
+ break;
+ case 2:
+ set_layer_color(2);
+ break;
+ case 3:
+ set_layer_color(3);
+ break;
+ case 4:
+ set_layer_color(4);
+ break;
+ case 5:
+ set_layer_color(5);
+ break;
+ default:
+ if (rgb_matrix_get_flags() == LED_FLAG_NONE)
+ rgb_matrix_set_color_all(0, 0, 0);
+ break;
+ }
+ return true;
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+
+ case DUAL_FUNC_0:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F7);
+ } else {
+ unregister_code16(KC_F7);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F17);
+ } else {
+ unregister_code16(KC_F17);
+ }
+ }
+ return false;
+ case RGB_SLD:
+ if (rawhid_state.rgb_control) {
+ return false;
+ }
+ if (record->event.pressed) {
+ rgblight_mode(1);
+ }
+ return false;
+ }
+ return true;
+}
+
+
+typedef struct {
+ bool is_press_action;
+ uint8_t step;
+} tap;
+
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD,
+ DOUBLE_TAP,
+ DOUBLE_HOLD,
+ DOUBLE_SINGLE_TAP,
+ MORE_TAPS
+};
+
+static tap dance_state[25];
+
+uint8_t dance_step(tap_dance_state_t *state);
+
+uint8_t dance_step(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) return SINGLE_TAP;
+ else return SINGLE_HOLD;
+ } else if (state->count == 2) {
+ if (state->interrupted) return DOUBLE_SINGLE_TAP;
+ else if (state->pressed) return DOUBLE_HOLD;
+ else return DOUBLE_TAP;
+ }
+ return MORE_TAPS;
+}
+
+
+void on_dance_0(tap_dance_state_t *state, void *user_data);
+void dance_0_finished(tap_dance_state_t *state, void *user_data);
+void dance_0_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_0(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_X);
+ tap_code16(KC_X);
+ tap_code16(KC_X);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_X);
+ }
+}
+
+void dance_0_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[0].step = dance_step(state);
+ switch (dance_state[0].step) {
+ case SINGLE_TAP: register_code16(KC_X); break;
+ case DOUBLE_TAP: register_code16(LCTL(BP_Y)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_X); register_code16(KC_X);
+ }
+}
+
+void dance_0_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[0].step) {
+ case SINGLE_TAP: unregister_code16(KC_X); break;
+ case DOUBLE_TAP: unregister_code16(LCTL(BP_Y)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_X); break;
+ }
+ dance_state[0].step = 0;
+}
+void on_dance_1(tap_dance_state_t *state, void *user_data);
+void dance_1_finished(tap_dance_state_t *state, void *user_data);
+void dance_1_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_1(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_RBRC);
+ tap_code16(KC_RBRC);
+ tap_code16(KC_RBRC);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_RBRC);
+ }
+}
+
+void dance_1_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[1].step = dance_step(state);
+ switch (dance_state[1].step) {
+ case SINGLE_TAP: register_code16(KC_RBRC); break;
+ case DOUBLE_TAP: register_code16(RCTL(BP_W)); break;
+ case DOUBLE_HOLD: register_code16(LALT(KC_W)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_RBRC); register_code16(KC_RBRC);
+ }
+}
+
+void dance_1_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[1].step) {
+ case SINGLE_TAP: unregister_code16(KC_RBRC); break;
+ case DOUBLE_TAP: unregister_code16(RCTL(BP_W)); break;
+ case DOUBLE_HOLD: unregister_code16(LALT(KC_W)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_RBRC); break;
+ }
+ dance_state[1].step = 0;
+}
+void on_dance_2(tap_dance_state_t *state, void *user_data);
+void dance_2_finished(tap_dance_state_t *state, void *user_data);
+void dance_2_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_2(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F1);
+ tap_code16(KC_F1);
+ tap_code16(KC_F1);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F1);
+ }
+}
+
+void dance_2_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[2].step = dance_step(state);
+ switch (dance_state[2].step) {
+ case SINGLE_TAP: register_code16(KC_F1); break;
+ case DOUBLE_TAP: register_code16(KC_F11); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F1); register_code16(KC_F1);
+ }
+}
+
+void dance_2_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[2].step) {
+ case SINGLE_TAP: unregister_code16(KC_F1); break;
+ case DOUBLE_TAP: unregister_code16(KC_F11); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F1); break;
+ }
+ dance_state[2].step = 0;
+}
+void on_dance_3(tap_dance_state_t *state, void *user_data);
+void dance_3_finished(tap_dance_state_t *state, void *user_data);
+void dance_3_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_3(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F2);
+ tap_code16(KC_F2);
+ tap_code16(KC_F2);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F2);
+ }
+}
+
+void dance_3_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[3].step = dance_step(state);
+ switch (dance_state[3].step) {
+ case SINGLE_TAP: register_code16(KC_F2); break;
+ case DOUBLE_TAP: register_code16(KC_F12); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F2); register_code16(KC_F2);
+ }
+}
+
+void dance_3_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[3].step) {
+ case SINGLE_TAP: unregister_code16(KC_F2); break;
+ case DOUBLE_TAP: unregister_code16(KC_F12); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F2); break;
+ }
+ dance_state[3].step = 0;
+}
+void on_dance_4(tap_dance_state_t *state, void *user_data);
+void dance_4_finished(tap_dance_state_t *state, void *user_data);
+void dance_4_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_4(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F3);
+ tap_code16(KC_F3);
+ tap_code16(KC_F3);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F3);
+ }
+}
+
+void dance_4_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[4].step = dance_step(state);
+ switch (dance_state[4].step) {
+ case SINGLE_TAP: register_code16(KC_F3); break;
+ case DOUBLE_TAP: register_code16(KC_F13); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F3); register_code16(KC_F3);
+ }
+}
+
+void dance_4_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[4].step) {
+ case SINGLE_TAP: unregister_code16(KC_F3); break;
+ case DOUBLE_TAP: unregister_code16(KC_F13); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F3); break;
+ }
+ dance_state[4].step = 0;
+}
+void on_dance_5(tap_dance_state_t *state, void *user_data);
+void dance_5_finished(tap_dance_state_t *state, void *user_data);
+void dance_5_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_5(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F4);
+ tap_code16(KC_F4);
+ tap_code16(KC_F4);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F4);
+ }
+}
+
+void dance_5_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[5].step = dance_step(state);
+ switch (dance_state[5].step) {
+ case SINGLE_TAP: register_code16(KC_F4); break;
+ case DOUBLE_TAP: register_code16(KC_F14); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F4); register_code16(KC_F4);
+ }
+}
+
+void dance_5_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[5].step) {
+ case SINGLE_TAP: unregister_code16(KC_F4); break;
+ case DOUBLE_TAP: unregister_code16(KC_F14); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F4); break;
+ }
+ dance_state[5].step = 0;
+}
+void on_dance_6(tap_dance_state_t *state, void *user_data);
+void dance_6_finished(tap_dance_state_t *state, void *user_data);
+void dance_6_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_6(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F5);
+ tap_code16(KC_F5);
+ tap_code16(KC_F5);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F5);
+ }
+}
+
+void dance_6_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[6].step = dance_step(state);
+ switch (dance_state[6].step) {
+ case SINGLE_TAP: register_code16(KC_F5); break;
+ case DOUBLE_TAP: register_code16(KC_F15); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F5); register_code16(KC_F5);
+ }
+}
+
+void dance_6_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[6].step) {
+ case SINGLE_TAP: unregister_code16(KC_F5); break;
+ case DOUBLE_TAP: unregister_code16(KC_F15); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F5); break;
+ }
+ dance_state[6].step = 0;
+}
+void on_dance_7(tap_dance_state_t *state, void *user_data);
+void dance_7_finished(tap_dance_state_t *state, void *user_data);
+void dance_7_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_7(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F6);
+ tap_code16(KC_F6);
+ tap_code16(KC_F6);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F6);
+ }
+}
+
+void dance_7_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[7].step = dance_step(state);
+ switch (dance_state[7].step) {
+ case SINGLE_TAP: register_code16(KC_F6); break;
+ case DOUBLE_TAP: register_code16(KC_F16); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F6); register_code16(KC_F6);
+ }
+}
+
+void dance_7_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[7].step) {
+ case SINGLE_TAP: unregister_code16(KC_F6); break;
+ case DOUBLE_TAP: unregister_code16(KC_F16); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F6); break;
+ }
+ dance_state[7].step = 0;
+}
+void on_dance_8(tap_dance_state_t *state, void *user_data);
+void dance_8_finished(tap_dance_state_t *state, void *user_data);
+void dance_8_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_8(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F8);
+ tap_code16(KC_F8);
+ tap_code16(KC_F8);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F8);
+ }
+}
+
+void dance_8_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[8].step = dance_step(state);
+ switch (dance_state[8].step) {
+ case SINGLE_TAP: register_code16(KC_F8); break;
+ case DOUBLE_TAP: register_code16(KC_F18); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F8); register_code16(KC_F8);
+ }
+}
+
+void dance_8_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[8].step) {
+ case SINGLE_TAP: unregister_code16(KC_F8); break;
+ case DOUBLE_TAP: unregister_code16(KC_F18); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F8); break;
+ }
+ dance_state[8].step = 0;
+}
+void on_dance_9(tap_dance_state_t *state, void *user_data);
+void dance_9_finished(tap_dance_state_t *state, void *user_data);
+void dance_9_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_9(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F9);
+ tap_code16(KC_F9);
+ tap_code16(KC_F9);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F9);
+ }
+}
+
+void dance_9_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[9].step = dance_step(state);
+ switch (dance_state[9].step) {
+ case SINGLE_TAP: register_code16(KC_F9); break;
+ case DOUBLE_TAP: register_code16(KC_F19); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F9); register_code16(KC_F9);
+ }
+}
+
+void dance_9_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[9].step) {
+ case SINGLE_TAP: unregister_code16(KC_F9); break;
+ case DOUBLE_TAP: unregister_code16(KC_F19); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F9); break;
+ }
+ dance_state[9].step = 0;
+}
+void on_dance_10(tap_dance_state_t *state, void *user_data);
+void dance_10_finished(tap_dance_state_t *state, void *user_data);
+void dance_10_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_10(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F10);
+ tap_code16(KC_F10);
+ tap_code16(KC_F10);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F10);
+ }
+}
+
+void dance_10_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[10].step = dance_step(state);
+ switch (dance_state[10].step) {
+ case SINGLE_TAP: register_code16(KC_F10); break;
+ case DOUBLE_TAP: register_code16(KC_F20); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F10); register_code16(KC_F10);
+ }
+}
+
+void dance_10_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[10].step) {
+ case SINGLE_TAP: unregister_code16(KC_F10); break;
+ case DOUBLE_TAP: unregister_code16(KC_F20); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F10); break;
+ }
+ dance_state[10].step = 0;
+}
+void dance_11_finished(tap_dance_state_t *state, void *user_data);
+void dance_11_reset(tap_dance_state_t *state, void *user_data);
+
+void dance_11_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[11].step = dance_step(state);
+ switch (dance_state[11].step) {
+ case DOUBLE_TAP: layer_move(0); break;
+ }
+}
+
+void dance_11_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[11].step) {
+ }
+ dance_state[11].step = 0;
+}
+void dance_12_finished(tap_dance_state_t *state, void *user_data);
+void dance_12_reset(tap_dance_state_t *state, void *user_data);
+
+void dance_12_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[12].step = dance_step(state);
+ switch (dance_state[12].step) {
+ case DOUBLE_TAP: layer_move(0); break;
+ }
+}
+
+void dance_12_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[12].step) {
+ }
+ dance_state[12].step = 0;
+}
+void on_dance_13(tap_dance_state_t *state, void *user_data);
+void dance_13_finished(tap_dance_state_t *state, void *user_data);
+void dance_13_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_13(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F1);
+ tap_code16(KC_F1);
+ tap_code16(KC_F1);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F1);
+ }
+}
+
+void dance_13_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[13].step = dance_step(state);
+ switch (dance_state[13].step) {
+ case SINGLE_TAP: register_code16(KC_F1); break;
+ case DOUBLE_TAP: register_code16(KC_F11); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F1); register_code16(KC_F1);
+ }
+}
+
+void dance_13_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[13].step) {
+ case SINGLE_TAP: unregister_code16(KC_F1); break;
+ case DOUBLE_TAP: unregister_code16(KC_F11); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F1); break;
+ }
+ dance_state[13].step = 0;
+}
+void on_dance_14(tap_dance_state_t *state, void *user_data);
+void dance_14_finished(tap_dance_state_t *state, void *user_data);
+void dance_14_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_14(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F2);
+ tap_code16(KC_F2);
+ tap_code16(KC_F2);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F2);
+ }
+}
+
+void dance_14_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[14].step = dance_step(state);
+ switch (dance_state[14].step) {
+ case SINGLE_TAP: register_code16(KC_F2); break;
+ case DOUBLE_TAP: register_code16(KC_F12); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F2); register_code16(KC_F2);
+ }
+}
+
+void dance_14_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[14].step) {
+ case SINGLE_TAP: unregister_code16(KC_F2); break;
+ case DOUBLE_TAP: unregister_code16(KC_F12); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F2); break;
+ }
+ dance_state[14].step = 0;
+}
+void on_dance_15(tap_dance_state_t *state, void *user_data);
+void dance_15_finished(tap_dance_state_t *state, void *user_data);
+void dance_15_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_15(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F3);
+ tap_code16(KC_F3);
+ tap_code16(KC_F3);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F3);
+ }
+}
+
+void dance_15_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[15].step = dance_step(state);
+ switch (dance_state[15].step) {
+ case SINGLE_TAP: register_code16(KC_F3); break;
+ case DOUBLE_TAP: register_code16(KC_F13); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F3); register_code16(KC_F3);
+ }
+}
+
+void dance_15_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[15].step) {
+ case SINGLE_TAP: unregister_code16(KC_F3); break;
+ case DOUBLE_TAP: unregister_code16(KC_F13); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F3); break;
+ }
+ dance_state[15].step = 0;
+}
+void on_dance_16(tap_dance_state_t *state, void *user_data);
+void dance_16_finished(tap_dance_state_t *state, void *user_data);
+void dance_16_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_16(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F4);
+ tap_code16(KC_F4);
+ tap_code16(KC_F4);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F4);
+ }
+}
+
+void dance_16_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[16].step = dance_step(state);
+ switch (dance_state[16].step) {
+ case SINGLE_TAP: register_code16(KC_F4); break;
+ case DOUBLE_TAP: register_code16(KC_F14); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F4); register_code16(KC_F4);
+ }
+}
+
+void dance_16_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[16].step) {
+ case SINGLE_TAP: unregister_code16(KC_F4); break;
+ case DOUBLE_TAP: unregister_code16(KC_F14); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F4); break;
+ }
+ dance_state[16].step = 0;
+}
+void on_dance_17(tap_dance_state_t *state, void *user_data);
+void dance_17_finished(tap_dance_state_t *state, void *user_data);
+void dance_17_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_17(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F5);
+ tap_code16(KC_F5);
+ tap_code16(KC_F5);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F5);
+ }
+}
+
+void dance_17_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[17].step = dance_step(state);
+ switch (dance_state[17].step) {
+ case SINGLE_TAP: register_code16(KC_F5); break;
+ case DOUBLE_TAP: register_code16(KC_F15); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F5); register_code16(KC_F5);
+ }
+}
+
+void dance_17_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[17].step) {
+ case SINGLE_TAP: unregister_code16(KC_F5); break;
+ case DOUBLE_TAP: unregister_code16(KC_F15); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F5); break;
+ }
+ dance_state[17].step = 0;
+}
+void dance_18_finished(tap_dance_state_t *state, void *user_data);
+void dance_18_reset(tap_dance_state_t *state, void *user_data);
+
+void dance_18_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[18].step = dance_step(state);
+ switch (dance_state[18].step) {
+ case DOUBLE_TAP: layer_move(0); break;
+ }
+}
+
+void dance_18_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[18].step) {
+ }
+ dance_state[18].step = 0;
+}
+void on_dance_19(tap_dance_state_t *state, void *user_data);
+void dance_19_finished(tap_dance_state_t *state, void *user_data);
+void dance_19_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_19(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F6);
+ tap_code16(KC_F6);
+ tap_code16(KC_F6);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F6);
+ }
+}
+
+void dance_19_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[19].step = dance_step(state);
+ switch (dance_state[19].step) {
+ case SINGLE_TAP: register_code16(KC_F6); break;
+ case DOUBLE_TAP: register_code16(KC_F16); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F6); register_code16(KC_F6);
+ }
+}
+
+void dance_19_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[19].step) {
+ case SINGLE_TAP: unregister_code16(KC_F6); break;
+ case DOUBLE_TAP: unregister_code16(KC_F16); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F6); break;
+ }
+ dance_state[19].step = 0;
+}
+void on_dance_20(tap_dance_state_t *state, void *user_data);
+void dance_20_finished(tap_dance_state_t *state, void *user_data);
+void dance_20_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_20(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F7);
+ tap_code16(KC_F7);
+ tap_code16(KC_F7);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F7);
+ }
+}
+
+void dance_20_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[20].step = dance_step(state);
+ switch (dance_state[20].step) {
+ case SINGLE_TAP: register_code16(KC_F7); break;
+ case DOUBLE_TAP: register_code16(KC_F17); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F7); register_code16(KC_F7);
+ }
+}
+
+void dance_20_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[20].step) {
+ case SINGLE_TAP: unregister_code16(KC_F7); break;
+ case DOUBLE_TAP: unregister_code16(KC_F17); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F7); break;
+ }
+ dance_state[20].step = 0;
+}
+void on_dance_21(tap_dance_state_t *state, void *user_data);
+void dance_21_finished(tap_dance_state_t *state, void *user_data);
+void dance_21_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_21(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F8);
+ tap_code16(KC_F8);
+ tap_code16(KC_F8);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F8);
+ }
+}
+
+void dance_21_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[21].step = dance_step(state);
+ switch (dance_state[21].step) {
+ case SINGLE_TAP: register_code16(KC_F8); break;
+ case DOUBLE_TAP: register_code16(KC_F18); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F8); register_code16(KC_F8);
+ }
+}
+
+void dance_21_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[21].step) {
+ case SINGLE_TAP: unregister_code16(KC_F8); break;
+ case DOUBLE_TAP: unregister_code16(KC_F18); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F8); break;
+ }
+ dance_state[21].step = 0;
+}
+void on_dance_22(tap_dance_state_t *state, void *user_data);
+void dance_22_finished(tap_dance_state_t *state, void *user_data);
+void dance_22_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_22(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F9);
+ tap_code16(KC_F9);
+ tap_code16(KC_F9);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F9);
+ }
+}
+
+void dance_22_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[22].step = dance_step(state);
+ switch (dance_state[22].step) {
+ case SINGLE_TAP: register_code16(KC_F9); break;
+ case DOUBLE_TAP: register_code16(KC_F19); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F9); register_code16(KC_F9);
+ }
+}
+
+void dance_22_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[22].step) {
+ case SINGLE_TAP: unregister_code16(KC_F9); break;
+ case DOUBLE_TAP: unregister_code16(KC_F19); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F9); break;
+ }
+ dance_state[22].step = 0;
+}
+void on_dance_23(tap_dance_state_t *state, void *user_data);
+void dance_23_finished(tap_dance_state_t *state, void *user_data);
+void dance_23_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_23(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_F10);
+ tap_code16(KC_F10);
+ tap_code16(KC_F10);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_F10);
+ }
+}
+
+void dance_23_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[23].step = dance_step(state);
+ switch (dance_state[23].step) {
+ case SINGLE_TAP: register_code16(KC_F10); break;
+ case DOUBLE_TAP: register_code16(KC_F20); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_F10); register_code16(KC_F10);
+ }
+}
+
+void dance_23_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[23].step) {
+ case SINGLE_TAP: unregister_code16(KC_F10); break;
+ case DOUBLE_TAP: unregister_code16(KC_F20); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_F10); break;
+ }
+ dance_state[23].step = 0;
+}
+void dance_24_finished(tap_dance_state_t *state, void *user_data);
+void dance_24_reset(tap_dance_state_t *state, void *user_data);
+
+void dance_24_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[24].step = dance_step(state);
+ switch (dance_state[24].step) {
+ case DOUBLE_TAP: layer_move(0); break;
+ }
+}
+
+void dance_24_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[24].step) {
+ }
+ dance_state[24].step = 0;
+}
+
+tap_dance_action_t tap_dance_actions[] = {
+ [DANCE_0] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_0, dance_0_finished, dance_0_reset),
+ [DANCE_1] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_1, dance_1_finished, dance_1_reset),
+ [DANCE_2] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_2, dance_2_finished, dance_2_reset),
+ [DANCE_3] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_3, dance_3_finished, dance_3_reset),
+ [DANCE_4] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_4, dance_4_finished, dance_4_reset),
+ [DANCE_5] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_5, dance_5_finished, dance_5_reset),
+ [DANCE_6] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_6, dance_6_finished, dance_6_reset),
+ [DANCE_7] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_7, dance_7_finished, dance_7_reset),
+ [DANCE_8] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_8, dance_8_finished, dance_8_reset),
+ [DANCE_9] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_9, dance_9_finished, dance_9_reset),
+ [DANCE_10] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_10, dance_10_finished, dance_10_reset),
+ [DANCE_11] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_11_finished, dance_11_reset),
+ [DANCE_12] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_12_finished, dance_12_reset),
+ [DANCE_13] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_13, dance_13_finished, dance_13_reset),
+ [DANCE_14] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_14, dance_14_finished, dance_14_reset),
+ [DANCE_15] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_15, dance_15_finished, dance_15_reset),
+ [DANCE_16] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_16, dance_16_finished, dance_16_reset),
+ [DANCE_17] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_17, dance_17_finished, dance_17_reset),
+ [DANCE_18] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_18_finished, dance_18_reset),
+ [DANCE_19] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_19, dance_19_finished, dance_19_reset),
+ [DANCE_20] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_20, dance_20_finished, dance_20_reset),
+ [DANCE_21] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_21, dance_21_finished, dance_21_reset),
+ [DANCE_22] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_22, dance_22_finished, dance_22_reset),
+ [DANCE_23] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_23, dance_23_finished, dance_23_reset),
+ [DANCE_24] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_24_finished, dance_24_reset),
+};
keyboards/moonlander/config/matrix_rgb.c
@@ -0,0 +1,132 @@
+#include QMK_KEYBOARD_H
+#include "moonlander_keymap.h"
+
+extern rgb_config_t rgb_matrix_config;
+
+void my_set_rgb_matrix_color_range(int start, int end, uint8_t red, uint8_t green, uint8_t blue) {
+ for (int base = start; base < end; base += 5) {
+ for (int offset = 0; offset < 3; offset++) {
+ int i = base + offset;
+ if (i < end) {
+ rgb_matrix_set_color(i, red, green, blue);
+ }
+ }
+ }
+}
+
+void set_a_z_color(uint8_t red, uint8_t green, uint8_t blue) {
+ my_set_rgb_matrix_color_range(6, 29, red, green, blue);
+ my_set_rgb_matrix_color_range(42, 65, red, green, blue);
+}
+
+// matrix, to set key with. maybe there is a better way but used ascii generator so i can easily set those visually
+// ┌────┬────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┬────┐
+// │ 0 │ 5 │ 10 │ 15 │ 20 │ 25 │ 29 │ │ 65 │ 61 │ 56 │ 51 │ 46 │ 41 │ 36 │
+// ├────┼────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┼────┤
+// │ 1 │ 6 │ 11 │ 16 │ 21 │ 26 │ 30 │ │ 66 │ 62 │ 57 │ 52 │ 47 │ 42 │ 37 │
+// ├────┼────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┼────┤
+// │ 2 │ 7 │ 12 │ 17 │[22]│ 27 │ 31 │ │ 67 │ 63 │[58]│ 53 │ 48 │ 43 │ 38 │
+// ├────┼────┼────┼────┼────┼────┼────┘ └────┼────┼────┼────┼────┼────┼────┤
+// │ 3 │ 8 │ 13 │ 18 │ 23 │ 28 │ │ 64 │ 59 │ 54 │ 49 │ 44 │ 39 │
+// ├────┼────┼────┼────┼────┼────┼─────────┐ ┌─────────┼────┼────┼────┼────┼────┼────┤
+// │ 4 │ 9 │ 14 │ 19 │ 24 │ │ 32 │ │ 68 │ │ 60 │ 55 │ 50 │ 45 │ 40 │
+// └────┴────┴────┴────┴────┼────┼────┬────┤ ├────┬────┼────┼────┴────┴────┴────┴────┘
+// │ 33 │ 34 │ 35 │ │ 69 │ 70 │ 71 │
+// └────┴────┴────┘ └────┴────┴────┘
+// Runs constantly in the background, in a loop.
+bool rgb_matrix_indicators_user(void) {
+ if (rgb_matrix_get_flags() & (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER)) {
+ switch (get_highest_layer(layer_state)) {
+ case MDIA:
+ rgb_matrix_set_color_all(RGB_RED);
+ rgb_matrix_set_color(38, RGB_BLUE); // screenshot key
+ break;
+ case BASE:
+ rgb_matrix_set_color_all(RGB_OFF);
+ // set_a_z_color(RGB_WHITE);
+ rgb_matrix_set_color(22, RGB_WHITE); // F
+ rgb_matrix_set_color(58, RGB_WHITE); // J
+ // rgb_matrix_set_color(29, RGB_MAGENTA);
+ // rgb_matrix_set_color(30, RGB_MAGENTA);
+ // rgb_matrix_set_color(31, RGB_MAGENTA);
+ // rgb_matrix_set_color(65, RGB_MAGENTA);
+ // rgb_matrix_set_color(66, RGB_MAGENTA);
+ // rgb_matrix_set_color(67, RGB_MAGENTA);
+ // rgb_matrix_set_color(60, RGB_YELLOW);
+ // rgb_matrix_set_color(24, RGB_YELLOW);
+ // rgb_matrix_set_color(2, RGB_CHARTREUSE);
+ // rgb_matrix_set_color(38, RGB_CHARTREUSE);
+ break;
+ case SYMB:
+ rgb_matrix_set_color_all(RGB_YELLOW);
+ rgb_matrix_set_color(60, RGB_MAGENTA); // 0
+ rgb_matrix_set_color(47, RGB_RED); // number
+ rgb_matrix_set_color(48, RGB_RED); // number
+ rgb_matrix_set_color(49, RGB_RED); // number
+ rgb_matrix_set_color(52, RGB_RED); // number
+ rgb_matrix_set_color(53, RGB_RED); // number
+ rgb_matrix_set_color(54, RGB_RED); // number
+ rgb_matrix_set_color(57, RGB_RED); // number
+ rgb_matrix_set_color(58, RGB_RED); // number
+ rgb_matrix_set_color(59, RGB_RED); // number
+ break;
+ case ACCENT:
+ rgb_matrix_set_color_all(RGB_CYAN);
+ rgb_matrix_set_color(7, RGB_RED);
+ rgb_matrix_set_color(62, RGB_RED);
+ rgb_matrix_set_color(57, RGB_RED);
+ rgb_matrix_set_color(52, RGB_RED);
+ rgb_matrix_set_color(47, RGB_RED);
+ rgb_matrix_set_color(26, RGB_RED);
+ rgb_matrix_set_color(21, RGB_RED);
+ rgb_matrix_set_color(18, RGB_RED);
+ rgb_matrix_set_color(16, RGB_RED);
+ rgb_matrix_set_color(15, RGB_RED);
+ rgb_matrix_set_color(12, RGB_RED);
+ rgb_matrix_set_color(11, RGB_RED);
+ break;
+ case GAME:
+ rgb_matrix_set_color_all(RGB_WHITE);
+ rgb_matrix_set_color(11, RGB_RED); //
+ rgb_matrix_set_color(12, RGB_RED); //
+ rgb_matrix_set_color(7, RGB_RED); //
+ rgb_matrix_set_color(17, RGB_RED); //
+ break;
+ case STUFF:
+ rgb_matrix_set_color_all(RGB_MAGENTA);
+ rgb_matrix_set_color(11, RGB_RED); //
+ rgb_matrix_set_color(12, RGB_RED); //
+ rgb_matrix_set_color(7, RGB_RED); //
+ break;
+#if 0
+ case NUMB:
+ rgb_matrix_set_color_all(RGB_WHITE);
+ rgb_matrix_set_color(55, RGB_MAGENTA); // 0
+ rgb_matrix_set_color(47, RGB_YELLOW); // number
+ rgb_matrix_set_color(48, RGB_YELLOW); // number
+ rgb_matrix_set_color(49, RGB_YELLOW); // number
+ rgb_matrix_set_color(52, RGB_YELLOW); // number
+ rgb_matrix_set_color(53, RGB_YELLOW); // number
+ rgb_matrix_set_color(54, RGB_YELLOW); // number
+ rgb_matrix_set_color(57, RGB_YELLOW); // number
+ rgb_matrix_set_color(58, RGB_YELLOW); // number
+ rgb_matrix_set_color(59, RGB_YELLOW); // number
+
+ rgb_matrix_set_color(19, RGB_MAGENTA); // 0
+ rgb_matrix_set_color(11, RGB_YELLOW); // number
+ rgb_matrix_set_color(12, RGB_YELLOW); // number
+ rgb_matrix_set_color(13, RGB_YELLOW); // number
+ rgb_matrix_set_color(16, RGB_YELLOW); // number
+ rgb_matrix_set_color(17, RGB_YELLOW); // number
+ rgb_matrix_set_color(18, RGB_YELLOW); // number
+ rgb_matrix_set_color(21, RGB_YELLOW); // number
+ rgb_matrix_set_color(22, RGB_YELLOW); // number
+ rgb_matrix_set_color(23, RGB_YELLOW); // number
+ break;
+#endif
+ default:
+ break;
+ }
+ }
+ return false;
+}
keyboards/moonlander/config/matrix_rgb.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#include "quantum.h"
keyboards/moonlander/config/moonlander_keymap.h
@@ -0,0 +1,28 @@
+#pragma once
+#include "matrix_rgb.h"
+
+enum {
+ TD_SCREENSHOT,
+ TD_RSHIFT,
+};
+#define ALT OSM(MOD_LALT)
+#define MPLPA A(G(C(S(KC_M))))
+#define CSM OSM(MOD_LCTL | MOD_LSFT)
+#define CST(x) MT(MOD_LCTL | MOD_LSFT, x)
+#define GT LGUI_T
+#define CT LCTL_T
+#define AT LALT_T
+#define RAT RALT_T
+#define ST LSFT_T
+#define H HYPR
+
+enum layers {
+ BASE = 0,
+ SYMB,
+ MDIA,
+ STUFF,
+ MOTION,
+ GAME,
+ ACCENT,
+};
+enum custom_keycodes { VRSN = SAFE_RANGE, CHMOU_CUSTOM_KEYCODES };
keyboards/moonlander/config/rules.voyagevoyage.mk
@@ -0,0 +1,7 @@
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+ORYX_ENABLE = yes
+RGB_MATRIX_CUSTOM_KB = yes
+TAP_DANCE_ENABLE = yes
+SPACE_CADET_ENABLE = no
+COMBO_ENABLE = yes
keyboards/moonlander/.gitignore
@@ -0,0 +1,1 @@
+build/
\ No newline at end of file
keyboards/moonlander/go.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+
+set -eufo pipefail
+TARGET_USER=vincent
+
+checkout() {
+ if [[ ! -d ./build/qmk_firmware ]]; then
+ git clone https://github.com/qmk/qmk_firmware ./build/qmk_firmware
+ fi
+}
+
+update() {
+ git submodule update --init --recursive
+ for i in qmk_firmware keychron_firmware; do
+ (
+ [[ -e ./build/${i} ]] && {
+ cd ./build/${i}
+ qmk git-submodule
+ } || true
+ )
+ done
+}
+
+symlink() {
+ local p=qmk_firmware
+ local keyboard="zsa/moonlander"
+ rm -f build/${p}/keyboards/${keyboard}/keymaps/${TARGET_USER}
+ mkdir -p build/${p}/keyboards/${keyboard}/keymaps
+ ln -rvsf ${PWD}/config build/${p}/keyboards/${keyboard}/keymaps/${TARGET_USER}
+ # [[ -e build/${p}/users/common ]] || ln -rvsf ${PWD}/common build/${p}/users/vincent
+}
+
+action() {
+ local keyboard="zsa/moonlander"
+ local action=$1
+ local p=qmk_firmware
+ symlink ${keyboard}
+ make BUILD_DIR=${PWD}/build -j1 -C build/${p} ${keyboard}:${TARGET_USER}:${action}
+}
+
+build() {
+ action build
+}
+
+flash() {
+ action flash
+}
+
+clean() {
+ rm -rf build
+ git submodule update -f --recursive
+}
+
+help() {
+ echo "build.sh [update/clean/build/flash]"
+}
+
+[[ -z ${1-""} ]] && {
+ set +x
+ echo "need at least one arg"
+ help
+ exit 1
+}
+
+if [[ $1 == update ]]; then
+ update
+ exit
+elif [[ $1 == checkout ]]; then
+ checkout ${2:-""}
+ exit
+elif [[ ${1} == clean ]]; then
+ clean
+ exit
+fi
+
+case "$1" in
+build) build ;;
+flash) flash ;;
+*)
+ echo "Wrong argument $1"
+ help
+ exit 1
+ ;;
+esac