commit 78fc91107a644b6a08c02653a1ef29d150f2b4e2 Author: Lilac Date: Sat Jul 11 14:50:18 2026 -0400 initial commit diff --git a/config.h b/config.h new file mode 100644 index 0000000..ee8fa1b --- /dev/null +++ b/config.h @@ -0,0 +1 @@ +#define ERGODOX_LED_30 diff --git a/keymap.c b/keymap.c new file mode 100644 index 0000000..4241de8 --- /dev/null +++ b/keymap.c @@ -0,0 +1,152 @@ +#include QMK_KEYBOARD_H +#include "version.h" + +extern void sethsv(uint8_t hue, uint8_t sat, uint8_t val, int index); + +static bool backlight; +static uint16_t timer; +static uint8_t hue_left, hue_right; +static uint8_t brightness_left, brightness_right; +static uint8_t count_left, count_right; +static uint8_t position_left, position_right; + +static const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_ergodox( + QK_BOOT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, + KC_GRAVE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_EQUAL, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_LCTL, KC_LALT, MO(1), KC_NO, KC_LCMD, + KC_NO, KC_NO, KC_NO, KC_SPACE, KC_ESC, KC_UNDS, + + KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, PB_1, + KC_MINS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, + KC_RBRC, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RSFT, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_RCTL, + KC_NO, KC_DEL, KC_NO, PB_2, KC_BSPC, KC_ENTER + ), + [1] = LAYOUT_ergodox( + KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + + KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + ), +}; + +static void color(uint8_t hue, uint8_t brightness, uint8_t position, + uint8_t index) +{ + for (int i = index; i < (index + 15); ++i) { + const uint32_t cube = (uint32_t)brightness * brightness * brightness; + const uint8_t distance = position > i ? position - i : i - position; + sethsv(hue, 255, cube / 65025 * 5 / (5 + distance), i); + } + rgblight_set(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + static uint16_t last_keycode = KC_NO; + + if (record->event.key.row < 7) { + count_left += record->event.pressed ? 1 : -1; + } else { + count_right += record->event.pressed ? 1 : -1; + } + + if (!record->event.pressed) { + return true; + } + + switch (keycode) { + case PB_1: + backlight = !backlight; + break; + case PB_2: + SEND_STRING(SS_TAP(X_MINUS) SS_LSFT(SS_TAP(X_DOT))); + break; + case KC_BSPC: + if (last_keycode == PB_2) { + unregister_code(KC_BSPC); + register_code(KC_BSPC); + } + break; + default: + break; + } + last_keycode = keycode; + return true; +} + +void post_process_record_user(uint16_t keycode, keyrecord_t *record) +{ + if (!backlight || !record->event.pressed) { + return; + } + + if (record->event.key.row < 7) { + hue_left = rand(); + brightness_left = 255; + + if (record->event.key.col != 5) { + position_left = 29 - 2 * record->event.key.row; + } else { + position_left = 15; + } + + color(hue_left, brightness_left, position_left, 15); + } else { + hue_right = rand(); + brightness_right = 255; + + if (record->event.key.col != 5) { + position_right = 26 - 2 * record->event.key.row; + } else { + position_right = 14; + } + + color(hue_right, brightness_right, position_right, 0); + } + +} + +void keyboard_post_init_user(void) +{ + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom(0, 0, 0); +} + +void matrix_init_user(void) +{ + timer = timer_read(); +} + +void matrix_scan_user(void) +{ + if ((brightness_left == 0 && brightness_right == 0)) { + return; + } + if (timer_elapsed(timer) < 20) { + return; + } + timer = timer_read(); + + if (brightness_left != 0 && count_left == 0) { + brightness_left -= 5; + color(hue_left, brightness_left, position_left, 15); + } + if (brightness_right != 0 && count_right == 0) { + brightness_right -= 5; + color(hue_right, brightness_right, position_right, 0); + } +}