diff --git a/keyboards/electronlab/klor/keymaps/default/keymap.c b/keyboards/electronlab/klor/keymaps/default/keymap.c
index b8be79454972..8721ba9f3cf4 100644
--- a/keyboards/electronlab/klor/keymaps/default/keymap.c
+++ b/keyboards/electronlab/klor/keymaps/default/keymap.c
@@ -1,101 +1,30 @@
/*
+Copyright 2024 ElectronLab
- █ █ █ ▄▄▄▀▀▀▀▀▀▄▄▄ █▀▀▀▀▀▀▀▀▀▀█
- █ █ █ ▄▀ ▀▄ █ █
- █ █ █ ▄▀ ▀▄ █ █
- █ █ █ █ █ █ █
- █ █ █ █ █ █ █
- █ █ █ █ █ █▄▄▄▄▄▄▄▄▄▄█
- █ █ █ █ █ █ █ █
- █ █ █ █ █ █ █ █
- █ █ █ █ ▀▄ ▄▀ █ █
- ██ █ █ ▀▄ ▄▀ █ █
- █ █ █▄▄▄▄▄▄▄▄ ▀▀▀▄▄▄▄▄▄▀▀▀ █ █
+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.
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- D E F A U L T
+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 .
*/
+
#include QMK_KEYBOARD_H
#include
#include
-#ifdef HAPTIC_ENABLE
-#include "drivers/haptic/drv2605l.h"
-#endif
-
-
-// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// │ D E F I N I T I O N S │
-// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ d e f i n e l a y e r s │
-// └───────────────────────────────────────────────────────────┘
-
enum klor_layers {
- /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
_QWERTY,
- _LOWER,
- _RAISE,
- _ADJUST,
};
-// ┌───────────────────────────────────────────────────────────┐
-// │ d e f i n e k e y c o d e s │
-// └───────────────────────────────────────────────────────────┘
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- LOWER,
- RAISE,
- ADJUST,
- OS_SWAP,
- MAKE_H,
-};
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ d e f i n e m a c r o n a m e s │
-// └───────────────────────────────────────────────────────────┘
-
-// LEFT HAND HOME ROW MODS ├───────────────────────────────────┐
-
-#define GUI_A MT(MOD_LGUI, KC_A)
-#define ALT_R MT(MOD_LALT, KC_R)
-#define CTL_S MT(MOD_LCTL, KC_S)
-#define SHT_T MT(MOD_LSFT, KC_T)
-
-// RIGHT HAND HOME ROW MODS ├───────────────────────────────────┐
-
-#define SHT_N MT(MOD_RSFT, KC_N)
-#define CTL_E MT(MOD_LCTL, KC_E)
-#define ALT_I MT(MOD_LALT, KC_I)
-#define GUI_O MT(MOD_LGUI, KC_O)
-
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ d e f i n e s o u n d s │
-// └───────────────────────────────────────────────────────────┘
-
-#ifdef AUDIO_ENABLE
- #define WINXP_SOUND W__NOTE(_DS6), Q__NOTE(_DS5), H__NOTE(_AS5), H__NOTE(_GS5), H__NOTE(_DS5), H__NOTE(_DS6), H__NOTE(_AS5)
- #define MAC_SOUND S__NOTE(_CS5), B__NOTE(_C5)
-
- float winxp_song[][2] = SONG(WINXP_SOUND);
- float mac_song[][2] = SONG(MAC_SOUND);
-#endif // AUDIO_ENABLE
-
-// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// │ K E Y M A P S │
-// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
+/*
┌───────────────────────────────────────────────────────────┐
│ q w e r t y │
└───────────────────────────────────────────────────────────┘
@@ -106,664 +35,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ CTRL │ Z │ X │ C │ V │ B ││ MUTE ││PLY/PSE ││ N │ M │ , │ . │ / │ \ │
└─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
- │ LALT │ LOWER │ RALT │ SPACE ││ BSPCE │ ENTER │ RAISE │ DEL │
- └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */
-
- [_QWERTY] = LAYOUT_polydactyl(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
- KC_LALT, LOWER, KC_RALT, KC_SPC, KC_BSPC, KC_ENT, RAISE, KC_DEL
- ),
-
-/*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ l o w e r │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ F1 │ F2 │ F3 │ F4 │ F5 │ │ F6 │ F7 │ F8 │ F9 │ F10 │
- ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
- │ - │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ ` │ ~ │ = │ + │
- ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
- │ _ │ 1 │ 2 │ 3 │ 4 │ 5 ││ MUTE ││PLY/PASE││ 6 │ 7 │ 8 │ 9 │ 0 │ * │
- └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
- │ │ │ │ LSHIFT ││ RSHIFT │ │ │ │
- └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */
-
- [_LOWER] = LAYOUT_polydactyl(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
- KC_MINS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_GRV, KC_TILD, KC_EQL, KC_PLUS,
- KC_UNDS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MUTE, KC_MPLY, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ASTR,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_LSFT, KC_RSFT, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ r a i s e │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ RGB_SPI │ RGB_HUI │ HF_NEXT │ CK_UP │ { │ │ } │ LEFT │ UP │ RIGHT │ HOME │
- ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
- │ RGB_VAI │ RGB_MOD │ RGB_M_B │ HF_TOGG │ CK_TOGG │ [ │ │ ] │ │ DOWN │ │ PSCRN │ P UP │
- ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
- │ RGB_VAD │ RGB_SPD │ RGB_HUD │ HF_PREV │ CK_DOWN │ ( ││ MUTE ││PLY/PASE││ ) │ │ │ │ END │ P DOWN │
- └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
- │ │ │ │ LSHIFT ││ RSHIFT │ │ │ │
- └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */
-
- [_RAISE] = LAYOUT_polydactyl(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
- RGB_SPI, RGB_HUI, HF_NEXT, CK_UP, KC_LCBR, KC_RCBR, KC_LEFT, KC_UP, KC_RGHT, KC_HOME,
- RGB_VAI, RGB_MOD, RGB_M_B, HF_TOGG, CK_TOGG, KC_LBRC, KC_RBRC, XXXXXXX, KC_DOWN, XXXXXXX, KC_PSCR, KC_PGUP,
- RGB_VAD, RGB_SPD, RGB_HUD, HF_PREV, CK_DOWN, KC_LPRN, KC_MUTE, KC_MPLY, KC_RPRN, XXXXXXX, XXXXXXX, XXXXXXX, KC_END, KC_PGDN,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
- ),
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ a d j u s t │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ AUDIO │ HAPTIC │ RGB HUE │ RGB MOD │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ F7 │ F8 │ F9 │ F14 │
- ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
- │ RESET │ DEBUG │ QWERTY │ RGB SAT │ │ ├─╯ ╰─┤ │ F4 │ F5 │ F6 │ F12 │ F13 │
- ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
- │ MAKE │ OS SWAP │ │ RGB VAL │ │ ││ MUTE ││PLY/PSE ││ │ F1 │ F2 │ F3 │ F10 │ F11 │
- └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
- │ │ │ │ ││ │ │ │ │
- └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */
+ │ LALT │ │ RALT │ SPACE ││ BSPCE │ ENTER │ │ DEL │
+ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */
- [_ADJUST] = LAYOUT_polydactyl(
+ [_QWERTY] = LAYOUT_all(
//╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
- AU_TOGG, HF_TOGG, RGB_HUI, RGB_MOD, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F14,
- QK_BOOT, DB_TOGG, QWERTY, RGB_SAI, XXXXXXX, XXXXXXX, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F12, KC_F13,
- MAKE_H, OS_SWAP, XXXXXXX, RGB_VAI, XXXXXXX, XXXXXXX, KC_MUTE, KC_MPLY, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F10, KC_F11,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
+ KC_LALT, XXXXXXX, KC_RALT, KC_SPC, KC_BSPC, KC_ENT, XXXXXXX, KC_DEL
),
-
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ t e m p l a t e p o l y d a c t y l │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
- ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
- │ │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ │ ││ ││ ││ │ │ │ │ │ │
- └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
- │ │ │ │ ││ │ │ │ │
- └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘
-
- [_TEMPLATE] = LAYOUT_polydactyl(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- )
-
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ t e m p l a t e k o n r a d │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
- ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
- │ │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ │ ││ ││ ││ │ │ │ │ │ │
- └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤╰────────╯╰────────╯├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
- │ │ │ │ │ │ │ │
- └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘
-
- [_TEMPLATE] = LAYOUT_konrad(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______
- )
-
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌─────────────────────────────────────────────────┐
- │ t e m p l a t e y u b i t s u m e │
- └─────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ ││ ││ ││ │ │ │ │ │
- └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
- │ │ │ │ ││ │ │ │ │
- └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘
-
- [_TEMPLATE] = LAYOUT_yubitsume(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- )
-
-
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌─────────────────────────────────────────────────┐
- │ t e m p l a t e s a e g e w e r k │
- └─────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ ││ ││ ││ │ │ │ │ │
- └─────────┴─────────┼─────────┼─────────┼─────────┤╰────────╯╰────────╯├─────────┼─────────┼─────────┼─────────┴─────────┘
- │ │ │ │ │ │ │ │
- └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘
-
- [_TEMPLATE] = LAYOUT_saegewerk(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______
- )
-
- */
-};
-
-// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// │ O L E D │
-// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
-
-#ifdef OLED_ENABLE
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ d y n a m i c m a c r o │
-// └───────────────────────────────────────────────────────────┘
-
-char layer_state_str[24];
-char o_text[24] = "";
-int dmacro_num = 0;
-
-#ifdef DYNAMIC_MACRO_ENABLE
- char dmacro_text[4][24] = { "", "RECORDING", "STOP RECORDING", "PLAY RECORDING"};
- static uint16_t dmacro_timer;
- const char PROGMEM rec_ico[] = {0xD1, 0xE1, 0};
- const char PROGMEM stop_ico[] = {0xD3, 0xE1, 0};
- const char PROGMEM play_ico[] = {0xD2, 0xE1, 0};
-
-
- // DYNMACRO RECORD ├─────────────────────────────────────────────────────────────┐
- bool dynamic_macro_record_start_user(int8_t direction) {
- dmacro_num = 1;
- return false;
- }
-
- // DYNMACRO STOP RECORDING ├─────────────────────────────────────────────────────┐
- bool dynamic_macro_record_end_user(int8_t direction) {
- dmacro_num = 2;
- dmacro_timer = timer_read();
- return false;
- }
-
- // DYNMACRO PLAY RECORDING ├─────────────────────────────────────────────────────┐
- bool dynamic_macro_play_user(int8_t direction) {
- dmacro_num = 3;
- dmacro_timer = timer_read();
- return false;
- }
-#endif //DYNAMIC_MACRO_ENABLE
-
-
-void matrix_scan_user(void) {
- #ifdef DYNAMIC_MACRO_ENABLE
- // DynMacroTimer
- if(dmacro_num > 0){
- if (timer_elapsed(dmacro_timer) < 3000) {
- strcpy ( o_text, dmacro_text[dmacro_num] );
- }
- else {
- if (dmacro_num == 1) {
- strcpy ( o_text, dmacro_text[1] );
- }
- else {
- strcpy ( o_text, layer_state_str );
- dmacro_num = 0;
- }
- }
- }
- #endif //DYNAMIC_MACRO_ENABLE
-}
-
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ o l e d g r a p h i c s │
-// └───────────────────────────────────────────────────────────┘
-
-void render_os_lock_status(void) {
- static const char PROGMEM sep_v[] = {0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0};
- static const char PROGMEM sep_h1[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
- static const char PROGMEM sep_h2[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
- static const char PROGMEM face_1[] = {0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0xE1, 0};
- static const char PROGMEM face_2[] = {0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xE1, 0};
- static const char PROGMEM face_3[] = {0xE1, 0xE1, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xE1, 0};
- static const char PROGMEM os_m_1[] = {0x95, 0x96, 0};
- static const char PROGMEM os_m_2[] = {0xB5, 0xB6, 0};
- static const char PROGMEM os_w_1[] = {0x97, 0x98, 0};
- static const char PROGMEM os_w_2[] = {0xB7, 0xB8, 0};
- static const char PROGMEM s_lock[] = {0x8F, 0x90, 0};
- static const char PROGMEM n_lock[] = {0x91, 0x92, 0};
- static const char PROGMEM c_lock[] = {0x93, 0x94, 0};
- static const char PROGMEM b_lock[] = {0xE1, 0xE1, 0};
- #ifdef AUDIO_ENABLE
- static const char PROGMEM aud_en[] = {0xAF, 0xB0, 0};
- static const char PROGMEM aud_di[] = {0xCF, 0xD0, 0};
- #endif
- #ifdef HAPTIC_ENABLE
- static const char PROGMEM hap_en[] = {0xB1, 0xB2, 0};
- static const char PROGMEM hap_di[] = {0xCF, 0xD0, 0};
- #endif
-
-// os mode status ────────────────────────────────────────┐
-
- oled_write_ln_P(sep_v, false);
-
- if (keymap_config.swap_lctl_lgui) {
- oled_write_P(os_m_1, false); // ──── MAC
- } else {
- oled_write_P(os_w_1, false); // ──── WIN
- }
-
- oled_write_P(sep_h1, false);
- oled_write_P(face_1, false);
-
- if (keymap_config.swap_lctl_lgui) {
- oled_write_P(os_m_2, false); // ──── MAC
- } else {
- oled_write_P(os_w_2, false); // ──── WIN
- }
-
- oled_write_P(sep_h1, false);
- oled_write_P(face_2, false);
- oled_write_P(sep_h1, false);
- oled_write_P(face_3, false);
-
-
-// lock key layer status ─────────────────────────────────┐
-
- led_t led_usb_state = host_keyboard_led_state();
-
- if (led_usb_state.num_lock) {
- oled_write_P(n_lock, false); // ──── NUMLOCK
- } else {
- oled_write_P(b_lock, false);
- }
- if (led_usb_state.caps_lock) {
- oled_write_P(c_lock, false); // ─── CAPSLOCK
- } else {
- oled_write_P(b_lock, false);
- }
- if (led_usb_state.scroll_lock) { // ─ SCROLLLOCK
- oled_write_P(s_lock, false);
- } else {
- oled_write_P(b_lock, false);
- }
-
-// hardware feature status ──────────────────────────────┐
-
- oled_write_P(sep_h2, false);
-
- #ifndef AUDIO_ENABLE
- oled_write_P(b_lock, false);
- #endif
- #ifndef HAPTIC_ENABLE
- oled_write_P(b_lock, false);
- #endif
-
- #ifdef AUDIO_ENABLE // ────────────────── AUDIO
- if (is_audio_on()) {
- oled_write_P(aud_en, false);
- } else {
- oled_write_P(aud_di, false);
- }
- #endif // AUDIO ENABLE
-
- #ifdef HAPTIC_ENABLE // ─────────────── HAPTIC
-// oled_write_P(hap_en, false);
- if (haptic_get_enable()) {
- oled_write_P(hap_en, false);
- } else {
- oled_write_P(hap_di, false);
- }
-
- #endif // HAPTIC ENABLE
-}
-
-
-// layer status ──────────────────────────────────────────┐
-
-int layerstate = 0;
-
-layer_state_t layer_state_set_kb(layer_state_t state) {
- switch (get_highest_layer(layer_state | default_layer_state)) {
- case 0:
- strcpy ( layer_state_str, "BASE QWERTY");
- break;
- case 1:
- strcpy ( layer_state_str, "LOWER");
- break;
- case 2:
- strcpy ( layer_state_str, "RAISE");
- break;
- case 3:
- strcpy ( layer_state_str, "ADJUST");
- break;
- default:
- strcpy ( layer_state_str, "XXXXXX");
- }
- if (dmacro_num < 1) {
- strcpy ( o_text, layer_state_str );
- }
- //return state;
- return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-}
-
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ w r i t e t o o l e d │
-// └───────────────────────────────────────────────────────────┘
-
-bool oled_task_kb(void) {
- if (!oled_task_user()) {
- return false;
- }
- if (is_keyboard_master()) { // ────────────────────────── PRIMARY SIDE
-
- // layer status ──────────────────────────────────────────────────┐
- #ifdef DYNAMIC_MACRO_ENABLE
- if(dmacro_num == 1){ oled_write_P(rec_ico, false); }
- if(dmacro_num == 2){ oled_write_P(stop_ico, false); }
- if(dmacro_num == 3){ oled_write_P(play_ico, false); }
- #endif //DYNAMIC_MACRO_ENABLE
-
- oled_write_ln(o_text, false);
- render_os_lock_status();
-
- } else { // ─────────────────────────────────────────── SECONDARY SIDE
-
- // KLOR face ─────────────────────────────────────────────────────┐
-
- static const char PROGMEM klor_face[] = {
-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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x18, 0x88, 0xf0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
-0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x0c, 0xc6,
-0xe3, 0xfa, 0xdc, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0xa0, 0xa0, 0xe0, 0xc0, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x20,
-0x18, 0x8c, 0xc3, 0xf1, 0xf8, 0xfe, 0xff, 0xff, 0xf7, 0xf2, 0xf2, 0xfb, 0xf9, 0xf9, 0xfd, 0xfc,
-0xfc, 0xff, 0x7f, 0x06, 0x00, 0x00, 0x20, 0x70, 0x88, 0x86, 0xc3, 0xf0, 0xf8, 0xfe, 0xff, 0xff,
-0xff, 0x7f, 0xfc, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x07, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
-0x0e, 0x07, 0x07, 0x07, 0x07, 0x87, 0xe3, 0x9b, 0xef, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0x83, 0x80, 0x80, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x40, 0x40, 0x20, 0x38,
-0xfc, 0x73, 0x7c, 0xbf, 0x3f, 0x3f, 0x3f, 0xbf, 0xff, 0xff, 0x03, 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, 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, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfa, 0xfa, 0xf3,
-0xe3, 0xe3, 0xc3, 0xc1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x04, 0x06, 0x06, 0x06, 0x86, 0xc6, 0x3c, 0x1c, 0x8e, 0xc3,
-0xf1, 0xf8, 0xfe, 0x97, 0x90, 0x98, 0xc8, 0xcf, 0xcf, 0xe7, 0xe4, 0xe4, 0xf8, 0x78, 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, 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, 0xc0,
-0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0,
-0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x21, 0x70, 0x3c, 0x3e, 0x3f, 0x3f,
-0x3f, 0x1f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x0f, 0x07, 0x01, 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, 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, 0x07,
-0x04, 0x09, 0x19, 0x13, 0xb3, 0xa7, 0xcf, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xdf, 0xbf, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80,
-0xf0, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x0f, 0x03, 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, 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, 0x1f, 0x11, 0x19, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08,
-0x08, 0x08, 0x05, 0x00, 0x0f, 0x1f, 0x33, 0x27, 0x47, 0xcf, 0x9f, 0x9f, 0x3f, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0x1f, 0x03, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x2c, 0x24, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27,
-0x27, 0x27, 0x27, 0x23, 0x23, 0x33, 0x13, 0x13, 0x1f, 0x03, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f,
-0x1f, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- oled_write_raw_P(klor_face, sizeof(klor_face));
- }
- return false;
-}
-#endif // OLED_ENABLE
-
-
-
-uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case SHT_T:
- return TAPPING_TERM - 150;
- case SHT_N:
- return TAPPING_TERM - 150;
- default:
- return TAPPING_TERM;
- }
-}
-
-
-// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// │ M A C R O S │
-// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
-
- case OS_SWAP:
- if (record->event.pressed) {
- if (!keymap_config.swap_lctl_lgui) {
- keymap_config.swap_lctl_lgui = true; // ─── MAC
- #ifdef AUDIO_ENABLE
- PLAY_SONG(mac_song);
- #endif // AUDIO_ENABLE
- }
- else {
- keymap_config.swap_lctl_lgui = false; // ─── WIN
- #ifdef AUDIO_ENABLE
- PLAY_SONG(winxp_song);
- #endif // AUDIO_ENABLE
- }
-// #ifdef HAPTIC_ENABLE
-// drv2605l_pulse(52);
-// #endif // HAPTIC_ENABLE
- eeconfig_update_keymap(keymap_config.raw);
- clear_keyboard(); // ──── clear to prevent stuck keys
- return false;
- }
-
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ l a y e r │
-// └───────────────────────────────────────────────────────────┘
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
-// #ifdef HAPTIC_ENABLE
-// drv2605l_pulse(64);
-// #endif // HAPTIC_ENABLE
- }
- return false;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
-// #ifdef HAPTIC_ENABLE
-// drv2605l_pulse(17);
-// #endif // HAPTIC_ENABLE
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
-// #ifdef HAPTIC_ENABLE
-// drv2605l_pulse(17);
-// #endif // HAPTIC_ENABLE
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
-// #ifdef HAPTIC_ENABLE
-// drv2605l_pulse(17);
-// #endif // HAPTIC_ENABLE
- } else {
- layer_off(_ADJUST);
- }
- return false;
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ q m k │
-// └───────────────────────────────────────────────────────────┘
-
- case MAKE_H:
- if (record->event.pressed) {
- #ifdef KEYBOARD_klor_kb2040
- SEND_STRING ("qmk compile -kb klor/2040 -km default");
- #else
- SEND_STRING ("qmk compile -kb klor -km default");
- #endif
- tap_code(KC_ENTER);
- }
- break;
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ p r o d u c t i v i t y │
-// └───────────────────────────────────────────────────────────┘
-
- case KC_MPLY:
- if (record->event.pressed) {
-// #ifdef HAPTIC_ENABLE
-// drv2605l_pulse(4);
-// #endif // HAPTIC_ENABLE
- }
- break;
- }
- return true;
-}
-
-
-// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// │ E N C O D E R │
-// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
-
-#if defined(ENCODER_MAP_ENABLE)
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_WBAK, KC_WFWD) },
- [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
- [2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
- [3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
-};
-#endif
-
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ c o m b o keys │
-// └───────────────────────────────────────────────────────────┘
-
-#ifdef COMBO_ENABLE
-
-enum combos {
- QW_ESC,
- WE_CLOSETAB,
- ER_LASTTAB,
- RT_PRTSCR,
- WR_TERMINAL,
-};
-
-const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
-const uint16_t PROGMEM we_combo[] = {KC_W, KC_E, COMBO_END};
-const uint16_t PROGMEM er_combo[] = {KC_E, KC_R, COMBO_END};
-const uint16_t PROGMEM rt_combo[] = {KC_R, KC_T, COMBO_END};
-const uint16_t PROGMEM wr_combo[] = {KC_W, KC_R, COMBO_END};
-
-combo_t key_combos[] = {
- [QW_ESC] = COMBO(qw_combo, KC_ESC),
- [WE_CLOSETAB] = COMBO(we_combo, LCTL(KC_F4)),
- [ER_LASTTAB] = COMBO(er_combo, LCTL(LSFT(KC_T))),
- [RT_PRTSCR] = COMBO(rt_combo, KC_PSCR),
- [WR_TERMINAL] = COMBO(wr_combo, LCTL(LALT(KC_T))),
};
-
-#endif // COMBO_ENABLE
-/*
-
- ▐█ ▟▛ ▐█ ▄▆▀▀▀▀▀▀▆▄ ▐█▀▀▀▀▀█▌
- ▐█ ▟▛ ▐█ ▟▛ ▜▙ ▐█ █▌
- ▐█ ▟▛ ▐█ ▐█ █▋▐█ █▌
- ▐█ ▟█▙ ▐█ ▐█ █▋▐█▀▀▜█▀▀▘
- ▐█▟▛ ▜▙ ▐█ ▜▙ ▟▛ ▐█ ▜▙
- ▐█▛ ▜▙ ▐█▄▄▄▄ ▀▜▆▄▄▄▄▆▛▀ ▐█ ▜▙
-
- ▄██████████████▄
- ████████████████
- ▄██████▀ ▀████▀ ▀██████▄
- ███████▄ ▄████▄ ▄███████
- ███████████▀▀▀▀███████████
- ▀█████████▀ ▄▄ ▀█████████▀
- ████▀ ▄██▄ ▀████
- ████▄▄████▄▄████
-
-*/
-
-
-
diff --git a/keyboards/electronlab/klor/keymaps/default/rules.mk b/keyboards/electronlab/klor/keymaps/default/rules.mk
index 4e089e59a26e..a03b9c6c506c 100644
--- a/keyboards/electronlab/klor/keymaps/default/rules.mk
+++ b/keyboards/electronlab/klor/keymaps/default/rules.mk
@@ -1,12 +1,12 @@
OLED_ENABLE = yes
OLED_DRIVER = ssd1306
ENCODER_ENABLE = yes
-ENCODER_MAP_ENABLE = yes
+#ENCODER_MAP_ENABLE = yes
EXTRAKEY_ENABLE = yes
AUDIO_ENABLE = yes
MUSIC_ENABLE = yes
DYNAMIC_MACRO_ENABLE = yes
-COMBO_ENABLE = yes
+#COMBO_ENABLE = yes
KEY_OVERRIDE_ENABLE = no
TRI_LAYER_ENABLE = yes
SPLIT_KEYBOARD = yes
diff --git a/keyboards/electronlab/klor/keymaps/electronlab/config.h b/keyboards/electronlab/klor/keymaps/electronlab/config.h
new file mode 100644
index 000000000000..caccffba1d95
--- /dev/null
+++ b/keyboards/electronlab/klor/keymaps/electronlab/config.h
@@ -0,0 +1,100 @@
+/*
+Copyright 2024 ElectronLab
+
+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 .
+*/
+
+#pragma once
+
+/* The way how "handedness" is decided (which half is which),
+see https://docs.qmk.fm/#/feature_split_keyboard?id=setting-handedness
+for more options.
+*/
+
+#define EE_HANDS
+//#define MASTER_LEFT
+//#define MASTER_RIGHT
+
+#define TAPPING_TERM 300
+
+// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
+#define TAPPING_FORCE_HOLD
+
+// Auto Shift
+#define NO_AUTO_SHIFT_ALPHA
+#define AUTO_SHIFT_TIMEOUT TAPPING_TERM
+#define AUTO_SHIFT_NO_SETUP
+
+// RGB matrix support
+#ifdef RGB_MATRIX_ENABLE
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effect
+
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS
+# define ENABLE_RGB_MATRIX_SOLID_COLOR
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined ├─────────────────────────────┐
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined ├────────────┐
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#endif
+
+// Haptic support
+#ifdef HAPTIC_ENABLE
+//# define NO_HAPTIC_ALPHA
+//# define NO_HAPTIC_PUNCTUATION
+//# define NO_HAPTIC_LOCKKEYS
+//# define NO_HAPTIC_NAV
+//# define NO_HAPTIC_NUMERIC
+#endif
diff --git a/keyboards/electronlab/klor/keymaps/electronlab/keymap.c b/keyboards/electronlab/klor/keymaps/electronlab/keymap.c
new file mode 100644
index 000000000000..ccda1a725abc
--- /dev/null
+++ b/keyboards/electronlab/klor/keymaps/electronlab/keymap.c
@@ -0,0 +1,781 @@
+/*
+Copyright 2024 ElectronLab
+
+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 .
+
+
+
+ █ █ █ ▄▄▄▀▀▀▀▀▀▄▄▄ █▀▀▀▀▀▀▀▀▀▀█
+ █ █ █ ▄▀ ▀▄ █ █
+ █ █ █ ▄▀ ▀▄ █ █
+ █ █ █ █ █ █ █
+ █ █ █ █ █ █ █
+ █ █ █ █ █ █▄▄▄▄▄▄▄▄▄▄█
+ █ █ █ █ █ █ █ █
+ █ █ █ █ █ █ █ █
+ █ █ █ █ ▀▄ ▄▀ █ █
+ ██ █ █ ▀▄ ▄▀ █ █
+ █ █ █▄▄▄▄▄▄▄▄ ▀▀▀▄▄▄▄▄▄▀▀▀ █ █
+
+ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
+ D E F A U L T
+
+*/
+#include QMK_KEYBOARD_H
+#include
+#include
+
+
+// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+// │ D E F I N I T I O N S │
+// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
+// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ d e f i n e l a y e r s │
+// └───────────────────────────────────────────────────────────┘
+
+enum klor_layers {
+ /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ d e f i n e k e y c o d e s │
+// └───────────────────────────────────────────────────────────┘
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ OS_SWAP,
+ MAKE_H,
+};
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ d e f i n e m a c r o n a m e s │
+// └───────────────────────────────────────────────────────────┘
+
+// LEFT HAND HOME ROW MODS ├───────────────────────────────────┐
+
+#define GUI_A MT(MOD_LGUI, KC_A)
+#define ALT_R MT(MOD_LALT, KC_R)
+#define CTL_S MT(MOD_LCTL, KC_S)
+#define SHT_T MT(MOD_LSFT, KC_T)
+
+// RIGHT HAND HOME ROW MODS ├───────────────────────────────────┐
+
+#define SHT_N MT(MOD_RSFT, KC_N)
+#define CTL_E MT(MOD_LCTL, KC_E)
+#define ALT_I MT(MOD_LALT, KC_I)
+#define GUI_O MT(MOD_LGUI, KC_O)
+
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ d e f i n e s o u n d s │
+// └───────────────────────────────────────────────────────────┘
+
+#ifdef AUDIO_ENABLE
+ #define WINXP_SOUND W__NOTE(_DS6), Q__NOTE(_DS5), H__NOTE(_AS5), H__NOTE(_GS5), H__NOTE(_DS5), H__NOTE(_DS6), H__NOTE(_AS5)
+ #define MAC_SOUND S__NOTE(_CS5), B__NOTE(_C5)
+
+ float winxp_song[][2] = SONG(WINXP_SOUND);
+ float mac_song[][2] = SONG(MAC_SOUND);
+#endif // AUDIO_ENABLE
+
+// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+// │ K E Y M A P S │
+// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
+// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /*
+ ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
+
+ ┌───────────────────────────────────────────────────────────┐
+ │ q w e r t y │
+ └───────────────────────────────────────────────────────────┘
+ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
+ │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │
+ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
+ │ TAB │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ CTRL │ Z │ X │ C │ V │ B ││ MUTE ││PLY/PSE ││ N │ M │ , │ . │ / │ \ │
+ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
+ │ LALT │ LOWER │ RALT │ SPACE ││ BSPCE │ ENTER │ RAISE │ DEL │
+ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */
+
+ [_QWERTY] = LAYOUT_polydactyl(
+ //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
+ KC_LALT, LOWER, KC_RALT, KC_SPC, KC_BSPC, KC_ENT, RAISE, KC_DEL
+ ),
+
+/*
+ ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
+
+ ┌───────────────────────────────────────────────────────────┐
+ │ l o w e r │
+ └───────────────────────────────────────────────────────────┘
+ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
+ │ F1 │ F2 │ F3 │ F4 │ F5 │ │ F6 │ F7 │ F8 │ F9 │ F10 │
+ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
+ │ - │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ ` │ ~ │ = │ + │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ _ │ 1 │ 2 │ 3 │ 4 │ 5 ││ MUTE ││PLY/PASE││ 6 │ 7 │ 8 │ 9 │ 0 │ * │
+ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
+ │ │ │ │ LSHIFT ││ RSHIFT │ │ │ │
+ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */
+
+ [_LOWER] = LAYOUT_polydactyl(
+ //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_MINS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_GRV, KC_TILD, KC_EQL, KC_PLUS,
+ KC_UNDS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MUTE, KC_MPLY, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ASTR,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_LSFT, KC_RSFT, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ /*
+ ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
+
+ ┌───────────────────────────────────────────────────────────┐
+ │ r a i s e │
+ └───────────────────────────────────────────────────────────┘
+ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
+ │ RGB_SPI │ RGB_HUI │ HF_NEXT │ CK_UP │ { │ │ } │ LEFT │ UP │ RIGHT │ HOME │
+ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
+ │ RGB_VAI │ RGB_MOD │ RGB_M_B │ HF_TOGG │ CK_TOGG │ [ │ │ ] │ │ DOWN │ │ PSCRN │ P UP │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ RGB_VAD │ RGB_SPD │ RGB_HUD │ HF_PREV │ CK_DOWN │ ( ││ MUTE ││PLY/PASE││ ) │ │ │ │ END │ P DOWN │
+ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
+ │ │ │ │ LSHIFT ││ RSHIFT │ │ │ │
+ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */
+
+ [_RAISE] = LAYOUT_polydactyl(
+ //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
+ RGB_SPI, RGB_HUI, HF_NEXT, CK_UP, KC_LCBR, KC_RCBR, KC_LEFT, KC_UP, KC_RGHT, KC_HOME,
+ RGB_VAI, RGB_MOD, RGB_M_B, HF_TOGG, CK_TOGG, KC_LBRC, KC_RBRC, XXXXXXX, KC_DOWN, XXXXXXX, KC_PSCR, KC_PGUP,
+ RGB_VAD, RGB_SPD, RGB_HUD, HF_PREV, CK_DOWN, KC_LPRN, KC_MUTE, KC_MPLY, KC_RPRN, XXXXXXX, XXXXXXX, XXXXXXX, KC_END, KC_PGDN,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+ /*
+ ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
+
+ ┌───────────────────────────────────────────────────────────┐
+ │ a d j u s t │
+ └───────────────────────────────────────────────────────────┘
+ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
+ │ AUDIO │ HAPTIC │ RGB HUE │ RGB MOD │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ F7 │ F8 │ F9 │ F14 │
+ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
+ │ RESET │ DEBUG │ QWERTY │ RGB SAT │ │ ├─╯ ╰─┤ │ F4 │ F5 │ F6 │ F12 │ F13 │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ MAKE │ OS SWAP │ │ RGB VAL │ │ ││ MUTE ││PLY/PSE ││ │ F1 │ F2 │ F3 │ F10 │ F11 │
+ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
+ │ │ │ │ ││ │ │ │ │
+ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */
+
+ [_ADJUST] = LAYOUT_polydactyl(
+ //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
+ AU_TOGG, HF_TOGG, RGB_HUI, RGB_MOD, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F14,
+ QK_BOOT, DB_TOGG, QWERTY, RGB_SAI, XXXXXXX, XXXXXXX, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F12, KC_F13,
+ MAKE_H, OS_SWAP, XXXXXXX, RGB_VAI, XXXXXXX, XXXXXXX, KC_MUTE, KC_MPLY, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F10, KC_F11,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+ /*
+ ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
+
+ ┌───────────────────────────────────────────────────────────┐
+ │ t e m p l a t e p o l y d a c t y l │
+ └───────────────────────────────────────────────────────────┘
+ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
+ │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
+ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
+ │ │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │ │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ │ │ │ │ │ ││ ││ ││ │ │ │ │ │ │
+ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
+ │ │ │ │ ││ │ │ │ │
+ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘
+
+ [_TEMPLATE] = LAYOUT_polydactyl(
+ //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+ ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
+
+ ┌───────────────────────────────────────────────────────────┐
+ │ t e m p l a t e k o n r a d │
+ └───────────────────────────────────────────────────────────┘
+ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
+ │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
+ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
+ │ │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │ │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ │ │ │ │ │ ││ ││ ││ │ │ │ │ │ │
+ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤╰────────╯╰────────╯├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
+ │ │ │ │ │ │ │ │
+ └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘
+
+ [_TEMPLATE] = LAYOUT_konrad(
+ //╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ )
+
+ ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
+
+ ┌─────────────────────────────────────────────────┐
+ │ t e m p l a t e y u b i t s u m e │
+ └─────────────────────────────────────────────────┘
+ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
+ │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ │ │ │ │ ││ ││ ││ │ │ │ │ │
+ └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
+ │ │ │ │ ││ │ │ │ │
+ └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘
+
+ [_TEMPLATE] = LAYOUT_yubitsume(
+ //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+
+ ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
+
+ ┌─────────────────────────────────────────────────┐
+ │ t e m p l a t e s a e g e w e r k │
+ └─────────────────────────────────────────────────┘
+ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
+ │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │
+ ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
+ │ │ │ │ │ ││ ││ ││ │ │ │ │ │
+ └─────────┴─────────┼─────────┼─────────┼─────────┤╰────────╯╰────────╯├─────────┼─────────┼─────────┼─────────┴─────────┘
+ │ │ │ │ │ │ │ │
+ └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘
+
+ [_TEMPLATE] = LAYOUT_saegewerk(
+ //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ )
+
+ */
+};
+
+// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+// │ O L E D │
+// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
+// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
+
+#ifdef OLED_ENABLE
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ d y n a m i c m a c r o │
+// └───────────────────────────────────────────────────────────┘
+
+char layer_state_str[24];
+char o_text[24] = "";
+int dmacro_num = 0;
+
+#ifdef DYNAMIC_MACRO_ENABLE
+ char dmacro_text[4][24] = { "", "RECORDING", "STOP RECORDING", "PLAY RECORDING"};
+ static uint16_t dmacro_timer;
+ const char PROGMEM rec_ico[] = {0xD1, 0xE1, 0};
+ const char PROGMEM stop_ico[] = {0xD3, 0xE1, 0};
+ const char PROGMEM play_ico[] = {0xD2, 0xE1, 0};
+
+
+ // DYNMACRO RECORD ├─────────────────────────────────────────────────────────────┐
+ bool dynamic_macro_record_start_user(int8_t direction) {
+ dmacro_num = 1;
+ return false;
+ }
+
+ // DYNMACRO STOP RECORDING ├─────────────────────────────────────────────────────┐
+ bool dynamic_macro_record_end_user(int8_t direction) {
+ dmacro_num = 2;
+ dmacro_timer = timer_read();
+ return false;
+ }
+
+ // DYNMACRO PLAY RECORDING ├─────────────────────────────────────────────────────┐
+ bool dynamic_macro_play_user(int8_t direction) {
+ dmacro_num = 3;
+ dmacro_timer = timer_read();
+ return false;
+ }
+#endif //DYNAMIC_MACRO_ENABLE
+
+
+void matrix_scan_user(void) {
+ #ifdef DYNAMIC_MACRO_ENABLE
+ // DynMacroTimer
+ if(dmacro_num > 0){
+ if (timer_elapsed(dmacro_timer) < 3000) {
+ strcpy ( o_text, dmacro_text[dmacro_num] );
+ }
+ else {
+ if (dmacro_num == 1) {
+ strcpy ( o_text, dmacro_text[1] );
+ }
+ else {
+ strcpy ( o_text, layer_state_str );
+ dmacro_num = 0;
+ }
+ }
+ }
+ #endif //DYNAMIC_MACRO_ENABLE
+}
+
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ o l e d g r a p h i c s │
+// └───────────────────────────────────────────────────────────┘
+
+void render_os_lock_status(void) {
+ static const char PROGMEM sep_v[] = {0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0};
+ static const char PROGMEM sep_h1[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
+ static const char PROGMEM sep_h2[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
+ static const char PROGMEM face_1[] = {0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0xE1, 0};
+ static const char PROGMEM face_2[] = {0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xE1, 0};
+ static const char PROGMEM face_3[] = {0xE1, 0xE1, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xE1, 0};
+ static const char PROGMEM os_m_1[] = {0x95, 0x96, 0};
+ static const char PROGMEM os_m_2[] = {0xB5, 0xB6, 0};
+ static const char PROGMEM os_w_1[] = {0x97, 0x98, 0};
+ static const char PROGMEM os_w_2[] = {0xB7, 0xB8, 0};
+ static const char PROGMEM s_lock[] = {0x8F, 0x90, 0};
+ static const char PROGMEM n_lock[] = {0x91, 0x92, 0};
+ static const char PROGMEM c_lock[] = {0x93, 0x94, 0};
+ static const char PROGMEM b_lock[] = {0xE1, 0xE1, 0};
+ #ifdef AUDIO_ENABLE
+ static const char PROGMEM aud_en[] = {0xAF, 0xB0, 0};
+ static const char PROGMEM aud_di[] = {0xCF, 0xD0, 0};
+ #endif
+ #ifdef HAPTIC_ENABLE
+ static const char PROGMEM hap_en[] = {0xB1, 0xB2, 0};
+ static const char PROGMEM hap_di[] = {0xCF, 0xD0, 0};
+ #endif
+
+// os mode status ────────────────────────────────────────┐
+
+ oled_write_ln_P(sep_v, false);
+
+ if (keymap_config.swap_lctl_lgui) {
+ oled_write_P(os_m_1, false); // ──── MAC
+ } else {
+ oled_write_P(os_w_1, false); // ──── WIN
+ }
+
+ oled_write_P(sep_h1, false);
+ oled_write_P(face_1, false);
+
+ if (keymap_config.swap_lctl_lgui) {
+ oled_write_P(os_m_2, false); // ──── MAC
+ } else {
+ oled_write_P(os_w_2, false); // ──── WIN
+ }
+
+ oled_write_P(sep_h1, false);
+ oled_write_P(face_2, false);
+ oled_write_P(sep_h1, false);
+ oled_write_P(face_3, false);
+
+
+// lock key layer status ─────────────────────────────────┐
+
+ led_t led_usb_state = host_keyboard_led_state();
+
+ if (led_usb_state.num_lock) {
+ oled_write_P(n_lock, false); // ──── NUMLOCK
+ } else {
+ oled_write_P(b_lock, false);
+ }
+ if (led_usb_state.caps_lock) {
+ oled_write_P(c_lock, false); // ─── CAPSLOCK
+ } else {
+ oled_write_P(b_lock, false);
+ }
+ if (led_usb_state.scroll_lock) { // ─ SCROLLLOCK
+ oled_write_P(s_lock, false);
+ } else {
+ oled_write_P(b_lock, false);
+ }
+
+// hardware feature status ──────────────────────────────┐
+
+ oled_write_P(sep_h2, false);
+
+ #ifndef AUDIO_ENABLE
+ oled_write_P(b_lock, false);
+ #endif
+ #ifndef HAPTIC_ENABLE
+ oled_write_P(b_lock, false);
+ #endif
+
+ #ifdef AUDIO_ENABLE // ────────────────── AUDIO
+ if (is_audio_on()) {
+ oled_write_P(aud_en, false);
+ } else {
+ oled_write_P(aud_di, false);
+ }
+ #endif // AUDIO ENABLE
+
+ #ifdef HAPTIC_ENABLE // ─────────────── HAPTIC
+// oled_write_P(hap_en, false);
+ if (haptic_get_enable()) {
+ oled_write_P(hap_en, false);
+ } else {
+ oled_write_P(hap_di, false);
+ }
+
+ #endif // HAPTIC ENABLE
+}
+
+
+// layer status ──────────────────────────────────────────┐
+
+int layerstate = 0;
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ switch (get_highest_layer(layer_state | default_layer_state)) {
+ case 0:
+ strcpy ( layer_state_str, "BASE QWERTY");
+ break;
+ case 1:
+ strcpy ( layer_state_str, "LOWER");
+ break;
+ case 2:
+ strcpy ( layer_state_str, "RAISE");
+ break;
+ case 3:
+ strcpy ( layer_state_str, "ADJUST");
+ break;
+ default:
+ strcpy ( layer_state_str, "XXXXXX");
+ }
+ if (dmacro_num < 1) {
+ strcpy ( o_text, layer_state_str );
+ }
+ //return state;
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ w r i t e t o o l e d │
+// └───────────────────────────────────────────────────────────┘
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ if (is_keyboard_master()) { // ────────────────────────── PRIMARY SIDE
+
+ // layer status ──────────────────────────────────────────────────┐
+ #ifdef DYNAMIC_MACRO_ENABLE
+ if(dmacro_num == 1){ oled_write_P(rec_ico, false); }
+ if(dmacro_num == 2){ oled_write_P(stop_ico, false); }
+ if(dmacro_num == 3){ oled_write_P(play_ico, false); }
+ #endif //DYNAMIC_MACRO_ENABLE
+
+ oled_write_ln(o_text, false);
+ render_os_lock_status();
+
+ } else { // ─────────────────────────────────────────── SECONDARY SIDE
+
+ // KLOR face ─────────────────────────────────────────────────────┐
+
+ static const char PROGMEM klor_face[] = {
+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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x18, 0x88, 0xf0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x0c, 0xc6,
+0xe3, 0xfa, 0xdc, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0xa0, 0xa0, 0xe0, 0xc0, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x20,
+0x18, 0x8c, 0xc3, 0xf1, 0xf8, 0xfe, 0xff, 0xff, 0xf7, 0xf2, 0xf2, 0xfb, 0xf9, 0xf9, 0xfd, 0xfc,
+0xfc, 0xff, 0x7f, 0x06, 0x00, 0x00, 0x20, 0x70, 0x88, 0x86, 0xc3, 0xf0, 0xf8, 0xfe, 0xff, 0xff,
+0xff, 0x7f, 0xfc, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x07, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
+0x0e, 0x07, 0x07, 0x07, 0x07, 0x87, 0xe3, 0x9b, 0xef, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x83, 0x80, 0x80, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x40, 0x40, 0x20, 0x38,
+0xfc, 0x73, 0x7c, 0xbf, 0x3f, 0x3f, 0x3f, 0xbf, 0xff, 0xff, 0x03, 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, 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, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfa, 0xfa, 0xf3,
+0xe3, 0xe3, 0xc3, 0xc1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x04, 0x06, 0x06, 0x06, 0x86, 0xc6, 0x3c, 0x1c, 0x8e, 0xc3,
+0xf1, 0xf8, 0xfe, 0x97, 0x90, 0x98, 0xc8, 0xcf, 0xcf, 0xe7, 0xe4, 0xe4, 0xf8, 0x78, 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, 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, 0xc0,
+0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0,
+0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x21, 0x70, 0x3c, 0x3e, 0x3f, 0x3f,
+0x3f, 0x1f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x0f, 0x07, 0x01, 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, 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, 0x07,
+0x04, 0x09, 0x19, 0x13, 0xb3, 0xa7, 0xcf, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xdf, 0xbf, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80,
+0xf0, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x0f, 0x03, 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, 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, 0x1f, 0x11, 0x19, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08,
+0x08, 0x08, 0x05, 0x00, 0x0f, 0x1f, 0x33, 0x27, 0x47, 0xcf, 0x9f, 0x9f, 0x3f, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0x1f, 0x03, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x2c, 0x24, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27,
+0x27, 0x27, 0x27, 0x23, 0x23, 0x33, 0x13, 0x13, 0x1f, 0x03, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f,
+0x1f, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ oled_write_raw_P(klor_face, sizeof(klor_face));
+ }
+ return false;
+}
+#endif // OLED_ENABLE
+
+
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SHT_T:
+ return TAPPING_TERM - 150;
+ case SHT_N:
+ return TAPPING_TERM - 150;
+ default:
+ return TAPPING_TERM;
+ }
+}
+
+
+// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+// │ M A C R O S │
+// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
+// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+
+ case OS_SWAP:
+ if (record->event.pressed) {
+ if (!keymap_config.swap_lctl_lgui) {
+ keymap_config.swap_lctl_lgui = true; // ─── MAC
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(mac_song);
+ #endif // AUDIO_ENABLE
+ }
+ else {
+ keymap_config.swap_lctl_lgui = false; // ─── WIN
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(winxp_song);
+ #endif // AUDIO_ENABLE
+ }
+// #ifdef HAPTIC_ENABLE
+// drv2605l_pulse(52);
+// #endif // HAPTIC_ENABLE
+ eeconfig_update_keymap(keymap_config.raw);
+ clear_keyboard(); // ──── clear to prevent stuck keys
+ return false;
+ }
+
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ l a y e r │
+// └───────────────────────────────────────────────────────────┘
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+// #ifdef HAPTIC_ENABLE
+// drv2605l_pulse(64);
+// #endif // HAPTIC_ENABLE
+ }
+ return false;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+// #ifdef HAPTIC_ENABLE
+// drv2605l_pulse(17);
+// #endif // HAPTIC_ENABLE
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+// #ifdef HAPTIC_ENABLE
+// drv2605l_pulse(17);
+// #endif // HAPTIC_ENABLE
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+// #ifdef HAPTIC_ENABLE
+// drv2605l_pulse(17);
+// #endif // HAPTIC_ENABLE
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ q m k │
+// └───────────────────────────────────────────────────────────┘
+
+ case MAKE_H:
+ if (record->event.pressed) {
+ #ifdef KEYBOARD_klor_kb2040
+ SEND_STRING ("qmk compile -kb klor/2040 -km default");
+ #else
+ SEND_STRING ("qmk compile -kb klor -km default");
+ #endif
+ tap_code(KC_ENTER);
+ }
+ break;
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ p r o d u c t i v i t y │
+// └───────────────────────────────────────────────────────────┘
+
+ case KC_MPLY:
+ if (record->event.pressed) {
+// #ifdef HAPTIC_ENABLE
+// drv2605l_pulse(4);
+// #endif // HAPTIC_ENABLE
+ }
+ break;
+ }
+ return true;
+}
+
+
+// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+// │ E N C O D E R │
+// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
+// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_WBAK, KC_WFWD) },
+ [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+};
+#endif
+
+
+// ┌───────────────────────────────────────────────────────────┐
+// │ c o m b o keys │
+// └───────────────────────────────────────────────────────────┘
+
+#ifdef COMBO_ENABLE
+
+enum combos {
+ QW_ESC,
+ WE_CLOSETAB,
+ ER_LASTTAB,
+ RT_PRTSCR,
+ WR_TERMINAL,
+};
+
+const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
+const uint16_t PROGMEM we_combo[] = {KC_W, KC_E, COMBO_END};
+const uint16_t PROGMEM er_combo[] = {KC_E, KC_R, COMBO_END};
+const uint16_t PROGMEM rt_combo[] = {KC_R, KC_T, COMBO_END};
+const uint16_t PROGMEM wr_combo[] = {KC_W, KC_R, COMBO_END};
+
+combo_t key_combos[] = {
+ [QW_ESC] = COMBO(qw_combo, KC_ESC),
+ [WE_CLOSETAB] = COMBO(we_combo, LCTL(KC_F4)),
+ [ER_LASTTAB] = COMBO(er_combo, LCTL(LSFT(KC_T))),
+ [RT_PRTSCR] = COMBO(rt_combo, KC_PSCR),
+ [WR_TERMINAL] = COMBO(wr_combo, LCTL(LALT(KC_T))),
+};
+
+#endif // COMBO_ENABLE
+/*
+
+ ▐█ ▟▛ ▐█ ▄▆▀▀▀▀▀▀▆▄ ▐█▀▀▀▀▀█▌
+ ▐█ ▟▛ ▐█ ▟▛ ▜▙ ▐█ █▌
+ ▐█ ▟▛ ▐█ ▐█ █▋▐█ █▌
+ ▐█ ▟█▙ ▐█ ▐█ █▋▐█▀▀▜█▀▀▘
+ ▐█▟▛ ▜▙ ▐█ ▜▙ ▟▛ ▐█ ▜▙
+ ▐█▛ ▜▙ ▐█▄▄▄▄ ▀▜▆▄▄▄▄▆▛▀ ▐█ ▜▙
+
+ ▄██████████████▄
+ ████████████████
+ ▄██████▀ ▀████▀ ▀██████▄
+ ███████▄ ▄████▄ ▄███████
+ ███████████▀▀▀▀███████████
+ ▀█████████▀ ▄▄ ▀█████████▀
+ ████▀ ▄██▄ ▀████
+ ████▄▄████▄▄████
+
+*/
+
+
+
diff --git a/keyboards/electronlab/klor/keymaps/electronlab/rules.mk b/keyboards/electronlab/klor/keymaps/electronlab/rules.mk
new file mode 100644
index 000000000000..4e089e59a26e
--- /dev/null
+++ b/keyboards/electronlab/klor/keymaps/electronlab/rules.mk
@@ -0,0 +1,19 @@
+OLED_ENABLE = yes
+OLED_DRIVER = ssd1306
+ENCODER_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+AUDIO_ENABLE = yes
+MUSIC_ENABLE = yes
+DYNAMIC_MACRO_ENABLE = yes
+COMBO_ENABLE = yes
+KEY_OVERRIDE_ENABLE = no
+TRI_LAYER_ENABLE = yes
+SPLIT_KEYBOARD = yes
+
+#HAPTIC FEEBACK
+HAPTIC_ENABLE = yes
+SPLIT_HAPTIC_ENABLE = yes
+
+#PER KEY RGB
+RGB_MATRIX_ENABLE = yes