6d4f8d896398dda1177aa73ec2110fc0e3e10729

Author
jack <jack@pngu.org>
Committer
GitHub <noreply@github.com>
Date

Message

[Keyboard] Add Klor (#24302)

Diff

This diff is truncated to protect this page.

  1diff --git a/keyboards/geigeigeist/klor/config.h b/keyboards/geigeigeist/klor/config.h
  2new file mode 100644
  3index 0000000000000000000000000000000000000000..2ece9b3d29e052d451c1787dea83c13383cb9133
  4--- /dev/null
  5+++ b/keyboards/geigeigeist/klor/config.h
  6@@ -0,0 +1,17 @@
  7+// Copyright 2024 QMK
  8+// SPDX-License-Identifier: GPL-2.0-or-later
  9+#pragma once
 10+
 11+#ifdef POINTING_DEVICE_ENABLE
 12+#    define POINTING_DEVICE_SCLK_PIN D0
 13+#    define POINTING_DEVICE_SDIO_PIN D1
 14+#endif
 15+
 16+#ifdef AUDIO_ENABLE
 17+#    define AUDIO_PIN B5
 18+#endif
 19+
 20+#ifdef OLED_ENABLE
 21+#    define OLED_DISPLAY_128X64
 22+#    define OLED_FONT_H "keyboards/geigeigeist/klor/glcdfont.c"
 23+#endif
 24diff --git a/keyboards/geigeigeist/klor/glcdfont.c b/keyboards/geigeigeist/klor/glcdfont.c
 25new file mode 100644
 26index 0000000000000000000000000000000000000000..3bab5d5081eba1d072371828bcbb72e0257fadf3
 27--- /dev/null
 28+++ b/keyboards/geigeigeist/klor/glcdfont.c
 29@@ -0,0 +1,16 @@
 30+// Copyright 2024 QMK
 31+// SPDX-License-Identifier: GPL-2.0-or-later
 32+
 33+#include "progmem.h"
 34+
 35+static const unsigned char PROGMEM font[] = {
 36diff --git a/keyboards/geigeigeist/klor/keyboard.json b/keyboards/geigeigeist/klor/keyboard.json
 37new file mode 100644
 38index 0000000000000000000000000000000000000000..a61c931dd9ef28331e6a8ac61487234640ee0908
 39--- /dev/null
 40+++ b/keyboards/geigeigeist/klor/keyboard.json
 41@@ -0,0 +1,167 @@
 42+{
 43+    "manufacturer": "Geigeigeist",
 44+    "keyboard_name": "Klor",
 45+    "maintainer": "waffle87",
 46+    "build": {
 47+        "lto": true
 48+    },
 49+    "development_board": "elite_c",
 50+    "diode_direction": "COL2ROW",
 51+    "encoder": {
 52+        "rotary": [
 53+            {"pin_a": "F5", "pin_b": "F4"}
 54+        ]
 55+    },
 56+    "features": {
 57+        "bootmagic": true,
 58+        "encoder": true,
 59+        "extrakey": true,
 60+        "haptic": true,
 61+        "mousekey": true,
 62+        "oled": true,
 63+        "pointing_device": false,
 64+        "rgb_matrix": true,
 65+        "audio": false
 66+    },
 67+    "haptic": {
 68+        "driver": "drv2605l"
 69+    },
 70+    "matrix_pins": {
 71+        "cols": ["F6", "F7", "B1", "B3", "B2", "B6"],
 72+        "rows": ["C6", "D7", "E6", "B4"]
 73+    },
 74+    "rgb_matrix": {
 75+        "driver": "ws2812",
 76+        "animations": {
 77+            "alphas_mods": true,
 78+            "band_sat": true,
 79+            "band_val": true,
 80+            "breathing": true,
 81+            "gradient_left_right": true,
 82+            "gradient_up_down": true
 83+        },
 84+        "layout": [
 85+            {"matrix": [3, 4], "x": 102, "y": 63, "flags": 1},
 86+            {"matrix": [3, 3], "x": 89, "y": 54, "flags": 1},
 87+            {"matrix": [3, 2], "x": 74, "y": 49, "flags": 1},
 88+            {"matrix": [2, 5], "x": 75, "y": 34, "flags": 4},
 89+            {"matrix": [1, 5], "x": 75, "y": 21, "flags": 4},
 90+            {"matrix": [0, 5], "x": 75, "y": 8, "flags": 4},
 91+            {"matrix": [0, 4], "x": 60, "y": 6, "flags": 4},
 92+            {"matrix": [1, 4], "x": 60, "y": 19, "flags": 4},
 93+            {"matrix": [2, 4], "x": 60, "y": 32, "flags": 4},
 94+            {"matrix": [3, 1], "x": 58, "y": 48, "flags": 1},
 95+            {"matrix": [2, 3], "x": 46, "y": 25, "flags": 4},
 96+            {"matrix": [1, 3], "x": 46, "y": 12, "flags": 4},
 97+            {"matrix": [0, 3], "x": 46, "y": 0, "flags": 4},
 98+            {"matrix": [0, 2], "x": 29, "y": 7, "flags": 4},
 99+            {"matrix": [1, 2], "x": 30, "y": 20, "flags": 4},
100+            {"matrix": [2, 2], "x": 31, "y": 33, "flags": 4},
101+            {"matrix": [2, 1], "x": 17, "y": 42, "flags": 4},
102+            {"matrix": [1, 1], "x": 15, "y": 30, "flags": 4},
103+            {"matrix": [0, 1], "x": 13, "y": 17, "flags": 4},
104+            {"matrix": [1, 0], "x": 0, "y": 28, "flags": 1},
105+            {"matrix": [2, 0], "x": 3, "y": 41, "flags": 1},
106+            {"matrix": [7, 4], "x": 122, "y": 63, "flags": 1},
107+            {"matrix": [7, 3], "x": 135, "y": 54, "flags": 1},
108+            {"matrix": [7, 2], "x": 150, "y": 49, "flags": 1},
109+            {"matrix": [6, 5], "x": 149, "y": 34, "flags": 4},
110+            {"matrix": [5, 5], "x": 149, "y": 21, "flags": 4},
111+            {"matrix": [4, 5], "x": 149, "y": 8, "flags": 4},
112+            {"matrix": [4, 4], "x": 163, "y": 6, "flags": 4},
113+            {"matrix": [5, 4], "x": 163, "y": 19, "flags": 4},
114+            {"matrix": [6, 4], "x": 163, "y": 32, "flags": 4},
115+            {"matrix": [7, 1], "x": 166, "y": 48, "flags": 1},
116+            {"matrix": [6, 3], "x": 178, "y": 25, "flags": 4},
117+            {"matrix": [5, 3], "x": 178, "y": 12, "flags": 4},
118+            {"matrix": [4, 3], "x": 178, "y": 0, "flags": 4},
119+            {"matrix": [4, 2], "x": 195, "y": 7, "flags": 4},
120+            {"matrix": [5, 2], "x": 194, "y": 20, "flags": 4},
121+            {"matrix": [6, 2], "x": 193, "y": 33, "flags": 4},
122+            {"matrix": [4, 1], "x": 206, "y": 42, "flags": 4},
123+            {"matrix": [5, 1], "x": 209, "y": 30, "flags": 4},
124+            {"matrix": [6, 1], "x": 211, "y": 17, "flags": 4},
125+            {"matrix": [5, 0], "x": 224, "y": 28, "flags": 1},
126+            {"matrix": [6, 0], "x": 221, "y": 41, "flags": 1}
127+        ],
128+        "split_count": [21, 21]
129+    },
130+    "split": {
131+        "enabled": true,
132+        "encoder": {
133+            "right": {
134+                "rotary": [
135+                    {"pin_a": "F4", "pin_b": "F5"}
136+                ]
137+            }
138+        },
139+        "serial": {
140+            "pin": "D2"
141diff --git a/keyboards/geigeigeist/klor/keymaps/default/keymap.json b/keyboards/geigeigeist/klor/keymaps/default/keymap.json
142new file mode 100644
143index 0000000000000000000000000000000000000000..cb9e5b4005973878c61ccbd3faa1c6948288f570
144--- /dev/null
145+++ b/keyboards/geigeigeist/klor/keymaps/default/keymap.json
146@@ -0,0 +1,13 @@
147+{
148+    "keyboard": "geigeigeist/klor",
149+    "keymap": "default",
150+    "layout": "LAYOUT",
151+    "layers": [
152+        [
153+                   "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T",                       "KC_Y", "KC_U", "KC_I",    "KC_O",   "KC_P",
154+        "KC_TAB",  "KC_A", "KC_S", "KC_D", "KC_F", "KC_G",                       "KC_H", "KC_J", "KC_K",    "KC_L",   "KC_SCLN", "KC_QUOT",
155+        "KC_DEL",  "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_RSFT",
156+                           "KC_LCTL", "KC_TRNS", "KC_SPC", "KC_LALT", "KC_LGUI", "KC_ENT", "KC_TRNS", "KC_BSPC"
157+        ]
158+    ]
159+}
160diff --git a/keyboards/geigeigeist/klor/klor.c b/keyboards/geigeigeist/klor/klor.c
161new file mode 100644
162index 0000000000000000000000000000000000000000..5676c974f0ef901d368b42cf8420251ebb495dfa
163--- /dev/null
164+++ b/keyboards/geigeigeist/klor/klor.c
165@@ -0,0 +1,103 @@
166+// Copyright 2024 QMK
167+// SPDX-License-Identifier: GPL-2.0-or-later
168+#include "quantum.h"
169+
170+#ifdef OLED_ENABLE
171+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
172+    return OLED_ROTATION_180;
173+}
174+
175+static const char PROGMEM klor_face[] = {
176+    // clang-format off
177+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
178+    0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
179+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0,
180+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
183+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
184+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
185+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
186+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
187+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
188+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
190+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
191+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
192+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
193+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
194+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
195+    0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
196+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
197+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
198+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0,
199+    0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
200+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
201+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
202+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff,
203+    0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
204+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
205+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
206+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
207+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
208+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
209+    // clang-format on
210+};
211+
212+void render_keyboard_status(void) {
213+    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};
214+    static const char PROGMEM sep_h1[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
215+    static const char PROGMEM sep_h2[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
216+    static const char PROGMEM face_1[] = {0x80, 0x81, 0x82, 0x83, 0x84, 0xE1, 0};
217+    static const char PROGMEM face_2[] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xE1, 0};
218+    static const char PROGMEM os_m_1[] = {0x95, 0x96, 0};
219+    static const char PROGMEM os_m_2[] = {0xB5, 0xB6, 0};
220+    static const char PROGMEM os_w_1[] = {0x97, 0x98, 0};
221+    static const char PROGMEM os_w_2[] = {0xB7, 0xB8, 0};
222+    static const char PROGMEM s_lock[] = {0x8F, 0x90, 0};
223+    static const char PROGMEM n_lock[] = {0x91, 0x92, 0};
224+    static const char PROGMEM c_lock[] = {0x93, 0x94, 0};
225+    static const char PROGMEM b_lock[] = {0xE1, 0xE1, 0};
226+    static const char PROGMEM hap_en[] = {0xB1, 0xB2, 0};
227+#    ifdef AUDIO_ENABLE
228+    static const char PROGMEM aud_en[] = {0xAF, 0xB0, 0};
229+    static const char PROGMEM aud_di[] = {0xCF, 0xD0, 0};
230+#    endif
231+    oled_write_ln_P(sep_v, false);
232+    oled_write_P(keymap_config.swap_lctl_lgui ? os_m_1 : os_w_1, false);
233+    oled_write_P(sep_h1, false);
234+    oled_write_P(face_1, false);
235+    oled_write_P(keymap_config.swap_lctl_lgui ? os_m_2 : os_w_2, false);
236+    oled_write_P(sep_h1, false);
237+    oled_write_P(face_2, false);
238+    oled_write_ln_P(sep_v, false);
239+
240+    led_t led_usb_state = host_keyboard_led_state();
241+    oled_write_P(led_usb_state.num_lock ? n_lock : b_lock, false);
242+    oled_write_P(led_usb_state.caps_lock ? c_lock : b_lock, false);
243+    oled_write_P(led_usb_state.scroll_lock ? s_lock : b_lock, false);
244+    oled_write_P(sep_h2, false);
245+
246+#    ifndef AUDIO_ENABLE
247+    oled_write_P(b_lock, false);
248+#    endif
249+    oled_write_P(b_lock, false);
250+
251+#    ifdef AUDIO_ENABLE
252+    oled_write_P(is_audio_on() ? aud_en : aud_di, false);
253+#    endif
254+    oled_write_P(hap_en, false);
255+}
256+
257+bool oled_task_kb(void) {
258+    if (!oled_task_user()) {
259+        return false;
260+    }
261+    if (is_keyboard_master()) {
262+        render_keyboard_status();
263+    } else {
264+        oled_write_raw_P(klor_face, sizeof(klor_face));
265diff --git a/keyboards/geigeigeist/klor/readme.md b/keyboards/geigeigeist/klor/readme.md
266new file mode 100644
267index 0000000000000000000000000000000000000000..905dc8c5b39faad427c5c3211c8982cd95d65c13
268--- /dev/null
269+++ b/keyboards/geigeigeist/klor/readme.md
270@@ -0,0 +1,26 @@
271+# Klor
272+
273+![keyboard_image](https://i.imgur.com/1cx62B2.jpeg)
274+
275+* Keyboard Maintainer: [waffle87](https://github.com/waffle87)
276+* Hardware Supported: Klor PCBs w/ Pro-Micro compatible microcontrollers
277+* Hardware Availability: [github:geigeigeist/klor](https://github.com/geigeigeist/klor)
278+
279+**Note**: Audio and Pointing Device features are disabled by default to conserve firmware space on AVR
280+
281+Make example for this keyboard (after setting up your build environment):
282+
283+    make geigeigeist/klor:default
284+
285+Flashing example for this keyboard:
286+
287+    make geigeigeist/klor:default:flash
288+
289diff --git a/keyboards/geigeigeist/klor/rules.mk b/keyboards/geigeigeist/klor/rules.mk
290new file mode 100644
291index 0000000000000000000000000000000000000000..5ff6500c9a87a34f38c2d2087ed4266ba90d50bc
292--- /dev/null
293+++ b/keyboards/geigeigeist/klor/rules.mk
294@@ -0,0 +1 @@
295+POINTING_DEVICE_DRIVER = paw3204