diff --git a/keyboards/electronlab/klor/config.h b/keyboards/electronlab/klor/config.h
new file mode 100644
index 00000000000..3f002ad69cd
--- /dev/null
+++ b/keyboards/electronlab/klor/config.h
@@ -0,0 +1,59 @@
+/*
+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
+
+#define I2C1_SCL_PIN GP3
+#define I2C1_SDA_PIN GP2
+
+#ifdef OLED_ENABLE
+# define OLED_DISPLAY_128X64
+# define SPLIT_OLED_ENABLE
+# define OLED_FONT_H "./lib/glcdfont.c"
+#endif
+
+#ifdef AUDIO_ENABLE
+#define AUDIO_PWM_DRIVER PWMD4
+#define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_B
+#define AUDIO_STATE_TIMER GPTD4
+#define AUDIO_PIN GP9
+#define AUDIO_DAC_SAMPLE_MAX 4095U
+#define AUDIO_VOICE_DEFAULT butts_fader
+# define STARTUP_SONG SONG(W__NOTE(_DS0), W__NOTE(_DS1), H__NOTE(_DS2), H__NOTE(_DS3), Q__NOTE(_DS4), Q__NOTE(_DS5), E__NOTE(_DS6), E__NOTE(_DS7), S__NOTE(_DS8), Q__NOTE(_GS0))
+# define GOODBYE_SONG SONG(H__NOTE(_DS4), H__NOTE(_DS3), W__NOTE(_DS1))
+# define DEFAULT_LAYER_SONGS \
+ { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND) }
+#endif
+
+#ifdef HAPTIC_ENABLE
+#define DRV2605L_FB_ERM_LRA 1
+#define DRV2605L_FB_BRAKEFACTOR 3
+#define DRV2605L_FB_LOOPGAIN 1
+#define DRV2605L_RATED_VOLTAGE 2
+#define DRV2605L_V_PEAK 2.8
+#define DRV2605L_V_RMS 2.0
+#define DRV2605L_F_LRA 150
+#define DRV2605L_DRV_GREETING alert_750ms
+#define DRV2605L_DEFAULT_MODE 4
+#endif
+
+#ifdef POINTING_DEVICE_ENABLE
+# define POINTING_DEVICE_SCLK_PIN GP3
+# define POINTING_DEVICE_SDIO_PIN GP2
+# define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+# define AUTO_MOUSE_DELAY 300
+#endif
diff --git a/keyboards/electronlab/klor/halconf.h b/keyboards/electronlab/klor/halconf.h
new file mode 100644
index 00000000000..17c85e57599
--- /dev/null
+++ b/keyboards/electronlab/klor/halconf.h
@@ -0,0 +1,11 @@
+// Copyright 2022 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/electronlab/klor/keyboard.json b/keyboards/electronlab/klor/keyboard.json
new file mode 100644
index 00000000000..86eeeb20730
--- /dev/null
+++ b/keyboards/electronlab/klor/keyboard.json
@@ -0,0 +1,372 @@
+{
+ "manufacturer": "ElectronLab",
+ "keyboard_name": "KLOR",
+ "maintainer": "Lefuneste83",
+ "bootmagic": {
+ "matrix": [0, 1]
+ },
+ "development_board": "elite_pi",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP28", "pin_b": "GP29", "resolution": 2}
+ ]
+ },
+ "features": {
+ "audio": true,
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "haptic": true,
+ "mousekey": true,
+ "oled": true,
+ "pointing_device": false,
+ "rgb_matrix": true
+ },
+ "audio": {
+ "default": {
+ "on": true,
+ "clicky": true
+ },
+ "driver": "pwm_hardware",
+ "voices": true
+ },
+ "haptic": {
+ "driver": "drv2605l"
+ },
+ "matrix_pins": {
+ "cols": ["GP27", "GP26", "GP22", "GP20", "GP23", "GP21"],
+ "rows": ["GP5", "GP6", "GP7", "GP8"]
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "flower_blooming": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "riverflow": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "starlight": true,
+ "starlight_dual_hue": true,
+ "starlight_dual_sat": true,
+ "typing_heatmap": true
+ },
+ "default": {
+ "animation": "breathing",
+ "on": true,
+ "hue": 128
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 1], "x": 13, "y": 17, "flags": 4},
+ {"matrix": [0, 2], "x": 29, "y": 7, "flags": 4},
+ {"matrix": [0, 3], "x": 46, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 60, "y": 6, "flags": 4},
+ {"matrix": [0, 5], "x": 75, "y": 8, "flags": 4},
+ {"matrix": [4, 5], "x": 149, "y": 8, "flags": 4},
+ {"matrix": [4, 4], "x": 163, "y": 6, "flags": 4},
+ {"matrix": [4, 3], "x": 178, "y": 0, "flags": 4},
+ {"matrix": [4, 2], "x": 195, "y": 7, "flags": 4},
+ {"matrix": [4, 1], "x": 206, "y": 42, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 28, "flags": 1},
+ {"matrix": [1, 1], "x": 15, "y": 30, "flags": 4},
+ {"matrix": [1, 2], "x": 30, "y": 20, "flags": 4},
+ {"matrix": [1, 3], "x": 46, "y": 12, "flags": 4},
+ {"matrix": [1, 4], "x": 60, "y": 19, "flags": 4},
+ {"matrix": [1, 5], "x": 75, "y": 21, "flags": 4},
+ {"matrix": [5, 5], "x": 149, "y": 21, "flags": 4},
+ {"matrix": [5, 4], "x": 163, "y": 19, "flags": 4},
+ {"matrix": [5, 3], "x": 178, "y": 12, "flags": 4},
+ {"matrix": [5, 2], "x": 194, "y": 20, "flags": 4},
+ {"matrix": [5, 1], "x": 209, "y": 30, "flags": 4},
+ {"matrix": [5, 0], "x": 224, "y": 28, "flags": 1},
+ {"matrix": [2, 0], "x": 3, "y": 41, "flags": 1},
+ {"matrix": [2, 1], "x": 17, "y": 42, "flags": 4},
+ {"matrix": [2, 2], "x": 31, "y": 33, "flags": 4},
+ {"matrix": [2, 3], "x": 46, "y": 25, "flags": 4},
+ {"matrix": [2, 4], "x": 60, "y": 32, "flags": 4},
+ {"matrix": [2, 5], "x": 75, "y": 34, "flags": 4},
+ {"matrix": [6, 5], "x": 149, "y": 34, "flags": 4},
+ {"matrix": [6, 4], "x": 163, "y": 32, "flags": 4},
+ {"matrix": [6, 3], "x": 178, "y": 25, "flags": 4},
+ {"matrix": [6, 2], "x": 193, "y": 33, "flags": 4},
+ {"matrix": [6, 1], "x": 211, "y": 17, "flags": 4},
+ {"matrix": [6, 0], "x": 221, "y": 41, "flags": 1},
+ {"matrix": [3, 1], "x": 58, "y": 48, "flags": 1},
+ {"matrix": [3, 2], "x": 74, "y": 49, "flags": 1},
+ {"matrix": [3, 3], "x": 89, "y": 54, "flags": 1},
+ {"matrix": [3, 4], "x": 102, "y": 63, "flags": 1},
+ {"matrix": [7, 4], "x": 122, "y": 63, "flags": 1},
+ {"matrix": [7, 3], "x": 135, "y": 54, "flags": 1},
+ {"matrix": [7, 2], "x": 150, "y": 49, "flags": 1},
+ {"matrix": [7, 1], "x": 166, "y": 48, "flags": 1}
+ ],
+ "split_count": [21, 21],
+ "led_process_limit": 10,
+ "sleep": true,
+ "timeout": 120000,
+ "hue_steps": 3
+ },
+ "split": {
+ "enabled": true,
+ "bootmagic": {
+ "matrix": [4, 1]
+ },
+ "serial": {
+ "driver": "vendor",
+ "pin": "GP1"
+ },
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "GP29", "pin_b": "GP28", "resolution": 2}
+ ]
+ }
+ },
+ "transport": {
+ "sync": {
+ "activity": true,
+ "detected_os": true,
+ "haptic": true,
+ "indicators": true,
+ "layer_state": true,
+ "matrix_state": true,
+ "modifiers": true,
+ "oled": true
+ }
+ },
+ },
+ "url": "https://github.com/Lefuneste83/KLOR",
+ "usb": {
+ "device_version": "1.4.0",
+ "pid": "0x0001",
+ "vid": "0x3A3C"
+ },
+ "ws2812": {
+ "pin": "GP0",
+ "driver": "vendor"
+ },
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_polydactyl"
+ },
+ "layouts": {
+ "LAYOUT_polydactyl": {
+ "layout": [
+ {"label": "L01", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "L02", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "L04", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "L05", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "R01", "matrix": [4, 5], "x": 9, "y": 0},
+ {"label": "R02", "matrix": [4, 4], "x": 10, "y": 0},
+ {"label": "R03", "matrix": [4, 3], "x": 11, "y": 0},
+ {"label": "R04", "matrix": [4, 2], "x": 12, "y": 0},
+ {"label": "R05", "matrix": [4, 1], "x": 13, "y": 0},
+ {"label": "L10", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "L11", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "L12", "matrix": [1, 2], "x": 2, "y": 1},
+ {"label": "L13", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "L14", "matrix": [1, 4], "x": 4, "y": 1},
+ {"label": "L15", "matrix": [1, 5], "x": 5, "y": 1},
+ {"label": "R10", "matrix": [5, 5], "x": 9, "y": 1},
+ {"label": "R11", "matrix": [5, 4], "x": 10, "y": 1},
+ {"label": "R12", "matrix": [5, 3], "x": 11, "y": 1},
+ {"label": "R13", "matrix": [5, 2], "x": 12, "y": 1},
+ {"label": "R14", "matrix": [5, 1], "x": 13, "y": 1},
+ {"label": "R15", "matrix": [5, 0], "x": 14, "y": 1},
+ {"label": "L20", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "L21", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "L22", "matrix": [2, 2], "x": 2, "y": 2},
+ {"label": "L23", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "L24", "matrix": [2, 4], "x": 4, "y": 2},
+ {"label": "L25", "matrix": [2, 5], "x": 5, "y": 2},
+ {"label": "L35", "matrix": [3, 5], "x": 6, "y": 2},
+ {"label": "R30", "matrix": [7, 5], "x": 8, "y": 2},
+ {"label": "R20", "matrix": [6, 5], "x": 9, "y": 2},
+ {"label": "R21", "matrix": [6, 4], "x": 10, "y": 2},
+ {"label": "R22", "matrix": [6, 3], "x": 11, "y": 2},
+ {"label": "R23", "matrix": [6, 2], "x": 12, "y": 2},
+ {"label": "R24", "matrix": [6, 1], "x": 13, "y": 2},
+ {"label": "R25", "matrix": [6, 0], "x": 14, "y": 2},
+ {"label": "L31", "matrix": [3, 1], "x": 2, "y": 3},
+ {"label": "L32", "matrix": [3, 2], "x": 3, "y": 3},
+ {"label": "L33", "matrix": [3, 3], "x": 4, "y": 3},
+ {"label": "L34", "matrix": [3, 4], "x": 5, "y": 3},
+ {"label": "R31", "matrix": [7, 4], "x": 9, "y": 3},
+ {"label": "R32", "matrix": [7, 3], "x": 10, "y": 3},
+ {"label": "R33", "matrix": [7, 2], "x": 11, "y": 3},
+ {"label": "R34", "matrix": [7, 1], "x": 12, "y": 3}
+ ]
+ },
+ "LAYOUT_konrad": {
+ "layout": [
+ {"label": "L01", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "L02", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "L04", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "L05", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "R01", "matrix": [4, 5], "x": 9, "y": 0},
+ {"label": "R02", "matrix": [4, 4], "x": 10, "y": 0},
+ {"label": "R03", "matrix": [4, 3], "x": 11, "y": 0},
+ {"label": "R04", "matrix": [4, 2], "x": 12, "y": 0},
+ {"label": "R05", "matrix": [4, 1], "x": 13, "y": 0},
+ {"label": "L10", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "L11", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "L12", "matrix": [1, 2], "x": 2, "y": 1},
+ {"label": "L13", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "L14", "matrix": [1, 4], "x": 4, "y": 1},
+ {"label": "L15", "matrix": [1, 5], "x": 5, "y": 1},
+ {"label": "R10", "matrix": [5, 5], "x": 9, "y": 1},
+ {"label": "R11", "matrix": [5, 4], "x": 10, "y": 1},
+ {"label": "R12", "matrix": [5, 3], "x": 11, "y": 1},
+ {"label": "R13", "matrix": [5, 2], "x": 12, "y": 1},
+ {"label": "R14", "matrix": [5, 1], "x": 13, "y": 1},
+ {"label": "R15", "matrix": [5, 0], "x": 14, "y": 1},
+ {"label": "L20", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "L21", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "L22", "matrix": [2, 2], "x": 2, "y": 2},
+ {"label": "L23", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "L24", "matrix": [2, 4], "x": 4, "y": 2},
+ {"label": "L25", "matrix": [2, 5], "x": 5, "y": 2},
+ {"label": "L35", "matrix": [3, 5], "x": 6, "y": 2},
+ {"label": "R30", "matrix": [7, 5], "x": 8, "y": 2},
+ {"label": "R20", "matrix": [6, 5], "x": 9, "y": 2},
+ {"label": "R21", "matrix": [6, 4], "x": 10, "y": 2},
+ {"label": "R22", "matrix": [6, 3], "x": 11, "y": 2},
+ {"label": "R23", "matrix": [6, 2], "x": 12, "y": 2},
+ {"label": "R24", "matrix": [6, 1], "x": 13, "y": 2},
+ {"label": "R25", "matrix": [6, 0], "x": 14, "y": 2},
+ {"label": "L31", "matrix": [3, 1], "x": 2, "y": 3},
+ {"label": "L32", "matrix": [3, 2], "x": 3, "y": 3},
+ {"label": "L33", "matrix": [3, 3], "x": 4, "y": 3},
+ {"label": "R32", "matrix": [7, 3], "x": 10, "y": 3},
+ {"label": "R33", "matrix": [7, 2], "x": 11, "y": 3},
+ {"label": "R34", "matrix": [7, 1], "x": 12, "y": 3}
+ ]
+ },
+ "LAYOUT_saegewerk": {
+ "layout": [
+ {"label": "L01", "matrix": [0, 1], "x": 0, "y": 0},
+ {"label": "L02", "matrix": [0, 2], "x": 1, "y": 0},
+ {"label": "L03", "matrix": [0, 3], "x": 2, "y": 0},
+ {"label": "L04", "matrix": [0, 4], "x": 3, "y": 0},
+ {"label": "L05", "matrix": [0, 5], "x": 4, "y": 0},
+ {"label": "R01", "matrix": [4, 5], "x": 8, "y": 0},
+ {"label": "R02", "matrix": [4, 4], "x": 9, "y": 0},
+ {"label": "R03", "matrix": [4, 3], "x": 10, "y": 0},
+ {"label": "R04", "matrix": [4, 2], "x": 11, "y": 0},
+ {"label": "R05", "matrix": [4, 1], "x": 12, "y": 0},
+ {"label": "L11", "matrix": [1, 1], "x": 0, "y": 1},
+ {"label": "L12", "matrix": [1, 2], "x": 1, "y": 1},
+ {"label": "L13", "matrix": [1, 3], "x": 2, "y": 1},
+ {"label": "L14", "matrix": [1, 4], "x": 3, "y": 1},
+ {"label": "L15", "matrix": [1, 5], "x": 4, "y": 1},
+ {"label": "R10", "matrix": [5, 5], "x": 8, "y": 1},
+ {"label": "R11", "matrix": [5, 4], "x": 9, "y": 1},
+ {"label": "R12", "matrix": [5, 3], "x": 10, "y": 1},
+ {"label": "R13", "matrix": [5, 2], "x": 11, "y": 1},
+ {"label": "R14", "matrix": [5, 1], "x": 12, "y": 1},
+ {"label": "L21", "matrix": [2, 1], "x": 0, "y": 2},
+ {"label": "L22", "matrix": [2, 2], "x": 1, "y": 2},
+ {"label": "L23", "matrix": [2, 3], "x": 2, "y": 2},
+ {"label": "L24", "matrix": [2, 4], "x": 3, "y": 2},
+ {"label": "L25", "matrix": [2, 5], "x": 4, "y": 2},
+ {"label": "L35", "matrix": [3, 5], "x": 5, "y": 2},
+ {"label": "R30", "matrix": [7, 5], "x": 7, "y": 2},
+ {"label": "R20", "matrix": [6, 5], "x": 8, "y": 2},
+ {"label": "R21", "matrix": [6, 4], "x": 9, "y": 2},
+ {"label": "R22", "matrix": [6, 3], "x": 10, "y": 2},
+ {"label": "R23", "matrix": [6, 2], "x": 11, "y": 2},
+ {"label": "R24", "matrix": [6, 1], "x": 12, "y": 2},
+ {"label": "L31", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "L32", "matrix": [3, 2], "x": 2, "y": 3},
+ {"label": "L33", "matrix": [3, 3], "x": 3, "y": 3},
+ {"label": "R32", "matrix": [7, 3], "x": 9, "y": 3},
+ {"label": "R33", "matrix": [7, 2], "x": 10, "y": 3},
+ {"label": "R34", "matrix": [7, 1], "x": 11, "y": 3}
+ ]
+ },
+ "LAYOUT_yubitsume": {
+ "layout": [
+ {"label": "L01", "matrix": [0, 1], "x": 0, "y": 0},
+ {"label": "L02", "matrix": [0, 2], "x": 1, "y": 0},
+ {"label": "L03", "matrix": [0, 3], "x": 2, "y": 0},
+ {"label": "L04", "matrix": [0, 4], "x": 3, "y": 0},
+ {"label": "L05", "matrix": [0, 5], "x": 4, "y": 0},
+ {"label": "R01", "matrix": [4, 5], "x": 8, "y": 0},
+ {"label": "R02", "matrix": [4, 4], "x": 9, "y": 0},
+ {"label": "R03", "matrix": [4, 3], "x": 10, "y": 0},
+ {"label": "R04", "matrix": [4, 2], "x": 11, "y": 0},
+ {"label": "R05", "matrix": [4, 1], "x": 12, "y": 0},
+ {"label": "L11", "matrix": [1, 1], "x": 0, "y": 1},
+ {"label": "L12", "matrix": [1, 2], "x": 1, "y": 1},
+ {"label": "L13", "matrix": [1, 3], "x": 2, "y": 1},
+ {"label": "L14", "matrix": [1, 4], "x": 3, "y": 1},
+ {"label": "L15", "matrix": [1, 5], "x": 4, "y": 1},
+ {"label": "R10", "matrix": [5, 5], "x": 8, "y": 1},
+ {"label": "R11", "matrix": [5, 4], "x": 9, "y": 1},
+ {"label": "R12", "matrix": [5, 3], "x": 10, "y": 1},
+ {"label": "R13", "matrix": [5, 2], "x": 11, "y": 1},
+ {"label": "R14", "matrix": [5, 1], "x": 12, "y": 1},
+ {"label": "L21", "matrix": [2, 1], "x": 0, "y": 2},
+ {"label": "L22", "matrix": [2, 2], "x": 1, "y": 2},
+ {"label": "L23", "matrix": [2, 3], "x": 2, "y": 2},
+ {"label": "L24", "matrix": [2, 4], "x": 3, "y": 2},
+ {"label": "L25", "matrix": [2, 5], "x": 4, "y": 2},
+ {"label": "L35", "matrix": [3, 5], "x": 5, "y": 2},
+ {"label": "R30", "matrix": [7, 5], "x": 7, "y": 2},
+ {"label": "R20", "matrix": [6, 5], "x": 8, "y": 2},
+ {"label": "R21", "matrix": [6, 4], "x": 9, "y": 2},
+ {"label": "R22", "matrix": [6, 3], "x": 10, "y": 2},
+ {"label": "R23", "matrix": [6, 2], "x": 11, "y": 2},
+ {"label": "R24", "matrix": [6, 1], "x": 12, "y": 2},
+ {"label": "L31", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "L32", "matrix": [3, 2], "x": 2, "y": 3},
+ {"label": "L33", "matrix": [3, 3], "x": 3, "y": 3},
+ {"label": "L34", "matrix": [3, 4], "x": 4, "y": 3},
+ {"label": "R31", "matrix": [7, 4], "x": 8, "y": 3},
+ {"label": "R32", "matrix": [7, 3], "x": 9, "y": 3},
+ {"label": "R33", "matrix": [7, 2], "x": 10, "y": 3},
+ {"label": "R34", "matrix": [7, 1], "x": 11, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/electronlab/klor/keymaps/default/config.h b/keyboards/electronlab/klor/keymaps/default/config.h
new file mode 100644
index 00000000000..28d64007a30
--- /dev/null
+++ b/keyboards/electronlab/klor/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+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
+
+// Auto Shift
+#define NO_AUTO_SHIFT_ALPHA
+#define AUTO_SHIFT_TIMEOUT QUICK_TAP_TERM
+#define AUTO_SHIFT_NO_SETUP
diff --git a/keyboards/electronlab/klor/keymaps/default/keymap.c b/keyboards/electronlab/klor/keymaps/default/keymap.c
new file mode 100644
index 00000000000..def0021d78f
--- /dev/null
+++ b/keyboards/electronlab/klor/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+/*
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum klor_layers {
+ _QWERTY,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_all(
+ 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
+ ),
+};
diff --git a/keyboards/electronlab/klor/keymaps/electronlab/config.h b/keyboards/electronlab/klor/keymaps/electronlab/config.h
new file mode 100644
index 00000000000..5ba26793966
--- /dev/null
+++ b/keyboards/electronlab/klor/keymaps/electronlab/config.h
@@ -0,0 +1,23 @@
+/*
+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
+
+// Auto Shift
+#define NO_AUTO_SHIFT_ALPHA
+#define AUTO_SHIFT_TIMEOUT TAPPING_TERM
+#define AUTO_SHIFT_NO_SETUP
diff --git a/keyboards/electronlab/klor/keymaps/electronlab/keymap.c b/keyboards/electronlab/klor/keymaps/electronlab/keymap.c
new file mode 100644
index 00000000000..3adb19aa72f
--- /dev/null
+++ b/keyboards/electronlab/klor/keymaps/electronlab/keymap.c
@@ -0,0 +1,460 @@
+/*
+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 .
+*/
+#include QMK_KEYBOARD_H
+
+enum klor_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ OS_SWAP,
+ MAKE_H,
+};
+
+#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)
+
+#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)
+
+#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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_polydactyl(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+LSFT_T(KC_TAB), KC_A, KC_S, KC_D, LSFT_T(KC_F),KC_G, KC_H, RSFT_T(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
+ ),
+
+
+ [_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
+ ),
+
+ [_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
+ ),
+
+ [_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
+ ),
+
+};
+
+#ifdef OLED_ENABLE
+
+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};
+
+ bool dynamic_macro_record_start_user(int8_t direction) {
+ dmacro_num = 1;
+ return false;
+ }
+
+ bool dynamic_macro_record_end_user(int8_t direction) {
+ dmacro_num = 2;
+ dmacro_timer = timer_read();
+ return false;
+ }
+
+ bool dynamic_macro_play_user(int8_t direction) {
+ dmacro_num = 3;
+ dmacro_timer = timer_read();
+ return false;
+ }
+#endif
+
+
+void matrix_scan_user(void) {
+ #ifdef DYNAMIC_MACRO_ENABLE
+ 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
+}
+
+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
+
+ oled_write_ln_P(sep_v, false);
+
+ if (keymap_config.swap_lctl_lgui) {
+ oled_write_P(os_m_1, false);
+ } else {
+ oled_write_P(os_w_1, false);
+ }
+
+ 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);
+ } else {
+ oled_write_P(os_w_2, false);
+ }
+
+ oled_write_P(sep_h1, false);
+ oled_write_P(face_2, false);
+ oled_write_P(sep_h1, false);
+ oled_write_P(face_3, false);
+
+ led_t led_usb_state = host_keyboard_led_state();
+
+ if (led_usb_state.num_lock) {
+ oled_write_P(n_lock, false);
+ } else {
+ oled_write_P(b_lock, false);
+ }
+ if (led_usb_state.caps_lock) {
+ oled_write_P(c_lock, false);
+ } else {
+ oled_write_P(b_lock, false);
+ }
+ if (led_usb_state.scroll_lock) {
+ oled_write_P(s_lock, false);
+ } else {
+ oled_write_P(b_lock, false);
+ }
+
+ 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
+ if (is_audio_on()) {
+ oled_write_P(aud_en, false);
+ } else {
+ oled_write_P(aud_di, false);
+ }
+ #endif
+
+ #ifdef HAPTIC_ENABLE
+ if (haptic_get_enable()) {
+ oled_write_P(hap_en, false);
+ } else {
+ oled_write_P(hap_di, false);
+ }
+
+ #endif
+}
+
+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 update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ if (is_keyboard_master()) {
+
+ #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
+
+ oled_write_ln(o_text, false);
+ render_os_lock_status();
+
+ } else {
+
+ 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
+
+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;
+ }
+}
+
+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;
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(mac_song);
+ #endif
+ }
+ else {
+ keymap_config.swap_lctl_lgui = false;
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(winxp_song);
+ #endif
+ }
+
+ eeconfig_update_keymap(keymap_config.raw);
+ clear_keyboard();
+ return false;
+ }
+
+
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+
+ 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;
+
+ case KC_MPLY:
+ if (record->event.pressed) {
+ }
+ break;
+ }
+ return true;
+}
+
+#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
+
+#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
diff --git a/keyboards/electronlab/klor/keymaps/electronlab/rules.mk b/keyboards/electronlab/klor/keymaps/electronlab/rules.mk
new file mode 100644
index 00000000000..a1c5d11a801
--- /dev/null
+++ b/keyboards/electronlab/klor/keymaps/electronlab/rules.mk
@@ -0,0 +1,4 @@
+ENCODER_MAP_ENABLE = yes
+DYNAMIC_MACRO_ENABLE = yes
+TRI_LAYER_ENABLE = yes
+SPLIT_HAPTIC_ENABLE = yes
diff --git a/keyboards/electronlab/klor/klor.c b/keyboards/electronlab/klor/klor.c
new file mode 100644
index 00000000000..76a6a42e161
--- /dev/null
+++ b/keyboards/electronlab/klor/klor.c
@@ -0,0 +1,57 @@
+/* Copyright 2022
+ * GEIST @geigeigeist
+ *
+ * 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 .
+ */
+
+#include "quantum.h"
+
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return OLED_ROTATION_180;
+}
+
+#ifdef SWAP_HANDS_ENABLE
+
+__attribute__ ((weak))
+const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] =
+
+/* ORIGINAL LAYOUT
+{ // LEFT
+ { {0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0} }, \
+ { {0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1} }, \
+ { {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2} }, \
+ { {0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3} }, \
+ // RIGHT
+ { {0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4} }, \
+ { {0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5} }, \
+ { {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6} }, \
+ { {0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7} }, \
+};
+*/
+
+// MIRRORED LAYOUT
+{ // LEFT
+ { {0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4} }, \
+ { {0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5} }, \
+ { {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6} }, \
+ { {0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7} }, \
+ // RIGHT
+ { {0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0} }, \
+ { {0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1} }, \
+ { {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2} }, \
+ { {0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3} }, \
+};
+
+#endif //SWAP_HANDS_ENABLE
+
diff --git a/keyboards/electronlab/klor/lib/glcdfont.c b/keyboards/electronlab/klor/lib/glcdfont.c
new file mode 100644
index 00000000000..ecf3afc8509
--- /dev/null
+++ b/keyboards/electronlab/klor/lib/glcdfont.c
@@ -0,0 +1,245 @@
+/*
+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 .
+*/
+
+#include "progmem.h"
+
+static const unsigned char PROGMEM font[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
+ 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
+ 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
+ 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
+ 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
+ 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
+ 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
+ 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
+ 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
+ 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
+ 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
+ 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
+ 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
+ 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
+ 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
+ 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
+ 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
+ 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
+ 0x94, 0xB6, 0xFF, 0xB6, 0x94, 0x00,
+ 0x08, 0x0C, 0x7E, 0x0C, 0x08, 0x00,
+ 0x10, 0x30, 0x7E, 0x30, 0x10, 0x00,
+ 0x08, 0x08, 0x3E, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x3E, 0x08, 0x08, 0x00,
+ 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
+ 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
+ 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
+ 0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00,
+ 0x2E, 0x2A, 0x7F, 0x2A, 0x3A, 0x00,
+ 0x20, 0x12, 0x08, 0x24, 0x02, 0x00,
+ 0x37, 0x49, 0x49, 0x37, 0x50, 0x00,
+ 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
+ 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
+ 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
+ 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
+ 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
+ 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+ 0x7F, 0x51, 0x49, 0x45, 0x7F, 0x00,
+ 0x08, 0x04, 0x02, 0x7F, 0x00, 0x00,
+ 0x71, 0x49, 0x49, 0x49, 0x4F, 0x00,
+ 0x41, 0x41, 0x49, 0x49, 0x77, 0x00,
+ 0x0F, 0x10, 0x10, 0x10, 0x7F, 0x00,
+ 0x4F, 0x49, 0x49, 0x49, 0x71, 0x00,
+ 0x7E, 0x49, 0x49, 0x49, 0x70, 0x00,
+ 0x01, 0x01, 0x71, 0x09, 0x07, 0x00,
+ 0x77, 0x49, 0x49, 0x49, 0x77, 0x00,
+ 0x07, 0x49, 0x49, 0x49, 0x3F, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
+ 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
+ 0x01, 0x01, 0x59, 0x09, 0x0F, 0x00,
+ 0x7F, 0x41, 0x5D, 0x59, 0x4F, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x7F, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x76, 0x00,
+ 0x7F, 0x41, 0x41, 0x41, 0x41, 0x00,
+ 0x7F, 0x41, 0x41, 0x41, 0x7E, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x49, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x09, 0x00,
+ 0x7F, 0x41, 0x41, 0x49, 0x7B, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
+ 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
+ 0x70, 0x40, 0x40, 0x40, 0x7F, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x77, 0x00,
+ 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x7F, 0x01, 0x1F, 0x01, 0x7F, 0x00,
+ 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
+ 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x0F, 0x00,
+ 0x7F, 0x41, 0x71, 0x41, 0x7F, 0x00,
+ 0x7F, 0x09, 0x09, 0x19, 0x6F, 0x00,
+ 0x47, 0x49, 0x49, 0x49, 0x79, 0x00,
+ 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00,
+ 0x7F, 0x40, 0x40, 0x40, 0x7F, 0x00,
+ 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
+ 0x7F, 0x40, 0x7F, 0x40, 0x7F, 0x00,
+ 0x77, 0x08, 0x08, 0x08, 0x77, 0x00,
+ 0x4F, 0x48, 0x48, 0x48, 0x7F, 0x00,
+ 0x61, 0x51, 0x49, 0x45, 0x43, 0x00,
+ 0x00, 0x7F, 0x41, 0x41, 0x00, 0x00,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+ 0x00, 0x41, 0x41, 0x7F, 0x00, 0x00,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x07, 0x08, 0x00, 0x00,
+ 0x60, 0x54, 0x54, 0x54, 0x7C, 0x00,
+ 0x7F, 0x44, 0x44, 0x44, 0x78, 0x00,
+ 0x7C, 0x44, 0x44, 0x44, 0x44, 0x00,
+ 0x78, 0x44, 0x44, 0x44, 0x7F, 0x00,
+ 0x7C, 0x54, 0x54, 0x54, 0x5C, 0x00,
+ 0x08, 0x7F, 0x09, 0x09, 0x09, 0x00,
+ 0x38, 0xA4, 0xA4, 0xA4, 0xFC, 0x00,
+ 0x7F, 0x04, 0x04, 0x04, 0x78, 0x00,
+ 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00,
+ 0x70, 0x40, 0x40, 0x7D, 0x00, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x76, 0x00,
+ 0x00, 0x00, 0x7F, 0x40, 0x00, 0x00,
+ 0x7C, 0x04, 0x7C, 0x04, 0x7C, 0x00,
+ 0x7C, 0x04, 0x04, 0x04, 0x78, 0x00,
+ 0x7C, 0x44, 0x44, 0x44, 0x7C, 0x00,
+ 0xFC, 0x24, 0x24, 0x24, 0x38, 0x00,
+ 0x38, 0x24, 0x24, 0x24, 0xFC, 0x00,
+ 0x7C, 0x04, 0x04, 0x04, 0x04, 0x00,
+ 0x5C, 0x54, 0x54, 0x54, 0x74, 0x00,
+ 0x04, 0x04, 0x7F, 0x04, 0x04, 0x00,
+ 0x7C, 0x40, 0x40, 0x40, 0x7C, 0x00,
+ 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
+ 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x00,
+ 0x6C, 0x10, 0x10, 0x10, 0x6C, 0x00,
+ 0xBC, 0xA0, 0xA0, 0xA0, 0xFC, 0x00,
+ 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
+ 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
+ 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
+ 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0xF8,
+ 0xF0, 0xFE, 0xFE, 0x9E, 0xCE, 0xCE,
+ 0x9E, 0xFE, 0xFC, 0xFC, 0xFC, 0x9D,
+ 0xCD, 0xCD, 0x9D, 0xFF, 0xFE, 0xF0,
+ 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xE0, 0x10, 0x08, 0x04, 0x02, 0x02,
+ 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x02, 0x02, 0x02, 0x04, 0x08,
+ 0x10, 0xE0, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF,
+ 0x7F, 0x51, 0x55, 0x55, 0x45, 0x7F,
+ 0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00,
+ 0x7F, 0x41, 0x7B, 0x77, 0x41, 0x7F,
+ 0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00,
+ 0x7F, 0x41, 0x5D, 0x5D, 0x5D, 0x7F,
+ 0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00,
+ 0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0,
+ 0xE6, 0xF7, 0xF3, 0xF0, 0x60, 0x00,
+ 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00,
+ 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00,
+ 0xF8, 0x1C, 0xDE, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0x1F, 0xDE, 0x1C, 0xF8, 0x00,
+ 0xC0, 0xE2, 0xB4, 0xF8, 0xF8, 0xF8,
+ 0xF8, 0xF8, 0xB4, 0xE2, 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, 0x07,
+ 0x0F, 0x3F, 0x7B, 0xF3, 0xE3, 0xC7,
+ 0xC7, 0x8F, 0x9F, 0x9F, 0xBF, 0xBF,
+ 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0x00, 0x00, 0xC0, 0x30, 0x0C,
+ 0x33, 0xC0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+ 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00,
+ 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x38, 0xC8, 0x08, 0x08, 0x0F,
+ 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00,
+ 0x78, 0x00, 0x00, 0x7E, 0x00, 0x00,
+ 0x24, 0x24, 0x12, 0x12, 0x24, 0x24,
+ 0x48, 0x48, 0x24, 0x24, 0x12, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x3F,
+ 0x3F, 0x7F, 0x7F, 0x38, 0x10, 0x00,
+ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00,
+ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00,
+ 0x0F, 0x14, 0x21, 0x40, 0x45, 0x41,
+ 0x45, 0x40, 0x21, 0x14, 0x0F, 0x00,
+ 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D,
+ 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3F, 0x0C, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x0C, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x01, 0x02, 0x04, 0x08, 0x10, 0x10,
+ 0x10, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x10, 0x10, 0x10, 0x08, 0x04,
+ 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x0C, 0x30,
+ 0x40, 0x00, 0x00, 0x40, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x40, 0x00, 0x00,
+ 0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00,
+ 0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x00,
+ 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/keyboards/electronlab/klor/mcuconf.h b/keyboards/electronlab/klor/mcuconf.h
new file mode 100644
index 00000000000..30b31f8b461
--- /dev/null
+++ b/keyboards/electronlab/klor/mcuconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2020 Nick Brassel (tzarc)
+ *
+ * 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 3 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
+
+#include_next
+
+#undef RP_PWM_USE_PWM4
+#define RP_PWM_USE_PWM4 TRUE
diff --git a/keyboards/electronlab/klor/readme.md b/keyboards/electronlab/klor/readme.md
new file mode 100644
index 00000000000..e09f04a12d4
--- /dev/null
+++ b/keyboards/electronlab/klor/readme.md
@@ -0,0 +1,42 @@
+
+
+# Electronlab KLOR split keyboard
+
+```
+█ █ █ ▄▄▄▀▀▀▀▀▀▄▄▄ █▀▀▀▀▀▀▀▀▀▀█
+█ █ █ ▄▀ ▀▄ █ █
+█ █ █ ▄▀ ▀▄ █ █
+█ █ █ █ █ █ █
+█ █ █ █ █ █ █
+█ █ █ █ █ █▄▄▄▄▄▄▄▄▄▄█
+█ █ █ █ █ █ █ █
+█ █ █ █ █ █ █ █
+█ █ █ █ ▀▄ ▄▀ █ █
+██ █ █ ▀▄ ▄▀ █ █
+█ █ █▄▄▄▄▄▄▄▄ ▀▀▀▄▄▄▄▄▄▀▀▀ █ █
+```
+
+KLOR is 42 keys column-staggered split keyboard originaly made by @geigeigeist and forked by Lefuneste83 from Electronlab. It supports a per key RGB matrix, encoders, OLED displays, haptic feedback, audio, a Pixart Paw3204 trackball and four different layouts, through brake off parts.
+It's schematics are based on the Sofle, while the layout is based on the Yacc46.
+
+* Keyboard Maintainer: [Lefuneste83](https://github.com/Lefuneste83)
+* Hardware Supported: KLOR PCB from 1.3 onward
+* Hardware Availability: https://github.com/Lefuneste83/KLOR/tree/main/PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make electronlab/klor:default
+
+Flashing example for this keyboard:
+
+ make electronlab/klor:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,1) in the matrix for the left side and (4,1) in the matrix for the right side (usually the top left and top right) and plug in the keyboard half to USB
+* **Physical reset button**: Briefly press the button on the side of the PCB. A rapid double press will resart the keyboard half in bootloader mode.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`