fingerpunch luakeeb firmware

This commit is contained in:
Sadek Baroudi 2022-02-15 02:35:59 -08:00
parent 81dd96678b
commit 405bafed95
9 changed files with 521 additions and 0 deletions

7
bin/build-luakeeb.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
# TODO: consolidate all the build files into one
# NOTE: I had to set COMBO_ENABLE to no in my users/sadekbaroudi/rules.mk due to space limitations
make fingerpunch/luakeeb:sadekbaroudi ; cp .build/fingerpunch_luakeeb_sadekbaroudi.hex /mnt/g/My\ Drive/qmk-keyboards/luakeeb/ ;

View File

@ -0,0 +1,111 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
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
#include "config_common.h"
/* USB Device descriptor parameter */
#define DEVICE_VER 0x0001
#define VENDOR_ID 0xFEFE
#define PRODUCT_ID 0x7178
#define MANUFACTURER sadekbaroudi
#define PRODUCT sadekbaroudi luakeeb
#define DESCRIPTION sadekbaroudi luakeeb
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 8
#define MATRIX_COLS 12
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
// wiring of each half
#define MATRIX_ROW_PINS { F6, D7, B3, E6 }
#define MATRIX_COL_PINS { F7, F4, D4, F5, B1, B2 }
#define SOFT_SERIAL_PIN D2
#define USE_SERIAL
#define RGB_DI_PIN D3
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_SPLIT
#define RGBLED_SPLIT { 21, 21 }
#ifdef RGBLIGHT_ANIMATIONS
#undef RGBLIGHT_ANIMATIONS
#endif
#define RGBLED_NUM 42
#define RGBLIGHT_HUE_STEP 16
#define RGBLIGHT_SAT_STEP 16
#define RGBLIGHT_VAL_STEP 16
#define RGBLIGHT_LIMIT_VAL 60 /* The maximum brightness level for RGBLIGHT_ENABLE */
#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
// /*== all animations enable ==*/
// #define RGBLIGHT_ANIMATIONS
// /*== or choose animations ==*/
// #define RGBLIGHT_EFFECT_BREATHING
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
// #define RGBLIGHT_EFFECT_SNAKE
// #define RGBLIGHT_EFFECT_KNIGHT
// #define RGBLIGHT_EFFECT_CHRISTMAS
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
// #define RGBLIGHT_EFFECT_RGB_TEST
// #define RGBLIGHT_EFFECT_ALTERNATING
// /*== customize breathing effect ==*/
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
// /*==== use exp() and sin() ====*/
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
#endif
#define ENCODERS_PAD_A {B4}
#define ENCODERS_PAD_B {B5}
#define ENCODER_RESOLUTION 2
// Per encoder settings
//#define ENCODER_RESOLUTIONS { 2, 2 }
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
// #define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

View File

@ -0,0 +1,224 @@
#include QMK_KEYBOARD_H
#ifdef PIMORONI_TRACKBALL_ENABLE
#include "drivers/sensors/pimoroni_trackball.h"
#include "pointing_device.h"
#include "color.h"
#endif
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_QWERTY,
_COLEMAK,
_LOWER,
_RAISE,
_ADJUST
};
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
bool is_caps_lock_on;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
*
* ,-----------------------------------------. ,-----------------------------------------.
* | Esc | Q | W | E | R | T | | Y | U | I | O | P | \ |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | A | S | D | F | G | | H | J | K | L | ; | ' |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Shft | Z | X | C | V | B | | N | M | , | . | / | Ctrl |
* `-----------------------------------------' `-----------------------------------------'
* ,--------------------. ,--------------------.
* | LOWER| Enter| Del | |BckSpc| Space| RAISE|
* `--------------------' `--------------------.
*/
// Default config uses home row mods. So hold each of the keys on the home row to use ctrl, gui, alt, or shift
[_QWERTY] = LAYOUT_split_3x5_4(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_TAB, LCTL_T(KC_A), LGUI_T(KC_S), LALT_T(KC_D), LSFT_T(KC_F), KC_G, KC_H, RSFT_T(KC_J), RALT_T(KC_K), RGUI_T(KC_L), RCTL_T(KC_SCLN), KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RCTL,
KC_MUTE, LOWER, KC_ENT, KC_DEL, KC_BSPC, KC_SPC, RAISE, LCTL(KC_BSPC)
),
/* Colemak
*
* ,-----------------------------------------. ,-----------------------------------------.
* | Esc | Q | W | F | P | B | | J | L | U | Y | ; | \ |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | A | R | S | T | G | | M | N | E | I | O | ' |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Shft | Z | X | C | D | V | | K | H | , | . | / | Ctrl |
* `--------------------+--------------------' `-----------------------------------------'
* ,--------------------. ,--------------------.
* | LOWER| Enter| ' | |BckSpc| Space| RAISE|
* `--------------------' `--------------------.
*/
// Default config uses home row mods. So hold each of the keys on the home row to use ctrl, gui, alt, or shift
[_COLEMAK] = LAYOUT_split_3x5_4(
KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
KC_TAB, LCTL_T(KC_A), LGUI_T(KC_R), LALT_T(KC_S), LSFT_T(KC_T), KC_G, KC_M, RSFT_T(KC_N), RALT_T(KC_E), RGUI_T(KC_I), RCTL_T(KC_O), KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RCTL,
KC_MUTE, LOWER, KC_ENT, KC_QUOT, KC_BSPC, KC_SPC, RAISE, LCTL(KC_BSPC)
),
/* Raise
*
* ,-----------------------------------------. ,-----------------------------------------.
* | ____ | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ____ |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ____ | Left | Down | Up | Right| Tab | | | - | = | [ | ] | ____ |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ____ | Ctrl| ` | GUI | Alt | | | | | | \ | ' | ____ |
* `-----------------------------------------' `-----------------------------------------'
* ,--------------------. ,--------------------.
* | LOWER| | | | | | RAISE|
* `--------------------' `--------------------.
*/
[_RAISE] = LAYOUT_split_3x5_4(
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TAB, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
_______, KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, _______, _______, _______, _______, KC_BSLS, KC_QUOT, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
/* Lower
*
* ,-----------------------------------------. ,-----------------------------------------.
* | ____ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ____ |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ____ | Esc | | | | | | | _ | + | { | } | ____ |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ____ | Caps| ~ | | | | | | | | | | ' | ____ |
* `-----------------------------------------' `-----------------------------------------'
* ,--------------------. ,--------------------.
* | LOWER| | | | Del | | RAISE|
* `--------------------' `--------------------.
*/
[_LOWER] = LAYOUT_split_3x5_4(
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
_______, KC_ESC, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
_______, KC_CAPS, KC_TILD, _______, _______, _______, _______, _______, _______, KC_PIPE, KC_DQT, _______,
_______, _______, _______, _______, KC_DEL, _______, _______, _______
),
/* Adjust (Lower + Raise)
*
* ,-----------------------------------------. ,-----------------------------------------.
* | ____ | RGB_T| RGB_R| RGB_F| |QWERTY| | F1 | F2 | F3 | F4 | F5 | ____ |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ____ | SPD_I| HUE_I| SAT_I| VAL_I|COLEMK| | F6 | F7 | F8 | F9 | F10 | ____ |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ____ | SPD_D| HUE_D| SAT_D| VAL_D| | | F11 | F12 | | | Reset| ____ |
* `-----------------------------------------' `-----------------------------------------'
* ,--------------------. ,--------------------.
* | LOWER| | | | | | RAISE|
* `--------------------' `--------------------.
*/
[_ADJUST] = LAYOUT_split_3x5_4(
_______, RGB_TOG, RGB_RMOD, RGB_MOD, _______, TO(_QWERTY), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______,
_______, RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI, TO(_COLEMAK), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
_______, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, _______, KC_F11, KC_F12, _______, _______, RESET, _______,
_______, _______, _______, _______, _______, _______, _______, _______
)
};
layer_state_t layer_state_set_user(layer_state_t state) {
#ifdef PIMORONI_TRACKBALL_ENABLE
switch(get_highest_layer(state)) {
case _QWERTY:
if (is_caps_lock_on) {
trackball_set_rgbw(RGB_RED, 0x00);
} else {
trackball_set_rgbw(RGB_BLUE, 0x00);
}
break;
case _COLEMAK:
trackball_set_rgbw(RGB_GREEN, 0x00);
break;
case _LOWER:
trackball_set_rgbw(RGB_PURPLE, 0x00);
break;
case _RAISE:
trackball_set_rgbw(RGB_YELLOW, 0x00);
break;
case _ADJUST:
trackball_set_rgbw(RGB_ORANGE, 0x00);
break;
default: // for any other layers, or the default layer
if (is_caps_lock_on) {
trackball_set_rgbw(RGB_RED, 0x00);
} else {
trackball_set_rgbw(RGB_BLUE, 0x00);
}
break;
}
#endif
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
void keyboard_post_init_user(void) {
is_caps_lock_on = false;
#ifdef PIMORONI_TRACKBALL_ENABLE
trackball_set_rgbw(RGB_BLUE, 0x00);
#endif
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_CAPSLOCK:
if (record->event.pressed) {
if (is_caps_lock_on) {
is_caps_lock_on = false;
} else {
is_caps_lock_on = true;
}
}
break;
default:
break;
}
return true;
}
#ifdef ENCODER_ENABLE
bool encoder_update_user(uint8_t index, bool clockwise) {
// default behavior if undefined
if (index == 0) {
// Conditional to reverse the direction of encoder number 1
// The reason I have this is that for some of my boards, it supports two different types of encoders, and they may differ in direction
#ifdef ENCODERS_A_REVERSE
if (!clockwise) {
#else
if (clockwise) {
#endif
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
}
else if (index == 1) {
// Conditional to reverse the direction of encoder number 1
// The reason I have this is that for some of my boards, it supports two different types of encoders, and they may differ in direction
#ifdef ENCODERS_B_REVERSE
if (!clockwise) {
#else
if (clockwise) {
#endif
tap_code16(C(KC_RGHT));
}
else{
tap_code16(C(KC_LEFT));
}
}
return true;
}
#endif

View File

@ -0,0 +1,100 @@
/* Copyright 2021 Sadek Baroudi
*
* 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 "sadekbaroudi.h"
#include QMK_KEYBOARD_H
/*
* The `LAYOUT_luakeeb_base` macro is a template to allow the use of identical
* modifiers for the default layouts (eg ALPHA_ALT, Colemak, Dvorak, etc), so
* that there is no need to set them up for each layout, and modify all of
* them if I want to change them. This helps to keep consistency and ease
* of use. K## is a placeholder to pass through the individual keycodes
*/
// Note: changed the thumb keys from the following, testing out a new layout:
// KC_DEL, LT(_NAVIGATION,KC_ENT), LT(_FUNCTION,KC_TAB), LT(_FUNCTION,KC_BSPC), LT(_SYMBOLS,KC_SPACE), KC_QUOT "\"
// _______, KC_BSPC, LT(_NAVIGATION,KC_ENT), LT(_SYMBOLS,KC_SPACE), KC_QUOT, _______ "\"
// clang-format off
#define LAYOUT_luakeeb_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
K33, K34, K35, K36, K37, K38 \
) \
LAYOUT_wrapper( \
N_SEL_LINE, K01, K02, K03, LT(_FUNCTION, K04), K05, K06, LT(_FUNCTION, K07), K08, K09, K0A, KC_BSLS, \
LCTL(KC_C), LCTL_T(K11), LGUI_T(K12), LALT_T(K13), LSFT_T(K14), K15, LT(_MOUSE, K16), RSFT_T(K17), RALT_T(K18), RGUI_T(K19), RCTL_T(K1A), LCTL(KC_V), \
TG(_NAVIGATION), K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, S_ALT_TAB, \
KC_MUTE, K33, LT(_NAVIGATION,K34), LT(_FUNCTION,K35), LT(_MEDIA,K36), LT(_SYMBOLS,K37), K38, LCTL(KC_BSPC) \
)
/* Re-pass though to allow templates to be used */
#define LAYOUT_luakeeb_base_wrapper(...) LAYOUT_luakeeb_base(__VA_ARGS__)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ALPHA_ALT] = LAYOUT_luakeeb_base_wrapper(
_________________ALPHA_ALT_L1_________________, _________________ALPHA_ALT_R1_________________,
_________________ALPHA_ALT_L2_________________, _________________ALPHA_ALT_R2_________________,
_________________ALPHA_ALT_L3_________________, _________________ALPHA_ALT_R3_________________,
__ALPHA_ALT_THUMBS_6__
),
[_ALPHA] = LAYOUT_luakeeb_base_wrapper(
__________________ALPHA_L1____________________, __________________ALPHA_R1____________________,
__________________ALPHA_L2____________________, __________________ALPHA_R2____________________,
__________________ALPHA_L3____________________, __________________ALPHA_R3____________________,
__ALPHA_THUMBS_6__
),
[_NAVIGATION] = LAYOUT_wrapper(
_______, ________________NAVIGATION_1_______________, _________________NUMPAD_1__________________, _______,
_______, ________________NAVIGATION_2_______________, _________________NUMPAD_2__________________, _______,
_______, ________________NAVIGATION_3_______________, _________________NUMPAD_3__________________, _______,
_______, _______, _______, KC_TAB, KC_BSPC, KC_SPACE, KC_DOT, _______
),
[_SYMBOLS] = LAYOUT_wrapper(
_______, ________________SYMBOLS_L1_________________, ________________SYMBOLS_R1_________________, _______,
_______, ________________SYMBOLS_L2_________________, ________________SYMBOLS_R2_________________, _______,
_______, ________________SYMBOLS_L3_________________, ________________SYMBOLS_R3_________________, _______,
_______, _______, KC_ENT, KC_DEL, KC_BSPC, _______, _______, _______
),
[_FUNCTION] = LAYOUT_wrapper(
_______, ________________SHIFTNAV_1_________________, ________________FUNCTION_1_________________, _______,
_______, ________________SHIFTNAV_2_________________, ________________FUNCTION_2_________________, _______,
_______, ________________SHIFTNAV_3_________________, ________________FUNCTION_3_________________, _______,
_______, _______, _______, _______, N_DEL_LINE, KC_SPACE, _______, _______
),
[_MEDIA] = LAYOUT_wrapper(
_______, ___________________RGB_1___________________, _________________MACROS_1__________________, _______,
_______, ___________________RGB_2___________________, _________________MACROS_2__________________, _______,
_______, ___________________RGB_3___________________, _________________MACROS_3__________________, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
[_MOUSE] = LAYOUT_wrapper(
_______, __________________MOUSE_1__________________, ___________________BLANK___________________, _______,
_______, __________________MOUSE_2__________________, ___________________BLANK___________________, _______,
_______, __________________MOUSE_3__________________, ___________________BLANK___________________, _______,
_______, _______, KC_MS_BTN1, KC_MS_BTN3, KC_MS_BTN3, KC_MS_BTN2, _______, _______
)
};

View File

@ -0,0 +1 @@
#include "luakeeb.h"

View File

@ -0,0 +1,24 @@
#pragma once
#include "quantum.h"
#define ___ KC_NO
#define LAYOUT_split_3x5_4( \
K00, K01, K02, K03, K04, K05, K45, K44, K43, K42, K41, K40, \
K10, K11, K12, K13, K14, K15, K55, K54, K53, K52, K51, K50, \
K20, K21, K22, K23, K24, K25, K65, K64, K63, K62, K61, K60, \
K32, K33, K34, K35, K75, K74, K73, K72 \
) \
{ \
{ K00, K01, K02, K03, K04, K05 }, \
{ K10, K11, K12, K13, K14, K15 }, \
{ K20, K21, K22, K23, K24, K25 }, \
{ ___, ___, K32, K33, K34, K35 }, \
{ K40, K41, K42, K43, K44, K45 }, \
{ K50, K51, K52, K53, K54, K55 }, \
{ K60, K61, K62, K63, K64, K65 }, \
{ ___, ___, K72, K73, K74, K75 } \
}
#define LAYOUT LAYOUT_split_3x5_4

View File

@ -0,0 +1,23 @@
# luakeeb
* Keyboard Maintainer: sadekbaroudi
* Hardware Supported: luakeeb PCB
Make example for this keyboard (after setting up your build environment):
make fingerpunch/luakeeb:default
Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
make fingerpunch/luakeeb:default:flash
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Build Guide
See:
https://github.com/sadekbaroudi/fingerpunch/blob/master/luakeeb/BUILDGUIDE.md
## Choosing which board to plug the USB cable into (choosing Master)
Because the two boards are identical, the firmware has logic to differentiate the left and right board. It uses two strategies to figure things out, [EE_HANDS](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-eeprom) or [by define](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-define). See [setting-handedness](https://docs.qmk.fm/#/config_options?id=setting-handedness) for more information.

View File

@ -0,0 +1,26 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = yes
SPLIT_KEYBOARD = yes
LAYOUTS = split_3x5_4

View File

@ -91,6 +91,11 @@ expanded before being used as arguments to the LAYOUT_xxx macro.
# define LAYOUT LAYOUT_rockon
#endif
// Since luakeeb uses the name LAYOUT_luakeeb instead of LAYOUT
#if (!defined(LAYOUT) && defined(LAYOUT_luakeeb))
# define LAYOUT LAYOUT_luakeeb
#endif
// clang-format off
#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)