Layout printed using: keyboard layout editor


title: “2023 09 04 QMK layout”

date: 2023-09-05T05:27:14+02:00

draft: true


And built using: QMK firmware

#include QMK_KEYBOARD_H
#include "version.h"
#include "customkey_dv_dvp.h"

#define BASE 0 // default layer Dvorak programmer
#define DV   1 // Dvorak Layer
#define QWRT 2 // qwerty layer
#define _FN 3 // function layer
#define MDIA 4 // media keys
#define ACC 5  // accents keys
#define ACCDV 6  // accents keys DV


const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * | Esc    |   [  |   {  |   }  |   (  |   =  |  &   |           |  @   |   *  |   )  |   +  |   ]  |   !  | Backsp |
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 * | Tab    |   ;  |   ,  |   .  |   p  |   y  |  #   |           |  -   |   f  |   g  |   c  |   r  |   l  |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * | BkSp   |   a  |   o  |   e  |   u  |   i  |------|           |------|   d  |   h  |   t  |   n  |s / L2| Enter  |
 * |--------+------+------+------+------+------|  $   |           |  /   |------+------+------+------+------+--------|
 * | LShift |   '  |   q  |   j  |   k  |   x  |      |           |      |   b  |   m  |   w  |   v  |z/Ctrl| RShift |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   | LCtl |  LAlt  |    | Left | Down |                                       |  UP  | Right|      | RAlt | Rctl |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        | Home | End  |       | Ins  |   \    |
 *                                 ,------|------|------|       |------+--------+------.
 *                                 |      |      | App  |       | PgUp |        |      |
 *                                 | Space|Backsp|------|       |------|  Enter |Del   |
 *                                 |      |ace   | LGui |       | PgDn |        |      |
 *                                 `--------------------'       `----------------------'
 */
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = LAYOUT_ergodox(  // layer 0 : default
        // left hand
        KC_ESC,         DP_LBRC,     DP_LCBR,  DP_RCBR, DP_LPRN,   DP_EQL, DP_AMPR,
        KC_TAB,         DP_SCLN,     DP_COMM,   DP_DOT,    DP_P,   DP_Y,   DP_HASH,
        KC_CAPS,        DP_A,           DP_O,     DP_E,    DP_U,   DP_I,
        KC_LSFT,        CTL_T(DP_QUOT), DP_Q,     DP_J,    DP_K,   DP_X,    DP_DLR,
        KC_LCTL,        KC_LALT,     KC_DLR,  KC_LEFT, KC_DOWN,
                                              LT(MDIA, KC_HOME),  KC_END,
                                                              ALT_T(KC_APP),
                                               KC_SPC,KC_BSPC,LT(_FN,KC_MENU),
        // right hand
             DP_AT,  DP_ASTR, DP_RPRN, DP_PLUS, DP_RBRC,   DP_EXLM,         KC_BSPC,
             DP_MINS,   DP_F,    DP_G,    DP_C,    DP_R,   DP_L,            KC_TRNS,
                        DP_D,    DP_H,    DP_T,    DP_N,   LT(MDIA, DP_S),  KC_ENT,
             MT(MOD_RGUI,DP_SLSH), DP_B,   DP_M,  DP_W, DP_V, CTL_T(DP_Z),  KC_RSFT,
                                  KC_UP, KC_RGHT, KC_NO, KC_LALT,         KC_RCTL,
             KC_PGUP,       DP_BSLS,
             KC_PGDN,
             LT(ACC,KC_INS),KC_ENT,KC_DEL
    ),

/* Keymap 1: DV layer
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * | Esc    |   [  |   {  |   }  |   (  |   =  |  &   |           |  @   |   *  |   )  |   +  |   ]  |   !  | Backsp |
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 * | Tab    |   ;  |   ,  |   .  |   p  |   y  |  #   |           |  -   |   f  |   g  |   c  |   r  |   l  |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * | BkSp   |   a  |   o  |   e  |   u  |   i  |------|           |------|   d  |   h  |   t  |   n  |s / L2| Enter  |
 * |--------+------+------+------+------+------|  $   |           |  /   |------+------+------+------+------+--------|
 * | LShift |   '  |   q  |   j  |   k  |   x  |      |           |      |   b  |   m  |   w  |   v  |z/Ctrl| RShift |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   | LCtl |  LAlt  |    | Left | Down |                                       |  UP  | Right|      | RAlt | Rctl |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        | Home | End  |       | Ins  |   \    |
 *                                 ,------|------|------|       |------+--------+------.
 *                                 |      |      | App  |       | PgUp |        |      |
 *                                 | Space|Backsp|------|       |------|  Enter |Del   |
 *                                 |      |ace   | LGui |       | PgDn |        |      |
 *                                 `--------------------'       `----------------------'
 */
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[DV] = LAYOUT_ergodox(  // layer 1 : default
        // left hand
        KC_ESC,         DV_1,     DV_2,  DV_3, DV_4,   DV_5, DV_LBRC,
        KC_TAB,         DV_SCLN,     DV_COMM,   DV_DOT,    DV_P,   DV_Y,   DV_EQL,
        KC_CAPS,        DV_A,           DV_O,     DV_E,    DV_U,   DV_I,
        KC_LSFT,        CTL_T(DV_QUOT), DV_Q,     DV_J,    DV_K,   DV_X,    DV_GRV,
        KC_LCTL,        KC_LALT,     KC_DLR,  KC_LEFT, KC_DOWN,
                                              LT(MDIA, KC_HOME),  KC_END,
                                                              ALT_T(KC_APP),
                                               KC_SPC,KC_BSPC,LT(_FN,KC_MENU),
        // right hand
             DV_RBRC,  DV_6, DV_7, DV_8, DV_9,   DV_0,         KC_BSPC,
             DV_MINS,   DV_F,    DV_G,    DV_C,    DV_R,   DV_L,            KC_NO,
                        DV_D,    DV_H,    DV_T,    DV_N,   LT(MDIA, DV_S),  KC_ENT,
             MT(MOD_RGUI,DV_SLSH), DV_B,   DV_M,  DV_W, DV_V, CTL_T(DV_Z),  KC_RSFT,
                                  KC_UP, KC_RGHT, KC_NO, KC_RALT,         KC_RCTL,
             KC_PGUP,       DV_BSLS,
             KC_PGDN,
             LT(ACCDV,KC_INS),KC_ENT,KC_DEL
    ),
    /* Keymap 2: Basic layer qwerty
     *
     * ,--------------------------------------------------.           ,--------------------------------------------------.
     * | Esc    |   1  |   2  |   3  |   4  |   5  |      |           |      |   6  |   7  |   8  |   9  |   0  | Backsp |
     * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
     * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
     * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
     * | Caps   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
     * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
     * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
     * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
     *   |Grv/L1|  '"  |AltShf|      |      |                                       | Left | Down |  Up  | Right| LCtl |
     *   `----------------------------------'                                       `----------------------------------'
     *                                        ,-------------.       ,-------------.
     *                                        | Home | End  |       | Alt  |Ctrl/Esc|
     *                                 ,------|------|------|       |------+--------+------.
     *                                 |      |      | App  |       | PgUp |        |      |
     *                                 | Space|Backsp|------|       |------|  Enter | Del  |
     *                                 |      |ace   | LGui |       | PgDn |        |      |
     *                                 `--------------------'       `----------------------'
     */
    [QWRT] = LAYOUT_ergodox(  // layer 1 : qwerty
            // left hand
            KC_ESC,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_TRNS,
            KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(_FN),
            KC_CAPS,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
            KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
            LT(_FN,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_TRNS,KC_TRNS,
                                                  LT(MDIA, KC_HOME),  LT(_FN,KC_END),
                                                                  ALT_T(KC_APP),
                                                   KC_SPC,KC_BSPC,KC_LGUI,
            // right hand
            KC_TRNS,     KC_6,   KC_7,  KC_8,   KC_9,   KC_0,             KC_BSPC,
            TG(_FN),    KC_Y,   KC_U,  KC_I,   KC_O,   KC_P,             KC_BSLS,
                         KC_H,   KC_J,  KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
            MEH_T(KC_NO),KC_N,   KC_M,  KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
                                      KC_LEFT, KC_DOWN,KC_UP,KC_RGHT,          KC_LCTL,
                 KC_LALT,        CTL_T(KC_ESC),
                 KC_PGUP,
                 KC_PGDN,KC_ENT,KC_DEL
        ),
/* Keymap 3: Function Layer
 *
 * ,---------------------------------------------------.           ,--------------------------------------------------.
 * |Version  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |        |
 * |---------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |         |      |      |      | PSCR |      |      |           |      |      |   7  |   8  |   9  |   *  |        |
 * |---------+------+------+------+------+------|      |           |   -  |------+------+------+------+------+--------|
 * |         |      |      |      |      |      |------|           |------|      |   4  |   5  |   6  |   +  | ENT    |
 * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * | EEP_RST |      |      |      |      |      |      |           |   /  |      |   1  |   2  |   3  |   =  |        |
 * `---------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 * |         |      |      |      |      |                                       |   0  |      |   .  |      |      |
 *   `-----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |Animat|      |       |Toggle|Solid |
 *                                 ,------|------|------|       |------+------+------.
 *                                 |Bright|Bright|      |       |      |Hue-  |Hue+  |
 *                                 |ness- |ness+ |------|       |------|      |      |
 *                                 |      |      |      |       |      |      |      |
 *                                 `--------------------'       `--------------------'
 */
// FUNCTION
[_FN] = LAYOUT_ergodox(
       // left hand
       VRSN,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,
       RESET,KC_TRNS,KC_TRNS,  KC_TRNS,KC_PSCR,KC_TRNS,KC_TRNS,
       KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,
       EEP_RST,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,DD_EURO,
       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
                                       RGB_MOD,KC_TRNS,
                                               KC_TRNS,
                               RGB_VAD,RGB_VAI,KC_TRNS,
       // right hand
       KC_F7,     KC_F8, KC_F9,  KC_F10,  KC_F11,   KC_F12,  DF(BASE),
       KC_PMNS, KC_NLCK,  KC_P7,    KC_P8,   KC_P9,    KC_PAST, DF(DV),
                KC_TRNS,  KC_P4,    KC_P5,   KC_P6,    KC_PPLS, KC_ENT,
       KC_PSLS, KC_TRNS,  KC_P1,    KC_P2,   KC_P3,    KC_PEQL, KC_TRNS,
                          KC_P0,    KC_NO, KC_PDOT,   KC_TRNS,  KC_TRNS,
       RGB_TOG, RGB_SLD,
       KC_TRNS,
       KC_TRNS, RGB_HUD, RGB_HUI
),
/* Keymap 4: Media and mouse keys
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |        |      |      |      |      |      |VolUp |           | VolDn| Mute |      | Play |      |      |        |
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |      |      |      | Bt3  | Lclk |      |           |      |      |      | Prev | Next |      |        |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |      |      |      |  Rclk|      |                                       |MsLeft|MsDown| MsUp |MsRght|      |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |      |      |       | Lclk | Rclk |
 *                                 ,------|------|------|       |------+------+------.
 *                                 |      |      |      |       |      |      |Brwser|
 *                                 |      |      |------|       |------|      |Back  |
 *                                 |      |      |      |       |      |      |      |
 *                                 `--------------------'       `--------------------'
 */
// MEDIA AND MOUSE
        // left hand
[MDIA] = LAYOUT_ergodox(
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN1, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_TRNS,
                                           KC_TRNS, KC_TRNS,
                                                    KC_TRNS,
                                  KC_TRNS, KC_TRNS, KC_TRNS,
    // right hand
       KC_VOLD,  KC_MUTE, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, DF(BASE),
       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(DV),
                 KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, DF(QWRT),
       KC_BTN3,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_BTN1, KC_BTN2,
       KC_WH_U,
       KC_WH_D, KC_TRNS, KC_WBAK
),
/* Keymap 5: Accents keys
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |        |      |      |      |      |      |      |           |      |      |      |   Ç  |      |      |        |
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 * |        |   Á  |      |   é  |      |      |      |           |      |      |      |   ç  |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |   à  |  ô   |   è  |  ù   |  î   |------|           |------|      |      |      |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |   â  |  ö   |   ê  |  û   |  ï   |   €  |           |      |      |      |      |      |      |        |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |      |   â  |      |   ë  |   ü  |                                       |      |      |      |      |      |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |      |      |       |      |      |
 *                                 ,------|------|------|       |------+------+------.
 *                                 |      |      |      |       |      |      |      |
 *                                 |      |      |------|       |------|      |      |
 *                                 |      |      |      |       |      |      |      |
 *                                 `--------------------'       `--------------------'
 */
// ACCENTS
        // left hand
[ACC] = LAYOUT_ergodox(
       KC_TRNS, KC_TRNS, KC_TRNS, UC_EACUTE, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, DD_AUPGRAVE, KC_TRNS, DD_EACUTE, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, DD_AGRAVE, DD_OCIRCUMFLEX, DD_EGRAVE, DD_UGRAVE, DD_ICIRCUMFLEX,
       KC_TRNS, DD_AUMLAUT, DD_OUMLAUT, DD_EUMLAUT, DD_UUMLAUT, DD_IUMLAUT, DD_EURO,
       KC_TRNS, DD_ACIRCUMFLEX, KC_TRNS, DD_ECIRCUMFLEX, DD_UCIRCUMFLEX,
                                           KC_TRNS, KC_TRNS,
                                                    KC_TRNS,
                                  KC_TRNS, KC_TRNS, KC_TRNS,
    // right hand
       KC_TRNS,  KC_TRNS, KC_TRNS, DD_CUPCEDILL, KC_TRNS, KC_TRNS, DF(BASE),
       KC_TRNS,  KC_TRNS, KC_TRNS, DD_CCEDILL, KC_TRNS, KC_TRNS, DF(DV),
                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS,
       KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 6: Accents keys DV
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |        |      |      |      |      |      |      |           |      |      |      |   Ç  |      |      |        |
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 * |        |   Á  |      |   é  |      |      |      |           |      |      |      |   ç  |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |   à  |  ô   |   è  |  ù   |  î   |------|           |------|      |      |      |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |   â  |  ö   |   ê  |  û   |  ï   |   €  |           |      |      |      |      |      |      |        |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |      |   â  |      |   ë  |   ü  |                                       |      |      |      |      |      |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |      |      |       |      |      |
 *                                 ,------|------|------|       |------+------+------.
 *                                 |      |      |      |       |      |      |      |
 *                                 |      |      |------|       |------|      |      |
 *                                 |      |      |      |       |      |      |      |
 *                                 `--------------------'       `--------------------'
 */
// ACCENTS DV
        // left hand
[ACCDV] = LAYOUT_ergodox(
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, DV_AUPGRAVE, KC_TRNS, DV_EACUTE, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, DV_AGRAVE, DV_OCIRCUMFLEX, DV_EGRAVE, DV_UGRAVE, DV_ICIRCUMFLEX,
       KC_TRNS, DV_AUMLAUT, DV_OUMLAUT, DV_EUMLAUT, DV_UUMLAUT, DV_IUMLAUT, DV_EURO,
       KC_TRNS, DV_ACIRCUMFLEX, KC_TRNS, DV_ECIRCUMFLEX, DV_UCIRCUMFLEX,
                                           KC_TRNS, KC_TRNS,
                                                    KC_TRNS,
                                  KC_TRNS, KC_TRNS, KC_TRNS,
    // right hand
       KC_TRNS,  KC_TRNS, KC_TRNS, DD_CUPCEDILL, KC_TRNS, KC_TRNS, DF(BASE),
       KC_TRNS,  KC_TRNS, KC_TRNS, DD_CCEDILL, KC_TRNS, KC_TRNS, DF(DV),
                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS,
       KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS
),

};



// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {

};


// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {

    uint8_t layer = biton32(layer_state);

    ergodox_right_led_1_off();
    ergodox_right_led_2_off();
    ergodox_right_led_3_off();
    switch (layer) {
      // TODO: Make this relevant to the ErgoDox EZ.
        case 1:
            ergodox_right_led_1_on();
            break;
        case 2:
            ergodox_right_led_2_on();
            break;
        default:
            // none
            break;
    }
};
#include QMK_KEYBOARD_H
#include "version.h"
#include "keymap_dvp.h"
#include "keymap_dvorak.h"

#define BASE 0 // default layer Dvorak programmer
#define DV   1 // Dvorak Layer
#define QWRT 2 // qwerty layer
#define SYMB 3 // symbols
#define MDIA 4 // media keys
#define ACC 5  // accents keys
#define ACCDV 6  // accents keys DV

enum custom_keycodes {
  VRSN = SAFE_RANGE,
  QMKBEST,
  QMKURL,
  DD_AUPGRAVE,
  DV_AUPGRAVE,
  DD_AGRAVE,
  DV_AGRAVE,
  DD_ACIRCUMFLEX,
  DV_ACIRCUMFLEX,
  DD_AUMLAUT,
  DV_AUMLAUT,
  DD_EACUTE,
  UC_EACUTE,
  DV_EACUTE,
  DD_EGRAVE,
  DV_EGRAVE,
  DD_ECIRCUMFLEX,
  DV_ECIRCUMFLEX,
  DD_EUMLAUT,
  DV_EUMLAUT,
  DD_OACUTE,
  DV_OACUTE,
  DD_OGRAVE,
  DV_OGRAVE,
  DD_OCIRCUMFLEX,
  DV_OCIRCUMFLEX,
  DD_OUMLAUT,
  DV_OUMLAUT,
  DD_IACUTE,
  DV_IACUTE,
  DD_IGRAVE,
  DV_IGRAVE,
  DD_ICIRCUMFLEX,
  DV_ICIRCUMFLEX,
  DD_IUMLAUT,
  DV_IUMLAUT,
  DD_UACUTE,
  DV_UACUTE,
  DD_UGRAVE,
  DV_UGRAVE,
  DD_UCIRCUMFLEX,
  DV_UCIRCUMFLEX,
  DD_UUMLAUT,
  DV_UUMLAUT,
  DD_EURO,
  DV_EURO,
  DD_CCEDILL,
  DD_CUPCEDILL,
  RGB_SLD
};



bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
      case DD_AUPGRAVE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (KC_EQL);
        unregister_code (KC_LSFT);
        unregister_code (KC_EQL);
        register_code (KC_LSFT);
        register_code (KC_A);
        unregister_code (KC_LSFT);
        unregister_code (KC_A);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_AUPGRAVE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (KC_A);
        unregister_code (KC_A);
        unregister_code (KC_LSFT);
        unregister_code (KC_RGUI);
        register_code (DV_GRV);
        unregister_code (DV_GRV);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_AGRAVE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (KC_EQL);
        unregister_code (KC_LSFT);
        unregister_code (KC_EQL);
        register_code (KC_A);
        unregister_code (KC_A);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_AGRAVE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (KC_A);
        unregister_code (KC_A);
        unregister_code (KC_RGUI);
        register_code (DV_GRV);
        unregister_code (DV_GRV);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DD_ACIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_AT);
        unregister_code (KC_LSFT);
        unregister_code (DP_AT);
        register_code (KC_A);
        unregister_code (KC_A);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_ACIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (KC_A);
        unregister_code (KC_A);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_6);
        unregister_code (DV_6);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_AUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_QUOT);
        unregister_code (KC_LSFT);
        unregister_code (DP_QUOT);
        register_code (KC_A);
        unregister_code (KC_A);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_AUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (KC_A);
        unregister_code (KC_A);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_QUOT);
        unregister_code (DV_QUOT);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_EACUTE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (DP_QUOT);
        unregister_code (DP_QUOT);
        register_code (DP_E);
        unregister_code (DP_E);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_EACUTE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_E);
        unregister_code (DV_E);
        unregister_code (KC_RGUI);
        register_code (DV_QUOT);
        unregister_code (DV_QUOT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case UC_EACUTE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (MOD_RGUI);
        unregister_code (MOD_RGUI);
        register_code (KC_LSFT);
        register_code (DP_U);
        unregister_code (DP_U);
        unregister_code (KC_LSFT);
        register_code (KC_P2);
        register_code (KC_P0);
        register_code (KC_P1);
        unregister_code (KC_P2);
        unregister_code (KC_P0);
        unregister_code (KC_P1);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_EGRAVE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (KC_EQL);
        unregister_code (KC_LSFT);
        unregister_code (KC_EQL);
        register_code (DP_E);
        unregister_code (DP_E);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_EGRAVE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_E);
        unregister_code (DV_E);
        unregister_code (KC_RGUI);
        register_code (DV_GRV);
        unregister_code (DV_GRV);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DD_ECIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_AT);
        unregister_code (KC_LSFT);
        unregister_code (DP_AT);
        register_code (DP_E);
        unregister_code (DP_E);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_ECIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_E);
        unregister_code (DV_E);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_6);
        unregister_code (DV_6);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_EUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_QUOT);
        unregister_code (KC_LSFT);
        unregister_code (DP_QUOT);
        register_code (DP_E);
        unregister_code (DP_E);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_EUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_E);
        unregister_code (DV_E);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_QUOT);
        unregister_code (DV_QUOT);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;



      case DD_OCIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_AT);
        unregister_code (KC_LSFT);
        unregister_code (DP_AT);
        register_code (DP_O);
        unregister_code (DP_O);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_OCIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_O);
        unregister_code (DV_O);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_6);
        unregister_code (DV_6);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_OUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_QUOT);
        unregister_code (KC_LSFT);
        unregister_code (DP_QUOT);
        register_code (DP_O);
        unregister_code (DP_O);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_OUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_O);
        unregister_code (DV_O);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_QUOT);
        unregister_code (DV_QUOT);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;


      case DD_UGRAVE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (KC_EQL);
        unregister_code (KC_LSFT);
        unregister_code (KC_EQL);
        register_code (DP_U);
        unregister_code (DP_U);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_UGRAVE:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_U);
        unregister_code (DV_U);
        unregister_code (KC_RGUI);
        register_code (DV_GRV);
        unregister_code (DV_GRV);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_UCIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_AT);
        unregister_code (KC_LSFT);
        unregister_code (DP_AT);
        register_code (DP_U);
        unregister_code (DP_U);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_UCIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_U);
        unregister_code (DV_U);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_6);
        unregister_code (DV_6);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_UUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_QUOT);
        unregister_code (KC_LSFT);
        unregister_code (DP_QUOT);
        register_code (DP_U);
        unregister_code (DP_U);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_UUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_U);
        unregister_code (DV_U);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_QUOT);
        unregister_code (DV_QUOT);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;


      case DD_ICIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_AT);
        unregister_code (KC_LSFT);
        unregister_code (DP_AT);
        register_code (DP_I);
        unregister_code (DP_I);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_ICIRCUMFLEX:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_I);
        unregister_code (DV_I);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_6);
        unregister_code (DV_6);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_IUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DP_QUOT);
        unregister_code (KC_LSFT);
        unregister_code (DP_QUOT);
        register_code (DP_I);
        unregister_code (DP_I);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_IUMLAUT:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DV_I);
        unregister_code (DV_I);
        unregister_code (KC_RGUI);
        register_code (KC_LSFT);
        register_code (DV_QUOT);
        unregister_code (DV_QUOT);
        unregister_code (KC_LSFT);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_EURO:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (DP_EQL);
        unregister_code (DP_EQL);
        register_code (DP_C);
        unregister_code (DP_C);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;
      case DV_EURO:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        register_code (DP_C);
        unregister_code (DP_C);
        unregister_code (KC_RGUI);
        register_code (DV_EQL);
        unregister_code (DV_EQL);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_CCEDILL:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (DP_COMM);
        unregister_code (DP_COMM);
        register_code (DP_C);
        unregister_code (DP_C);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;

      case DD_CUPCEDILL:
      if (record->event.pressed) {
        // Do something when pressed
        register_code (KC_RGUI);
        unregister_code (KC_RGUI);
        register_code (DP_COMM);
        unregister_code (DP_COMM);
        register_code (KC_LSFT);
        register_code (DP_C);
        unregister_code (KC_LSFT);
        unregister_code (DP_C);
      } else {
        // Do something else when release
      }
      return false; // Skip all further processing of this key
      break;


    // dynamically generate these.
    case VRSN:
      if (record->event.pressed) {
        SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
      }
      return false;
      break;
    case RGB_SLD:
      if (record->event.pressed) {
        #ifdef RGBLIGHT_ENABLE
          rgblight_mode(1);
        #endif
      }
      return false;
      break;

      // from xd75 original
      case QMKBEST:
        if (record->event.pressed) {
          // when keycode QMKBEST is pressed
          SEND_STRING("QMK is the best thing ever!");
        } else {
          // when keycode QMKBEST is released
        }
        break;
      case QMKURL:
        if (record->event.pressed) {
          // when keycode QMKURL is pressed
          SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
        } else {
          // when keycode QMKURL is released
        }
        break;

  }
  return true;
}