فهرست منبع

[Keymap] Update/refactor userspace and add keymaps for rmeli (#18398)

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Elliot Powell <johnp8727@gmail.com>
Rocco Meli 2 سال پیش
والد
کامیت
317b800bbb

+ 45 - 0
keyboards/boardsource/lulu/keymaps/rmeli/config.h

@@ -0,0 +1,45 @@
+/*
+Copyright 2022 Rocco Meli <@RMeli>
+
+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 MASTER_LEFT // Left side is the master
+#define SPLIT_LED_STATE_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+// Configure RGB Matrix
+#    define RGB_MATRIX_KEYPRESSES // enable keypress effects
+#    define RGB_MATRIX_LED_FLUSH_LIMIT 16
+#    define RGB_DISABLE_WHEN_USB_SUSPENDED
+#    define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
+#    define RGB_MATRIX_STARTUP_HUE 10
+#    define RGB_MATRIX_STARTUP_SAT 255
+#    define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+// Disable RGB Matrix effects (from lulu/config.h)
+#    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
+// Enable RGB Matrix effects
+#    define ENABLE_RGB_MATRIX_BREATHING
+#    define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#    define ENABLE_RGB_MATRIX_SOLID_COLOR
+#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#endif

+ 108 - 0
keyboards/boardsource/lulu/keymaps/rmeli/keymap.c

@@ -0,0 +1,108 @@
+/*
+Copyright 2022 Cole Smith <cole@boadsource.xyz>
+Copyright 2022 Rocco Meli <@RMeli>
+
+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 "rmeli.h"
+
+enum layers {
+    _QWERTY,
+    _COLEMAK_DH,
+    _RAISE,
+    _LOWER,
+    _ADJUST,
+};
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+
+#define QWY_DF DF(_QWERTY)
+#define CMK_DF DF(_COLEMAK_DH)
+
+// clang-format off
+#define __________THUMB_LEFT_x4___________ KC_LALT, KC_LGUI,   LOWER,  KC_SPC
+#define __________THUMB_RIGHT_x4__________  KC_ENT,   RAISE, KC_LCTL, KC_RGUI
+// clang-format on
+
+/* LAYOUT
+ *
+ * ,-----------------------------.                ,-----------------------------.
+ * |    |    |    |    |    |    |                |    |    |    |    |    |    |
+ * |----+----+----+----+----+----|                |----+----+----+----+----+----|
+ * |    |    |    |    |    |    |                |    |    |    |    |    |    |
+ * |----+----+----+----+----+----|                |----+----+----+----+----+----|
+ * |    |    |    |    |    |    |-----.    ,-----|    |    |    |    |    |    |
+ * |----+----+----+----+----+----|     |    |     |----+----+----+----+----+----|
+ * |    |    |    |    |    |    |-----|    |-----|    |    |    |    |    |    |
+ * `----------------------------/     /      \     \----------------------------'
+ *            |    |    |    | /     /        \     \  |    |    |    |
+ *            |    |    |    |/     /          \     \ |    |    |    |
+ *            `--------------''-----'          '------''--------------'
+ */
+
+// Define wrapper for standard LULU layout
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT_wrapper(
+  ___________________NUMBER_LEFT_x6___________________,                   ___________________NUMBER_RIGHT_x6__________________,
+  ___________________QWERTY_L1_x6_____________________,                   ___________________QWERTY_R1_x6_____________________,
+  ___________________QWERTY_L2_x6_____________________,                   ___________________QWERTY_R2_x6_____________________,
+  ___________________QWERTY_L3_x6_____________________, KC_LBRC, KC_RBRC, ___________________QWERTY_R3_x6_____________________,
+                             __________THUMB_LEFT_x4___________,  __________THUMB_RIGHT_x4__________
+  ),
+
+  [_COLEMAK_DH] = LAYOUT_wrapper(
+  ___________________NUMBER_LEFT_x6___________________,                   ___________________NUMBER_RIGHT_x6__________________,
+  ________________COLEMAK_MOD_DH_L1_x6________________,                   ________________COLEMAK_MOD_DH_R1_x6________________,
+  ________________COLEMAK_MOD_DH_L2_x6________________,                   ________________COLEMAK_MOD_DH_R2_x6________________,
+  ________________COLEMAK_MOD_DH_L3_x6________________, KC_LBRC, KC_RBRC, ________________COLEMAK_MOD_DH_R3_x6________________,
+                             __________THUMB_LEFT_x4___________,  __________THUMB_RIGHT_x4__________
+  ),
+
+  [_LOWER] = LAYOUT_wrapper(
+  ____________________FUNC_LEFT_x6____________________,                   ____________________FUNC_RIGHT_x6___________________,
+  _______, ______________NUMBER_LEFT_x5_______________,                   ______________NUMBER_RIGHT_x5______________, _______,
+  _______, ______________UNICODE_L2_x5________________,                   ________________NAV_R2_x5__________________, XXXXXXX,
+  _______, ______________UNICODE_L3_x5________________, _______, _______, ________________NAV_R3_x5__________________, _______,
+                             _______, _______, _______, _______, _______, _______, _______, _______
+  ),
+
+  [_RAISE] = LAYOUT_wrapper(
+  ___________________NUMBER_LEFT_x6___________________,                   ___________________NUMBER_RIGHT_x6__________________,
+  ___________________SYMBOL_LEFT_x6___________________,                   ___________________SYMBOL_RIGHT_x6__________________,
+  _______, ____________NAV_VIM_x4____________, XXXXXXX,                   ____________________SYMBOL_R2_x6____________________,
+  _______, _________________NONE_5x___________________, _______, _______, ____________________SYMBOL_R3_x6____________________,
+                             _______, _______, _______, _______, _______, _______, _______, _______
+  ),
+
+  [_ADJUST] = LAYOUT_wrapper(
+  QK_BOOT, _________________NONE_5x___________________,                   ______________________NONE_6x_______________________,
+  XXXXXXX, _________________NONE_5x___________________,                   _______________CONFIG_R1_x5________________,  QWY_DF,
+  RGB_TOG, ________________RGB_L2_x5__________________,                   _______________CONFIG_R2_x5________________, XXXXXXX,
+  XXXXXXX, ________________RGB_L3_x5__________________, _______, _______, _______________CONFIG_R3_x5________________,  CMK_DF,
+                             _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+// clang-format on
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+    return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}

+ 9 - 0
keyboards/boardsource/lulu/keymaps/rmeli/rules.mk

@@ -0,0 +1,9 @@
+TAP_DANCE_ENABLE = yes
+AUTO_SHIFT_ENABLE = no // disable auto-shift with home row mods
+
+UNICODEMAP_ENABLE = yes
+NKRO_ENABLE = yes
+MAGIC_ENABLE = yes
+
+RGBLIGHT_ENABLE = no
+RGB_MATRIX_ENABLE = yes

+ 6 - 19
keyboards/crkbd/keymaps/rmeli/config.h

@@ -21,32 +21,19 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 #pragma once
 #pragma once
 
 
-#define MASTER_LEFT  // Left side is the master
+#define MASTER_LEFT // Left side is the master
 #define SPLIT_LED_STATE_ENABLE
 #define SPLIT_LED_STATE_ENABLE
 
 
-#define TAPPING_TERM 200
-
-#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX
-
-#define AUTO_SHIFT_REPEAT
-
-#ifdef RGBLIGHT_ENABLE
-#    define RGBLIGHT_LIMIT_VAL 120
-#    define RGBLIGHT_HUE_STEP 10
-#    define RGBLIGHT_SAT_STEP 17
-#    define RGBLIGHT_VAL_STEP 17
-#endif
-
 #ifdef RGB_MATRIX_ENABLE
 #ifdef RGB_MATRIX_ENABLE
 // RGB matrix options
 // RGB matrix options
-#    define RGB_MATRIX_KEYPRESSES  // enable keypress effects
+#    define RGB_MATRIX_KEYPRESSES // enable keypress effects
 #    define RGB_MATRIX_LED_FLUSH_LIMIT 16
 #    define RGB_MATRIX_LED_FLUSH_LIMIT 16
 #    define RGB_DISABLE_WHEN_USB_SUSPENDED
 #    define RGB_DISABLE_WHEN_USB_SUSPENDED
 // Disable unwanted R2G effects (from r2g/config.h)
 // Disable unwanted R2G effects (from r2g/config.h)
 #    undef ENABLE_RGB_MATRIX_ALPHAS_MODS
 #    undef ENABLE_RGB_MATRIX_ALPHAS_MODS
 #    undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
 #    undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
 #    undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
 #    undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-#    undef ENABLE_RGB_MATRIX_BREATHING
+#    define ENABLE_RGB_MATRIX_BREATHING
 #    undef ENABLE_RGB_MATRIX_BAND_SAT
 #    undef ENABLE_RGB_MATRIX_BAND_SAT
 #    undef ENABLE_RGB_MATRIX_BAND_VAL
 #    undef ENABLE_RGB_MATRIX_BAND_VAL
 #    undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
 #    undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
@@ -57,8 +44,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #    undef ENABLE_RGB_MATRIX_RAINDROPS
 #    undef ENABLE_RGB_MATRIX_RAINDROPS
 #    undef ENABLE_RGB_MATRIX_HUE_BREATHING
 #    undef ENABLE_RGB_MATRIX_HUE_BREATHING
 #    undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
 #    undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-//#   undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
-#    undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#    define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
 #    undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
 #    undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
 #    undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
 #    undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
 #    undef ENABLE_RGB_MATRIX_SPLASH
 #    undef ENABLE_RGB_MATRIX_SPLASH
@@ -77,4 +64,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #undef LOCKING_SUPPORT_ENABLE
 #undef LOCKING_SUPPORT_ENABLE
 #undef LOCKING_RESYNC_ENABLE
 #undef LOCKING_RESYNC_ENABLE
 #define NO_MUSIC_MODE
 #define NO_MUSIC_MODE
-#define LAYER_STATE_8BIT  // Limit to 8 layers
+#define LAYER_STATE_8BIT // Limit to 8 layers

+ 49 - 52
keyboards/crkbd/keymaps/rmeli/keymap.c

@@ -1,6 +1,6 @@
 /*
 /*
 Copyright 2019 @foostan
 Copyright 2019 @foostan
-Copyright 2020 Drashna Jaelre <@drashna>
+Copyright 2020 Christopher Courtney, aka Drashna Jael're  (@drashna) <drashna@live.com>
 Copyright 2021 Rocco Meli <@RMeli>
 Copyright 2021 Rocco Meli <@RMeli>
 
 
 This program is free software: you can redistribute it and/or modify
 This program is free software: you can redistribute it and/or modify
@@ -68,64 +68,61 @@ enum layer_names {
 #define _CMK 1
 #define _CMK 1
 #define _CFG 4
 #define _CFG 4
 
 
+#define ______THUMB_LEFT_x3______ KC_LGUI, MO(_DWN), KC_SPC
+#define ______THUMB_RIGHT_x3_____ KC_ENT, MO(_UP), KC_RCTL
+
+// LAYOUT
+//
+// |-----------------------------|            |-----------------------------|
+// |    |    |    |    |    |    |            |    |    |    |    |    |    |
+// |----+----+----+----+----+----|            |----+----+----+----+----+----|
+// |    |    |    |    |    |    |            |    |    |    |    |    |    |
+// |----+----+----+----+----+----|            |----+----+----+----+----+----|
+// |    |    |    |    |    |    |            |    |    |    |    |    |    |
+// |----+----+----+----+----+----+----|  |----+----+----+----+----+----+----|
+//                     |    |    |    |  |    |    |    |
+//                     |--------------|  |--------------|
+
+// Define wrapper for standard CRKB layout
+#define LAYOUT_wrapper(...) LAYOUT_split_3x6_3(__VA_ARGS__)
+
+// clang-format off
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [_QWERTY] = LAYOUT_split_3x6_3(
-  //|-----------------------------------------------------|                    |-----------------------------------------------------|
-       KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC,
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-        TD_ED,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-      TD_LSPC,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                         KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH, TD_RSPC,
-  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
-                                          KC_LGUI,MO(_DWN),  KC_SPC,     KC_ENT,MO(_UP),  KC_RCTL
-                                      //|--------------------------|  |--------------------------|
+
+  [_QWERTY] = LAYOUT_wrapper(
+    // clang-format off
+    ___________________QWERTY_L1_x6_____________________,                      ___________________QWERTY_R1_x6_____________________,
+    ___________________QWERTY_L2_x6_____________________,                      ___________________QWERTY_R2_x6_____________________,
+    ___________________QWERTY_L3_x6_____________________,                      ___________________QWERTY_R3_x6_____________________,
+                                        ______THUMB_LEFT_x3______,     ______THUMB_RIGHT_x3_____
   ),
   ),
 
 
-  [_COLEMAK_DH] = LAYOUT_split_3x6_3(
-  //|-----------------------------------------------------|                    |-----------------------------------------------------|
-       KC_TAB,    KC_Q,    KC_W,    KC_F,    KC_P,    KC_B,                         KC_J,    KC_L,    KC_U, KC_SCLN,   KC_P,  KC_BSPC,
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-        TD_ED,    KC_A,    KC_R,    KC_S,    KC_T,    KC_G,                         KC_M,    KC_N,    KC_E,    KC_I,    KC_O, KC_QUOT,
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-      TD_LSPC,    KC_Z,    KC_X,    KC_C,    KC_D,    KC_V,                         KC_K,    KC_H, KC_COMM,  KC_DOT, KC_SLSH, TD_RSPC,
-  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
-                                          KC_LGUI,MO(_DWN),  KC_SPC,     KC_ENT,MO(_UP),  KC_RCTL
-                                      //|--------------------------|  |--------------------------|
+  [_COLEMAK_DH] = LAYOUT_wrapper(
+    ________________COLEMAK_MOD_DH_L1_x6________________,                      ________________COLEMAK_MOD_DH_R1_x6________________,
+    ________________COLEMAK_MOD_DH_L2_x6________________,                      ________________COLEMAK_MOD_DH_R2_x6________________,
+    ________________COLEMAK_MOD_DH_L3_x6________________,                      ________________COLEMAK_MOD_DH_R3_x6________________,
+                                        ______THUMB_LEFT_x3______,     ______THUMB_RIGHT_x3_____
   ),
   ),
 
 
-  [_DWN] = LAYOUT_split_3x6_3(
-  //|-----------------------------------------------------|                    |-----------------------------------------------------|
-      _______,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0, _______,
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-      _______,   A_GRV,   E_GRV,   I_GRV,   O_GRV,   U_GRV,                      XXXXXXX, XXXXXXX,   KC_UP, XXXXXXX, KC_PGUP, XXXXXXX,
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-      _______,   A_UML,   E_ACT,   I_CIR,   O_UML,   U_UML,                      XXXXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_PGDN, _______,
-  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
-                                          KC_LGUI, _______, _______,    _______,MO(_CFG), _______
-                                      //|--------------------------|  |--------------------------|
+  [_DWN] = LAYOUT_wrapper(
+    _______, ______________NUMBER_LEFT_x5_______________,                      ______________NUMBER_RIGHT_x5______________, _______,
+    _______, ______________UNICODE_L2_x5________________,                      ________________NAV_R2_x5__________________, XXXXXXX,
+    _______, ______________UNICODE_L3_x5________________,                      ________________NAV_R3_x5__________________, _______,
+                                        KC_LGUI, _______, _______,     _______,MO(_CFG), _______
   ),
   ),
 
 
-  [_UP] = LAYOUT_split_3x6_3(
-  //|-----------------------------------------------------|                    |-----------------------------------------------------|
-      _______, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                      KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-      _______, KC_LEFT, KC_DOWN,  KC_UP, KC_RIGHT, XXXXXXX,                      KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,  KC_GRV,
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-      _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
-  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
-                                          _______,MO(_CFG), _______,   _______, _______, _______
-                                      //|--------------------------|  |--------------------------|
+  [_UP] = LAYOUT_wrapper(
+    ___________________SYMBOL_LEFT_x6___________________,                      ___________________SYMBOL_RIGHT_x6__________________,
+    _______, ____________NAV_VIM_x4____________, XXXXXXX,                      ____________________SYMBOL_R2_x6____________________,
+    _______, _________________NONE_5x___________________,                      ____________________SYMBOL_R3_x6____________________,
+                                        _______,MO(_CFG), _______,    _______, _______, _______
   ),
   ),
 
 
-  [_CONFIG] = LAYOUT_split_3x6_3(
-  //|-----------------------------------------------------|                    |-----------------------------------------------------|
-        QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      UC_MOD,  KC_ASUP,   NK_ON, XXXXXXX, XXXXXXX,DF(_QWY),
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-      RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI,                      XXXXXXX, KC_ASTG, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX,
-  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
-      XXXXXXX,RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD,                      UC_RMOD, KC_ASDN,  NK_OFF, XXXXXXX, XXXXXXX,DF(_CMK),
-  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
-                                          _______, _______, _______,   _______, _______, _______
-                                      //|--------------------------|  |--------------------------|
+  [_CONFIG] = LAYOUT_wrapper(
+    QK_BOOT, _________________NONE_5x___________________,                      _______________CONFIG_R1_x5________________,DF(_QWY),
+    RGB_TOG, ________________RGB_L2_x5__________________,                      _______________CONFIG_R2_x5________________, XXXXXXX,
+    XXXXXXX, ________________RGB_L3_x5__________________,                      _______________CONFIG_R3_x5________________,DF(_CMK),
+                                        _______, _______, _______,   _______, _______, _______
   )
   )
-};
+};
+// clang-format on

+ 3 - 3
keyboards/crkbd/keymaps/rmeli/rules.mk

@@ -2,11 +2,11 @@ OLED_ENABLE = yes
 OLED_DRIVER = SSD1306
 OLED_DRIVER = SSD1306
 
 
 TAP_DANCE_ENABLE = yes
 TAP_DANCE_ENABLE = yes
-AUTO_SHIFT_ENABLE = yes
+AUTO_SHIFT_ENABLE = no // disable auto-shift with home row mods
 
 
 UNICODEMAP_ENABLE = yes
 UNICODEMAP_ENABLE = yes
+NKRO_ENABLE = yes
+MAGIC_ENABLE = yes
 
 
 RGBLIGHT_ENABLE = no
 RGBLIGHT_ENABLE = no
 RGB_MATRIX_ENABLE = yes
 RGB_MATRIX_ENABLE = yes
-
-NKRO_ENABLE = yes

+ 45 - 0
keyboards/preonic/keymaps/rmeli/config.h

@@ -0,0 +1,45 @@
+/* Copyright 2015-2021 Jack Humbert
+ *
+ * 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
+
+#ifdef AUDIO_ENABLE
+#    define STARTUP_SONG SONG(PREONIC_SOUND)
+// #define STARTUP_SONG SONG(NO_SOUND)
+
+#    define DEFAULT_LAYER_SONGS \
+        { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) }
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED

+ 231 - 0
keyboards/preonic/keymaps/rmeli/keymap.c

@@ -0,0 +1,231 @@
+/* Copyright 2015-2021 Jack Humbert
+ * Copyright 2022 Rocco Meli <@RMeli>
+ *
+ * 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 "muse.h"
+
+#include "rmeli.h"
+
+enum preonic_layers { _QWERTY, _COLEMAK, _LOWER, _RAISE, _ADJUST };
+enum preonic_keycodes { QWERTY = SAFE_RANGE, COLEMAK, LOWER, RAISE, BACKLIT };
+
+#define ____________________BOTTOM_L_x6_____________________ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC
+#define ____________________BOTTOM_R_x6_____________________ KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+
+/* LAYOUT
+ *
+ * ,-----------------------------------------------------------.
+ * |    |    |    |    |    |    |    |    |    |    |    |    |
+ * |----+----+----+----+----+----+----+----+----+----+----+----|
+ * |    |    |    |    |    |    |    |    |    |    |    |    |
+ * |----+----+----+----+----+----+----+----+----+----+----+----|
+ * |    |    |    |    |    |    |    |    |    |    |    |    |
+ * |----+----+----+----+----+----+----+----+----+----+----+----|
+ * |    |    |    |    |    |    |    |    |    |    |    |    |
+ * |----+----+----+----+----+----+----+----+----+----+----+----|
+ * |    |    |    |    |    |    |    |    |    |    |    |    |
+ * `----+----+----+----+----+----+----+----+----+----+----+----'
+ */
+
+// Define wrapper for standard CRKB layout
+#define LAYOUT_wrapper(...) LAYOUT_preonic_grid(__VA_ARGS__)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT_wrapper(
+    ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________,
+    ___________________QWERTY_L1_x6_____________________, ___________________QWERTY_R1_x6_____________________,
+    ___________________QWERTY_L2_x6_____________________, ___________________QWERTY_R2_x6_____________________,
+    ___________________QWERTY_L3_x6_____________________, ___________________QWERTY_R3_x6_____________________,
+    ____________________BOTTOM_L_x6_____________________, ____________________BOTTOM_R_x6_____________________
+),
+
+[_COLEMAK] = LAYOUT_wrapper(
+    ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________,
+    ________________COLEMAK_MOD_DH_L1_x6________________, ________________COLEMAK_MOD_DH_R1_x6________________,
+    ________________COLEMAK_MOD_DH_L2_x6________________, ________________COLEMAK_MOD_DH_R2_x6________________,
+    ________________COLEMAK_MOD_DH_L3_x6________________, ________________COLEMAK_MOD_DH_R3_x6________________,
+    ____________________BOTTOM_L_x6_____________________, ____________________BOTTOM_R_x6_____________________
+),
+
+[_LOWER] = LAYOUT_wrapper(
+  ____________________FUNC_LEFT_x6____________________, ____________________FUNC_RIGHT_x6___________________,
+  ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________,
+  _______, ______________UNICODE_L2_x5________________, ________________NAV_R2_x5__________________, XXXXXXX,
+  _______, ______________UNICODE_L3_x5________________, ________________NAV_R3_x5__________________, _______,
+  ______________________BLANK_6x______________________, ______________________BLANK_6x______________________
+),
+
+[_RAISE] = LAYOUT_wrapper(
+  ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________,
+  ___________________SYMBOL_LEFT_x6___________________, ___________________SYMBOL_RIGHT_x6__________________,
+  _______, ____________NAV_VIM_x4____________, XXXXXXX, ____________________SYMBOL_R2_x6____________________,
+  _______, _________________NONE_5x___________________, ____________________SYMBOL_R3_x6____________________,
+  ______________________BLANK_6x______________________, ______________________BLANK_6x______________________
+),
+
+[_ADJUST] = LAYOUT_wrapper(
+  QK_BOOT, _________________NONE_5x___________________, ______________________NONE_6x_______________________,
+  XXXXXXX, MU_ON,   AU_ON,   MI_ON,   XXXXXXX, XXXXXXX, _______________CONFIG_R1_x5________________,  QWERTY,
+  RESET,   MU_MOD,  AU_TOG,  MI_TOG,  XXXXXXX, XXXXXXX, _______________CONFIG_R2_x5________________, XXXXXXX,
+  XXXXXXX, MU_OFF,  AU_OFF,  MI_OFF,  XXXXXXX, XXXXXXX, _______________CONFIG_R3_x5________________, COLEMAK,
+  ______________________BLANK_6x______________________, ______________________BLANK_6x______________________
+)
+};
+// clang-format on
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    switch (keycode) {
+        case QWERTY:
+            if (record->event.pressed) {
+                set_single_persistent_default_layer(_QWERTY);
+            }
+            return false;
+            break;
+        case COLEMAK:
+            if (record->event.pressed) {
+                set_single_persistent_default_layer(_COLEMAK);
+            }
+            return false;
+            break;
+        case LOWER:
+            if (record->event.pressed) {
+                layer_on(_LOWER);
+                update_tri_layer(_LOWER, _RAISE, _ADJUST);
+            } else {
+                layer_off(_LOWER);
+                update_tri_layer(_LOWER, _RAISE, _ADJUST);
+            }
+            return false;
+            break;
+        case RAISE:
+            if (record->event.pressed) {
+                layer_on(_RAISE);
+                update_tri_layer(_LOWER, _RAISE, _ADJUST);
+            } else {
+                layer_off(_RAISE);
+                update_tri_layer(_LOWER, _RAISE, _ADJUST);
+            }
+            return false;
+            break;
+        case BACKLIT:
+            if (record->event.pressed) {
+                register_code(KC_RSFT);
+#ifdef BACKLIGHT_ENABLE
+                backlight_step();
+#endif
+#ifdef RGBLIGHT_ENABLE
+                rgblight_step();
+#endif
+#ifdef __AVR__
+                writePinLow(E6);
+#endif
+            } else {
+                unregister_code(KC_RSFT);
+#ifdef __AVR__
+                writePinHigh(E6);
+#endif
+            }
+            return false;
+            break;
+    }
+    return true;
+};
+
+bool     muse_mode      = false;
+uint8_t  last_muse_note = 0;
+uint16_t muse_counter   = 0;
+uint8_t  muse_offset    = 70;
+uint16_t muse_tempo     = 50;
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+    if (muse_mode) {
+        if (IS_LAYER_ON(_RAISE)) {
+            if (clockwise) {
+                muse_offset++;
+            } else {
+                muse_offset--;
+            }
+        } else {
+            if (clockwise) {
+                muse_tempo += 1;
+            } else {
+                muse_tempo -= 1;
+            }
+        }
+    } else {
+        if (clockwise) {
+            register_code(KC_PGDN);
+            unregister_code(KC_PGDN);
+        } else {
+            register_code(KC_PGUP);
+            unregister_code(KC_PGUP);
+        }
+    }
+    return true;
+}
+
+bool dip_switch_update_user(uint8_t index, bool active) {
+    switch (index) {
+        case 0:
+            if (active) {
+                layer_on(_ADJUST);
+            } else {
+                layer_off(_ADJUST);
+            }
+            break;
+        case 1:
+            if (active) {
+                muse_mode = true;
+            } else {
+                muse_mode = false;
+            }
+    }
+    return true;
+}
+
+void matrix_scan_user(void) {
+#ifdef AUDIO_ENABLE
+    if (muse_mode) {
+        if (muse_counter == 0) {
+            uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+            if (muse_note != last_muse_note) {
+                stop_note(compute_freq_for_midi_note(last_muse_note));
+                play_note(compute_freq_for_midi_note(muse_note), 0xF);
+                last_muse_note = muse_note;
+            }
+        }
+        muse_counter = (muse_counter + 1) % muse_tempo;
+    } else {
+        if (muse_counter) {
+            stop_all_notes();
+            muse_counter = 0;
+        }
+    }
+#endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+    switch (keycode) {
+        case RAISE:
+        case LOWER:
+            return false;
+        default:
+            return true;
+    }
+}

+ 1 - 0
keyboards/preonic/keymaps/rmeli/readme.md

@@ -0,0 +1 @@
+# The default Preonic layout - largely based on the Planck's

+ 12 - 0
keyboards/preonic/keymaps/rmeli/rules.mk

@@ -0,0 +1,12 @@
+TAP_DANCE_ENABLE = yes
+AUTO_SHIFT_ENABLE = no
+
+MAGIC_ENABLE = yes
+
+UNICODEMAP_ENABLE = yes
+
+# Turn off rev3_drop options
+RGBLIGHT_ENABLE = no
+MOUSEKEY_ENABLE = no
+
+SRC += muse.c

+ 2 - 0
users/rmeli/.gitignore

@@ -0,0 +1,2 @@
+# Ignore symlinks to keymaps
+km_*

+ 44 - 0
users/rmeli/config.h

@@ -0,0 +1,44 @@
+/*
+Copyright 2021-2022 Rocco Meli <@RMeli>
+
+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 TAPPING_TERM 200
+
+#ifdef UNICODEMAP_ENABLE
+#    define UNICODE_SELECTED_MODES UC_MAC, UC_LNX
+#endif
+
+#ifdef AUTO_SHIFT_ENABLED
+#    define AUTO_SHIFT_REPEAT
+#endif
+
+#ifdef HOME_ROW_MODS_ENABLED
+#    define IGNORE_MOD_TAP_INTERRUPT
+#endif
+
+#ifdef CAPS_WORD_ENABLE
+#    define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
+//#define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+#    define RGBLIGHT_LIMIT_VAL 120
+#    define RGBLIGHT_HUE_STEP 10
+#    define RGBLIGHT_SAT_STEP 17
+#    define RGBLIGHT_VAL_STEP 17
+#endif

+ 4 - 3
users/rmeli/keyrecords/tap_dances.h

@@ -16,6 +16,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 */
 
 
 #pragma once
 #pragma once
+
 #include QMK_KEYBOARD_H
 #include QMK_KEYBOARD_H
 
 
 // https://beta.docs.qmk.fm/using-qmk/software-features/feature_tap_dance#example-4-quad-function-tap-dance-id-example-4
 // https://beta.docs.qmk.fm/using-qmk/software-features/feature_tap_dance#example-4-quad-function-tap-dance-id-example-4
@@ -26,9 +27,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 // Tap dance enums
 // Tap dance enums
 enum {
 enum {
-    TD_LSPO_CAPS,  // Tap once for (, hold once for LSFT, tap twice for CAPS
-    TD_RSPC_CAPS,  // Tap once for ), hold once for RSFT, tap twice for CAPS
-    TD_ESC_DEL,    // Tap once for KC_ESC, twice for KC_DEL
+    TD_LSPO_CAPS, // Tap once for (, hold once for LSFT, tap twice for CAPS
+    TD_RSPC_CAPS, // Tap once for ), hold once for RSFT, tap twice for CAPS
+    TD_ESC_DEL,   // Tap once for KC_ESC, twice for KC_DEL
 };
 };
 
 
 // Rename tap dances for keymap with shortcuts
 // Rename tap dances for keymap with shortcuts

+ 21 - 20
users/rmeli/keyrecords/unicode.h

@@ -16,6 +16,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 */
 
 
 #pragma once
 #pragma once
+
 #include QMK_KEYBOARD_H
 #include QMK_KEYBOARD_H
 
 
 // Needs to be active on the OS side as well
 // Needs to be active on the OS side as well
@@ -46,30 +47,30 @@ enum unicode_names {
 
 
 const uint32_t PROGMEM unicode_map[] = {
 const uint32_t PROGMEM unicode_map[] = {
     // KC_A
     // KC_A
-    [aGRV] = 0x00E0,  // à
-    [AGRV] = 0x00C0,  // À
-    [aUML] = 0x00E4,  // ä
-    [AUML] = 0x00C4,  // Ä
+    [aGRV] = 0x00E0, // à
+    [AGRV] = 0x00C0, // À
+    [aUML] = 0x00E4, // ä
+    [AUML] = 0x00C4, // Ä
     // KC_E
     // KC_E
-    [eGRV] = 0x00E8,  // è
-    [EGRV] = 0x00C8,  // È
-    [eACT] = 0x00E9,  // é
-    [EACT] = 0x00C9,  // É
+    [eGRV] = 0x00E8, // è
+    [EGRV] = 0x00C8, // È
+    [eACT] = 0x00E9, // é
+    [EACT] = 0x00C9, // É
     // KC_I
     // KC_I
-    [iGRV] = 0x00EC,  // ì
-    [IGRV] = 0x00CC,  // Ì
-    [iCIR] = 0x00EE,  // î
-    [ICIR] = 0x00CE,  // Î
+    [iGRV] = 0x00EC, // ì
+    [IGRV] = 0x00CC, // Ì
+    [iCIR] = 0x00EE, // î
+    [ICIR] = 0x00CE, // Î
     // KC_O
     // KC_O
-    [oGRV] = 0x00F2,  // ò
-    [OGRV] = 0x00D2,  // Ò
-    [oUML] = 0x00F6,  // ö
-    [OUML] = 0x00D6,  // Ö
+    [oGRV] = 0x00F2, // ò
+    [OGRV] = 0x00D2, // Ò
+    [oUML] = 0x00F6, // ö
+    [OUML] = 0x00D6, // Ö
     // KC_U
     // KC_U
-    [uGRV] = 0x00F9,  // ù
-    [UGRV] = 0x00D9,  // Ù
-    [uUML] = 0x00FC,  // ü
-    [UUML] = 0x00DC,  // Ü
+    [uGRV] = 0x00F9, // ù
+    [UGRV] = 0x00D9, // Ù
+    [uUML] = 0x00FC, // ü
+    [UUML] = 0x00DC, // Ü
 };
 };
 
 
 // Accents
 // Accents

+ 178 - 0
users/rmeli/keyrecords/wrappers.h

@@ -0,0 +1,178 @@
+/*
+Copyright 2020 Christopher Courtney, aka Drashna Jael're  (@drashna) <drashna@live.com>
+Copyright 2020 @jola5
+Copyright 2021-2022 Rocco Meli <@RMeli>
+
+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
+
+#ifdef UNICODEMAP_ENABLE
+#    include "keyrecords/unicode.h"
+#endif
+
+// + ------------- +
+// + HOME ROW MODS |
+// + ------------- +
+
+// https://precondition.github.io/home-row-mods
+
+// Left, QWERTY
+#define HM_A LCTL_T(KC_A)
+#define HM_S LALT_T(KC_S)
+#define HM_D LGUI_T(KC_D)
+#define HM_F LSFT_T(KC_F)
+
+// Left, COLEMAK
+#define HMCMK_A LCTL_T(KC_A)
+#define HMCMK_R LALT_T(KC_R)
+#define HMCMK_S LGUI_T(KC_S)
+#define HMCMK_T LSFT_T(KC_T)
+
+// Right, QWERTY
+#define HM_J RSFT_T(KC_J)
+#define HM_K RGUI_T(KC_K)
+#define HM_L LALT_T(KC_L) // LALT, not RALT
+#define HM_SCLN RCTL_T(KC_SCLN)
+
+// Right, COLEMAK
+#define HMCMK_N RSFT_T(KC_N)
+#define HMCMK_E RGUI_T(KC_E)
+#define HMCMK_I LALT_T(KC_I) // LALT, not RALT
+#define HMCMK_O RCTL_T(KC_O)
+
+// clang-format off
+
+// + ------ +
+// + QWERTY |
+// + ------ +
+
+#define _________QWERTY_HRM_LEFT__________    HM_A,    HM_S,    HM_D,    HM_F
+#define _________QWERTY_HRM_RIGHT_________    HM_J,    HM_K,    HM_L, HM_SCLN
+
+#define _______________QWERTY_L1_x5________________    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T
+#ifdef HOME_ROW_MODS_ENABLED
+#define _______________QWERTY_L2_x5________________ _________QWERTY_HRM_LEFT__________,    KC_G
+#else
+#define _______________QWERTY_L2_x5________________    KC_A,    KC_S,    KC_D,    KC_F,    KC_G
+#endif
+#define _______________QWERTY_L3_x5________________    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
+
+#define _______________QWERTY_R1_x5________________    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P
+#ifdef HOME_ROW_MODS_ENABLED
+#define _______________QWERTY_R2_x5________________    KC_H, _________QWERTY_HRM_RIGHT_________
+#else
+#define _______________QWERTY_R2_x5________________    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN
+#endif
+#define _______________QWERTY_R3_x5________________    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH
+
+// + ------ +
+
+#define ___________________QWERTY_L1_x6_____________________  KC_TAB, _______________QWERTY_L1_x5________________
+#define ___________________QWERTY_L2_x6_____________________   TD_ED, _______________QWERTY_L2_x5________________
+#define ___________________QWERTY_L3_x6_____________________ TD_LSPC, _______________QWERTY_L3_x5________________
+#define ___________________QWERTY_R1_x6_____________________ _______________QWERTY_R1_x5________________, KC_BSPC
+#define ___________________QWERTY_R2_x6_____________________ _______________QWERTY_R2_x5________________, KC_QUOT
+#define ___________________QWERTY_R3_x6_____________________ _______________QWERTY_R3_x5________________, TD_RSPC
+
+// + -------------- +
+// + COLEMAK_MOD_DH |
+// + -------------- +
+
+#define _____COLEMAK_MOD_DH_HRM_LEFT______ HMCMK_A, HMCMK_R, HMCMK_S, HMCMK_T
+#define _____COLEMAK_MOD_DH_HMR_RIGHT_____ HMCMK_N, HMCMK_E, HMCMK_I, HMCMK_O
+
+#define ____________COLEMAK_MOD_DH_L1_x5___________    KC_Q,    KC_W,    KC_F,    KC_P,    KC_B
+#ifdef HOME_ROW_MODS_ENABLED
+#define ____________COLEMAK_MOD_DH_L2_x5___________ _____COLEMAK_MOD_DH_HRM_LEFT______,    KC_G
+#else
+#define ____________COLEMAK_MOD_DH_L2_x5___________    KC_A,    KC_R,    KC_S,    KC_T,    KC_G
+#endif
+#define ____________COLEMAK_MOD_DH_L3_x5___________    KC_Z,    KC_X,    KC_C,    KC_D,    KC_V
+
+#define ____________COLEMAK_MOD_DH_R1_x5___________    KC_J,    KC_L,    KC_U,    KC_Y, KC_SCLN
+#ifdef HOME_ROW_MODS_ENABLED
+#define ____________COLEMAK_MOD_DH_R2_x5___________    KC_M, _____COLEMAK_MOD_DH_HMR_RIGHT_____
+#else
+#define ____________COLEMAK_MOD_DH_R2_x5___________    KC_M,    KC_N,    KC_E,    KC_I,    KC_O
+#endif
+#define ____________COLEMAK_MOD_DH_R3_x5___________    KC_K,    KC_H, KC_COMM,  KC_DOT,KC_SLASH
+
+// + ------- +
+
+#define ________________COLEMAK_MOD_DH_L1_x6________________  KC_TAB, ____________COLEMAK_MOD_DH_L1_x5___________
+#define ________________COLEMAK_MOD_DH_L2_x6________________   TD_ED, ____________COLEMAK_MOD_DH_L2_x5___________
+#define ________________COLEMAK_MOD_DH_L3_x6________________ TD_LSPC, ____________COLEMAK_MOD_DH_L3_x5___________
+#define ________________COLEMAK_MOD_DH_R1_x6________________ ____________COLEMAK_MOD_DH_R1_x5___________, KC_BSPC
+#define ________________COLEMAK_MOD_DH_R2_x6________________ ____________COLEMAK_MOD_DH_R2_x5___________, KC_QUOT
+#define ________________COLEMAK_MOD_DH_R3_x6________________ ____________COLEMAK_MOD_DH_R3_x5___________, TD_RSPC
+
+// + --------------- +
+// + NUMBERS/SYMBOLS |
+// + --------------- +
+
+#define ______________NUMBER_LEFT_x5_______________    KC_1,    KC_2,    KC_3,    KC_4,    KC_5
+#define ______________NUMBER_RIGHT_x5______________    KC_6,    KC_7,    KC_8,    KC_9,    KC_0
+#define ___________________NUMBER_LEFT_x6___________________  KC_GRV, ______________NUMBER_LEFT_x5_______________
+#define ___________________NUMBER_RIGHT_x6__________________ ______________NUMBER_RIGHT_x5______________, KC_MINS
+
+#define ______________SYMBOL_LEFT_x5_______________ KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC
+#define ______________SYMBOL_RIGHT_x5______________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
+#define ___________________SYMBOL_LEFT_x6___________________  KC_GRV, ______________SYMBOL_LEFT_x5_______________
+#define ___________________SYMBOL_RIGHT_x6__________________ ______________SYMBOL_RIGHT_x5______________, KC_TILD
+
+#define ____________________SYMBOL_R2_x6____________________ KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,  KC_GRV
+#define ____________________SYMBOL_R3_x6____________________ KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD
+
+// + ------- +
+// + UNICODE |
+// + ------- +
+
+#ifdef UNICODEMAP_ENABLE
+#define ______________UNICODE_L2_x5________________   A_GRV,   E_GRV,   I_GRV,   O_GRV,   U_GRV
+#define ______________UNICODE_L3_x5________________   A_UML,   E_ACT,   I_CIR,   O_UML,   U_UML
+#endif
+
+// + ---- +
+// + FUNC |
+// + ---- +
+
+#define ______________FUNC_LEFT_5x_________________   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5
+#define ______________FUNC_RIGHT_5x________________   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10
+#define ____________________FUNC_LEFT_x6____________________ ______________FUNC_LEFT_5x_________________, KC_F6
+#define ____________________FUNC_RIGHT_x6___________________ KC_F7, ______________FUNC_RIGHT_5x________________
+
+// + ---- +
+// + MISC |
+// + ---- +
+
+#define _________________BLANK_5x__________________ _______, _______, _______, _______, _______
+#define ______________________BLANK_6x______________________ _________________BLANK_5x__________________, _______
+
+#define _________________NONE_5x___________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+#define ______________________NONE_6x_______________________ _________________NONE_5x___________________, XXXXXXX
+
+#define ________________NAV_R2_x5__________________ XXXXXXX, XXXXXXX,   KC_UP, XXXXXXX, KC_PGUP
+#define ________________NAV_R3_x5__________________ XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN
+#define ____________NAV_VIM_x4____________ KC_LEFT, KC_DOWN,  KC_UP, KC_RIGHT
+
+#define _______________CONFIG_R1_x5________________ UC_MOD,  KC_ASUP,   NK_ON, XXXXXXX, XXXXXXX
+#define _______________CONFIG_R2_x5________________ XXXXXXX, KC_ASTG, NK_TOGG, CG_TOGG, XXXXXXX
+#define _______________CONFIG_R3_x5________________ UC_RMOD, KC_ASDN,  NK_OFF, CG_NORM, XXXXXXX
+
+#define ________________RGB_L2_x5__________________  RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI
+#define ________________RGB_L3_x5__________________ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD
+
+// clang-format on

+ 6 - 0
users/rmeli/oled/oled.c

@@ -18,6 +18,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "oled/oled.h"
 #include "oled/oled.h"
 
 
 void oled_render_rocco(void) {
 void oled_render_rocco(void) {
+    // clang-format off
     static const char PROGMEM rocco[] = {
     static const char PROGMEM rocco[] = {
         // 'rocco', 128x32px
         // 'rocco', 128x32px
         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, 0xf8, 0x18, 
         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, 0xf8, 0x18, 
@@ -53,10 +54,13 @@ void oled_render_rocco(void) {
         0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0e, 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 
         0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0e, 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 
         0x1c, 0x0e, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
         0x1c, 0x0e, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     };
     };
+    // clang-format on
+
     oled_write_raw_P(rocco, sizeof(rocco));
     oled_write_raw_P(rocco, sizeof(rocco));
 }
 }
 
 
 void oled_render_meli(void) {
 void oled_render_meli(void) {
+    // clang-format off
     static const char PROGMEM meli[] = {
     static const char PROGMEM meli[] = {
         // 'meli', 128x32px
         // 'meli', 128x32px
         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -92,5 +96,7 @@ void oled_render_meli(void) {
         0x18, 0x1f, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
         0x18, 0x1f, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     };
     };
+    // clang-format on
+
     oled_write_raw_P(meli, sizeof(meli));
     oled_write_raw_P(meli, sizeof(meli));
 }
 }

+ 5 - 1
users/rmeli/rmeli.h

@@ -15,6 +15,10 @@ You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 */
 
 
+#pragma once
+
+#include "keyrecords/wrappers.h"
+
 #ifdef UNICODEMAP_ENABLE
 #ifdef UNICODEMAP_ENABLE
 #    include "keyrecords/unicode.h"
 #    include "keyrecords/unicode.h"
 #endif
 #endif
@@ -25,4 +29,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 #ifdef TAP_DANCE_ENABLE
 #ifdef TAP_DANCE_ENABLE
 #    include "keyrecords/tap_dances.h"
 #    include "keyrecords/tap_dances.h"
-#endif
+#endif

+ 8 - 2
users/rmeli/rules.mk

@@ -1,11 +1,12 @@
 # https://github.com/qmk/qmk_firmware/blob/develop/docs/squeezing_avr.md
 # https://github.com/qmk/qmk_firmware/blob/develop/docs/squeezing_avr.md
 CONSOLE_ENABLE = no
 CONSOLE_ENABLE = no
-COMMAND_ENABLE = no # Needed for Space Cadet Shift
+COMMAND_ENABLE = no # Turned off for Space Cadet Shift and Caps Word
 MOUSEKEY_ENABLE = no
 MOUSEKEY_ENABLE = no
 SPACE_CADET_ENABLE = no # Implemented with tap dance
 SPACE_CADET_ENABLE = no # Implemented with tap dance
 GRAVE_ESC_ENABLE = no
 GRAVE_ESC_ENABLE = no
-MAGIC_ENABLE = no
 MUSIC_ENABLE = no
 MUSIC_ENABLE = no
+CAPS_WORD_ENABLE = yes
+HOME_ROW_MODS_ENABLE = yes
 
 
 # VIA only support 4 layers by default
 # VIA only support 4 layers by default
 # Use "#define DYNAMIC_KEYMAP_LAYER_COUNT" in config.h to change the limit
 # Use "#define DYNAMIC_KEYMAP_LAYER_COUNT" in config.h to change the limit
@@ -17,4 +18,9 @@ endif
 
 
 ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
 ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
     SRC += $(USER_PATH)/keyrecords/tap_dances.c
     SRC += $(USER_PATH)/keyrecords/tap_dances.c
+endif
+
+ifeq ($(strip $(HOME_ROW_MODS_ENABLE)), yes)
+    # Define custom variable
+    OPT_DEFS += -DHOME_ROW_MODS_ENABLED
 endif
 endif