How to get to point you can have per key RGB control for keyboard and macropad?

@Cory_Galloway if you paste your whole files here, please also wrap it in a colapsed block to save the thread from being hard to scroll.
Like this:

[details="/framework/ansi/keymaps/default/keymap.c"]

```c
(keymap.c file code)
```
[/details]

example:

/framework/ansi/keymaps/default/keymap.c
// Copyright 2022 Framework Computer
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H
#include "framework.h"

enum _layers {
  _BASE,
  _FN,
  _FN_LOCK,
  _FM
};


const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /*
     *         β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”
     * 14 keys β”‚ESC  β”‚Mutβ”‚vDnβ”‚vUpβ”‚Prvβ”‚Plyβ”‚Nxtβ”‚bDnβ”‚bUpβ”‚Scnβ”‚Airβ”‚Prtβ”‚Appβ”‚Del β”‚
     *         β”œβ”€β”€β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”€
     * 14 keys β”‚ ` β”‚ 1 β”‚ 2 β”‚ 3 β”‚ 4 β”‚ 5 β”‚ 6 β”‚ 7 β”‚ 8 β”‚ 9 β”‚ 0 β”‚ - β”‚ = β”‚Backspβ”‚
     *         β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”€β”€β”€β”€
     * 14 keys β”‚ Tab β”‚ Q β”‚ W β”‚ E β”‚ R β”‚ T β”‚ Y β”‚ U β”‚ I β”‚ O β”‚ P β”‚ [ β”‚ ] β”‚ \  β”‚
     *         β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€
     * 13 keys β”‚ Caps β”‚ A β”‚ S β”‚ D β”‚ F β”‚ G β”‚ H β”‚ J β”‚ K β”‚ L β”‚ ; β”‚ ' β”‚ Enter β”‚
     *         β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€
     * 12 keys β”‚ Shift  β”‚ Z β”‚ X β”‚ C β”‚ V β”‚ B β”‚ N β”‚ M β”‚ , β”‚ . β”‚ / β”‚  Shift  β”‚
     *         β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€
     *         β”‚    β”‚   β”‚   β”‚   β”‚                   β”‚   β”‚   β”‚    │↑  β”‚    β”‚
     * 11 keys β”‚Ctrlβ”‚FN β”‚GUIβ”‚Altβ”‚                   β”‚Altβ”‚Ctlβ”‚ ←  β”œβ”€β”€β”€β”€  β†’ β”‚
     *         β”‚    β”‚   β”‚   β”‚   β”‚                   β”‚   β”‚   β”‚    β”‚  ↓│    β”‚
     *         β””β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”˜
     * 78 total
     */
    [_BASE] = LAYOUT(
        KC_ESC,  KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_BRID, KC_BRIU, KC_SCRN, KC_AIRP, KC_PSCR, KC_MSEL, KC_DEL,
        KC_GRV,  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_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_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT,
        KC_LCTL, MO(_FN), KC_LGUI, KC_LALT,          KC_SPC,                    KC_RALT, KC_RCTL, KC_LEFT,   KC_UP, KC_DOWN, KC_RGHT
    ),
     /*
     * Function layer
     *         β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”
     * 14 keys β”‚FN lkβ”‚F1 β”‚F2 β”‚F3 β”‚F4 β”‚F5 β”‚F6 β”‚F7 β”‚F8 β”‚F9 β”‚F10β”‚F11β”‚F12β”‚Ins β”‚
     *         β”œβ”€β”€β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”€
     * 14 keys β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚      β”‚
     *         β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”€β”€β”€β”€
     * 14 keys β”‚     β”‚   β”‚RGBβ”‚Nxtβ”‚Hueβ”‚Satβ”‚Spdβ”‚Brtβ”‚   β”‚   β”‚Pauβ”‚   β”‚   β”‚    β”‚
     *         β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€
     * 13 keys β”‚      β”‚   β”‚SRqβ”‚Prvβ”‚Hueβ”‚Satβ”‚Spdβ”‚Brtβ”‚ScLβ”‚   β”‚   β”‚   β”‚       β”‚
     *         β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€
     * 12 keys β”‚        β”‚   β”‚   β”‚   β”‚   β”‚   β”‚Brkβ”‚   β”‚   β”‚   β”‚   β”‚         β”‚
     *         β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€
     *         β”‚    β”‚   β”‚   β”‚   β”‚                   β”‚   β”‚   β”‚    β”‚PgUβ”‚    β”‚
     * 11 keys β”‚    β”‚   β”‚   β”‚   β”‚ Toggle Backlight  β”‚   β”‚   β”‚Homeβ”œβ”€β”€β”€β”€End β”‚
     *         β”‚    β”‚   β”‚   β”‚   β”‚                   β”‚   β”‚   β”‚    β”‚PgDβ”‚    β”‚
     *         β””β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”˜
     * 78 total
     */
    [_FN] = LAYOUT(
        FN_LOCK, 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_INS,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, RGB_VAI, _______, _______, KC_PAUS, _______, _______, _______,
        _______, _______, KC_SYRQ, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_SPD, RGB_VAD, KC_SCRL, _______, _______, _______,          _______,
        _______,          _______, _______, BL_BRTG, _______, KC_BRK,  _______, _______, _______, _______, _______,          _______,
        _______, _______, _______, _______,          BL_STEP,                   _______, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END
    ),
    // Function lock layer
    // Everything on F-row locked to function layer, except ESC and DEL
    [_FN_LOCK] = LAYOUT(
        _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        _______, MO(_FM), _______, _______,          _______,                   _______, _______, _______, _______, _______, _______
    ),
    // Locked+temporary FN (back to base plus extra keys)
    [_FM] = LAYOUT(
        FN_LOCK, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_BRID, KC_BRIU, KC_SCRN, KC_AIRP, KC_PSCR, KC_MSEL,  KC_INS,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, RGB_VAI, _______, _______, KC_PAUS, _______, _______, _______,
        _______, _______, KC_SYRQ, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_SPD, RGB_VAD, KC_SCRL, _______, _______, _______,          _______,
        _______,          _______, _______, BL_BRTG, _______, KC_BRK,  _______, _______, _______, _______, _______,          _______,
        _______, _______, _______, _______,          BL_STEP,                   _______, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END
    ),
};

// Make sure to keep FN Lock even after reset
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case FN_LOCK:
            if (record->event.pressed) {
                if (layer_state_is(_FN)) {
                    set_single_persistent_default_layer(_FN_LOCK);
                }
                if (layer_state_is(_FM)) {
                    set_single_persistent_default_layer(_BASE);
                }
            }
            return false;
            break;
        default:
            break;
    }
    return true;
}

The option is under the gear icon in the post editor.

2 Likes

thanks for info. i didnt want to paste the whole file and not sure how to add my files to github so i can give a link. i really want to let you see my keymap and other keyboard files i changed. i have only touched the files inside the keyboard folder. nothing higher than that folder was changed only referenced to find any errors inside my keyboard files. i just have to see if i can clean up the matrix without breaking it. i already cleaned up the rgb id’s so it starts at 0 in top left corner and goes in reading order in reading down the keyboard. so i think i can use rgb matrix with a bool setup that i input the start and end led to create segments so dont have to specify each rgb individually unless its just for a key not in a range specified. it will take me a minute to code those options but after trial and error and reading everything on qmk i can as reference i think i am good to go as long as i can find the commands and keycodes in the quantum and other folders that is where the commands were created to see how to use them correctly. which helps way more than some of the documentation on the websites that is kinda light on details.

While creating a proper fork of the Framework repo is the best way to store and share code, there is also the option of a gist. You can put multiple files in a single gist.
What is a GitHub gist? A Beginner’s Guide to GitHub gists

The RP2040 has so much memory that it isn’t any problem just specifying the keys you want individually. Of course, the color you wish to set can be a variable, so you don’t have to repeat that, and so you can change colors easily. But I get that it looks neater if you can condense specifying the keys.

There are two 21’s and no 10 here. I think the row 6 key 2 is LED 10 for K110, correct?

1 Like

Yep, looks like it’s LED index 10 for that key. Thanks for the correction! I updated the map. Maybe I looked at K101 instead of K110.

1 Like

I have been working on 6 versions of the per key RGB keymaps but this is the only one that is sorta polished and have not found any conflicts so far. ANYONE please take a look and if you got any changes that would increase speed or use less data for same tasks it would be appreciated. I also have ones for the macropad that work for me but i need to polish those too before uploading. you can see my macropad in the images on the README file.

I worked out how to change the RGB’s brightness like how backlight step works for animation brightness. and also now you can have per key RGB or turn off the RGB brightness and the animation colors will be active and you can configure in the RGB layer.

1 Like

I was only able to take a quick glance at the code right now, but I can say the results are sure are nice. Are you seeing any problems in use?

When you’re satisfied with its functioning, you should consider creating a thread to make it more visible to others who might like it. A video would be nice to show it off.

Also, it’s just great to see more of the keyboard’s potential being used.

it took me a long time to condense the code while keeping functionality. today i got it to point i was not seeing any conflicts or unwanted actions taking place. wanted to post here so those that were working on similar could try it and give review or use the file and change the colors used.

I am not sure if anyone is checking the readme file in main. It has pictures of how the layers look. i will be creating a video of how it looks for changing layers and how to get to animations if anyone is interested.

1 Like

Video of Keymap Navigation

https://www.dropbox.com/scl/fi/vc1fssw52lvtmzqev77db/Vid-of-CORY6-Keymap-1.mp4?rlkey=hmqnncffqd1t3c9e7mv3kijuq&st=l40ogbw0&dl=0

1 Like

possibly easier to look at on reddit