aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGautham Yerroju <gautham.yerroju@gmail.com>2020-06-13 01:18:33 -0700
committerGitHub <noreply@github.com>2020-06-13 01:18:33 -0700
commit2bfcb6bfc5766ede2b63041af3a163408caa6ad9 (patch)
treeee70359118c42e2ce29a59bbb4804f01a3fd8b0c
parent1f42071238c57aff1ec2d441fe82ae2df4a0853f (diff)
downloadqmk_firmware-2bfcb6bfc5766ede2b63041af3a163408caa6ad9.tar.gz
qmk_firmware-2bfcb6bfc5766ede2b63041af3a163408caa6ad9.zip
[Keymap] Add custom corne keymap (#9283)
* Add custom corne keymap * Clean up rules.mk * Clean up base layer on keymap.c * Clean up lower layer on keymap.c * Clean up raise layer on keymap.c * Clean up adjust layer in keymap.c
-rw-r--r--keyboards/crkbd/keymaps/gotham/README.md16
-rw-r--r--keyboards/crkbd/keymaps/gotham/config.h88
-rw-r--r--keyboards/crkbd/keymaps/gotham/glcdfont.c18
-rw-r--r--keyboards/crkbd/keymaps/gotham/keycodes.h28
-rw-r--r--keyboards/crkbd/keymaps/gotham/keymap.c143
-rw-r--r--keyboards/crkbd/keymaps/gotham/oled.c265
-rw-r--r--keyboards/crkbd/keymaps/gotham/rgb.c79
-rw-r--r--keyboards/crkbd/keymaps/gotham/rules.mk6
8 files changed, 643 insertions, 0 deletions
diff --git a/keyboards/crkbd/keymaps/gotham/README.md b/keyboards/crkbd/keymaps/gotham/README.md
new file mode 100644
index 000000000..23c1d4fdd
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/README.md
@@ -0,0 +1,16 @@
1# Gotham's custom CRKBD Layout
2
3My take on the 40% layout with programming in mind. Do read about the layers, it helps with forming a mental model to remember the keymap better than just memorization.
4
5## Layers
6- QWERTY: Base layer. The idea is to reduce thumb movement by placing commonly used keys and layers on resting thumb positions (center thumb keys). You might need to play around with TAPPING_TERM to find your perfect setting. Also, both Lower and Raise buttons appear on both halves for easy access (think of it as: middle thumb key is Lower, outer thumb key is Raise).
7- LOWER: Numbers, common symbols and navigation. Easiest layer to reach (middle thumb button on both halves). The nav is shaped as a T instead of an inverted T for a few reasons. First, Left and Right needed to be on the home row (since I use them a lot to navigate through code). But the Up key can't be on the top row because numbers occupy that space. So I moved the Up and Down keys one key down. It takes some getting used to, but I find this a great balance without separating the nav and number rows. The nav cluster also contains Home and End keys below Left and Right, making it a breeze to navigate through code.
8- RAISE: All symbols are here, arranged in a way that can be (kind of) deduced more by logic and less by memory. On the left hand, the first 2 cols contain the symbols for shifted numbers 1-6, with ! and @ in the home row instead of the top row. Think of the 3 rows as symbols for 3 and 4, 1 and 2, 5 and 6). The next 2 cols contain common brackets. On the right hand is everything else. Note that -, _ and = are close to the home row because of how common they are in code. Operators (&, | and !) are on the top row for convinience. Just try and remember where +, *, < and > located. Admitedlly, the locations for these symbols could use improvement.
9- ADJUST: Contains settings and Function keys. This is placed on the bottom-right corner (triggerred by the pinky), since the thumb keys already have multiple uses.
10
11## Custom OLED
12This keymap includes custom OLED font and code. The font contains some logos and status indidcators for some of the features I use (RGB and Audio). Enable OLED in rukes.mk to check it out. Feel free to reuse the font or parts of it.
13__KNOWN BUG:__ When the computer sleeps, one of the OLEDs is always on (they don't turn off on their own, and the timeout doesn't work). I haven't been able to figure out what's going on there and am open to suggestions/PRs.
14
15## Flashing
16Flash using `make crkbd:gotham:avrdude` for Pro Micro and `make crkbd:gotham:dfu` for Elite-C.
diff --git a/keyboards/crkbd/keymaps/gotham/config.h b/keyboards/crkbd/keymaps/gotham/config.h
new file mode 100644
index 000000000..ed08203aa
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/config.h
@@ -0,0 +1,88 @@
1#pragma once
2
3#define EE_HANDS
4#define SPLIT_USB_DETECT
5
6#undef USE_I2C
7#undef SSD1306OLED
8
9#define USE_SERIAL_PD2
10
11#define IGNORE_MOD_TAP_INTERRUPT
12#define PERMISSIVE_HOLD
13#define TAPPING_TERM 250
14
15#define NO_ACTION_ONESHOT
16
17#ifdef AUDIO_ENABLE
18# define B5_AUDIO
19# define NO_MUSIC_MODE
20# define AUDIO_CLICKY
21#endif
22
23#define OLED_FONT_H "keyboards/crkbd/keymaps/gotham/glcdfont.c"
24
25#define RGBLIGHT_SLEEP
26
27#ifdef RGBLIGHT_ENABLE
28# undef RGBLED_NUM
29# define RGBLED_NUM 6
30# define RGBLIGHT_LIMIT_VAL 150
31# define RGBLIGHT_HUE_STEP 16
32# define RGBLIGHT_SAT_STEP 32
33# define RGBLIGHT_VAL_STEP 32
34
35# define RGBLIGHT_EFFECT_RAINBOW_MOOD
36# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
37# define RGBLIGHT_EFFECT_KNIGHT
38#endif
39
40#ifdef RGB_MATRIX_ENABLE
41# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
42# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
43# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
44# define RGB_MATRIX_HUE_STEP 32
45# define RGB_MATRIX_SAT_STEP 64
46# define RGB_MATRIX_VAL_STEP 64
47# define RGB_MATRIX_SPD_STEP 20
48# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
49
50/* Disable the animations you don't want/need. You will need to disable a good number of these *
51 * because they take up a lot of space. Disable until you can successfully compile your firmware. */
52# define DISABLE_RGB_MATRIX_ALPHAS_MODS
53# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
54# define DISABLE_RGB_MATRIX_BREATHING
55# define DISABLE_RGB_MATRIX_BAND_SAT
56# define DISABLE_RGB_MATRIX_BAND_VAL
57# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
58# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
59# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
60# define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
61// #define DISABLE_RGB_MATRIX_CYCLE_ALL
62# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
63# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
64# define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
65# define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
66// #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
67# define DISABLE_RGB_MATRIX_DUAL_BEACON
68# define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
69# define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
70# define DISABLE_RGB_MATRIX_RAINBOW_BEACON
71# define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
72# define DISABLE_RGB_MATRIX_RAINDROPS
73# define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
74# define DISABLE_RGB_MATRIX_TYPING_HEATMAP
75# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
76# define DISABLE_RGB_MATRIX_SOLID_REACTIVE
77# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
78# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
79# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
80# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
81# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
82// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
83# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
84// #define DISABLE_RGB_MATRIX_SPLASH
85# define DISABLE_RGB_MATRIX_MULTISPLASH
86# define DISABLE_RGB_MATRIX_SOLID_SPLASH
87# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
88#endif
diff --git a/keyboards/crkbd/keymaps/gotham/glcdfont.c b/keyboards/crkbd/keymaps/gotham/glcdfont.c
new file mode 100644
index 000000000..656b13974
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/glcdfont.c
@@ -0,0 +1,18 @@
1// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
2// See gfxfont.h for newer custom bitmap font info.
3// https://helixfonteditor.netlify.com/
4
5#include "progmem.h"
6
7// Standard ASCII 5x7 font
8const unsigned char font[] PROGMEM = {
9 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, 0xA2, 0xFF, 0xA2, 0x94, 0x00, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
10 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, 0x08, 0x1C, 0x2A, 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, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x36, 0x49, 0x56, 0x20, 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, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
11 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x46, 0x49, 0x49, 0x29, 0x1E, 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, 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
12 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
13 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
14 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0xF8, 0x18, 0x00, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0xC3, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x1C, 0x22, 0x41, 0x41, 0x41, 0x22, 0x1C, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0xF8, 0x0C, 0x04, 0xE7, 0xE4, 0xE4, 0x07, 0x04, 0xE4, 0xE7, 0xE4, 0x04, 0x07, 0xE4, 0xE4, 0xE7, 0x04, 0x0C, 0xF8, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F, 0x00, 0x14, 0x08, 0x14, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F, 0x00, 0x22, 0x1C, 0x41, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77,
15 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x4A, 0x4F, 0x4A, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x60, 0x70, 0x3E, 0x1F, 0x19, 0x18, 0x0C, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0C, 0x06, 0x07, 0xFC, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x1C, 0x22, 0x00, 0x00, 0x1C, 0x3E, 0x7F, 0x63, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0xFF, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x38, 0x30, 0xFF, 0xFF, 0xFF, 0x30, 0x38, 0x3F, 0x1F, 0x0F, 0x00, 0x00, 0xFF, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00,
16 0x00, 0x00, 0x40, 0x60, 0x6A, 0x64, 0x6A, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x42, 0x69, 0x65, 0x65, 0x65, 0x69, 0x42, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x66, 0x66, 0x66, 0x00, 0x00, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x00, 0xF0, 0x90, 0x90, 0xF0, 0x90, 0x90, 0xF0, 0x98, 0x9C, 0xF2, 0x22, 0x21, 0xE1, 0x01, 0x01, 0x01, 0xF1, 0x91, 0x91, 0xFA, 0x4C, 0x4C, 0xF8, 0x48, 0x48, 0xF8, 0x48, 0x48, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x18, 0x30, 0x21, 0x21, 0x31, 0x18, 0x10, 0x30, 0x20, 0x60, 0x41, 0x60, 0x20, 0x30, 0x18, 0x30, 0x60, 0x40, 0x40, 0x47, 0x4C, 0x48, 0x68, 0x38, 0x1C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x63, 0x7F, 0x3E, 0x1C,
17 0x00, 0x00, 0x22, 0x1C, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0F, 0x18, 0x10, 0x70, 0x10, 0x10, 0x70, 0x10, 0x13, 0x73, 0x13, 0x10, 0x70, 0x10, 0x10, 0x70, 0x10, 0x18, 0x0F, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0xC9, 0xD1, 0xC9, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x38, 0xFC, 0xED, 0xFC, 0x38, 0x02, 0x10, 0x00, 0x00, 0x08, 0x0C, 0x7E, 0x7F, 0x7E, 0x0C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x09, 0x09, 0x09, 0x0F, 0x09, 0x09, 0x0F, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0F, 0x09, 0x09, 0x0F, 0x09, 0x09, 0x09, 0x0F, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, 0x04, 0x04, 0x07, 0x04, 0x04, 0x0F, 0x09, 0x09, 0x0F, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
18};
diff --git a/keyboards/crkbd/keymaps/gotham/keycodes.h b/keyboards/crkbd/keymaps/gotham/keycodes.h
new file mode 100644
index 000000000..9ba44c54a
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/keycodes.h
@@ -0,0 +1,28 @@
1#pragma once
2
3enum layers {
4 _QWERTY,
5 _LOWER,
6 _RAISE,
7 _ADJUST,
8};
9
10enum custom_keycodes { QWERTY = SAFE_RANGE, LOWER, RAISE, ADJUST, RGBRST };
11
12#define SFT_EQ MT(MOD_LSFT, KC_EQL)
13#define SFT_QT MT(MOD_RSFT, KC_QUOT)
14
15#define SFT_A MT(MOD_LSFT, KC_A)
16#define CTL_Z MT(MOD_LCTL, KC_Z)
17
18#define SFT_SCLN MT(MOD_RSFT, KC_SCLN)
19#define CTL_SLSH MT(MOD_RCTL, KC_SLSH)
20
21#define LOW_SPC LT(_LOWER, KC_SPC)
22#define RAI_EQ LT(_RAISE, KC_EQL)
23#define RAI_ENT LT(_RAISE, KC_ENT)
24#define LOW_BSP LT(_LOWER, KC_BSPC)
25#define LOW_DEL LT(_LOWER, KC_DEL)
26#define ADJ_GRV LT(_ADJUST, KC_GRV)
27#define KC_ANGL LSFT(KC_COMM)
28#define KC_ANGR LSFT(KC_DOT)
diff --git a/keyboards/crkbd/keymaps/gotham/keymap.c b/keyboards/crkbd/keymaps/gotham/keymap.c
new file mode 100644
index 000000000..6657f21ee
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/keymap.c
@@ -0,0 +1,143 @@
1#include QMK_KEYBOARD_H
2#include "keycodes.h"
3
4#ifdef OLED_DRIVER_ENABLE
5# include "oled.c"
6#endif
7
8#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
9# include "rgb.c"
10#endif
11
12// clang-format off
13const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
14 [_QWERTY] = LAYOUT(
15 //|-----------------------------------------------------| |-----------------------------------------------------|
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
17 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
18 SFT_EQ, SFT_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_SCLN,SFT_QT,
19 //---------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
20 KC_LCTL, CTL_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, CTL_SLSH,ADJ_GRV,
21 //---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
22 KC_LALT, LOW_SPC, RAI_EQ, RAI_ENT, LOW_BSP, KC_LGUI
23 //|--------------------------| |--------------------------|
24
25
26 ),
27
28 [_LOWER] = LAYOUT(
29 //|-----------------------------------------------------| |-----------------------------------------------------|
30 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
31 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
32 _______, KC_ANGL, KC_ANGR, KC_LPRN, KC_RPRN, KC_PGUP, KC_MINS, KC_LEFT, KC_UP, KC_RIGHT,KC_PLUS, _______,
33 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
34 _______, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, KC_PGDOWN, KC_UNDS, KC_HOME, KC_DOWN, KC_END, XXXXXXX, _______,
35 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
36 _______, _______, _______, _______, LOW_DEL, _______
37 //|--------------------------| |--------------------------|
38 ),
39
40 [_RAISE] = LAYOUT(
41 //|-----------------------------------------------------| |-----------------------------------------------------|
42 KC_ESC, KC_HASH, KC_DLR, KC_LCBR, KC_RCBR, XXXXXXX, XXXXXXX, KC_AMPR, KC_PIPE, KC_EXLM, KC_ASTR, XXXXXXX,
43 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
44 _______, KC_EXLM, KC_AT, KC_LPRN, KC_RPRN, XXXXXXX, XXXXXXX, KC_UNDS, KC_EQL, KC_ANGL, KC_ANGR, XXXXXXX,
45 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
46 _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_MINS, KC_PLUS, XXXXXXX, KC_BSLS, _______,
47 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
48 _______, _______, _______, _______, _______, _______
49 //|--------------------------| |--------------------------|
50 ),
51
52 [_ADJUST] = LAYOUT(
53 //|-----------------------------------------------------| |-----------------------------------------------------|
54 XXXXXXX, CK_RST, CK_DOWN, CK_UP, CK_TOGG, RGB_TOG, MU_TOG, KC_F12, KC_F7, KC_F8, KC_F9, XXXXXXX,\
55 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
56 XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_MOD, MU_MOD, KC_F11, KC_F4, KC_F5, KC_F6, RESET, \
57 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
58 XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGBRST, AU_TOG, KC_F10, KC_F1, KC_F2, KC_F3, _______,\
59 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
60 _______, _______, _______, _______, KC_VOLD, KC_VOLU \
61 //|--------------------------| |--------------------------|
62 )
63};
64// clang-format off
65
66#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
67layer_state_t layer_state_set_user(layer_state_t state) {
68 /* For any layer other than default, save current RGB state and switch to layer-based RGB */
69 if (layer_state_cmp(state, 0)) {
70 restore_rgb_config();
71 } else {
72 uint8_t layer = get_highest_layer(state);
73 if (layer_state_cmp(layer_state, 0)) save_rgb_config();
74 rgb_by_layer(layer);
75 }
76 return state;
77}
78#endif
79
80bool process_record_user(uint16_t keycode, keyrecord_t *record) {
81#ifdef OLED_DRIVER_ENABLE
82 if (record->event.pressed) {
83 oled_timer = timer_read();
84 add_keylog(keycode);
85 }
86#endif
87
88 switch (keycode) {
89 case LOWER:
90 if (record->event.pressed) {
91 layer_on(_LOWER);
92 } else {
93 layer_off(_LOWER);
94 }
95 return false;
96 case RAISE:
97 if (record->event.pressed) {
98 layer_on(_RAISE);
99 } else {
100 layer_off(_RAISE);
101 }
102 return false;
103 case ADJUST:
104 if (record->event.pressed) {
105 layer_on(_ADJUST);
106 } else {
107 layer_off(_ADJUST);
108 }
109 return false;
110#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
111 case RGB_MOD:
112 case RGB_TOG:
113 case RGB_HUI:
114 case RGB_HUD:
115 case RGB_SAI:
116 case RGB_SAD:
117 case RGB_VAI:
118 case RGB_VAD:
119 case RGB_SPI:
120 case RGB_SPD:
121 /* Override layer-based RGB and resume RGB effect to be able to preview changes */
122 if (record->event.pressed) {
123 restore_rgb_config();
124 process_rgb(keycode, record);
125 save_rgb_config();
126 }
127 return false;
128 case RGBRST:
129 if (record->event.pressed) {
130# ifdef RGBLIGHT_ENABLE
131 eeconfig_update_rgblight_default();
132 rgblight_enable();
133# elif RGB_MATRIX_ENABLE
134 eeconfig_update_rgb_matrix_default();
135 rgb_matrix_enable();
136# endif
137 save_rgb_config();
138 }
139 return false;
140#endif
141 }
142 return true;
143}
diff --git a/keyboards/crkbd/keymaps/gotham/oled.c b/keyboards/crkbd/keymaps/gotham/oled.c
new file mode 100644
index 000000000..ac6f236fc
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/oled.c
@@ -0,0 +1,265 @@
1#pragma once
2
3extern uint8_t is_master;
4
5#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
6# include "rgb.c"
7#endif
8
9#ifdef AUDIO_ENABLE
10extern audio_config_t audio_config;
11#endif
12
13// 5x3 Logos
14
15void render_corne_logo(void) {
16 static const char PROGMEM font_logo[16] = {0x80, 0x81, 0x82, 0x83, 0x84, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0};
17 oled_write_P(font_logo, false);
18};
19
20void render_qmk_logo(void) {
21 static const char PROGMEM font_qmk_logo[16] = {0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0};
22 oled_write_P(font_qmk_logo, false);
23};
24
25// 5x2 Keyboard, Controller logos
26
27void render_keyboard(void) {
28 static const char PROGMEM font_keyboard[11] = {0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0};
29 oled_write_P(font_keyboard, false);
30};
31
32void render_kb_split(void) {
33 static const char PROGMEM font_kb_split[11] = {0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0};
34 oled_write_P(font_kb_split, false);
35};
36
37// 5x1 Layer indicator
38
39void render_layer(void) {
40 static const char PROGMEM font_layer[4][6] = {
41 {0x85, 0x86, 0x87, 0x88, 0x89, 0},
42 {0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0},
43 {0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0},
44 {0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0},
45 };
46 uint8_t layer = 0;
47 if (layer_state_is(_LOWER)) {
48 layer = 1;
49 } else if (layer_state_is(_RAISE)) {
50 layer = 2;
51 } else if (layer_state_is(_ADJUST)) {
52 layer = 3;
53 }
54 oled_write_P(font_layer[layer], false);
55};
56
57 // 2x1 Audio, clicky and RGB status indicators
58
59#ifdef AUDIO_ENABLE
60void render_audio_status(void) {
61 static const char PROGMEM font_audio_off[3] = {0x8f, 0x90, 0};
62 static const char PROGMEM font_audio_on[3] = {0x91, 0x92, 0};
63 oled_write_P(audio_config.enable ? font_audio_on : font_audio_off, false);
64};
65
66void render_clicky_status(void) {
67 static const char PROGMEM font_clicky_off[3] = {0xaf, 0xb0, 0};
68 static const char PROGMEM font_clicky_on[3] = {0xb1, 0xb2, 0};
69 oled_write_P(audio_config.clicky_enable ? font_clicky_on : font_clicky_off, false);
70};
71#endif
72
73#if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE)
74void render_rgb_status(void) {
75 static const char PROGMEM font_rgb_off[3] = {0xcf, 0xd0, 0};
76 static const char PROGMEM font_rgb_on[3] = {0xd1, 0xd2, 0};
77# ifdef RGBLIGHT_ENABLE
78 bool rgb_enabled = rgblight_config.enable;
79# elif RGB_MATRIX_ENABLE
80 bool rgb_enabled = rgb_matrix_config.enable;
81# endif
82 oled_write_P(rgb_enabled ? font_rgb_on : font_rgb_off, false);
83};
84#endif
85
86// 2x1 Ctrl, Alt, Shift, GUI, Mouse
87
88void render_mod_ctrl(void) {
89 static const char PROGMEM font_ctrl[3] = {0x93, 0x94, 0};
90 oled_write_P(font_ctrl, false);
91};
92
93void render_mod_alt(void) {
94 static const char PROGMEM font_alt[3] = {0xb3, 0xb4, 0};
95 oled_write_P(font_alt, false);
96};
97
98void render_mod_shift(void) {
99 static const char PROGMEM font_shift[3] = {0xd3, 0xd4, 0};
100 oled_write_P(font_shift, false);
101};
102
103void render_mod_gui(void) {
104 static const char PROGMEM font_gui[3] = {0x95, 0x96, 0};
105 oled_write_P(font_gui, false);
106};
107
108#ifdef MOUSEKEY_ENABLE
109void render_mod_mouse(void) {
110 static const char PROGMEM font_mouse[3] = {0x97, 0x98, 0};
111 oled_write_P(font_mouse, false);
112};
113#endif
114
115// 5x2 Mod and feature indicator clusters
116
117void render_mod_status(void) {
118#ifdef NO_ACTION_ONESHOT
119 uint8_t modifiers = get_mods();
120#else
121 uint8_t modifiers = get_mods() | get_oneshot_mods();
122#endif
123
124 (modifiers & MOD_MASK_CTRL) ? render_mod_ctrl() : oled_write_P(PSTR(" "), false);
125 oled_write_P(PSTR(" "), false);
126 (modifiers & MOD_MASK_SHIFT) ? render_mod_shift() : oled_write_P(PSTR(" "), false);
127
128 (modifiers & MOD_MASK_ALT) ? render_mod_alt() : oled_write_P(PSTR(" "), false);
129 oled_write_P(PSTR(" "), false);
130 (modifiers & MOD_MASK_GUI) ? render_mod_gui() : oled_write_P(PSTR(" "), false);
131}
132
133void render_feature_status(void) {
134#if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE)
135 render_rgb_status();
136#endif
137
138#ifdef AUDIO_ENABLE
139 oled_write_P(PSTR(" "), false);
140 render_audio_status();
141#endif
142};
143
144// Keylogger
145#define KEYLOGGER_LENGTH 5
146static uint16_t oled_timer = 0;
147static char keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"};
148// clang-format off
149static const char PROGMEM code_to_name[0xFF] = {
150// 0 1 2 3 4 5 6 7 8 9 A B C D E F
151 ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', // 0x
152 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', // 1x
153 '3', '4', '5', '6', '7', '8', '9', '0', 20, 19, 27, 26, 22, '-', '=', '[', // 2x
154 ']','\\', '#', ';','\'', '`', ',', '.', '/', 128, ' ', ' ', ' ', ' ', ' ', ' ', // 3x
155 ' ', ' ', ' ', ' ', ' ', ' ', 'P', 'S', ' ', ' ', ' ', ' ', 16, ' ', ' ', ' ', // 4x
156 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 5x
157 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 6x
158 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 7x
159 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 8x
160 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 9x
161 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ax
162 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Bx
163 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Cx
164 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Dx
165 'C', 'S', 'A', 'C', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ex
166 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' // Fx
167};
168
169void add_keylog(uint16_t keycode) {
170 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) || (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) {
171 keycode = keycode & 0xFF;
172 } else if (keycode > 0xFF) {
173 keycode = 0;
174 }
175
176 for (uint8_t i = (KEYLOGGER_LENGTH - 1); i > 0; --i) {
177 keylog_str[i] = keylog_str[i - 1];
178 }
179
180 if (keycode < (sizeof(code_to_name) / sizeof(char))) {
181 keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
182 }
183}
184
185void render_keylogger_status(void) {
186 oled_write(keylog_str, false);
187}
188
189void render_prompt(void) {
190 bool blink = (timer_read() % 1000) < 500;
191
192 if (layer_state_is(_LOWER)) {
193 oled_write_ln_P(blink ? PSTR("> lo_") : PSTR("> lo "), false);
194 } else if (layer_state_is(_RAISE)) {
195 oled_write_ln_P(blink ? PSTR("> hi_") : PSTR("> hi "), false);
196 } else if (layer_state_is(_ADJUST)) {
197 oled_write_ln_P(blink ? PSTR("> aj_") : PSTR("> aj "), false);
198 } else {
199 oled_write_ln_P(blink ? PSTR("> _ ") : PSTR("> "), false);
200 }
201};
202
203void render_status_secondary(void) {
204 oled_write_ln("", false);
205 oled_write_ln("", false);
206
207 render_kb_split();
208
209 oled_write_ln("", false);
210 oled_write_ln("", false);
211 oled_write_ln("", false);
212
213 render_layer();
214
215 oled_write_ln("", false);
216 oled_write_ln("", false);
217 oled_write_ln("", false);
218
219 #if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE) || defined(AUDIO_ENABLE)
220 layer_state_is(_ADJUST) ? render_feature_status() : render_mod_status();
221 #else
222 render_mod_status();
223 #endif
224};
225
226void render_status_main(void) {
227 oled_write_ln("", false);
228 oled_write_ln("", false);
229
230 render_corne_logo();
231
232 oled_write_ln("", false);
233 oled_write_ln("", false);
234 oled_write_ln("", false);
235
236 render_qmk_logo();
237
238 oled_write_ln("", false);
239 oled_write_ln("", false);
240 oled_write_ln("", false);
241
242 render_prompt();
243}
244
245oled_rotation_t oled_init_user(oled_rotation_t rotation) {
246 return OLED_ROTATION_270;
247}
248
249void oled_task_user(void) {
250 if (timer_elapsed(oled_timer) > 10000) {
251 oled_off();
252 return;
253 }
254 #ifndef SPLIT_KEYBOARD
255 else {
256 oled_on();
257 }
258 #endif
259
260 if (is_master) {
261 render_status_main();
262 } else {
263 render_status_secondary();
264 }
265}
diff --git a/keyboards/crkbd/keymaps/gotham/rgb.c b/keyboards/crkbd/keymaps/gotham/rgb.c
new file mode 100644
index 000000000..9f6642883
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/rgb.c
@@ -0,0 +1,79 @@
1#pragma once
2
3#ifdef RGBLIGHT_ENABLE
4extern rgblight_config_t rgblight_config;
5rgblight_config_t RGB_current_config;
6#endif
7
8#ifdef RGB_MATRIX_ENABLE
9extern rgb_config_t rgb_matrix_config;
10rgb_config_t RGB_current_config;
11#endif
12
13void save_rgb_config(void) {
14#ifdef RGBLIGHT_ENABLE
15 RGB_current_config.enable = rgblight_config.enable;
16 RGB_current_config.mode = rgblight_get_mode();
17 RGB_current_config.speed = rgblight_get_speed();
18 RGB_current_config.hue = rgblight_get_hue();
19 RGB_current_config.sat = rgblight_get_sat();
20 RGB_current_config.val = rgblight_get_val();
21#elif RGB_MATRIX_ENABLE
22 RGB_current_config.enable = rgb_matrix_config.enable;
23 RGB_current_config.mode = rgb_matrix_get_mode();
24 RGB_current_config.speed = rgb_matrix_config.speed;
25 RGB_current_config.hsv = rgb_matrix_config.hsv;
26#endif
27}
28
29void restore_rgb_config(void) {
30#ifdef RGBLIGHT_ENABLE
31 rgblight_set_speed_noeeprom(RGB_current_config.speed);
32 if (rgblight_config.mode != RGB_current_config.mode) {
33 rgblight_mode_noeeprom(RGB_current_config.mode);
34 }
35 if ((RGB_current_config.hue != rgblight_config.hue) || (RGB_current_config.sat != rgblight_config.sat) || (RGB_current_config.val != rgblight_config.val)) {
36 rgblight_sethsv_noeeprom(RGB_current_config.hue, RGB_current_config.sat, RGB_current_config.val);
37 }
38 if (rgblight_config.enable) {
39 rgblight_enable_noeeprom();
40 } else {
41 rgblight_disable_noeeprom();
42 }
43#elif RGB_MATRIX_ENABLE
44 rgb_matrix_config.speed = RGB_current_config.speed;
45 if (rgb_matrix_config.mode != RGB_current_config.mode) {
46 rgb_matrix_mode_noeeprom(RGB_current_config.mode);
47 }
48 if ((RGB_current_config.hsv.h != rgb_matrix_config.hsv.h) || (RGB_current_config.hsv.s != rgb_matrix_config.hsv.s) || (RGB_current_config.hsv.v != rgb_matrix_config.hsv.v)) {
49 rgb_matrix_sethsv_noeeprom(RGB_current_config.hsv.h, RGB_current_config.hsv.s, RGB_current_config.hsv.v);
50 }
51 if (rgb_matrix_config.enable) {
52 rgb_matrix_enable_noeeprom();
53 } else {
54 rgb_matrix_disable_noeeprom();
55 }
56#endif
57}
58
59void rgb_by_layer(int layer) {
60#ifdef RGBLIGHT_ENABLE
61 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
62#elif RGB_MATRIX_ENABLE
63 rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
64#endif
65
66 switch (layer) {
67 case _ADJUST:
68 rgblight_sethsv_noeeprom(9, 255, 255);
69 break;
70 case _RAISE:
71 rgblight_sethsv_noeeprom(HSV_CYAN);
72 break;
73 case _LOWER:
74 rgblight_sethsv_noeeprom(HSV_MAGENTA);
75 break;
76 default:
77 rgblight_sethsv_noeeprom(HSV_RED);
78 }
79}
diff --git a/keyboards/crkbd/keymaps/gotham/rules.mk b/keyboards/crkbd/keymaps/gotham/rules.mk
new file mode 100644
index 000000000..eaf8f89fd
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/rules.mk
@@ -0,0 +1,6 @@
1MOUSEKEY_ENABLE = no
2EXTRAKEY_ENABLE = yes
3AUDIO_ENABLE = yes
4RGBLIGHT_ENABLE = yes
5OLED_DRIVER_ENABLE = yes
6LTO_ENABLE = yes