Renamed sofle_v303 to sofle_pico

Removed Deluxe keymap from Junco
This commit is contained in:
Ryan Neff 2023-10-19 11:47:55 -07:00
parent 0b1495f2a0
commit edd4f42337
24 changed files with 22 additions and 520 deletions

View File

@ -1,7 +1,7 @@
{
"manufacturer": "Ryan Neff",
"keyboard_name": "sofle_v303",
"url": "https://github.com/JellyTitan/sofle_v303",
"keyboard_name": "sofle_pico",
"url": "https://github.com/JellyTitan/sofle_pico",
"maintainer": "Ryan Neff <github@JellyTitan.com>",
"usb": {
"vid": "0x4413",

View File

@ -1,6 +1,6 @@
# Default sofle_v303 Keymap
# Default sofle_pico Keymap
This is the default layout for sofle_v303. For the most part it's a normal QWERTY layout. The exceptions being the thumb keys, rotary encoders, and lack of caps lock (which is replaced by escape).
This is the default layout for sofle_pico. For the most part it's a normal QWERTY layout. The exceptions being the thumb keys, rotary encoders, and lack of caps lock (which is replaced by escape).
One of the biggest features of QMK is it brings layers into the mix which can give you access to even more keys. There are 4 layers: the default/base layer (QWERTY), a symbol layer, an extension layer, and an adjust layer.
@ -16,7 +16,7 @@ Those arrows for the bottom legends on the encoders are mouse scroll directions.
Red legends are the layer activated by holding down a key.
![sofle_v303's QWERTY Layout](https://i.imgur.com/fXGt5Jh.png)
![sofle_pico's QWERTY Layout](https://i.imgur.com/fXGt5Jh.png)
## Symbol Layer
@ -26,7 +26,7 @@ On the symbol layer, the right side is a number pad, and the left side contains
Holding down delete within the symbol layer will take you to the adjust layer.
![sofle_v303's Symbol Layer](https://i.imgur.com/6F35Z4Wh.png)
![sofle_pico's Symbol Layer](https://i.imgur.com/6F35Z4Wh.png)
## Extension Layer
@ -36,7 +36,7 @@ On the extension layer, the right side is the function keys in a number-pad-esqu
Holding down backspace within the extension layer will take you to the adjust layer.
![sofle_v303's Extension Layer](https://i.imgur.com/FETcqkCh.png)
![sofle_pico's Extension Layer](https://i.imgur.com/FETcqkCh.png)
## Adjust Layer
@ -44,7 +44,7 @@ This layer's theme is adjusting the keyboard's settings, it's accessed by holdin
On the adjust layer, the right side is the keyboard's settings: clear data, reboot, toggle debug mode, enter the bootloader, and change the base layer between QWERTY and [Colemak-DH](#colemak-dh). The left side adjusts the RGB lighting.
![sofle_v303's Adjust Layer](https://i.imgur.com/fRsdlt3h.png)
![sofle_pico's Adjust Layer](https://i.imgur.com/fRsdlt3h.png)
## Colemak-DH
@ -54,4 +54,4 @@ QWERTY is default when flashing your keyboard, but you can change it to Colemak-
If you've never heard of it, Colemak is a keyboard layout that was designed to be a more ergonomic, modern, efficient, and comfortable replacement to QWERTY. Colemak was designed to place the most common letters in english on the home row along with many of the most common bigrams together (two letters typed in a row). Colemak-DH is a variant of Colemak that moves D and H to beneath the index fingers rather than the home row since most people find it easier and faster to reach the keys that way rather than the middle of the home row.
![sofle_v303's Colemak-DH Layout](https://i.imgur.com/8biZfn2h.png)
![sofle_pico's Colemak-DH Layout](https://i.imgur.com/8biZfn2h.png)

View File

@ -1,7 +1,7 @@
# JellyTitan sofle_v303 Keymap
# JellyTitan sofle_pico Keymap
![jellytitan](https://i.imgur.com/JqGPWCn.png)
This keymap is derived from Ergodox layouts and is adapted for the [sofle_v303](https://github.com/daneski13/sofle_v303).
This keymap is derived from Ergodox layouts and is adapted for the [sofle_pico](https://github.com/daneski13/sofle_pico).
It is notable for it's semi-complex programming examples that include the use of rotary encoders.
Plenty of useful examples:
@ -17,12 +17,12 @@ Flashing example for this keyboard:
```bash
# For flashing the left half...
make sofle_v303:jellytitan:uf2-split-left
make sofle_pico:jellytitan:uf2-split-left
# or the qmk cli equivalent:
qmk flash -kb sofle_v303 --keymap jellytitan -bl uf2-split-left
qmk flash -kb sofle_pico --keymap jellytitan -bl uf2-split-left
# For flashing the right half...
make sofle_v303:jellytitan:uf2-split-right
make sofle_pico:jellytitan:uf2-split-right
# or the qmk cli equivalent:
qmk flash -kb sofle_v303 --keymap jellytitan -bl uf2-split-right
qmk flash -kb sofle_pico --keymap jellytitan -bl uf2-split-right
```

View File

@ -1,18 +1,18 @@
# sofle_v303 <!-- omit from toc -->
# sofle_pico <!-- omit from toc -->
![sofle_v303](https://i.imgur.com/WzZaIgQh.jpg)
![sofle_pico](https://i.imgur.com/WzZaIgQh.jpg)
sofle_v303 is a 60% Raspberry Pi Pico powered split keyboard boasting a 4x6 layout with an aggressive columnar stagger. It has 5 "thumb" keys on either side, support for 2-4 rotary encoders, and per-key RGB lighting.
sofle_pico is a 60% Raspberry Pi Pico powered split keyboard boasting a 4x6 layout with an aggressive columnar stagger. It has 5 "thumb" keys on either side, support for 2-4 rotary encoders, and per-key RGB lighting.
- Keyboard Maintainer: [Dane Skalski](https://github.com/Daneski13)
- Hardware Supported: sofle_v303 PCB, Raspberry Pi Pico
- Hardware Availability: [PCB, Case, Parts List](https://github.com/Daneski13/sofle_v303)
- Hardware Supported: sofle_pico PCB, Raspberry Pi Pico
- Hardware Availability: [PCB, Case, Parts List](https://github.com/Daneski13/sofle_pico)
Remember you have to flash both halves of the keyboard for it to work!
Make example for this keyboard (after setting up your build environment):
make sofle_v303:default
make sofle_pico:default
Flashing example for this keyboard:

View File

@ -6,7 +6,7 @@ SERIAL_DRIVER = vendor
BOOTMAGIC_ENABLE = yes
# Default Folder
DEFAULT_FOLDER = sofle_v303/rev1
DEFAULT_FOLDER = sofle_pico/rev1
# @todo: Move to json
# OLED_DRIVER = SSD1306

View File

@ -1,58 +0,0 @@
// Copyright 2022 Dane Skalski (@Daneski13)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* Indicator LEDs */
// LED index for caps lock key on the extension layer
#define CAPS_LOCK_LED_INDEX 25
// LED index for num lock key on the symbol layer
#define NUM_LOCK_LED_INDEX 62
// LED index for key that sticks the adjust layer
#define ADJST_LED_INDEX 19
// Number of Layers that can be used by VIA.
// Change this if you want more layers
#define DYNAMIC_KEYMAP_LAYER_COUNT 6
/* - Encoder settings - */
#ifdef ENCODER_ENABLE
# define ENCODER_RESOLUTION 4
#endif
#ifdef ENCODER_MAP_ENABLE
// Key delay for encoders (necessary for some keycodes)
# define ENCODER_MAP_KEY_DELAY 10
#endif
/*
- RGB Stuff -
All effects can be found in the QMK docs:
https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
*/
#ifdef RGB_MATRIX_ENABLE
// Allows the indicator LEDs to work
# define SPLIT_LED_STATE_ENABLE
# define SPLIT_LAYER_STATE_ENABLE
// Default effect when EEPROM cleared
# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON
// Turns off RGB effects when there is no longer a USB connection
# define RGB_DISABLE_WHEN_USB_SUSPENDED
// Throttling of RGB to increase keyboard responsiveness, set to 1.5x the default limits
# define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 6 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
# define RGB_MATRIX_LED_FLUSH_LIMIT 24 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms), the default, is equivalent to limiting to 60fps
// Key press reactive animations
# define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations
# define RGB_MATRIX_KEYPRESSES // Enables key press effects
# define ENABLE_RGB_MATRIX_MULTISPLASH
// Normal effects
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# define ENABLE_RGB_MATRIX_PIXEL_RAIN
#endif

View File

@ -1,329 +0,0 @@
// Copyright 2022 Dane Skalski (@Daneski13)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// Layers enum
enum sofle_pico_layers { _QWERTY, _COLEMAK_DH, _SYMB, _EXT, _ADJUST };
// Custom keycodes
enum custom_keycodes {
// Keycode for toggling between macOS and Windows key mappings
// Actually just an alias to the GUI and Alt swap Magic keycode
KC_OS = MAGIC_TOGGLE_ALT_GUI,
// Keycode for swapping the base layer between QWERTY and Colemak-DH
KC_TOGGLE_BASE = SAFE_RANGE,
// Keycode for redo action (Ctrl + Y on windows, Ctrl + Shift + Z on macOS)
KC_REDO,
// Keycodes for next/previous word
KC_WNXT,
KC_WPRV,
// Keycode for sticking/unsticking the adjust layer
KC_ADJST
};
/* LED indicators */
bool is_caps_lock_enabled(void) { // Caps lock
return (host_keyboard_led_state().caps_lock);
}
bool is_num_lock_enabled(void) { // Num lock
return (host_keyboard_led_state().num_lock);
}
bool is_adjust_layer_sticky(layer_state_t state) { // Adjust layer sticky
// Checks if the state is equal to just the adjust layer being active.
// Doing it this way can leverage SPLIT_LAYER_STATE_ENABLE
return (state == (1UL << _ADJUST)) ? true : false;
}
// Indicator color based on the RGB Matrix mode
RGB indicator_color(void) {
RGB rgb;
// Normally the indicator color is white to stand out in the RGB rainbow.
// When using the custom RGB mode that already is white, the indicator color
// is green to stand out.
if (rgb_matrix_config.mode == RGB_MATRIX_CUSTOM_WHITE_UNDERGLOW_CYCLE) {
// Green
rgb.r = 0;
rgb.g = 255;
rgb.b = 0;
} else {
// White
rgb.r = 255;
rgb.g = 255;
rgb.b = 255;
}
return rgb;
}
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
/*
Traditional QWERTY
` 1 2 3 4 5 6 7 8 9 0 -
Tab Q W E R T Y U I O P Ent
Esc A S D F G H J K L ; '
Sft Z X C V B Mut N M , . / Sft
CtrWinAltDelSpc SftBspAltWinCtr
For macOS - GUI (cmd) and Alt (opt) swapped
*/
[_QWERTY] = LAYOUT_split4x6_r1(
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL
),
/*
Colemak-DH
` 1 2 3 4 5 6 7 8 9 0 -
Tab Q W F P B J L U Y ; Ent
Esc A R S T G M N E I O '
Sft Z X C D V Mut K H , . / Sft
CtrWinAltDelSpc SftBspAltWinCtr
For macOS - GUI/Win (cmd) and Alt (opt) swapped
*/
[_COLEMAK_DH] = LAYOUT_split4x6_r1(
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SEMICOLON, KC_ENTER,
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE,
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_MUTE, KC_MPLY, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL
),
/*
Symbols/Numpad Layer
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12
Tab ! @ # $ % * 7 8 9 + Ent
\ _ [ { ( ^ = 4 5 6 0 NUM
___ | ] } ) & ___ ___ / 1 2 3 - ___
_______________ _______________
*/
[_SYMB] = LAYOUT_split4x6_r1(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PAST, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_ENTER,
KC_BSLS, KC_UNDS, KC_LBRC, KC_LCBR, KC_LPRN, KC_CIRC, KC_PEQL, KC_P4, KC_P5, KC_P6, KC_P0, KC_NUM,
_______, KC_PIPE, KC_RBRC, KC_RCBR, KC_RPRN, KC_AMPR, _______, _______, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/*
Extension/Function Layer
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12
PGUPEnd Home BRIU F7 F8 F9 F10____
Cps PGDN BRID F4 F5 F6 F11____
____ ____ ____ F1 F2 F3 F12____
_______________ _______________
*/
[_EXT] = LAYOUT_split4x6_r1(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
S(KC_TAB), KC_PGUP, KC_END, KC_UP, KC_HOME, _______, KC_BRIU, KC_F7, KC_F8, KC_F9, KC_F10, _______,
KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, KC_BRID, KC_F4, KC_F5, KC_F6, KC_F11, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/*
Adjust Layer, Keyboard Settings
SpdUHueUSatUValURnxtStck EClrRbt DBUGBOOT
SpdDHueDSatDValDRprvRTgl LOUT OS
RTgl
_______________ _______________
*/
[_ADJUST] = LAYOUT_split4x6_r1(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, KC_ADJST, KC_NO, EE_CLR, QK_RBT, DB_TOGG, QK_BOOT, KC_NO,
RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, RGB_TOG, KC_NO, KC_TOGGLE_BASE, KC_OS, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};
/*
--- Rotary Encoder Mappings ---
Encoder mappings go from leftmost encoder to rightmost encoder on the physical board.
index 0 is the the optional leftmost encoder on the left half, index 1 is the right encoder
on the left half (by the thumb keys), index 2 is the left encoder on the right half (by the
thumb keys), and index 3 is the optional rightmost encoder on the right half.
If you are only using the 2 required encoders by the thumb keys, you only need to worry about
index 1 and index 2.
Note that the key to be sent for counter-clockwise rotation (CCW) goes first and then the key for
clockwise (CW) within ENCODER_CCW_CW.
*/
#ifdef ENCODER_MAP_ENABLE
// clang-format off
// Base layer encoder mappings:
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
// Base layers
// index 0: mouse wheel up (CCW)/down (CW) index 1: volume up/down index 2: media prev/next index 3: mouse wheel left/right
[_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_WH_L, KC_WH_R) },
[_COLEMAK_DH] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
// Passes through to base layer
[_SYMB] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
// undo/redo previous word/next word
[_EXT] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_UNDO, KC_REDO), ENCODER_CCW_CW(KC_WPRV, KC_WNXT) },
// RGB Speed down/up RGB previous mode/next mode RGB brightness down/up
[_ADJUST] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
// clang-format on
};
#endif
// Called whenever a layer is changed
layer_state_t layer_state_set_user(layer_state_t state) {
// Make sure the adjust layer isn't sticky
if (is_adjust_layer_sticky(state)) return state;
// When both the symbol and extension layer keys are held, the Adjust layer is active.
return update_tri_layer_state(state, _SYMB, _EXT, _ADJUST);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
// Toggle base layer
case KC_TOGGLE_BASE:
if (record->event.pressed) {
// Toggle swapping base layers between Colemak-DH and QWERTY.
// When base layer is QWERTY, swap to Colemak-DH and vice-versa
if (get_highest_layer(default_layer_state) == _QWERTY) {
default_layer_set(1UL << _COLEMAK_DH);
} else {
default_layer_set(1UL << _QWERTY);
}
}
return false;
// Override undo in favor of the more modern undo action
case KC_UNDO:
if (record->event.pressed) {
// Use the correct modifier for macOS or Windows
uint16_t mod = keymap_config.swap_lalt_lgui ? KC_LGUI : KC_LCTL;
// Send Ctrl+Z/Cmd+Z
register_code(mod);
tap_code_delay(KC_Z, 10);
unregister_code(mod);
}
return false;
// Redo action
case KC_REDO:
if (record->event.pressed) {
// Whether or not macOS mapping is enabled
if (keymap_config.swap_lalt_lgui) {
// macOS - Send Cmd+Shift+Z
register_code(KC_LGUI);
register_code(KC_LSFT);
tap_code_delay(KC_Z, 10);
unregister_code(KC_LSFT);
unregister_code(KC_LGUI);
} else {
// Windows - Send Ctrl+Y
register_code(KC_LCTL);
tap_code_delay(KC_Y, 10);
unregister_code(KC_LCTL);
}
}
return false;
// Next word
case KC_WNXT:
if (record->event.pressed) {
// Use the correct modifier for macOS or Windows
uint16_t mod = keymap_config.swap_lalt_lgui ? KC_LALT : KC_LCTL;
// Send Ctrl+Right/Option+Right
register_code(mod);
tap_code_delay(KC_RGHT, 10);
unregister_code(mod);
}
return false;
// Previous word
case KC_WPRV:
if (record->event.pressed) {
// Use the correct modifier for macOS or Windows
uint16_t mod = keymap_config.swap_lalt_lgui ? KC_LALT : KC_LCTL;
// Send Ctrl+Left/Option+Left
register_code(mod);
tap_code_delay(KC_LEFT, 10);
unregister_code(mod);
}
return false;
// Stick / Unstick the adjust layer
case KC_ADJST:
if (record->event.pressed) {
// If currently not sticky, we want only the adjust layer to be active to make it stick.
// Otherwise we want the default layer, un-stick.
is_adjust_layer_sticky(layer_state) ? layer_state_set(default_layer_state) : layer_move(_ADJUST);
dprintf("Adjust layer is now %s\n", is_adjust_layer_sticky(layer_state) ? "stuck" : "un-stuck");
}
return false;
default:
return true;
}
}
/* Indicators (Caps Lock / Num Lock / Adjust Layer Sticky) */
bool rgb_matrix_indicators_user(void) {
layer_state_t curr_layer_state = layer_state;
layer_state_t layer = get_highest_layer(curr_layer_state);
RGB rgb = indicator_color();
/* Only show the indicator on their respective layers */
// Caps Lock is only on the extension layer
if (is_caps_lock_enabled() && layer == _EXT) {
rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, rgb.r, rgb.g, rgb.b);
}
// Num Lock is only on the symbol layer
if (is_num_lock_enabled() && layer == _SYMB) {
rgb_matrix_set_color(NUM_LOCK_LED_INDEX, rgb.r, rgb.g, rgb.b);
}
// If the adjust layer is stuck/sticky, light it up. Don't need to care about
// checking the layer since it can only be active on the adjust layer anyway
if (is_adjust_layer_sticky(curr_layer_state)) rgb_matrix_set_color(ADJST_LED_INDEX, rgb.r, rgb.g, rgb.b);
return false;
}

View File

@ -1,43 +0,0 @@
# Deluxe sofle_pico Keymap
This is my personal keymap for sofle_pico at time of writing. It departs from the [default layout](../default/README.md) with the encoder mappings and some extra keycodes. This keymap also adds indicators when caps lock and num lock are enabled. When enabled, that key will become a static white (green on the white backlight mode) but only when the layer that respective key is on is active.
I wanted that classic rainbow barf RGB effect for the underglow even if the per-key lighting is something else, so I added 2 custom RGB matrix animations: white per-key lighting with rainbow underglow and pixel rain with rainbow underglow.
Here are some gifs of the animations:
![White + Underglow Animation](https://i.imgur.com/2vCiZz0.gif)
![Pixel Rain + Underglow Animation](https://i.imgur.com/f6t0OfD.gif)
## Base Layers
The base layers are the same as the default layout, except the right side's left encoder (by the thumb keys) is now media controls. Since I am using all 4 encoders it doesn't make sense to have 2 mouse scroll up/down, but for someone with just 2 encoders it may make sense to have media controls on a layer.
QWERTY:
![QWERTY Layer](https://i.imgur.com/vkS9Tceh.png)
Colemak-DH:
![Colemak-DH Layer](https://i.imgur.com/5YYgaUAh.png)
## Symbol Layer
Symbol layer is identical to the default layout.
![Symbol Layer](https://i.imgur.com/6F35Z4Wh.png)
## Extension Layer
Encoders on the right side become undo/redo and scrolling horizontally by word.
![Extension Layer](https://i.imgur.com/0VCStS8h.png)
## Adjust Layer
Pressing "Stick Adj Layer" will "stick" the adjust layer so you can use the rotary encoders for RGB settings rather than holding down both backspace and delete. To go back to the default layer, press that stick key again or press and release either Del or Backspace. When the adjust layer is currently "sticky" the sticky key will become the indicator color mentioned earlier.
"Toggle Base" will toggle between QWERTY and Colemak-DH and toggle OS will toggle between macOS and Windows key-mappings (swapping WIN/Command with Alt/Option by the thumb keys and properly mapping redo/word scrolling).
![Adjust layer](https://i.imgur.com/71ftNoNh.png)

View File

@ -1,48 +0,0 @@
// Copyright 2022 Dane Skalski (@Daneski13)
// SPDX-License-Identifier: GPL-2.0-or-later
RGB_MATRIX_EFFECT(WHITE_UNDERGLOW_CYCLE)
RGB_MATRIX_EFFECT(PIXEL_RAIN_UNDERGLOW_CYCLE)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
// This is a modified version of the effect_runner_dx_dy_dist function from rgb_matrix
// that only applies the effect to the underglow LEDs of this keyboard
static bool underglow_effect_runner(effect_params_t* params, dx_dy_dist_f underglow_effect_func, bool backlight_white) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
HSV hsv = rgb_matrix_config.hsv;
HSV white = {0, 0, hsv.v};
RGB rgb = rgb_matrix_hsv_to_rgb(white);
uint8_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 2);
for (uint8_t i = led_min; i < led_max; i++) {
// Underglow LEDs are indicies 0 - 7 and 37 - 44
if ((i <= 7) || (37 <= i && i <= 44)) {
// Apply the maths and colors to the underglow LEDs
RGB_MATRIX_TEST_LED_FLAGS();
int16_t dx = g_led_config.point[i].x - k_rgb_matrix_center.x;
int16_t dy = g_led_config.point[i].y - k_rgb_matrix_center.y;
uint8_t dist = sqrt16(dx * dx + dy * dy);
RGB rgb = rgb_matrix_hsv_to_rgb(underglow_effect_func(hsv, dx, dy, dist, time));
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
} else {
// Set the backlight to white if needed
if (!backlight_white) continue;
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
}
return rgb_matrix_check_finished_leds(led_max);
}
// Solid white but the underglow is a rainbow spiral
static bool WHITE_UNDERGLOW_CYCLE(effect_params_t* params) {
return underglow_effect_runner(params, &CYCLE_SPIRAL_math, true);
}
// Pixel rain effect but the underglow is a rainbow spiral
static bool PIXEL_RAIN_UNDERGLOW_CYCLE(effect_params_t* params) {
PIXEL_RAIN(params);
return underglow_effect_runner(params, &CYCLE_SPIRAL_math, false);
}
#endif

View File

@ -1,20 +0,0 @@
# Enables Audio control and System control Keycodes
EXTRAKEY_ENABLE = yes
# Enables Mousekeys
MOUSEKEY_ENABLE = yes
# Encoder Support
ENCODER_ENABLE = yes
# Use Enocoder Mapping
ENCODER_MAP_ENABLE = yes
# Enables RGB Lighting Effects
RGB_MATRIX_ENABLE = yes
# Allows use of `qmk console` for debugging
CONSOLE_ENABLE = yes
# Enables VIA
VIA_ENABLE = yes
# Custom RGB Matrix Effect
RGB_MATRIX_CUSTOM_USER = yes