aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2017-10-15 16:52:51 -0400
committerJack Humbert <jack.humb@gmail.com>2017-10-15 16:52:51 -0400
commit7f2882832e48509718c888d6f2da7294d0d81db0 (patch)
treec4570a81a4042dbbf4a3dec44e52fbb067ae2c76
parent32f18cf6164e5e23cef414b441f2f1ccd19a39db (diff)
downloadqmk_firmware-7f2882832e48509718c888d6f2da7294d0d81db0.tar.gz
qmk_firmware-7f2882832e48509718c888d6f2da7294d0d81db0.zip
adds default keymap for handwired boards
-rw-r--r--keyboards/handwired/promethium/keymaps/default/README.md44
-rw-r--r--keyboards/handwired/promethium/keymaps/default/config.h29
-rw-r--r--keyboards/handwired/promethium/keymaps/default/flash.sh4
-rw-r--r--keyboards/handwired/promethium/keymaps/default/keymap.c1368
-rw-r--r--keyboards/handwired/promethium/keymaps/default/rgbtheme.h1
-rw-r--r--keyboards/handwired/promethium/keymaps/default/rgbtheme_carbon.h36
-rw-r--r--keyboards/handwired/promethium/keymaps/default/rgbtheme_default.h36
-rw-r--r--keyboards/handwired/promethium/keymaps/default/rules.mk26
8 files changed, 1544 insertions, 0 deletions
diff --git a/keyboards/handwired/promethium/keymaps/default/README.md b/keyboards/handwired/promethium/keymaps/default/README.md
new file mode 100644
index 000000000..48824b9f7
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/default/README.md
@@ -0,0 +1,44 @@
1Priyadi Keymap for Planck-like Keyboards
2========================================
3
4Main layer modifications from default Planck layout:
5
6* Enter moved to quotes position
7* Quotes moved to semicolon position.
8* QWERTZ style colon & semicolon. shift-. = : shift-, = ; This is done in hardware, no layout switching needed in software.
9* < & > occupied precious real estate, and so they are moved down to punctuation layer.
10* Right-shift on Enter position.
11* Removed arrow keys, they are on another layer now.
12* Put Ctrl-Alt-Super and Super-AltGr-Ctrl in left & right corners.
13* Lower & Raise is now called Num and Fun.
14* OS & Left keys become another thumb modifier: Empty & Greek (Empty because I used this for another use and my muscle memory is not adapted to it yet)
15
16On Promethium, Trackpoint is enabled on PD2 and PD3. We impersonate a Thinkpad keyboard to be able to use Thinkpad driver on Windows (still needs verification).
17
18AltGr & Compose dual use key. Tap for Compose (mapped to Scroll Lock in hardware) and press for AltGr.
19
20Supported layouts: QWERTY, DVORAK, Colemak, Workman, Norman. Switchable from SYS layer. In DVORAK, semicolon is replaced by /? key.
21
22Num activates NUM layer: hexkeypad on the right side and most punctuation on the left side. Hexkeypad is optimized for C-style hex, IPv6, HTML RGB triplets, etc.
23
24Fun activates FUN layer: arrow cluster on right home row, F-numbers on left side.
25
26Pressing Num+Fun activates PUNC layer: same punctuations as NUM layer on the left side, parens on the right side.
27
28Greek activates either GREEKU or GREEKL layer, depending whether shift is pressed or not. Shift state changes are also taken into account when the layer is active.
29
30Greek+Empty activates EMOJI layer. The whole keyboard now outputs emojis!
31
32Pressing both spacebars (spacekeys, actually) activates GUI layer. QWERTYUIOP switches to a virtual desktop. J & L switches virtual desktop to the left or right. S & F behaves like Alt-Tab and Alt-Shift-Tab. This works by sending Alt press when entering the layer, and Alt release when other than S or F keys are pressed.
33
34Pressing both Ctrls activates SYS layer for configuring the keyboard.
35
36On Promethium, USB or Bluetooth output is detected on startup. If USB is connected, then USB is used initially. SYS-U and SYS-B switch output to USB or Bluetooth at runtime. Current active output is indicated with LEDs.
37
38SYS-W, SYS-L, SYS-M switch Unicode input method. SYS-Q, SYS-D, SYS-C, SYS-K, SYS-N switch to QWERTY, DVORAK, Colemak, Workman and Norman, respectively.
39
40SYS-A (mnemonic: audio) toggles faux clicky: use buzzer to emit clicks on key presses and releases.
41
42On Promethium there are 16 indicator LEDs, and under switch LEDs on each switches, including Trackpoint buttons. Totaling 67 LEDs. Output is limited to 0xF for each LEDs to conserve power. SYS-G (mnemonic: glow) toggles various backlighting modes.
43
44On Promethium, there's a LED to indicate battery level. Hue indicates level: green is full, red is empty. \ No newline at end of file
diff --git a/keyboards/handwired/promethium/keymaps/default/config.h b/keyboards/handwired/promethium/keymaps/default/config.h
new file mode 100644
index 000000000..fa86e2247
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/default/config.h
@@ -0,0 +1,29 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6#define PRIYADI_PROMETHIUM
7
8/* bootmagic salt key */
9#define BOOTMAGIC_KEY_SALT KC_ESC
10
11/* skip bootmagic and eeconfig */
12#define BOOTMAGIC_KEY_SKIP KC_SPACE
13
14#define PREVENT_STUCK_MODIFIERS
15
16#define RGBSPS_ENABLE
17#define RGBSPS_DEMO_ENABLE
18
19#define UNICODE_TYPE_DELAY 0
20
21#define LAYOUT_DVORAK
22#define LAYOUT_COLEMAK
23#define LAYOUT_NORMAN
24#define LAYOUT_WORKMAN
25
26#define DOUBLESPACE_LAYER_ENABLE
27// #define TOLELOT_ENABLE
28
29#endif
diff --git a/keyboards/handwired/promethium/keymaps/default/flash.sh b/keyboards/handwired/promethium/keymaps/default/flash.sh
new file mode 100644
index 000000000..14a3b4378
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/default/flash.sh
@@ -0,0 +1,4 @@
1#!/bin/sh
2
3sleep 10
4avrdude -p m32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:../../../../../.build/handwired_promethium_priyadi.hex
diff --git a/keyboards/handwired/promethium/keymaps/default/keymap.c b/keyboards/handwired/promethium/keymaps/default/keymap.c
new file mode 100644
index 000000000..e229b67e5
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/default/keymap.c
@@ -0,0 +1,1368 @@
1/*
2Copyright 2017 Priyadi Iman Nurcahyo
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12You should have received a copy of the GNU General Public License
13along with this program. If not, see <http://www.gnu.org/licenses/>.
14*/
15
16#if defined(PRIYADI_PROMETHIUM)
17 #include "promethium.h"
18#elif defined(PRIYADI_PLANCK)
19 #include "planck.h"
20#else
21 #error "no keyboard defined"
22#endif
23
24#include "action_layer.h"
25#ifdef AUDIO_ENABLE
26 #include "audio.h"
27 #include "musical_notes.h"
28#endif
29#include "eeconfig.h"
30#include "process_unicode.h"
31#include "quantum.h"
32#ifdef RGBSPS_ENABLE
33#include "rgbsps.h"
34#include "rgbtheme.h"
35#endif
36#ifdef PS2_MOUSE_ENABLE
37#include "ps2_mouse.h"
38#include "ps2.h"
39#endif
40#ifdef FAUXCLICKY_ENABLE
41#include "fauxclicky.h"
42#ifdef RGBSPS_ENABLE
43#undef FAUXCLICKY_OFF
44#define FAUXCLICKY_OFF do { \
45 fauxclicky_enabled = false; \
46 rgbsps_set(LED_AUDIO, COLOR_BLANK); \
47 fauxclicky_stop(); \
48} while (0)
49#undef FAUXCLICKY_ON
50#define FAUXCLICKY_ON do { \
51 fauxclicky_enabled = true; \
52 rgbsps_set(LED_AUDIO, THEME_COLOR_AUDIO); \
53} while (0)
54#endif
55#endif
56#include "outputselect.h"
57#include "led.h"
58#define COUNT(x) (sizeof (x) / sizeof (*(x)))
59
60// Fillers to make layering clearer
61#define _______ KC_TRNS
62#define XXXXXXX KC_NO
63#define G(x) LGUI(x)
64#define KC_WWWB KC_WWW_BACK
65#define KC_WWWF KC_WWW_FORWARD
66
67// hybrid right-alt & scroll lock (mapped to Compose in OS)
68#define C_RALT MT(MOD_RALT, KC_SLCK)
69
70// dual use right-shift & del key
71// #define C_RSFT MT(MOD_RSFT, KC_DEL)
72
73bool capslock = false;
74#ifdef DOUBLESPACE_LAYER_ENABLE
75bool lspace_active = false;
76bool rspace_active = false;
77bool lspace_emitted = false;
78bool rspace_emitted = false;
79bool space_layer_entered = false;
80#endif
81
82// glow
83enum glow_modes {
84 GLOW_NONE,
85 GLOW_MIN,
86 GLOW_FULL
87};
88uint8_t glow_mode = GLOW_MIN;
89
90void turn_off_capslock(void);
91extern keymap_config_t keymap_config;
92
93// layers, ordering is important!
94enum layers {
95 _QWERTY,
96 _DVORAK,
97 _COLEMAK,
98 _WORKMAN,
99 _NORMAN,
100 _DEFAULT_LAYER_MAX = _NORMAN,
101
102 _GREEKU,
103 _GREEKL,
104
105 _NUM,
106 _FUN,
107 _PUNC,
108
109 _EMPTY,
110 _EMOJI,
111 _GUI,
112 _SYS
113};
114
115// double-space layer
116#define _SPACE _GUI
117
118enum planck_keycodes {
119 // layouts
120 QWERTY = SAFE_RANGE,
121 DVORAK,
122 COLEMAK,
123 WORKMAN,
124 NORMAN,
125
126 // layer switchers
127 EMOJI,
128 GUI,
129 GREEK,
130
131 // os switchers
132 LINUX,
133 WIN,
134 OSX,
135
136 // others
137 LSPACE,
138 RSPACE,
139 GLOW,
140
141 // stub
142#ifndef FAUXCLICKY_ENABLE
143 FC_TOG,
144#endif
145#ifndef MODULE_ADAFRUIT_BLE
146 OUT_BT,
147#endif
148 RGBDEMO,
149 KEYCODE_END
150};
151
152#define EMPTY MO(_EMPTY)
153#define NUM MO(_NUM)
154#define FUN MO(_FUN)
155#define FUN0 LT(_FUN, KC_0)
156
157// unicode map
158
159enum unicode_name {
160 GRIN, // grinning face 😊
161 TJOY, // tears of joy 😂
162 SMILE, // grining face with smiling eyes 😁
163 HEART, // heart ❤
164 EYERT, // smiling face with heart shaped eyes 😍
165 CRY, // crying face 😭
166 SMEYE, // smiling face with smiling eyes 😊
167 UNAMU, // unamused 😒
168 KISS, // kiss 😘
169 HART2, // two hearts 💕
170 WEARY, // weary 😩
171 OKHND, // ok hand sign 👌
172 PENSV, // pensive 😔
173 SMIRK, // smirk 😏
174 RECYC, // recycle ♻
175 WINK, // wink 😉
176 THMUP, // thumb up 👍
177 THMDN, // thumb down 👎
178 PRAY, // pray 🙏
179 PHEW, // relieved 😌
180 MUSIC, // musical notes
181 FLUSH, // flushed 😳
182 CELEB, // celebration 🙌
183 CRY2, // crying face 😢
184 COOL, // smile with sunglasses 😎
185 NOEVS, // see no evil
186 NOEVH, // hear no evil
187 NOEVK, // speak no evil
188 POO, // pile of poo
189 EYES, // eyes
190 VIC, // victory hand
191 BHART, // broken heart
192 SLEEP, // sleeping face
193 SMIL2, // smiling face with open mouth & sweat
194 HUNRD, // 100
195 CONFU, // confused
196 TONGU, // face with tongue & winking eye
197 DISAP, // disappointed
198 YUMMY, // face savoring delicious food
199 CLAP, // hand clapping
200 FEAR, // face screaming in fear
201 HORNS, // smiling face with horns
202 HALO, // smiling face with halo
203 BYE, // waving hand
204 SUN, // sun
205 MOON, // moon
206 SKULL, // skull
207
208 // greek letters
209 UALPH,
210 UBETA,
211 UGAMM,
212 UDELT,
213 UEPSI,
214 UZETA,
215 UETA,
216 UTHET,
217 UIOTA,
218 UKAPP,
219 ULAMB,
220 UMU,
221 UNU,
222 UXI,
223 UOMIC,
224 UPI,
225 URHO,
226 USIGM,
227 UTAU,
228 UUPSI,
229 UPHI,
230 UCHI,
231 UPSI,
232 UOMEG,
233
234 LALPH,
235 LBETA,
236 LGAMM,
237 LDELT,
238 LEPSI,
239 LZETA,
240 LETA,
241 LTHET,
242 LIOTA,
243 LKAPP,
244 LLAMB,
245 LMU,
246 LNU,
247 LXI,
248 LOMIC,
249 LPI,
250 LRHO,
251 LSIGM,
252 LTAU,
253 LUPSI,
254 LPHI,
255 LCHI,
256 LPSI,
257 LOMEG,
258
259 FSIGM,
260
261 LTEQ,
262 GTEQ,
263 NOTEQ,
264 PLMIN,
265};
266
267const uint32_t PROGMEM unicode_map[] = {
268 [GRIN] = 0x1F600,
269 [TJOY] = 0x1F602,
270 [SMILE] = 0x1F601,
271 [HEART] = 0x2764,
272 [EYERT] = 0x1f60d,
273 [CRY] = 0x1f62d,
274 [SMEYE] = 0x1F60A,
275 [UNAMU] = 0x1F612,
276 [KISS] = 0x1F618,
277 [HART2] = 0x1F495,
278 [WEARY] = 0x1F629,
279 [OKHND] = 0x1F44C,
280 [PENSV] = 0x1F614,
281 [SMIRK] = 0x1F60F,
282 [RECYC] = 0x267B,
283 [WINK] = 0x1F609,
284 [THMUP] = 0x1F44D,
285 [THMDN] = 0x1F44E,
286 [PRAY] = 0x1F64F,
287 [PHEW] = 0x1F60C,
288 [MUSIC] = 0x1F3B6,
289 [FLUSH] = 0x1F633,
290 [CELEB] = 0x1F64C,
291 [CRY2] = 0x1F622,
292 [COOL] = 0x1F60E,
293 [NOEVS] = 0x1F648,
294 [NOEVH] = 0x1F649,
295 [NOEVK] = 0x1F64A,
296 [POO] = 0x1F4A9,
297 [EYES] = 0x1F440,
298 [VIC] = 0x270C,
299 [BHART] = 0x1F494,
300 [SLEEP] = 0x1F634,
301 [SMIL2] = 0x1F605,
302 [HUNRD] = 0x1F4AF,
303 [CONFU] = 0x1F615,
304 [TONGU] = 0x1F61C,
305 [DISAP] = 0x1F61E,
306 [YUMMY] = 0x1F60B,
307 [CLAP] = 0x1F44F,
308 [FEAR] = 0x1F631,
309 [HORNS] = 0x1F608,
310 [HALO] = 0x1F607,
311 [BYE] = 0x1F44B,
312 [SUN] = 0x2600,
313 [MOON] = 0x1F314,
314 [SKULL] = 0x1F480,
315
316 // greek letters
317 [UALPH] = 0x0391,
318 [UBETA] = 0x0392,
319 [UGAMM] = 0x0393,
320 [UDELT] = 0x0394,
321 [UEPSI] = 0x0395,
322 [UZETA] = 0x0396,
323 [UETA] = 0x0397,
324 [UTHET] = 0x0398,
325 [UIOTA] = 0x0399,
326 [UKAPP] = 0x039A,
327 [ULAMB] = 0x039B,
328 [UMU] = 0x039C,
329 [UNU] = 0x039D,
330 [UXI] = 0x039E,
331 [UOMIC] = 0x039F,
332 [UPI] = 0x03A0,
333 [URHO] = 0x03A1,
334 [USIGM] = 0x03A3,
335 [UTAU] = 0x03A4,
336 [UUPSI] = 0x03A5,
337 [UPHI] = 0x03A6,
338 [UCHI] = 0x03A7,
339 [UPSI] = 0x03A8,
340 [UOMEG] = 0x03A9,
341 [LALPH] = 0x03B1,
342 [LBETA] = 0x03B2,
343 [LGAMM] = 0x03B3,
344 [LDELT] = 0x03B4,
345 [LEPSI] = 0x03B5,
346 [LZETA] = 0x03B6,
347 [LETA] = 0x03B7,
348 [LTHET] = 0x03B8,
349 [LIOTA] = 0x03B9,
350 [LKAPP] = 0x03BA,
351 [LLAMB] = 0x03BB,
352 [LMU] = 0x03BC,
353 [LNU] = 0x03BD,
354 [LXI] = 0x03BE,
355 [LOMIC] = 0x03BF,
356 [LPI] = 0x03C0,
357 [LRHO] = 0x03C1,
358 [LSIGM] = 0x03C3,
359 [LTAU] = 0x03C4,
360 [LUPSI] = 0x03C5,
361 [LPHI] = 0x03C6,
362 [LCHI] = 0x03C7,
363 [LPSI] = 0x03C8,
364 [LOMEG] = 0x03C9,
365 [FSIGM] = 0x03C2,
366
367 // other
368 [LTEQ] = 0x2264, // less than or equal
369 [GTEQ] = 0x2265, // greater than or equal
370 [NOTEQ] = 0x2260, // not equal
371 [PLMIN] = 0xB1, // plus minus
372};
373
374// RGBSPS
375
376#ifdef RGBSPS_ENABLE
377const uint8_t PROGMEM LED_ALNUM[] = {
378 LED_Z,
379 LED_A,
380 LED_Q,
381 LED_W,
382 LED_S,
383 LED_X,
384 LED_C,
385 LED_D,
386 LED_E,
387 LED_R,
388 LED_F,
389 LED_V,
390 LED_B,
391 LED_G,
392 LED_T,
393 LED_N,
394 LED_HH,
395 LED_Y,
396 LED_U,
397 LED_J,
398 LED_M,
399 LED_COMM,
400 LED_K,
401 LED_I,
402 LED_O,
403 LED_L,
404 LED_DOT,
405 LED_SLSH,
406 LED_SCLN,
407 LED_P,
408 LED_LSPC,
409 LED_RSPC
410};
411
412const uint8_t PROGMEM LED_HOMING[] = {
413 LED_A,
414 LED_S,
415 LED_D,
416 LED_F,
417 LED_J,
418 LED_K,
419 LED_L,
420 LED_SCLN
421};
422
423const uint8_t PROGMEM LED_MODS[] = {
424 LED_TAB,
425 LED_ESC,
426 LED_LSFT,
427 LED_LCTL,
428 LED_LGUI,
429 LED_LALT,
430 LED_RALT,
431 LED_RGUI,
432 LED_BKSP,
433 LED_ENT,
434 LED_RSFT,
435 LED_RCTL
436};
437
438const uint8_t PROGMEM LED_FN[] = {
439 LED_EMPTY,
440 LED_NUM,
441 LED_FUN,
442 LED_GREEK
443};
444
445const uint8_t PROGMEM LED_INDICATORS[] = {
446 LED_IND_LINUX,
447 LED_IND_APPLE,
448 LED_IND_WINDOWS,
449 LED_IND_QWERTY,
450 LED_IND_ALT,
451 LED_IND_AUDIO,
452 LED_IND_BLUETOOTH,
453 LED_IND_USB,
454
455 LED_IND_BATTERY,
456 LED_IND_CAPSLOCK,
457 LED_IND_GUI,
458 LED_IND_FUN,
459 LED_IND_NUM,
460 LED_IND_PUNC,
461 LED_IND_EMOJI,
462 LED_IND_GREEK,
463};
464
465const uint8_t PROGMEM LED_TRACKPOINT[] = {
466 LED_TRACKPOINT1,
467 LED_TRACKPOINT2,
468 LED_TRACKPOINT3,
469};
470
471void led_turnoff_keys(void) {
472 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
473 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), COLOR_BLACK);
474 }
475 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
476 rgbsps_set(pgm_read_byte(&LED_MODS[i]), COLOR_BLACK);
477 }
478 for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
479 rgbsps_set(pgm_read_byte(&LED_FN[i]), COLOR_BLACK);
480 }
481}
482
483#ifdef RGBSPS_DEMO_ENABLE
484void led_demo(void) {
485 rgbsps_set(LED_IND_LINUX, THEME_COLOR_LINUX);
486 rgbsps_set(LED_IND_APPLE, THEME_COLOR_APPLE);
487 rgbsps_set(LED_IND_WINDOWS, THEME_COLOR_WINDOWS);
488 rgbsps_set(LED_IND_QWERTY, THEME_COLOR_QWERTY);
489 rgbsps_set(LED_IND_ALT, THEME_COLOR_ALT);
490 rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO);
491 rgbsps_set(LED_IND_BLUETOOTH, THEME_COLOR_BLUETOOTH);
492 rgbsps_set(LED_IND_USB, THEME_COLOR_USB);
493 rgbsps_set(LED_IND_CAPSLOCK, THEME_COLOR_CAPSLOCK);
494 rgbsps_set(LED_IND_GUI, THEME_COLOR_GUI);
495 rgbsps_set(LED_IND_FUN, THEME_COLOR_FUN);
496 rgbsps_set(LED_IND_NUM, THEME_COLOR_NUM);
497 rgbsps_set(LED_IND_PUNC, THEME_COLOR_PUNC);
498 rgbsps_set(LED_IND_GREEK, THEME_COLOR_GREEK);
499 rgbsps_set(LED_IND_EMOJI, THEME_COLOR_EMOJI);
500 rgbsps_send();
501}
502#endif
503
504void led_reset(void) {
505 switch (glow_mode) {
506 case GLOW_NONE:
507 led_turnoff_keys();
508 break;
509 case GLOW_MIN:
510 led_turnoff_keys();
511 for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) {
512 rgbsps_set(pgm_read_byte(&LED_HOMING[i]), THEME_COLOR_GLOW1_HOME);
513 }
514 rgbsps_set(LED_F, THEME_COLOR_GLOW1_HOMING);
515 rgbsps_set(LED_J, THEME_COLOR_GLOW1_HOMING);
516 break;
517 case GLOW_FULL:
518 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
519 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), THEME_COLOR_GLOW2_ALPHA);
520 }
521 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
522 rgbsps_set(pgm_read_byte(&LED_MODS[i]), THEME_COLOR_GLOW2_MODS);
523 }
524 for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
525 rgbsps_set(pgm_read_byte(&LED_FN[i]), THEME_COLOR_GLOW2_FN);
526 }
527 for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) {
528 rgbsps_set(pgm_read_byte(&LED_HOMING[i]), THEME_COLOR_GLOW2_HOME);
529 }
530 rgbsps_set(LED_F, THEME_COLOR_GLOW2_HOMING);
531 rgbsps_set(LED_J, THEME_COLOR_GLOW2_HOMING);
532 break;
533 }
534}
535
536void led_set_default_layer_indicator(void) {
537 uint8_t default_layer = biton32(default_layer_state);
538 if (default_layer == _QWERTY) {
539 rgbsps_set(LED_IND_QWERTY, THEME_COLOR_QWERTY);
540 rgbsps_set(LED_IND_ALT, COLOR_BLANK);
541 } else {
542 rgbsps_set(LED_IND_QWERTY, COLOR_BLANK);
543 rgbsps_set(LED_IND_ALT, THEME_COLOR_ALT);
544 }
545 rgbsps_send();
546 return;
547}
548
549void led_set_layer_indicator(void) {
550 static uint8_t oldlayer = 255;
551
552 led_reset();
553
554 rgbsps_set(LED_IND_GUI, COLOR_BLANK);
555 rgbsps_set(LED_IND_FUN, COLOR_BLANK);
556 rgbsps_set(LED_IND_NUM, COLOR_BLANK);
557 rgbsps_set(LED_IND_PUNC, COLOR_BLANK);
558 rgbsps_set(LED_IND_GREEK, COLOR_BLANK);
559 rgbsps_set(LED_IND_EMOJI, COLOR_BLANK);
560
561 uint8_t layer = biton32(layer_state);
562 if (oldlayer == layer) {
563 return;
564 }
565
566 oldlayer = layer;
567
568 if (layer <= _DEFAULT_LAYER_MAX) {
569 rgbsps_send();
570 return;
571 }
572
573 switch(layer) {
574 case _GUI:
575 rgbsps_set(LED_IND_GUI, THEME_COLOR_GUI);
576 break;
577 case _FUN:
578 rgbsps_set(LED_IND_FUN, THEME_COLOR_FUN);
579 break;
580 case _NUM:
581 rgbsps_set(LED_IND_NUM, THEME_COLOR_NUM);
582 break;
583 case _PUNC:
584 rgbsps_set(LED_IND_PUNC, THEME_COLOR_PUNC);
585 break;
586 case _GREEKL:
587 case _GREEKU:
588 rgbsps_set(LED_IND_GREEK, THEME_COLOR_GREEK);
589 break;
590 case _EMOJI:
591 rgbsps_set(LED_IND_EMOJI, THEME_COLOR_EMOJI);
592 break;
593 default:
594 rgbsps_set(LED_IND_GUI, THEME_COLOR_OTHERLAYER);
595 rgbsps_set(LED_IND_FUN, THEME_COLOR_OTHERLAYER);
596 rgbsps_set(LED_IND_NUM, THEME_COLOR_OTHERLAYER);
597 rgbsps_set(LED_IND_PUNC, THEME_COLOR_OTHERLAYER);
598 rgbsps_set(LED_IND_GREEK, THEME_COLOR_OTHERLAYER);
599 rgbsps_set(LED_IND_EMOJI, THEME_COLOR_OTHERLAYER);
600 }
601
602 rgbsps_send();
603}
604
605void led_set_unicode_input_mode(void) {
606 rgbsps_set(LED_IND_LINUX, COLOR_BLANK);
607 rgbsps_set(LED_IND_APPLE, COLOR_BLANK);
608 rgbsps_set(LED_IND_WINDOWS, COLOR_BLANK);
609
610 switch (get_unicode_input_mode()) {
611 case UC_LNX:
612 rgbsps_set(LED_IND_LINUX, THEME_COLOR_LINUX);
613 break;
614 case UC_OSX:
615 rgbsps_set(LED_IND_APPLE, THEME_COLOR_APPLE);
616 break;
617 case UC_WIN:
618 case UC_WINC:
619 rgbsps_set(LED_IND_WINDOWS, THEME_COLOR_WINDOWS);
620 break;
621 }
622 rgbsps_send();
623}
624
625void led_set_output_ble(void) {
626 rgbsps_set(LED_IND_BLUETOOTH, THEME_COLOR_BLUETOOTH);
627 rgbsps_set(LED_IND_USB, COLOR_BLANK);
628 rgbsps_send();
629}
630
631void led_set_output_usb(void) {
632 rgbsps_set(LED_IND_BLUETOOTH, COLOR_BLANK);
633 rgbsps_set(LED_IND_USB, THEME_COLOR_USB);
634 rgbsps_send();
635}
636
637void led_set_output_none(void) {
638 rgbsps_set(LED_IND_BLUETOOTH, COLOR_BLANK);
639 rgbsps_set(LED_IND_USB, COLOR_BLANK);
640 rgbsps_send();
641}
642
643void led_init(void) {
644 // turn off all
645 rgbsps_turnoff();
646
647 // set trackpoint color
648 rgbsps_set(LED_TRACKPOINT1, THEME_COLOR_TP1);
649 rgbsps_set(LED_TRACKPOINT2, THEME_COLOR_TP2);
650 rgbsps_set(LED_TRACKPOINT3, THEME_COLOR_TP3);
651
652 // unicode input mode
653 led_set_unicode_input_mode();
654
655 // layer indicator
656 led_set_layer_indicator();
657 led_set_default_layer_indicator();
658
659 // clicky
660#ifdef FAUXCLICKY_ENABLE
661 if (fauxclicky_enabled) {
662 rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO);
663 } else {
664 rgbsps_set(LED_IND_AUDIO, COLOR_BLANK);
665 }
666#endif
667
668 rgbsps_send();
669}
670
671
672#endif // RGBSPS_ENABLE
673
674// keymaps
675
676const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
677
678/* Qwerty
679 * ,-----------------------------------------------------------------------------------.
680 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
681 * |------+------+------+------+------+-------------+------+------+------+------+------|
682 * | Esc | A | S | D | F | G | H | J | K | L | ' |Enter |
683 * |------+------+------+------+------+------|------+------+------+------+------+------|
684 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
685 * |------+------+------+------+------+------+------+------+------+------+------+------|
686 * | Ctrl | Alt | GUI | Punc | Num | Space | Fun |Greek | GUI |AltGr | Ctrl |
687 * `-----------------------------------------------------------------------------------'
688 */
689[_QWERTY] = KEYMAP_CUSTOM(
690 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
691 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT ,
692 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
693 KC_LCTL, KC_LALT, KC_LGUI, EMPTY, NUM, LSPACE, RSPACE, FUN, GREEK, KC_RGUI, C_RALT, KC_RCTL,
694 _______, _______, _______
695),
696
697/* Dvorak
698 * ,-----------------------------------------------------------------------------------.
699 * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp |
700 * |------+------+------+------+------+-------------+------+------+------+------+------|
701 * | Esc | A | O | E | U | I | D | H | T | N | S |Enter |
702 * |------+------+------+------+------+------|------+------+------+------+------+------|
703 * | Shift| / | Q | J | K | X | B | M | W | V | Z |Shift |
704 * |------+------+------+------+------+------+------+------+------+------+------+------|
705 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
706 * `-----------------------------------------------------------------------------------'
707 */
708#ifdef LAYOUT_DVORAK
709[_DVORAK] = KEYMAP_CUSTOM(
710 _______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______,
711 _______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______,
712 _______, KC_SLSH, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______,
713 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
714 _______, _______, _______
715),
716#endif
717
718/* Colemak
719 * ,-----------------------------------------------------------------------------------.
720 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
721 * |------+------+------+------+------+-------------+------+------+------+------+------|
722 * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
723 * |------+------+------+------+------+------|------+------+------+------+------+------|
724 * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
725 * |------+------+------+------+------+------+------+------+------+------+------+------|
726 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
727 * `-----------------------------------------------------------------------------------'
728 */
729
730#ifdef LAYOUT_COLEMAK
731[_COLEMAK] = KEYMAP_CUSTOM(
732 _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______,
733 _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______,
734 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
735 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
736 _______, _______, _______
737),
738#endif
739
740/* Norman
741 * ,-----------------------------------------------------------------------------------.
742 * | Tab | Q | W | D | F | K | J | U | R | L | ; | Bksp |
743 * |------+------+------+------+------+-------------+------+------+------+------+------|
744 * | Esc | A | S | E | T | G | Y | N | I | O | H |Enter |
745 * |------+------+------+------+------+------|------+------+------+------+------+------|
746 * | Shift| Z | X | C | V | B | P | M | , | . | / |Shift |
747 * |------+------+------+------+------+------+------+------+------+------+------+------|
748 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
749 * `-----------------------------------------------------------------------------------'
750 */
751
752#ifdef LAYOUT_NORMAN
753[_NORMAN] = KEYMAP_CUSTOM(
754 _______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_QUOT, _______,
755 _______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______,
756 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
757 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
758 _______, _______, _______
759),
760#endif
761
762/* Workman
763 * ,-----------------------------------------------------------------------------------.
764 * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
765 * |------+------+------+------+------+-------------+------+------+------+------+------|
766 * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
767 * |------+------+------+------+------+------|------+------+------+------+------+------|
768 * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
769 * |------+------+------+------+------+------+------+------+------+------+------+------|
770 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
771 * `-----------------------------------------------------------------------------------'
772 */
773
774#ifdef LAYOUT_WORKMAN
775[_WORKMAN] = KEYMAP_CUSTOM(
776 _______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______,
777 _______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______,
778 _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______,
779 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
780 _______, _______, _______
781),
782#endif
783
784/* Punc
785 * ,-----------------------------------------------------------------------------------.
786 * | ~ | ! | @ | # | $ | % | ^ | & | * | ≤ | ≥ | ` |
787 * |------+------+------+------+------+-------------+------+------+------+------+------|
788 * | | * | \ | - | = | / | ≠ | ( | ) | < | > | |
789 * |------+------+------+------+------+------|------+------+------+------+------+------|
790 * | & | ^ | | | _ | + | ? | ± | [ | ] | { | } | |
791 * |------+------+------+------+------+------+------+------+------+------+------+------|
792 * | | | | | | | | | | : | |
793 * `-----------------------------------------------------------------------------------'
794 */
795[_PUNC] = KEYMAP_CUSTOM(
796 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______,
797 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______,
798 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______,
799 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COLN, _______,
800 _______, _______, _______
801),
802
803/* Num
804 * ,-----------------------------------------------------------------------------------.
805 * | ~ | ! | @ | # | $ | % | A | 7 | 8 | 9 | D | |
806 * |------+------+------+------+------+-------------+------+------+------+------+------|
807 * | ` | * | \ | - | = | / | B | 4 | 5 | 6 | E | |
808 * |------+------+------+------+------+------|------+------+------+------+------+------|
809 * | & | ^ | | | _ | + | ? | C | 1 | 2 | 3 | F | |
810 * |------+------+------+------+------+------+------+------+------+------+------+------|
811 * | | | x | | | | | 0 | , | . | : | |
812 * `-----------------------------------------------------------------------------------'
813 */
814[_NUM] = KEYMAP_CUSTOM(
815 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_1, KC_2, KC_3, S(KC_D), _______,
816 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______,
817 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_7, KC_8, KC_9, S(KC_F), _______,
818 _______, _______, KC_X, _______, _______, _______, _______, FUN0 , KC_COMM, KC_DOT, KC_COLN, _______,
819 _______, _______, _______
820),
821
822/* Func
823 * ,-----------------------------------------------------------------------------------.
824 * | | F1 | F2 | F3 | F4 | Ins | | PgUp | Up | PgDn | PgUp | |
825 * |------+------+------+------+------+-------------+------+------+------+------+------|
826 * | Caps | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | |
827 * |------+------+------+------+------+------|------+------+------+------+------+------|
828 * | | F9 | F10 | F11 | F12 |Pause | | | Home | End | | |
829 * |------+------+------+------+------+------+------+------+------+------+------+------|
830 * | | | | | | | | | | | |
831 * `-----------------------------------------------------------------------------------'
832 */
833[_FUN] = KEYMAP_CUSTOM(
834 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_INS, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
835 KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______,
836 _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
837 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
838 _______, _______, _______
839),
840
841/* Uppercase Greek
842 * ,-----------------------------------------------------------------------------------.
843 * | | | | | | | | | | | | |
844 * |------+------+------+------+------+-------------+------+------+------+------+------|
845 * | | | | | | | | | | | | |
846 * |------+------+------+------+------+------+------+------+------+------+------+------|
847 * | | | | | | | | | | | | |
848 * |------+------+------+------+------+------+------+------+------+------+------+------|
849 * | | | | | | | | | | | | |
850 * `-----------------------------------------------------------------------------------'
851 */
852[_GREEKU] = KEYMAP_CUSTOM(
853 _______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______,
854 _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______,
855 _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), KC_COMM, KC_DOT, KC_SLSH, _______,
856 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
857 _______, _______, _______
858),
859
860/* Lowercase Greek
861 * ,-----------------------------------------------------------------------------------.
862 * | | | | | | | | | | | | |
863 * |------+------+------+------+------+-------------+------+------+------+------+------|
864 * | | | | | | | | | | | | |
865 * |------+------+------+------+------+------+------+------+------+------+------+------|
866 * | | | | | | | | | | | | |
867 * |------+------+------+------+------+------+------+------+------+------+------+------|
868 * | | | | | | | | | | | | |
869 * `-----------------------------------------------------------------------------------'
870 */
871[_GREEKL] = KEYMAP_CUSTOM(
872 _______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______,
873 _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______,
874 _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), KC_COMM, KC_DOT, KC_SLSH, _______,
875 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
876 _______, _______, _______
877),
878
879/* Empty
880 * ,-----------------------------------------------------------------------------------.
881 * | | | | | | | | | | | | |
882 * |------+------+------+------+------+-------------+------+------+------+------+------|
883 * | | | | | | | | | | | | |
884 * |------+------+------+------+------+------+------+------+------+------+------+------|
885 * | | | | | | | | | | | | |
886 * |------+------+------+------+------+------+------+------+------+------+------+------|
887 * | | | | | | | | | | | | |
888 * `-----------------------------------------------------------------------------------'
889 */
890[_EMPTY] = KEYMAP_CUSTOM(
891 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
892 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
893 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
894 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
895 _______, _______, _______
896),
897
898/* Emoji
899 * ,-----------------------------------------------------------------------------------.
900 * | | | | | | | | | | | | |
901 * |------+------+------+------+------+-------------+------+------+------+------+------|
902 * | | | | | | | | | | | | |
903 * |------+------+------+------+------+------+------+------+------+------+------+------|
904 * | | | | | | | | | | | | |
905 * |------+------+------+------+------+------+------+------+------+------+------+------|
906 * | | | | | | | | | | | | |
907 * `-----------------------------------------------------------------------------------'
908 */
909[_EMOJI] = KEYMAP_CUSTOM(
910 X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
911 X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
912 X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
913 X(POO), X(EYES), X(HUNRD),_______, X(SKULL),X(HORNS), X(HALO), X(FEAR),_______,X(YUMMY),X(DISAP),X(NOEVK),
914 _______, _______, _______
915),
916
917/* GUI
918 * ,-----------------------------------------------------------------------------------.
919 * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
920 * |------+------+------+------+------+-------------+------+------+------+------+------|
921 * | Esc | | Btab | Esc | Tab | | | Prev | | Next | | |
922 * |------+------+------+------+------+------+------+------+------+------+------+------|
923 * | | | Prev | Play | Next | | | | | | | |
924 * |------+------+------+------+------+------+------+------+------+------+------+------|
925 * | | | | | | | | | | | | |
926 * `-----------------------------------------------------------------------------------'
927 */
928[_GUI] = KEYMAP_CUSTOM(
929 XXXXXXX, G(KC_1), G(KC_2), G(KC_3), G(KC_4), G(KC_5), G(KC_6), G(KC_7), G(KC_8), G(KC_9), G(KC_0), XXXXXXX,
930 KC_ESC, XXXXXXX, S(KC_TAB),KC_ESC, KC_TAB, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX,
931 XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, KC_SPC, KC_SPC, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
932 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
933 _______, _______, _______
934),
935
936/* Sys
937 * ,-----------------------------------------------------------------------------------.
938 * | |Qwerty| Win | |Reset | | | USB | | | | |
939 * |------+------+------+------+------+-------------+------+------+------+------+------|
940 * | |Audio | |Dvorak| | Glow | | |WorkMn|Linux | | |
941 * |------+------+------+------+------+------+------+------+------+------+------+------|
942 * | | | |Colmak| | BLE |Norman|MacOS | | | | |
943 * |------+------+------+------+------+------+------+------+------+------+------+------|
944 * | | | | | | | | | | | | |
945 * `-----------------------------------------------------------------------------------'
946 */
947[_SYS] = KEYMAP_CUSTOM(
948 DEBUG, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, RGBDEMO,
949 XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX,
950 XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BT, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
951 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
952 _______, _______, _______
953),
954
955
956};
957
958void persistent_default_layer_set(uint16_t default_layer) {
959 eeconfig_update_default_layer(default_layer);
960 default_layer_set(default_layer);
961#ifdef RGBSPS_ENABLE
962 led_set_default_layer_indicator();
963#endif
964}
965
966#ifdef DOUBLESPACE_LAYER_ENABLE
967void process_doublespace(bool pressed, bool *isactive, bool *otheractive, bool *isemitted) {
968 if (pressed) {
969 *isactive = true;
970 if (*otheractive) {
971 layer_on(_SPACE);
972 register_code(KC_LALT); // sends alt and enter layer
973 space_layer_entered = true;
974 }
975 } else {
976 *isactive = false;
977 if (space_layer_entered) {
978 unregister_code(KC_LALT); // release alt and exit layer
979 layer_off(_SPACE);
980 if (!*otheractive) {
981 space_layer_entered = false;
982 }
983 } else {
984 if (!*isemitted) {
985 register_code(KC_SPC);
986 unregister_code(KC_SPC);
987 }
988 *isemitted = false;
989 }
990 }
991}
992#endif
993
994uint32_t layer_state_set_kb(uint32_t state)
995{
996 // turn on punc layer if both fun & num are on
997 if ((state & ((1UL<<_NUM) | (1UL<<_FUN))) == ((1UL<<_NUM) | (1UL<<_FUN))) {
998 state |= (1UL<<_PUNC);
999 } else {
1000 state &= ~(1UL<<_PUNC);
1001 }
1002
1003 // turn on emoji layer if empty and greek layer are on
1004 if (
1005 (state & ((1UL<<_EMPTY) | (1UL<<_GREEKU))) == ((1UL<<_EMPTY) | (1UL<<_GREEKU))
1006 || (state & ((1UL<<_EMPTY) | (1UL<<_GREEKL))) == ((1UL<<_EMPTY) | (1UL<<_GREEKL))
1007 ) {
1008 state |= (1UL<<_EMOJI);
1009 } else {
1010 state &= ~(1UL<<_EMOJI);
1011 }
1012 return state;
1013}
1014
1015bool process_record_user(uint16_t keycode, keyrecord_t *record) {
1016 static bool lshift = false;
1017 static bool rshift = false;
1018 static uint8_t layer = 0;
1019
1020 lshift = keyboard_report->mods & MOD_BIT(KC_LSFT);
1021 rshift = keyboard_report->mods & MOD_BIT(KC_RSFT);
1022 layer = biton32(layer_state);
1023
1024#ifdef DOUBLESPACE_LAYER_ENABLE
1025 // double-space: send space immediately if any other key depressed before space is released
1026 if ((lspace_active ^ rspace_active)
1027 && keycode != LSPACE
1028 && keycode != RSPACE
1029 && record->event.pressed)
1030 {
1031 if (lspace_active) {
1032 if (!lspace_emitted) {
1033 register_code(KC_SPC);
1034 unregister_code(KC_SPC);
1035 }
1036 lspace_emitted = true;
1037 }
1038 if (rspace_active) {
1039 if (!rspace_emitted) {
1040 register_code(KC_SPC);
1041 unregister_code(KC_SPC);
1042 }
1043 rspace_emitted = true;
1044 }
1045 }
1046
1047 if (layer == _SPACE && keycode != S(KC_TAB) && keycode != KC_TAB && keycode != KC_ESC && keycode != XXXXXXX) {
1048 if (record->event.pressed) {
1049 unregister_code(KC_LALT);
1050 } else {
1051 register_code(KC_LALT);
1052 }
1053 }
1054#endif
1055
1056 switch (keycode) {
1057
1058#ifdef DOUBLESPACE_LAYER_ENABLE
1059 // double-space enter space layer
1060 case LSPACE:
1061 process_doublespace(record->event.pressed, &lspace_active, &rspace_active, &lspace_emitted);
1062 return false;
1063 break;
1064 case RSPACE:
1065 process_doublespace(record->event.pressed, &rspace_active, &lspace_active, &rspace_emitted);
1066 return false;
1067 break;
1068#endif
1069
1070 // handle greek layer shift
1071 case KC_LSFT:
1072 case KC_RSFT:
1073 ;
1074 if (layer == _GREEKU || layer == _GREEKL) {
1075 if (record->event.pressed) {
1076 layer_on(_GREEKU);
1077 layer_off(_GREEKL);
1078 } else {
1079 if (lshift ^ rshift) { // if only one shift was pressed
1080 layer_on(_GREEKL);
1081 layer_off(_GREEKU);
1082 }
1083 }
1084 }
1085 return true;
1086 break;
1087
1088 // press both ctrls to activate SYS layer
1089 case KC_LCTL:
1090 case KC_RCTL:
1091 ;
1092 bool lctrl = keyboard_report->mods & MOD_BIT(KC_LCTL);
1093 bool rctrl = keyboard_report->mods & MOD_BIT(KC_RCTL);
1094 if (record->event.pressed) {
1095 if (lctrl ^ rctrl) { // if only one ctrl was pressed
1096 layer_on(_SYS);
1097 }
1098 } else {
1099 layer_off(_SYS);
1100 }
1101 return true;
1102 break;
1103
1104 // QWERTZ style comma and dot: semicolon and colon when shifted
1105 case KC_COMM:
1106 if (record->event.pressed) {
1107 if (lshift || rshift) {
1108 if (lshift) unregister_code(KC_LSFT);
1109 if (rshift) unregister_code(KC_RSFT);
1110 register_code(KC_SCLN);
1111 unregister_code(KC_SCLN);
1112 if (lshift) register_code(KC_LSFT);
1113 if (rshift) register_code(KC_RSFT);
1114 } else {
1115 register_code(KC_COMM);
1116 unregister_code(KC_COMM);
1117 }
1118 }
1119 return false;
1120 break;
1121 case KC_DOT:
1122 if (record->event.pressed) {
1123 if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) || (keyboard_report->mods & MOD_BIT(KC_RSFT))) {
1124 register_code(KC_SCLN);
1125 unregister_code(KC_SCLN);
1126 } else {
1127 register_code(KC_DOT);
1128 unregister_code(KC_DOT);
1129 }
1130 }
1131 return false;
1132 break;
1133
1134 // layout switchers
1135 case QWERTY:
1136 if (record->event.pressed) {
1137 persistent_default_layer_set(1UL<<_QWERTY);
1138 }
1139 return false;
1140 break;
1141#ifdef LAYOUT_DVORAK
1142 case DVORAK:
1143 if (record->event.pressed) {
1144 persistent_default_layer_set(1UL<<_DVORAK);
1145 }
1146 return false;
1147 break;
1148#endif
1149#ifdef LAYOUT_COLEMAK
1150 case COLEMAK:
1151 if (record->event.pressed) {
1152 persistent_default_layer_set(1UL<<_COLEMAK);
1153 }
1154 return false;
1155 break;
1156#endif
1157#ifdef LAYOUT_WORKMAN
1158 case WORKMAN:
1159 if (record->event.pressed) {
1160 persistent_default_layer_set(1UL<<_WORKMAN);
1161 }
1162 return false;
1163 break;
1164#endif
1165#ifdef LAYOUT_NORMAN
1166 case NORMAN:
1167 if (record->event.pressed) {
1168 persistent_default_layer_set(1UL<<_NORMAN);
1169 }
1170 return false;
1171 break;
1172#endif
1173
1174 // only process Fnumber on key release, and only when layer switcher is still pressed.
1175 // this is to avoid accidental presses on potentially destructive keys
1176 case KC_F1 ... KC_F12:
1177 case KC_PAUS:
1178 case KC_PSCR:
1179 case KC_INS:
1180 if (!record->event.pressed && layer == _FUN) { // key released and still in FUN layer
1181 register_code(keycode);
1182 unregister_code(keycode);
1183 }
1184 return false;
1185 break;
1186
1187 // layer switcher
1188 //
1189 case GREEK:
1190 if (record->event.pressed) {
1191 if (lshift || rshift) {
1192 layer_on(_GREEKU);
1193 layer_off(_GREEKL);
1194 } else {
1195 layer_on(_GREEKL);
1196 layer_off(_GREEKU);
1197 }
1198 } else {
1199 layer_off(_GREEKU);
1200 layer_off(_GREEKL);
1201 }
1202 return false;
1203 break;
1204
1205 // OS switchers
1206 case LINUX:
1207 set_unicode_input_mode(UC_LNX);
1208#ifdef RGBSPS_ENABLE
1209 led_set_unicode_input_mode();
1210#endif
1211 return false;
1212 break;
1213 case WIN:
1214 set_unicode_input_mode(UC_WINC);
1215#ifdef RGBSPS_ENABLE
1216 led_set_unicode_input_mode();
1217#endif
1218 return false;
1219 break;
1220 case OSX:
1221 set_unicode_input_mode(UC_OSX);
1222#ifdef RGBSPS_ENABLE
1223 led_set_unicode_input_mode();
1224#endif
1225 return false;
1226 break;
1227
1228 // glow mode changer
1229#ifdef RGBSPS_ENABLE
1230 case GLOW:
1231 if (record->event.pressed) {
1232 glow_mode++;
1233 if (glow_mode > GLOW_FULL) {
1234 glow_mode = GLOW_NONE;
1235 }
1236 led_reset();
1237 rgbsps_send();
1238 }
1239 return false;
1240 break;
1241#endif
1242
1243 // faux clicky indicator
1244#ifdef FAUXCLICKY_ENABLE
1245 case FC_TOG:
1246#ifdef RGBSPS_ENABLE
1247 if (fauxclicky_enabled) {
1248 rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO);
1249 } else {
1250 rgbsps_set(LED_IND_AUDIO, COLOR_BLANK);
1251 }
1252 rgbsps_send();
1253#endif
1254 return true;
1255 break;
1256#endif
1257
1258#ifdef RGBSPS_DEMO_ENABLE
1259 case RGBDEMO:
1260 led_demo();
1261 return false;
1262 break;
1263#endif
1264 }
1265 return true;
1266}
1267
1268void set_output_user(uint8_t output) {
1269#ifdef MODULE_ADAFRUIT_BLE
1270 switch(output) {
1271 case OUTPUT_USB:
1272 led_set_output_usb();
1273 break;
1274 case OUTPUT_BLUETOOTH:
1275 led_set_output_ble();
1276 break;
1277 default:
1278 led_set_output_none();
1279 }
1280#endif
1281}
1282
1283void matrix_init_user() {
1284 _delay_ms(500); // give time for usb to initialize
1285
1286 set_unicode_input_mode(UC_LNX);
1287
1288#ifdef RGBSPS_ENABLE
1289 led_init();
1290#endif
1291
1292 // auto detect output on init
1293#ifdef MODULE_ADAFRUIT_BLE
1294 uint8_t output = auto_detect_output();
1295 if (output == OUTPUT_USB) {
1296 set_output(OUTPUT_USB);
1297 } else {
1298 set_output(OUTPUT_BLUETOOTH);
1299 }
1300#endif
1301}
1302
1303void turn_off_capslock() {
1304 if (capslock) {
1305 register_code(KC_CAPS);
1306 unregister_code(KC_CAPS);
1307 }
1308}
1309
1310#ifdef RGBSPS_ENABLE
1311 void matrix_scan_user(void) {
1312 led_set_layer_indicator();
1313 }
1314
1315 void battery_poll(uint8_t level) {
1316 rgbsps_sethsv(LED_IND_BATTERY, level * 120/255, 255, 15);
1317 rgbsps_send();
1318 }
1319
1320 void led_set_user(uint8_t usb_led) {
1321 bool new_capslock = usb_led & (1<<USB_LED_CAPS_LOCK);
1322 if (new_capslock ^ capslock) { // capslock state is different
1323 if ((capslock = new_capslock)) {
1324 rgbsps_set(LED_IND_CAPSLOCK, THEME_COLOR_CAPSLOCK);
1325 } else {
1326 rgbsps_set(LED_IND_CAPSLOCK, COLOR_BLANK);
1327 }
1328 rgbsps_send();
1329 }
1330 }
1331#endif
1332
1333#ifdef PS2_MOUSE_ENABLE
1334 void ps2_mouse_init_user() {
1335 uint8_t rcv;
1336
1337 // set TrackPoint sensitivity
1338 PS2_MOUSE_SEND(0xE2, "tpsens: 0xE2");
1339 PS2_MOUSE_SEND(0x81, "tpsens: 0x81");
1340 PS2_MOUSE_SEND(0x4A, "tpsens: 0x4A");
1341 PS2_MOUSE_SEND(0x49, "tpsens: 0x59");
1342
1343 // set TrackPoint Negative Inertia factor
1344 PS2_MOUSE_SEND(0xE2, "tpnegin: 0xE2");
1345 PS2_MOUSE_SEND(0x81, "tpnegin: 0x81");
1346 PS2_MOUSE_SEND(0x4D, "tpnegin: 0x4D");
1347 PS2_MOUSE_SEND(0x06, "tpnegin: 0x06");
1348
1349 // set TrackPoint speed
1350 // (transfer function upper plateau speed)
1351 PS2_MOUSE_SEND(0xE2, "tpsp: 0xE2");
1352 PS2_MOUSE_SEND(0x81, "tpsp: 0x81");
1353 PS2_MOUSE_SEND(0x60, "tpsp: 0x60");
1354 PS2_MOUSE_SEND(0x61, "tpsp: 0x61");
1355
1356 // inquire pts status
1357 rcv = ps2_host_send(0xE2);
1358 rcv = ps2_host_send(0x2C);
1359 rcv = ps2_host_recv_response();
1360 if ((rcv & 1) == 1) {
1361 // if on, disable pts
1362 rcv = ps2_host_send(0xE2);
1363 rcv = ps2_host_send(0x47);
1364 rcv = ps2_host_send(0x2C);
1365 rcv = ps2_host_send(0x01);
1366 }
1367 }
1368#endif \ No newline at end of file
diff --git a/keyboards/handwired/promethium/keymaps/default/rgbtheme.h b/keyboards/handwired/promethium/keymaps/default/rgbtheme.h
new file mode 100644
index 000000000..e60971035
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/default/rgbtheme.h
@@ -0,0 +1 @@
#include "rgbtheme_default.h"
diff --git a/keyboards/handwired/promethium/keymaps/default/rgbtheme_carbon.h b/keyboards/handwired/promethium/keymaps/default/rgbtheme_carbon.h
new file mode 100644
index 000000000..8e0a98b09
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/default/rgbtheme_carbon.h
@@ -0,0 +1,36 @@
1#include "color.h"
2
3#define THEME_COLOR_LINUX COLOR_WHITE
4#define THEME_COLOR_APPLE COLOR_WHITE
5#define THEME_COLOR_WINDOWS COLOR_WHITE
6
7#define THEME_COLOR_QWERTY COLOR_RED
8#define THEME_COLOR_ALT COLOR_RED
9
10#define THEME_COLOR_AUDIO COLOR_GREEN
11
12#define THEME_COLOR_BLUETOOTH 7,7,15
13#define THEME_COLOR_USB COLOR_WHITE
14
15#define THEME_COLOR_CAPSLOCK COLOR_RED
16
17#define THEME_COLOR_GUI COLOR_MAGENTA
18#define THEME_COLOR_FUN COLOR_RED
19#define THEME_COLOR_NUM 7,7,15
20#define THEME_COLOR_PUNC COLOR_GREEN
21#define THEME_COLOR_GREEK COLOR_CYAN
22#define THEME_COLOR_EMOJI COLOR_YELLOW
23#define THEME_COLOR_OTHERLAYER COLOR_GRAY
24
25#define THEME_COLOR_GLOW1_HOME COLOR_ORANGE
26#define THEME_COLOR_GLOW1_HOMING COLOR_RED
27
28#define THEME_COLOR_GLOW2_ALPHA COLOR_ORANGE
29#define THEME_COLOR_GLOW2_MODS COLOR_ORANGE
30#define THEME_COLOR_GLOW2_FN COLOR_ORANGE
31#define THEME_COLOR_GLOW2_HOME COLOR_ORANGE
32#define THEME_COLOR_GLOW2_HOMING COLOR_RED
33
34#define THEME_COLOR_TP1 COLOR_ORANGE
35#define THEME_COLOR_TP2 COLOR_RED
36#define THEME_COLOR_TP3 COLOR_ORANGE \ No newline at end of file
diff --git a/keyboards/handwired/promethium/keymaps/default/rgbtheme_default.h b/keyboards/handwired/promethium/keymaps/default/rgbtheme_default.h
new file mode 100644
index 000000000..4c3fb1369
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/default/rgbtheme_default.h
@@ -0,0 +1,36 @@
1#include "color.h"
2
3#define THEME_COLOR_LINUX COLOR_WHITE
4#define THEME_COLOR_APPLE COLOR_WHITE
5#define THEME_COLOR_WINDOWS COLOR_WHITE
6
7#define THEME_COLOR_QWERTY COLOR_RED
8#define THEME_COLOR_ALT COLOR_RED
9
10#define THEME_COLOR_AUDIO COLOR_GREEN
11
12#define THEME_COLOR_BLUETOOTH COLOR_BLUE
13#define THEME_COLOR_USB COLOR_WHITE
14
15#define THEME_COLOR_CAPSLOCK COLOR_RED
16
17#define THEME_COLOR_GUI COLOR_MAGENTA
18#define THEME_COLOR_FUN COLOR_RED
19#define THEME_COLOR_NUM COLOR_BLUE
20#define THEME_COLOR_PUNC COLOR_GREEN
21#define THEME_COLOR_GREEK COLOR_CYAN
22#define THEME_COLOR_EMOJI COLOR_YELLOW
23#define THEME_COLOR_OTHERLAYER COLOR_GRAY
24
25#define THEME_COLOR_GLOW1_HOME COLOR_GRAY
26#define THEME_COLOR_GLOW1_HOMING COLOR_RED
27
28#define THEME_COLOR_GLOW2_ALPHA COLOR_GRAY
29#define THEME_COLOR_GLOW2_MODS COLOR_GREEN
30#define THEME_COLOR_GLOW2_FN COLOR_BLUE
31#define THEME_COLOR_GLOW2_HOME COLOR_RED
32#define THEME_COLOR_GLOW2_HOMING COLOR_YELLOW
33
34#define THEME_COLOR_TP1 COLOR_RED
35#define THEME_COLOR_TP2 COLOR_BLUE
36#define THEME_COLOR_TP3 COLOR_RED \ No newline at end of file
diff --git a/keyboards/handwired/promethium/keymaps/default/rules.mk b/keyboards/handwired/promethium/keymaps/default/rules.mk
new file mode 100644
index 000000000..a0d4261fa
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/default/rules.mk
@@ -0,0 +1,26 @@
1
2
3# Build Options
4# change to "no" to disable the options, or define them in the Makefile in
5# the appropriate keymap folder that will get included automatically
6#
7BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
8MOUSEKEY_ENABLE = no # Mouse keys(+4700)
9EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
10CONSOLE_ENABLE = no # Console for debug(+400)
11COMMAND_ENABLE = no # Commands for debug and configuration
12NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
13BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
14MIDI_ENABLE = no # MIDI controls
15AUDIO_ENABLE = no # Audio output on port C6
16UNICODE_ENABLE = no # Unicode
17UNICODEMAP_ENABLE = yes
18BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
19RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
20PS2_MOUSE_ENABLE = yes
21PS2_USE_INT = yes
22FAUXCLICKY_ENABLE = yes
23BLUETOOTH = AdafruitBLE
24
25# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
26SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend