aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/handwired/promethium/config.h104
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/README.md44
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/config.h8
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c452
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/readme.md0
-rw-r--r--keyboards/handwired/promethium/promethium.c4
-rw-r--r--keyboards/handwired/promethium/promethium.h106
-rw-r--r--keyboards/planck/keymaps/priyadi/config.h39
-rw-r--r--keyboards/planck/keymaps/priyadi/keymap.c681
9 files changed, 468 insertions, 970 deletions
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
index fd45c2bfe..24f02993f 100644
--- a/keyboards/handwired/promethium/config.h
+++ b/keyboards/handwired/promethium/config.h
@@ -152,6 +152,110 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
152//#define NO_ACTION_MACRO 152//#define NO_ACTION_MACRO
153//#define NO_ACTION_FUNCTION 153//#define NO_ACTION_FUNCTION
154 154
155#define PS2_INIT_DELAY 2000
156#define BATTERY_PIN 9
157#define BATTERY_POLL 30000
158#define MAX_VOLTAGE 4.2
159#define MIN_VOLTAGE 3.2
160
161#define KEYMAP( \
162 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
163 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
164 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
165 k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \
166) \
167{ \
168 {k11, k12, k13, k14, k15, k16}, \
169 {k21, k22, k23, k24, k25, k26}, \
170 {k31, k32, k33, k34, k35, k36}, \
171 {k41, k42, k43, k44, k45, k46}, \
172 {k17, k18, k19, k1a, k1b, k1c}, \
173 {k27, k28, k29, k2a, k2b, k2c}, \
174 {k37, k38, k39, k3a, k3b, k3c}, \
175 {k47, k48, k49, k4a, k4b, k4c} \
176}
177
178#ifndef __ASSEMBLER__ // assembler doesn't like enum in .h file
179enum led_sequence {
180 LED_IND_BLUETOOTH,
181 LED_IND_USB,
182 LED_IND_BATTERY,
183
184 LED_IND_FUN,
185 LED_IND_NUM,
186 LED_IND_EMOJI,
187
188 LED_BKSP,
189 LED_ENT,
190 LED_RSFT,
191 LED_RCTL,
192
193 LED_RGUI,
194 LED_SLSH,
195 LED_SCLN,
196 LED_P,
197
198 LED_O,
199 LED_L,
200 LED_DOT,
201 LED_RALT,
202
203 LED_EMOJI,
204 LED_COMM,
205 LED_K,
206 LED_I,
207
208 LED_U,
209 LED_J,
210 LED_M,
211 LED_FUN,
212
213 LED_RSPC,
214 LED_N,
215 LED_HH,
216 LED_Y,
217
218 LED_TRACKPOINT3,
219 LED_TRACKPOINT2,
220 LED_TRACKPOINT1,
221
222 LED_LSPC,
223 LED_B,
224 LED_G,
225 LED_T,
226
227 LED_R,
228 LED_F,
229 LED_V,
230 LED_NUM,
231
232 LED_PUNC,
233 LED_C,
234 LED_D,
235 LED_E,
236
237 LED_W,
238 LED_S,
239 LED_X,
240 LED_LALT,
241
242 LED_LGUI,
243 LED_Z,
244 LED_A,
245 LED_Q,
246
247 LED_TAB,
248 LED_ESC,
249 LED_LSFT,
250 LED_LCTL,
251
252 LED_TOTAL
253};
254
255#define RGB_DI_PIN B5
256#define RGBSPS_NUM LED_TOTAL
257#endif
258
155/* PS/2 mouse */ 259/* PS/2 mouse */
156#ifdef PS2_USE_BUSYWAIT 260#ifdef PS2_USE_BUSYWAIT
157# define PS2_CLOCK_PORT PORTD 261# define PS2_CLOCK_PORT PORTD
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/README.md b/keyboards/handwired/promethium/keymaps/priyadi/README.md
new file mode 100644
index 000000000..37c2be6f9
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/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 PD2. 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
40On Planck, SYS-A (mnemonic: audio) toggles faux clicky: use buzzer to emit clicks on key presses and releases.
41
42On Promethium there are 6 indicator LEDs, and under switch LEDs on each switches, including Trackpoint buttons. Totaling 57 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/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h
index 53059ca7d..3f5dd5817 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/config.h
+++ b/keyboards/handwired/promethium/keymaps/priyadi/config.h
@@ -3,6 +3,8 @@
3 3
4#include "../../config.h" 4#include "../../config.h"
5 5
6#define PRIYADI_PROMETHIUM
7
6/* bootmagic salt key */ 8/* bootmagic salt key */
7#define BOOTMAGIC_KEY_SALT KC_ESC 9#define BOOTMAGIC_KEY_SALT KC_ESC
8 10
@@ -11,8 +13,9 @@
11 13
12#define PREVENT_STUCK_MODIFIERS 14#define PREVENT_STUCK_MODIFIERS
13 15
14#define RGB_DI_PIN B5 16#define RGBSPS_ENABLE
15#define RGBSPS_NUM 57 17
18#define UNICODE_TYPE_DELAY 0
16 19
17#define LAYOUT_DVORAK 20#define LAYOUT_DVORAK
18#define LAYOUT_COLEMAK 21#define LAYOUT_COLEMAK
@@ -20,5 +23,6 @@
20#define LAYOUT_WORKMAN 23#define LAYOUT_WORKMAN
21 24
22#define DOUBLESPACE_LAYER_ENABLE 25#define DOUBLESPACE_LAYER_ENABLE
26// #define TOLELOT_ENABLE
23 27
24#endif 28#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
index 1ad34612e..2c43f9884 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -1,14 +1,44 @@
1// This is the canonical layout file for the Quantum project. If you want to add another keyboard, 1/*
2// this is the style you want to emulate. 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
3 23
4#include "promethium.h"
5#include "action_layer.h" 24#include "action_layer.h"
25#ifdef AUDIO_ENABLE
26 #include "audio.h"
27 #include "musical_notes.h"
28#endif
6#include "eeconfig.h" 29#include "eeconfig.h"
7#include "process_unicode.h" 30#include "process_unicode.h"
8#include "quantum.h" 31#include "quantum.h"
32#ifdef RGBSPS_ENABLE
9#include "rgbsps.h" 33#include "rgbsps.h"
34#endif
35#ifdef PS2_MOUSE_ENABLE
10#include "ps2_mouse.h" 36#include "ps2_mouse.h"
11#include "ps2.h" 37#include "ps2.h"
38#endif
39#ifdef FAUXCLICKY_ENABLE
40#include "fauxclicky.h"
41#endif
12#include "outputselect.h" 42#include "outputselect.h"
13#include "led.h" 43#include "led.h"
14#define COUNT(x) (sizeof (x) / sizeof (*(x))) 44#define COUNT(x) (sizeof (x) / sizeof (*(x)))
@@ -41,25 +71,29 @@ enum glow_modes {
41}; 71};
42uint8_t glow_mode = GLOW_MIN; 72uint8_t glow_mode = GLOW_MIN;
43 73
74void turn_off_capslock(void);
44extern keymap_config_t keymap_config; 75extern keymap_config_t keymap_config;
45 76
77// layers, ordering is important!
46enum layers { 78enum layers {
47 _QWERTY, 79 _QWERTY,
48 _DVORAK, 80 _DVORAK,
49 _COLEMAK, 81 _COLEMAK,
50 _WORKMAN, 82 _WORKMAN,
51 _NORMAN, 83 _NORMAN,
52 84 _DEFAULT_LAYER_MAX = _NORMAN,
53 _PUNC,
54 _NUM,
55 _FUNC,
56 85
57 _GREEKU, 86 _GREEKU,
58 _GREEKL, 87 _GREEKL,
59 88
89 _NUM,
90 _FUN,
91 _PUNC,
92
93 _EMPTY,
60 _EMOJI, 94 _EMOJI,
61 _GUI, 95 _GUI,
62 _SYS, 96 _SYS
63}; 97};
64 98
65// double-space layer 99// double-space layer
@@ -74,9 +108,6 @@ enum planck_keycodes {
74 NORMAN, 108 NORMAN,
75 109
76 // layer switchers 110 // layer switchers
77 PUNC,
78 NUM,
79 FUNC,
80 EMOJI, 111 EMOJI,
81 GUI, 112 GUI,
82 GREEK, 113 GREEK,
@@ -90,9 +121,22 @@ enum planck_keycodes {
90 LSPACE, 121 LSPACE,
91 RSPACE, 122 RSPACE,
92 GLOW, 123 GLOW,
93 AUDIO 124
125 // stub
126#ifndef FAUXCLICKY_ENABLE
127 FC_TOG,
128#endif
129#ifndef ADAFRUIT_BLE_ENABLE
130 OUT_BLE,
131#endif
132 KEYCODE_END
94}; 133};
95 134
135#define EMPTY MO(_EMPTY)
136#define NUM MO(_NUM)
137#define FUN MO(_FUN)
138#define FUN0 LT(_FUN, KC_0)
139
96// unicode map 140// unicode map
97 141
98enum unicode_name { 142enum unicode_name {
@@ -196,6 +240,11 @@ enum unicode_name {
196 LOMEG, 240 LOMEG,
197 241
198 FSIGM, 242 FSIGM,
243
244 LTEQ,
245 GTEQ,
246 NOTEQ,
247 PLMIN,
199}; 248};
200 249
201const uint32_t PROGMEM unicode_map[] = { 250const uint32_t PROGMEM unicode_map[] = {
@@ -297,10 +346,17 @@ const uint32_t PROGMEM unicode_map[] = {
297 [LPSI] = 0x03C8, 346 [LPSI] = 0x03C8,
298 [LOMEG] = 0x03C9, 347 [LOMEG] = 0x03C9,
299 [FSIGM] = 0x03C2, 348 [FSIGM] = 0x03C2,
349
350 // other
351 [LTEQ] = 0x2264, // less than or equal
352 [GTEQ] = 0x2265, // greater than or equal
353 [NOTEQ] = 0x2260, // not equal
354 [PLMIN] = 0xB1, // plus minus
300}; 355};
301 356
302// RGBSPS 357// RGBSPS
303 358
359#ifdef RGBSPS_ENABLE
304const uint8_t PROGMEM LED_ALNUM[] = { 360const uint8_t PROGMEM LED_ALNUM[] = {
305 LED_Z, 361 LED_Z,
306 LED_A, 362 LED_A,
@@ -365,14 +421,14 @@ const uint8_t PROGMEM LED_MODS[] = {
365const uint8_t PROGMEM LED_FN[] = { 421const uint8_t PROGMEM LED_FN[] = {
366 LED_PUNC, 422 LED_PUNC,
367 LED_NUM, 423 LED_NUM,
368 LED_FUNC, 424 LED_FUN,
369 LED_EMOJI 425 LED_EMOJI
370}; 426};
371 427
372const uint8_t PROGMEM LED_INDICATORS[] = { 428const uint8_t PROGMEM LED_INDICATORS[] = {
373 LED_IND_EMOJI, 429 LED_IND_EMOJI,
374 LED_IND_NUM, 430 LED_IND_NUM,
375 LED_IND_FUNC, 431 LED_IND_FUN,
376 LED_IND_BATTERY, 432 LED_IND_BATTERY,
377 LED_IND_USB, 433 LED_IND_USB,
378 LED_IND_BLUETOOTH, 434 LED_IND_BLUETOOTH,
@@ -431,7 +487,7 @@ void led_reset(void) {
431void led_set_layer_indicator(void) { 487void led_set_layer_indicator(void) {
432 static uint8_t oldlayer = 255; 488 static uint8_t oldlayer = 255;
433 489
434 rgbsps_set(LED_IND_FUNC, 0, 0, 0); 490 rgbsps_set(LED_IND_FUN, 0, 0, 0);
435 // rgbsps_set(LED_IND_NUM, 0, 0, 0); 491 // rgbsps_set(LED_IND_NUM, 0, 0, 0);
436 rgbsps_set(LED_IND_EMOJI, 0, 0, 0); 492 rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
437 493
@@ -444,14 +500,14 @@ void led_set_layer_indicator(void) {
444 500
445 oldlayer = layer; 501 oldlayer = layer;
446 502
447 if (layer <= _NORMAN) { 503 if (layer <= _DEFAULT_LAYER_MAX) {
448 rgbsps_send(); 504 rgbsps_send();
449 return; 505 return;
450 } 506 }
451 507
452 switch(layer) { 508 switch(layer) {
453 case _FUNC: 509 case _FUN:
454 rgbsps_set(LED_IND_FUNC, 15, 0, 0); 510 rgbsps_set(LED_IND_FUN, 15, 0, 0);
455 break; 511 break;
456 // case _NUM: 512 // case _NUM:
457 // rgbsps_set(LED_IND_NUM, 0, 0, 15); 513 // rgbsps_set(LED_IND_NUM, 0, 0, 15);
@@ -460,8 +516,8 @@ void led_set_layer_indicator(void) {
460 rgbsps_set(LED_IND_EMOJI, 15, 15, 0); 516 rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
461 break; 517 break;
462 default: 518 default:
463 rgbsps_set(LED_IND_FUNC, 3, 3, 3); 519 rgbsps_set(LED_IND_FUN, 3, 3, 3);
464 rgbsps_set(LED_IND_NUM, 3, 3, 3); 520 // rgbsps_set(LED_IND_NUM, 3, 3, 3);
465 rgbsps_set(LED_IND_EMOJI, 3, 3, 3); 521 rgbsps_set(LED_IND_EMOJI, 3, 3, 3);
466 } 522 }
467 523
@@ -495,7 +551,7 @@ void led_init(void) {
495 rgbsps_set(LED_TRACKPOINT2, 0, 0, 15); 551 rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
496 rgbsps_set(LED_TRACKPOINT3, 15, 0, 0); 552 rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
497} 553}
498 554#endif // RGBSPS_ENABLE
499 555
500// keymaps 556// keymaps
501 557
@@ -509,14 +565,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
509 * |------+------+------+------+------+------|------+------+------+------+------+------| 565 * |------+------+------+------+------+------|------+------+------+------+------+------|
510 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift | 566 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
511 * |------+------+------+------+------+------+------+------+------+------+------+------| 567 * |------+------+------+------+------+------+------+------+------+------+------+------|
512 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl | 568 * | Ctrl | Alt | GUI | Punc | Num | Space | Fun |Greek | GUI |AltGr | Ctrl |
513 * `-----------------------------------------------------------------------------------' 569 * `-----------------------------------------------------------------------------------'
514 */ 570 */
515[_QWERTY] = KEYMAP( 571[_QWERTY] = KEYMAP(
516 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, 572 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
517 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT , 573 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT ,
518 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, 574 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
519 KC_LCTL, KC_LALT, KC_LGUI, PUNC, NUM, LSPACE, RSPACE, FUNC, GREEK, KC_RGUI, KC_RALT, KC_RCTL 575 KC_LCTL, KC_LALT, KC_LGUI, EMPTY, NUM, LSPACE, RSPACE, FUN, GREEK, KC_RGUI, KC_RALT, KC_RCTL
520), 576),
521 577
522/* Dvorak 578/* Dvorak
@@ -604,38 +660,38 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
604 660
605/* Punc 661/* Punc
606 * ,-----------------------------------------------------------------------------------. 662 * ,-----------------------------------------------------------------------------------.
607 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` | 663 * | ~ | ! | @ | # | $ | % | ^ | & | * | | | ` |
608 * |------+------+------+------+------+-------------+------+------+------+------+------| 664 * |------+------+------+------+------+-------------+------+------+------+------+------|
609 * | | * | \ | - | = | / | | ( | ) | < | > | | 665 * | | * | \ | - | = | / | | ( | ) | < | > | |
610 * |------+------+------+------+------+------|------+------+------+------+------+------| 666 * |------+------+------+------+------+------|------+------+------+------+------+------|
611 * | & | ^ | | | _ | + | ? | | [ | ] | { | } | : | 667 * | & | ^ | | | _ | + | ? | ± | [ | ] | { | } | : |
612 * |------+------+------+------+------+------+------+------+------+------+------+------| 668 * |------+------+------+------+------+------+------+------+------+------+------+------|
613 * | | | | | | | | | | | | 669 * | | | | | | | | | | | |
614 * `-----------------------------------------------------------------------------------' 670 * `-----------------------------------------------------------------------------------'
615 */ 671 */
616[_PUNC] = KEYMAP( 672[_PUNC] = KEYMAP(
617 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV , 673 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______,
618 XXXXXXX, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, XXXXXXX, KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, XXXXXXX, 674 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______,
619 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, XXXXXXX, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_COLN, 675 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_COLN,
620 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 676 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
621), 677),
622 678
623/* Num 679/* Num
624 * ,-----------------------------------------------------------------------------------. 680 * ,-----------------------------------------------------------------------------------.
625 * | ~ | ! | @ | # | $ | % | A | 7 | 8 | 9 | D | ` | 681 * | ~ | ! | @ | # | $ | % | A | 7 | 8 | 9 | D | |
626 * |------+------+------+------+------+-------------+------+------+------+------+------| 682 * |------+------+------+------+------+-------------+------+------+------+------+------|
627 * | | * | \ | - | = | / | B | 4 | 5 | 6 | E | | 683 * | ` | * | \ | - | = | / | B | 4 | 5 | 6 | E | |
628 * |------+------+------+------+------+------|------+------+------+------+------+------| 684 * |------+------+------+------+------+------|------+------+------+------+------+------|
629 * | & | ^ | | | _ | + | ? | C | 1 | 2 | 3 | F | : | 685 * | & | ^ | | | _ | + | ? | C | 1 | 2 | 3 | F | : |
630 * |------+------+------+------+------+------+------+------+------+------+------+------| 686 * |------+------+------+------+------+------+------+------+------+------+------+------|
631 * | | | | | | | x | 0 | , | . | | | 687 * | | | | | | | | 0 | , | . | x | |
632 * `-----------------------------------------------------------------------------------' 688 * `-----------------------------------------------------------------------------------'
633 */ 689 */
634[_NUM] = KEYMAP( 690[_NUM] = KEYMAP(
635 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), KC_GRV, 691 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), _______,
636 XXXXXXX, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______, 692 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______,
637 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_1, KC_2, KC_3, S(KC_F), KC_COLN, 693 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_1, KC_2, KC_3, S(KC_F), KC_COLN,
638 _______, _______, _______, _______, _______, _______, _______, KC_0, KC_COMM, KC_DOT, KC_X, _______ 694 _______, _______, _______, _______, _______, _______, _______, FUN0 , KC_COMM, KC_DOT, KC_X, _______
639), 695),
640 696
641/* Func 697/* Func
@@ -649,11 +705,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
649 * | | | | | | | | | | | | 705 * | | | | | | | | | | | |
650 * `-----------------------------------------------------------------------------------' 706 * `-----------------------------------------------------------------------------------'
651 */ 707 */
652[_FUNC] = KEYMAP( 708[_FUN] = KEYMAP(
653 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL, 709 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
654 XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS, 710 XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS,
655 _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______, 711 _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
656 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 712 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
657), 713),
658 714
659/* Uppercase Greek 715/* Uppercase Greek
@@ -668,9 +724,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
668 * `-----------------------------------------------------------------------------------' 724 * `-----------------------------------------------------------------------------------'
669 */ 725 */
670[_GREEKU] = KEYMAP( 726[_GREEKU] = KEYMAP(
671 _______, _______, _______,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______, 727 _______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______,
672 _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), _______, _______, 728 _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______,
673 _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), _______, _______, _______, _______, 729 _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), KC_COMM, KC_DOT, KC_SLSH, _______,
674 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 730 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
675), 731),
676 732
@@ -686,9 +742,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
686 * `-----------------------------------------------------------------------------------' 742 * `-----------------------------------------------------------------------------------'
687 */ 743 */
688[_GREEKL] = KEYMAP( 744[_GREEKL] = KEYMAP(
689 _______, _______,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______, 745 _______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______,
690 _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), _______, _______, 746 _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______,
691 _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), _______, _______, _______, _______, 747 _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), KC_COMM, KC_DOT, KC_SLSH, _______,
748 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
749),
750
751/* Empty
752 * ,-----------------------------------------------------------------------------------.
753 * | | | | | | | | | | | | |
754 * |------+------+------+------+------+-------------+------+------+------+------+------|
755 * | | | | | | | | | | | | |
756 * |------+------+------+------+------+------+------+------+------+------+------+------|
757 * | | | | | | | | | | | | |
758 * |------+------+------+------+------+------+------+------+------+------+------+------|
759 * | | | | | | | | | | | | |
760 * `-----------------------------------------------------------------------------------'
761 */
762[_EMPTY] = KEYMAP(
763 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
764 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
765 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
692 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 766 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
693), 767),
694 768
@@ -707,14 +781,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
707 X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW), 781 X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
708 X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS), 782 X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
709 X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH), 783 X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
710 X(POO), X(EYES), _______,X(HUNRD), X(SKULL),X(HORNS), X(HALO), X(FEAR),X(YUMMY),_______,X(DISAP),X(NOEVK) 784 X(POO), X(EYES), X(HUNRD),_______, X(SKULL),X(HORNS), X(HALO), X(FEAR),_______,X(YUMMY),X(DISAP),X(NOEVK)
711), 785),
712 786
713/* GUI 787/* GUI
714 * ,-----------------------------------------------------------------------------------. 788 * ,-----------------------------------------------------------------------------------.
715 * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | | 789 * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
716 * |------+------+------+------+------+-------------+------+------+------+------+------| 790 * |------+------+------+------+------+-------------+------+------+------+------+------|
717 * | | | Vol- | Mute | Vol+ | | | Prev | | Next | | | 791 * | Esc | | Btab | Esc | Tab | | | Prev | | Next | | |
718 * |------+------+------+------+------+------+------+------+------+------+------+------| 792 * |------+------+------+------+------+------+------+------+------+------+------+------|
719 * | | | Prev | Play | Next | | | | | | | | 793 * | | | Prev | Play | Next | | | | | | | |
720 * |------+------+------+------+------+------+------+------+------+------+------+------| 794 * |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -723,9 +797,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
723 */ 797 */
724[_GUI] = KEYMAP( 798[_GUI] = KEYMAP(
725 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, 799 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,
726 XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX, 800 KC_ESC, XXXXXXX, S(KC_TAB),KC_ESC, KC_TAB, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX,
727 XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, KC_SPC, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 801 XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, KC_SPC, KC_SPC, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
728 XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX 802 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
729), 803),
730 804
731/* Sys 805/* Sys
@@ -741,11 +815,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
741 */ 815 */
742[_SYS] = KEYMAP( 816[_SYS] = KEYMAP(
743 XXXXXXX, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 817 XXXXXXX, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
744 XXXXXXX, AUDIO, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX, 818 XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX,
745 XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BLE, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 819 XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BLE, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
746 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______ 820 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
747), 821),
748 822
823
749}; 824};
750 825
751void persistant_default_layer_set(uint16_t default_layer) { 826void persistant_default_layer_set(uint16_t default_layer) {
@@ -753,9 +828,63 @@ void persistant_default_layer_set(uint16_t default_layer) {
753 default_layer_set(default_layer); 828 default_layer_set(default_layer);
754} 829}
755 830
831#ifdef DOUBLESPACE_LAYER_ENABLE
832void process_doublespace(bool pressed, bool *isactive, bool *otheractive, bool *isemitted) {
833 if (pressed) {
834 *isactive = true;
835 if (*otheractive) {
836 layer_on(_SPACE);
837 register_code(KC_LALT); // sends alt and enter layer
838 space_layer_entered = true;
839 }
840 } else {
841 *isactive = false;
842 if (space_layer_entered) {
843 unregister_code(KC_LALT); // release alt and exit layer
844 layer_off(_SPACE);
845 if (!*otheractive) {
846 space_layer_entered = false;
847 }
848 } else {
849 if (!*isemitted) {
850 register_code(KC_SPC);
851 unregister_code(KC_SPC);
852 }
853 *isemitted = false;
854 }
855 }
856}
857#endif
858
859uint32_t layer_state_set_kb(uint32_t state)
860{
861 // turn on punc layer if both fun & num are on
862 if ((state & ((1UL<<_NUM) | (1UL<<_FUN))) == ((1UL<<_NUM) | (1UL<<_FUN))) {
863 state |= (1UL<<_PUNC);
864 } else {
865 state &= ~(1UL<<_PUNC);
866 }
867
868 // turn on emoji layer if empty and greek layer are on
869 if (
870 (state & ((1UL<<_EMPTY) | (1UL<<_GREEKU))) == ((1UL<<_EMPTY) | (1UL<<_GREEKU))
871 || (state & ((1UL<<_EMPTY) | (1UL<<_GREEKL))) == ((1UL<<_EMPTY) | (1UL<<_GREEKL))
872 ) {
873 state |= (1UL<<_EMOJI);
874 } else {
875 state &= ~(1UL<<_EMOJI);
876 }
877 return state;
878}
879
756bool process_record_user(uint16_t keycode, keyrecord_t *record) { 880bool process_record_user(uint16_t keycode, keyrecord_t *record) {
757 bool lshift = keyboard_report->mods & MOD_BIT(KC_LSFT); 881 static bool lshift = false;
758 bool rshift = keyboard_report->mods & MOD_BIT(KC_RSFT); 882 static bool rshift = false;
883 static uint8_t layer = 0;
884
885 lshift = keyboard_report->mods & MOD_BIT(KC_LSFT);
886 rshift = keyboard_report->mods & MOD_BIT(KC_RSFT);
887 layer = biton32(layer_state);
759 888
760#ifdef DOUBLESPACE_LAYER_ENABLE 889#ifdef DOUBLESPACE_LAYER_ENABLE
761 // double-space: send space immediately if any other key depressed before space is released 890 // double-space: send space immediately if any other key depressed before space is released
@@ -779,6 +908,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
779 rspace_emitted = true; 908 rspace_emitted = true;
780 } 909 }
781 } 910 }
911
912 if (layer == _SPACE && keycode != S(KC_TAB) && keycode != KC_TAB && keycode != KC_ESC && keycode != XXXXXXX) {
913 if (record->event.pressed) {
914 unregister_code(KC_LALT);
915 } else {
916 register_code(KC_LALT);
917 }
918 }
782#endif 919#endif
783 920
784 switch (keycode) { 921 switch (keycode) {
@@ -786,51 +923,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
786#ifdef DOUBLESPACE_LAYER_ENABLE 923#ifdef DOUBLESPACE_LAYER_ENABLE
787 // double-space enter space layer 924 // double-space enter space layer
788 case LSPACE: 925 case LSPACE:
789 if (record->event.pressed) { 926 process_doublespace(record->event.pressed, &lspace_active, &rspace_active, &lspace_emitted);
790 lspace_active = true;
791 if (rspace_active) {
792 layer_on(_SPACE);
793 space_layer_entered = true;
794 }
795 } else {
796 lspace_active = false;
797 if (space_layer_entered) {
798 layer_off(_SPACE);
799 if (!rspace_active) {
800 space_layer_entered = false;
801 }
802 } else {
803 if (!lspace_emitted) {
804 register_code(KC_SPC);
805 unregister_code(KC_SPC);
806 }
807 lspace_emitted = false;
808 }
809 }
810 return false; 927 return false;
811 break; 928 break;
812 case RSPACE: 929 case RSPACE:
813 if (record->event.pressed) { 930 process_doublespace(record->event.pressed, &rspace_active, &lspace_active, &rspace_emitted);
814 rspace_active = true;
815 if (lspace_active) {
816 layer_on(_SPACE);
817 space_layer_entered = true;
818 }
819 } else {
820 rspace_active = false;
821 if (space_layer_entered) {
822 layer_off(_SPACE);
823 if (!lspace_active) {
824 space_layer_entered = false;
825 }
826 } else {
827 if (!rspace_emitted) {
828 register_code(KC_SPC);
829 unregister_code(KC_SPC);
830 }
831 rspace_emitted = false;
832 }
833 }
834 return false; 931 return false;
835 break; 932 break;
836#endif 933#endif
@@ -840,7 +937,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
840 case KC_LSFT: 937 case KC_LSFT:
841 case KC_RSFT: 938 case KC_RSFT:
842 ; 939 ;
843 uint8_t layer = biton32(layer_state);
844 if (layer == _GREEKU || layer == _GREEKL) { 940 if (layer == _GREEKU || layer == _GREEKL) {
845 if (record->event.pressed) { 941 if (record->event.pressed) {
846 layer_on(_GREEKU); 942 layer_on(_GREEKU);
@@ -949,17 +1045,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
949#endif 1045#endif
950 1046
951 // layer switcher 1047 // layer switcher
952 case PUNC: 1048 //
953 if (record->event.pressed) {
954 layer_on(_PUNC);
955 update_tri_layer(_PUNC, _GREEKL, _EMOJI);
956 } else {
957 layer_off(_PUNC);
958 update_tri_layer(_PUNC, _GREEKL, _EMOJI);
959 }
960 return false;
961 break;
962
963 case GREEK: 1049 case GREEK:
964 if (record->event.pressed) { 1050 if (record->event.pressed) {
965 if (lshift || rshift) { 1051 if (lshift || rshift) {
@@ -968,31 +1054,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
968 } else { 1054 } else {
969 layer_on(_GREEKL); 1055 layer_on(_GREEKL);
970 layer_off(_GREEKU); 1056 layer_off(_GREEKU);
971 update_tri_layer(_PUNC, _GREEKL, _EMOJI);
972 } 1057 }
973 } else { 1058 } else {
974 layer_off(_GREEKU); 1059 layer_off(_GREEKU);
975 layer_off(_GREEKL); 1060 layer_off(_GREEKL);
976 update_tri_layer(_PUNC, _GREEKL, _EMOJI);
977 }
978 return false;
979 break;
980
981 case NUM:
982 if (record->event.pressed) {
983 turn_off_capslock();
984 layer_on(_NUM);
985 } else {
986 layer_off(_NUM);
987 }
988 return false;
989 break;
990
991 case FUNC:
992 if (record->event.pressed) {
993 layer_on(_FUNC);
994 } else {
995 layer_off(_FUNC);
996 } 1061 }
997 return false; 1062 return false;
998 break; 1063 break;
@@ -1012,6 +1077,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
1012 break; 1077 break;
1013 1078
1014 // glow mode changer 1079 // glow mode changer
1080#ifdef RGBSPS_ENABLE
1015 case GLOW: 1081 case GLOW:
1016 if (record->event.pressed) { 1082 if (record->event.pressed) {
1017 glow_mode++; 1083 glow_mode++;
@@ -1023,16 +1089,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
1023 } 1089 }
1024 return false; 1090 return false;
1025 break; 1091 break;
1092#endif
1026 1093
1027 // faux clicky toggle, TBD 1094 // faux clicky indicator
1028 case AUDIO: 1095#ifdef FAUXCLICKY_ENABLE
1029 return false; 1096 case FC_TOG:
1097 return true;
1030 break; 1098 break;
1099#endif
1031 } 1100 }
1032 return true; 1101 return true;
1033} 1102}
1034 1103
1035void set_output_user(uint8_t output) { 1104void set_output_user(uint8_t output) {
1105#ifdef ADAFRUIT_BLE_ENABLE
1036 switch(output) { 1106 switch(output) {
1037 case OUTPUT_USB: 1107 case OUTPUT_USB:
1038 led_set_output_usb(); 1108 led_set_output_usb();
@@ -1043,82 +1113,92 @@ void set_output_user(uint8_t output) {
1043 default: 1113 default:
1044 led_set_output_none(); 1114 led_set_output_none();
1045 } 1115 }
1116#endif
1046} 1117}
1047 1118
1048void matrix_init_user(void) { 1119void matrix_init_user() {
1049 _delay_ms(500); // give time for usb to initialize 1120 _delay_ms(500); // give time for usb to initialize
1050 1121
1051 set_unicode_input_mode(UC_LNX); 1122 set_unicode_input_mode(UC_LNX);
1123
1124#ifdef RGBSPS_ENABLE
1052 led_init(); 1125 led_init();
1126#endif
1053 1127
1054 // auto detect output on init 1128 // auto detect output on init
1129#ifdef ADAFRUIT_BLE_ENABLE
1055 uint8_t output = auto_detect_output(); 1130 uint8_t output = auto_detect_output();
1056 if (output == OUTPUT_USB) { 1131 if (output == OUTPUT_USB) {
1057 set_output(OUTPUT_USB); 1132 set_output(OUTPUT_USB);
1058 } else { 1133 } else {
1059 set_output(OUTPUT_ADAFRUIT_BLE); 1134 set_output(OUTPUT_ADAFRUIT_BLE);
1060 } 1135 }
1136#endif
1061} 1137}
1062 1138
1063void matrix_scan_user(void) { 1139void turn_off_capslock() {
1064 led_set_layer_indicator(); 1140 if (capslock) {
1141 register_code(KC_CAPS);
1142 unregister_code(KC_CAPS);
1143 }
1065} 1144}
1066 1145
1067void battery_poll(uint8_t level) { 1146#ifdef RGBSPS_ENABLE
1068 rgbsps_sethsv(LED_IND_BATTERY, level * 120/255, 255, 15); 1147 void matrix_scan_user(void) {
1069 rgbsps_send(); 1148 led_set_layer_indicator();
1070} 1149 }
1071 1150
1072void led_set_user(uint8_t usb_led) { 1151 void battery_poll(uint8_t level) {
1073 bool new_capslock = usb_led & (1<<USB_LED_CAPS_LOCK); 1152 rgbsps_sethsv(LED_IND_BATTERY, level * 120/255, 255, 15);
1074 if (new_capslock ^ capslock) { // capslock state is different
1075 if (capslock = new_capslock) {
1076 rgbsps_set(LED_IND_NUM, 15, 0, 0);
1077 } else {
1078 rgbsps_set(LED_IND_NUM, 0, 0, 0);
1079 }
1080 rgbsps_send(); 1153 rgbsps_send();
1081 } 1154 }
1082}
1083 1155
1084void turn_off_capslock() { 1156 void led_set_user(uint8_t usb_led) {
1085 if (capslock) { 1157 bool new_capslock = usb_led & (1<<USB_LED_CAPS_LOCK);
1086 register_code(KC_CAPS); 1158 if (new_capslock ^ capslock) { // capslock state is different
1087 unregister_code(KC_CAPS); 1159 if ((capslock = new_capslock)) {
1160 rgbsps_set(LED_IND_NUM, 15, 0, 0);
1161 } else {
1162 rgbsps_set(LED_IND_NUM, 0, 0, 0);
1163 }
1164 rgbsps_send();
1165 }
1088 } 1166 }
1089} 1167#endif
1090 1168
1091void ps2_mouse_init_user() { 1169#ifdef PS2_MOUSE_ENABLE
1092 uint8_t rcv; 1170 void ps2_mouse_init_user() {
1093 1171 uint8_t rcv;
1094 // set TrackPoint sensitivity 1172
1095 PS2_MOUSE_SEND(0xE2, "tpsens: 0xE2"); 1173 // set TrackPoint sensitivity
1096 PS2_MOUSE_SEND(0x81, "tpsens: 0x81"); 1174 PS2_MOUSE_SEND(0xE2, "tpsens: 0xE2");
1097 PS2_MOUSE_SEND(0x4A, "tpsens: 0x4A"); 1175 PS2_MOUSE_SEND(0x81, "tpsens: 0x81");
1098 PS2_MOUSE_SEND(0x49, "tpsens: 0x59"); 1176 PS2_MOUSE_SEND(0x4A, "tpsens: 0x4A");
1099 1177 PS2_MOUSE_SEND(0x49, "tpsens: 0x59");
1100 // set TrackPoint Negative Inertia factor 1178
1101 PS2_MOUSE_SEND(0xE2, "tpnegin: 0xE2"); 1179 // set TrackPoint Negative Inertia factor
1102 PS2_MOUSE_SEND(0x81, "tpnegin: 0x81"); 1180 PS2_MOUSE_SEND(0xE2, "tpnegin: 0xE2");
1103 PS2_MOUSE_SEND(0x4D, "tpnegin: 0x4D"); 1181 PS2_MOUSE_SEND(0x81, "tpnegin: 0x81");
1104 PS2_MOUSE_SEND(0x06, "tpnegin: 0x06"); 1182 PS2_MOUSE_SEND(0x4D, "tpnegin: 0x4D");
1105 1183 PS2_MOUSE_SEND(0x06, "tpnegin: 0x06");
1106 // set TrackPoint speed 1184
1107 // (transfer function upper plateau speed) 1185 // set TrackPoint speed
1108 PS2_MOUSE_SEND(0xE2, "tpsp: 0xE2"); 1186 // (transfer function upper plateau speed)
1109 PS2_MOUSE_SEND(0x81, "tpsp: 0x81"); 1187 PS2_MOUSE_SEND(0xE2, "tpsp: 0xE2");
1110 PS2_MOUSE_SEND(0x60, "tpsp: 0x60"); 1188 PS2_MOUSE_SEND(0x81, "tpsp: 0x81");
1111 PS2_MOUSE_SEND(0x61, "tpsp: 0x61"); 1189 PS2_MOUSE_SEND(0x60, "tpsp: 0x60");
1112 1190 PS2_MOUSE_SEND(0x61, "tpsp: 0x61");
1113 // inquire pts status 1191
1114 rcv = ps2_host_send(0xE2); 1192 // inquire pts status
1115 rcv = ps2_host_send(0x2C);
1116 rcv = ps2_host_recv_response();
1117 if ((rcv & 1) == 1) {
1118 // if on, disable pts
1119 rcv = ps2_host_send(0xE2); 1193 rcv = ps2_host_send(0xE2);
1120 rcv = ps2_host_send(0x47);
1121 rcv = ps2_host_send(0x2C); 1194 rcv = ps2_host_send(0x2C);
1122 rcv = ps2_host_send(0x01); 1195 rcv = ps2_host_recv_response();
1123 } 1196 if ((rcv & 1) == 1) {
1124} \ No newline at end of file 1197 // if on, disable pts
1198 rcv = ps2_host_send(0xE2);
1199 rcv = ps2_host_send(0x47);
1200 rcv = ps2_host_send(0x2C);
1201 rcv = ps2_host_send(0x01);
1202 }
1203 }
1204#endif \ No newline at end of file
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/readme.md b/keyboards/handwired/promethium/keymaps/priyadi/readme.md
deleted file mode 100644
index e69de29bb..000000000
--- a/keyboards/handwired/promethium/keymaps/priyadi/readme.md
+++ /dev/null
diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c
index 62e2281fa..4943f8c9f 100644
--- a/keyboards/handwired/promethium/promethium.c
+++ b/keyboards/handwired/promethium/promethium.c
@@ -36,3 +36,7 @@ void led_set_kb(uint8_t usb_led) {
36 led_set_user(usb_led); 36 led_set_user(usb_led);
37} 37}
38 38
39__attribute__ ((weak))
40void led_set_user(uint8_t usb_led) {
41}
42
diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h
index da37e5c56..260f140c5 100644
--- a/keyboards/handwired/promethium/promethium.h
+++ b/keyboards/handwired/promethium/promethium.h
@@ -1,108 +1,10 @@
1#ifndef PROMETHIUM_H 1#ifndef PROMETHIUM_H
2#define PROMETHIUM_H 2#define PROMETHIUM_H
3 3
4#include "quantum.h" 4#include "stdint.h"
5 5
6#define PS2_INIT_DELAY 2000 6void battery_poll(uint8_t level);
7#define UNICODE_TYPE_DELAY 0 7void led_set_kb(uint8_t usb_led);
8#define BATTERY_PIN 9 8void led_set_user(uint8_t usb_led);
9#define BATTERY_POLL 30000
10#define MAX_VOLTAGE 4.2
11#define MIN_VOLTAGE 3.2
12
13#define KEYMAP( \
14 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
15 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
16 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
17 k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \
18) \
19{ \
20 {k11, k12, k13, k14, k15, k16}, \
21 {k21, k22, k23, k24, k25, k26}, \
22 {k31, k32, k33, k34, k35, k36}, \
23 {k41, k42, k43, k44, k45, k46}, \
24 {k17, k18, k19, k1a, k1b, k1c}, \
25 {k27, k28, k29, k2a, k2b, k2c}, \
26 {k37, k38, k39, k3a, k3b, k3c}, \
27 {k47, k48, k49, k4a, k4b, k4c} \
28}
29
30
31
32enum led_sequence {
33 LED_IND_BLUETOOTH,
34 LED_IND_USB,
35 LED_IND_BATTERY,
36
37 LED_IND_FUNC,
38 LED_IND_NUM,
39 LED_IND_EMOJI,
40
41 LED_BKSP,
42 LED_ENT,
43 LED_RSFT,
44 LED_RCTL,
45
46 LED_RGUI,
47 LED_SLSH,
48 LED_SCLN,
49 LED_P,
50
51 LED_O,
52 LED_L,
53 LED_DOT,
54 LED_RALT,
55
56 LED_EMOJI,
57 LED_COMM,
58 LED_K,
59 LED_I,
60
61 LED_U,
62 LED_J,
63 LED_M,
64 LED_FUNC,
65
66 LED_RSPC,
67 LED_N,
68 LED_HH,
69 LED_Y,
70
71 LED_TRACKPOINT3,
72 LED_TRACKPOINT2,
73 LED_TRACKPOINT1,
74
75 LED_LSPC,
76 LED_B,
77 LED_G,
78 LED_T,
79
80 LED_R,
81 LED_F,
82 LED_V,
83 LED_NUM,
84
85 LED_PUNC,
86 LED_C,
87 LED_D,
88 LED_E,
89
90 LED_W,
91 LED_S,
92 LED_X,
93 LED_LALT,
94
95 LED_LGUI,
96 LED_Z,
97 LED_A,
98 LED_Q,
99
100 LED_TAB,
101 LED_ESC,
102 LED_LSFT,
103 LED_LCTL,
104};
105 9
106#endif 10#endif
107
108void battery_poll(uint8_t level); \ No newline at end of file
diff --git a/keyboards/planck/keymaps/priyadi/config.h b/keyboards/planck/keymaps/priyadi/config.h
new file mode 100644
index 000000000..82e4a25c6
--- /dev/null
+++ b/keyboards/planck/keymaps/priyadi/config.h
@@ -0,0 +1,39 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6#define PRIYADI_PLANCK
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 UNICODE_TYPE_DELAY 0
17
18#define LAYOUT_DVORAK
19#define LAYOUT_COLEMAK
20#define LAYOUT_NORMAN
21#define LAYOUT_WORKMAN
22
23#define DOUBLESPACE_LAYER_ENABLE
24 // #define TOLELOT_ENABLE
25
26#define KEYMAP( \
27 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
28 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
29 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
30 k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \
31) \
32{ \
33 {k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c}, \
34 {k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c}, \
35 {k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c}, \
36 {k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c} \
37}
38
39#endif
diff --git a/keyboards/planck/keymaps/priyadi/keymap.c b/keyboards/planck/keymaps/priyadi/keymap.c
index 13668fd10..bb3a2e92c 100644
--- a/keyboards/planck/keymaps/priyadi/keymap.c
+++ b/keyboards/planck/keymaps/priyadi/keymap.c
@@ -1,680 +1 @@
1// This is the canonical layout file for the Quantum project. If you want to add another keyboard, #include "../../../handwired/promethium/keymaps/priyadi/keymap.c" \ No newline at end of file
2// this is the style you want to emulate.
3
4#include "planck.h"
5#include "action_layer.h"
6#ifdef AUDIO_ENABLE
7 #include "audio.h"
8 #include "musical_notes.h"
9#endif
10#include "eeconfig.h"
11#include "process_unicode.h"
12#include "quantum.h"
13
14// #define TOLELOT_ENABLE
15
16extern keymap_config_t keymap_config;
17
18enum layers {
19 _QWERTY,
20 _COLEMAK,
21 _WORKMAN,
22 _PUNC,
23 _NUM,
24 _FUNC,
25 _EMOJI,
26 _GREEKU,
27 _GREEKL,
28 _GUI,
29};
30
31enum planck_keycodes {
32 // layouts
33 QWERTY = SAFE_RANGE,
34 COLEMAK,
35 WORKMAN,
36
37 // layer switchers
38 PUNC,
39 NUM,
40 FUNC,
41 EMOJI,
42 GUI,
43 GREEK,
44
45 // os switchers
46 LINUX,
47 WIN,
48 OSX,
49};
50
51// Fillers to make layering clearer
52
53#define _______ KC_TRNS
54#define XXXXXXX KC_NO
55
56// unicode map
57
58enum unicode_name {
59 GRIN, // grinning face 😊
60 TJOY, // tears of joy 😂
61 SMILE, // grining face with smiling eyes 😁
62 HEART, // heart ❤
63 EYERT, // smiling face with heart shaped eyes 😍
64 CRY, // crying face 😭
65 SMEYE, // smiling face with smiling eyes 😊
66 UNAMU, // unamused 😒
67 KISS, // kiss 😘
68 HART2, // two hearts 💕
69 WEARY, // weary 😩
70 OKHND, // ok hand sign 👌
71 PENSV, // pensive 😔
72 SMIRK, // smirk 😏
73 RECYC, // recycle ♻
74 WINK, // wink 😉
75 THMUP, // thumb up 👍
76 THMDN, // thumb down 👎
77 PRAY, // pray 🙏
78 PHEW, // relieved 😌
79 MUSIC, // musical notes
80 FLUSH, // flushed 😳
81 CELEB, // celebration 🙌
82 CRY2, // crying face 😢
83 COOL, // smile with sunglasses 😎
84 NOEVS, // see no evil
85 NOEVH, // hear no evil
86 NOEVK, // speak no evil
87 POO, // pile of poo
88 EYES, // eyes
89 VIC, // victory hand
90 BHART, // broken heart
91 SLEEP, // sleeping face
92 SMIL2, // smiling face with open mouth & sweat
93 HUNRD, // 100
94 CONFU, // confused
95 TONGU, // face with tongue & winking eye
96 DISAP, // disappointed
97 YUMMY, // face savoring delicious food
98 CLAP, // hand clapping
99 FEAR, // face screaming in fear
100 HORNS, // smiling face with horns
101 HALO, // smiling face with halo
102 BYE, // waving hand
103 SUN, // sun
104 MOON, // moon
105 SKULL, // skull
106
107 // greek letters
108 UALPH,
109 UBETA,
110 UGAMM,
111 UDELT,
112 UEPSI,
113 UZETA,
114 UETA,
115 UTHET,
116 UIOTA,
117 UKAPP,
118 ULAMB,
119 UMU,
120 UNU,
121 UXI,
122 UOMIC,
123 UPI,
124 URHO,
125 USIGM,
126 UTAU,
127 UUPSI,
128 UPHI,
129 UCHI,
130 UPSI,
131 UOMEG,
132
133 LALPH,
134 LBETA,
135 LGAMM,
136 LDELT,
137 LEPSI,
138 LZETA,
139 LETA,
140 LTHET,
141 LIOTA,
142 LKAPP,
143 LLAMB,
144 LMU,
145 LNU,
146 LXI,
147 LOMIC,
148 LPI,
149 LRHO,
150 LSIGM,
151 LTAU,
152 LUPSI,
153 LPHI,
154 LCHI,
155 LPSI,
156 LOMEG,
157
158 FSIGM,
159};
160
161const uint32_t PROGMEM unicode_map[] = {
162 [GRIN] = 0x1F600,
163 [TJOY] = 0x1F602,
164 [SMILE] = 0x1F601,
165 [HEART] = 0x2764,
166 [EYERT] = 0x1f60d,
167 [CRY] = 0x1f62d,
168 [SMEYE] = 0x1F60A,
169 [UNAMU] = 0x1F612,
170 [KISS] = 0x1F618,
171 [HART2] = 0x1F495,
172 [WEARY] = 0x1F629,
173 [OKHND] = 0x1F44C,
174 [PENSV] = 0x1F614,
175 [SMIRK] = 0x1F60F,
176 [RECYC] = 0x267B,
177 [WINK] = 0x1F609,
178 [THMUP] = 0x1F44D,
179 [THMDN] = 0x1F44E,
180 [PRAY] = 0x1F64F,
181 [PHEW] = 0x1F60C,
182 [MUSIC] = 0x1F3B6,
183 [FLUSH] = 0x1F633,
184 [CELEB] = 0x1F64C,
185 [CRY2] = 0x1F622,
186 [COOL] = 0x1F60E,
187 [NOEVS] = 0x1F648,
188 [NOEVH] = 0x1F649,
189 [NOEVK] = 0x1F64A,
190 [POO] = 0x1F4A9,
191 [EYES] = 0x1F440,
192 [VIC] = 0x270C,
193 [BHART] = 0x1F494,
194 [SLEEP] = 0x1F634,
195 [SMIL2] = 0x1F605,
196 [HUNRD] = 0x1F4AF,
197 [CONFU] = 0x1F615,
198 [TONGU] = 0x1F61C,
199 [DISAP] = 0x1F61E,
200 [YUMMY] = 0x1F60B,
201 [CLAP] = 0x1F44F,
202 [FEAR] = 0x1F631,
203 [HORNS] = 0x1F608,
204 [HALO] = 0x1F607,
205 [BYE] = 0x1F44B,
206 [SUN] = 0x2600,
207 [MOON] = 0x1F314,
208 [SKULL] = 0x1F480,
209
210 // greek letters
211 [UALPH] = 0x0391,
212 [UBETA] = 0x0392,
213 [UGAMM] = 0x0393,
214 [UDELT] = 0x0394,
215 [UEPSI] = 0x0395,
216 [UZETA] = 0x0396,
217 [UETA] = 0x0397,
218 [UTHET] = 0x0398,
219 [UIOTA] = 0x0399,
220 [UKAPP] = 0x039A,
221 [ULAMB] = 0x039B,
222 [UMU] = 0x039C,
223 [UNU] = 0x039D,
224 [UXI] = 0x039E,
225 [UOMIC] = 0x039F,
226 [UPI] = 0x03A0,
227 [URHO] = 0x03A1,
228 [USIGM] = 0x03A3,
229 [UTAU] = 0x03A4,
230 [UUPSI] = 0x03A5,
231 [UPHI] = 0x03A6,
232 [UCHI] = 0x03A7,
233 [UPSI] = 0x03A8,
234 [UOMEG] = 0x03A9,
235 [LALPH] = 0x03B1,
236 [LBETA] = 0x03B2,
237 [LGAMM] = 0x03B3,
238 [LDELT] = 0x03B4,
239 [LEPSI] = 0x03B5,
240 [LZETA] = 0x03B6,
241 [LETA] = 0x03B7,
242 [LTHET] = 0x03B8,
243 [LIOTA] = 0x03B9,
244 [LKAPP] = 0x03BA,
245 [LLAMB] = 0x03BB,
246 [LMU] = 0x03BC,
247 [LNU] = 0x03BD,
248 [LXI] = 0x03BE,
249 [LOMIC] = 0x03BF,
250 [LPI] = 0x03C0,
251 [LRHO] = 0x03C1,
252 [LSIGM] = 0x03C3,
253 [LTAU] = 0x03C4,
254 [LUPSI] = 0x03C5,
255 [LPHI] = 0x03C6,
256 [LCHI] = 0x03C7,
257 [LPSI] = 0x03C8,
258 [LOMEG] = 0x03C9,
259 [FSIGM] = 0x03C2,
260};
261
262
263// hybrid shift - =
264// #undef KC_LSFT
265// #define KC_LSFT MT(MOD_LSFT, KC_MINS)
266// #undef KC_RSFT
267// #define KC_RSFT MT(MOD_LSFT, KC_EQL)
268
269
270// hybrid right-gui & scroll lock (mapped to Compose in OS)
271#undef KC_RALT
272#define KC_RALT MT(MOD_RALT, KC_SLCK)
273
274// keymaps
275
276const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
277
278/* Qwerty
279 * ,-----------------------------------------------------------------------------------.
280 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
281 * |------+------+------+------+------+-------------+------+------+------+------+------|
282 * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter |
283 * |------+------+------+------+------+------|------+------+------+------+------+------|
284 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
285 * |------+------+------+------+------+------+------+------+------+------+------+------|
286 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |Greek |AltGr | Ctrl |
287 * `-----------------------------------------------------------------------------------'
288 */
289[_QWERTY] = {
290 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
291 {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT },
292 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
293 {KC_LCTL, KC_LALT, KC_LGUI, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, GREEK, KC_RALT, KC_RCTL}
294},
295
296/* Colemak
297 * ,-----------------------------------------------------------------------------------.
298 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
299 * |------+------+------+------+------+-------------+------+------+------+------+------|
300 * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
301 * |------+------+------+------+------+------|------+------+------+------+------+------|
302 * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
303 * |------+------+------+------+------+------+------+------+------+------+------+------|
304 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
305 * `-----------------------------------------------------------------------------------'
306 */
307[_COLEMAK] = {
308 {_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______},
309 {_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______},
310 {_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______},
311 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
312},
313
314/* Workman
315 * ,-----------------------------------------------------------------------------------.
316 * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
317 * |------+------+------+------+------+-------------+------+------+------+------+------|
318 * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
319 * |------+------+------+------+------+------|------+------+------+------+------+------|
320 * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
321 * |------+------+------+------+------+------+------+------+------+------+------+------|
322 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
323 * `-----------------------------------------------------------------------------------'
324 */
325[_WORKMAN] = {
326 {_______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______},
327 {_______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______},
328 {_______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______},
329 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
330},
331
332/* Uppercase Greek
333 * ,-----------------------------------------------------------------------------------.
334 * | | | | | | | | | | | | |
335 * |------+------+------+------+------+-------------+------+------+------+------+------|
336 * | | | | | | | | | | | | |
337 * |------+------+------+------+------+------+------+------+------+------+------+------|
338 * | | | | | | | | | | | | |
339 * |------+------+------+------+------+------+------+------+------+------+------+------|
340 * | | | | | | | | | | | | |
341 * `-----------------------------------------------------------------------------------'
342 */
343[_GREEKU] = {
344 {_______, _______, _______,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______},
345 {_______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), _______, _______},
346 {_______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), _______, _______, _______, _______},
347 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
348},
349
350/* Lowercase Greek
351 * ,-----------------------------------------------------------------------------------.
352 * | | | | | | | | | | | | |
353 * |------+------+------+------+------+-------------+------+------+------+------+------|
354 * | | | | | | | | | | | | |
355 * |------+------+------+------+------+------+------+------+------+------+------+------|
356 * | | | | | | | | | | | | |
357 * |------+------+------+------+------+------+------+------+------+------+------+------|
358 * | | | | | | | | | | | | |
359 * `-----------------------------------------------------------------------------------'
360 */
361[_GREEKL] = {
362 {_______, _______,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______},
363 {_______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), _______, _______},
364 {_______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), _______, _______, _______, _______},
365 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
366},
367
368/* Punc
369 * ,-----------------------------------------------------------------------------------.
370 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
371 * |------+------+------+------+------+-------------+------+------+------+------+------|
372 * | | | \ | - | = | < | > | ( | ) | ' | | |
373 * |------+------+------+------+------+------|------+------+------+------+------+------|
374 * | | | | | _ | + | { | } | [ | ] | " | | |
375 * |------+------+------+------+------+------+------+------+------+------+------+------|
376 * | | | | | | | | | | | |
377 * `-----------------------------------------------------------------------------------'
378 */
379[_PUNC] = {
380 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV },
381 {XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX},
382 {XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX},
383 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
384},
385
386/* Num
387 * ,-----------------------------------------------------------------------------------.
388 * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
389 * |------+------+------+------+------+-------------+------+------+------+------+------|
390 * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter |
391 * |------+------+------+------+------+------|------+------+------+------+------+------|
392 * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * |
393 * |------+------+------+------+------+------+------+------+------+------+------+------|
394 * | | | | x | | | 0 | , | . | + | - |
395 * `-----------------------------------------------------------------------------------'
396 */
397[_NUM] = {
398 {KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
399 { KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT},
400 {KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR},
401 {_______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS}
402},
403
404/* Func
405 * ,-----------------------------------------------------------------------------------.
406 * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
407 * |------+------+------+------+------+-------------+------+------+------+------+------|
408 * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
409 * |------+------+------+------+------+------|------+------+------+------+------+------|
410 * | | F9 | F10 | F11 | F12 | | | | Home | End | | |
411 * |------+------+------+------+------+------+------+------+------+------+------+------|
412 * | | | | | | | | | | | |
413 * `-----------------------------------------------------------------------------------'
414 */
415[_FUNC] = {
416 {XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL},
417 {XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS},
418 {_______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______},
419 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
420},
421
422/* Emoji
423 * ,-----------------------------------------------------------------------------------.
424 * | | | | | | | | | | | | |
425 * |------+------+------+------+------+-------------+------+------+------+------+------|
426 * | | | | | | | | | | | | |
427 * |------+------+------+------+------+------+------+------+------+------+------+------|
428 * | | | | | | | | | | | | |
429 * |------+------+------+------+------+------+------+------+------+------+------+------|
430 * | | | | | | | | | | | | |
431 * `-----------------------------------------------------------------------------------'
432 */
433[_EMOJI] = {
434 {X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW)},
435 {X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS)},
436 {X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH)},
437 { X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)}
438},
439
440/* GUI
441 * ,-----------------------------------------------------------------------------------.
442 * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
443 * |------+------+------+------+------+-------------+------+------+------+------+------|
444 * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty|
445 * |------+------+------+------+------+------+------+------+------+------+------+------|
446 * | Win | | Prev | Play | Next | | | | | | |Colmak|
447 * |------+------+------+------+------+------+------+------+------+------+------+------|
448 * | OSX | | | | | BL- | BL+ | | | | |Workmn|
449 * `-----------------------------------------------------------------------------------'
450 */
451[_GUI] = {
452 {_______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______},
453 { LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY},
454 { WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, COLEMAK},
455 { OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, _______, _______, WORKMAN}
456},
457
458};
459
460#ifdef AUDIO_ENABLE
461float tone_startup[][2] = SONG(STARTUP_SOUND);
462float tone_qwerty[][2] = SONG(QWERTY_SOUND);
463float tone_colemak[][2] = SONG(COLEMAK_SOUND);
464float tone_workman[][2] = SONG(DVORAK_SOUND);
465float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
466float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
467float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
468float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
469float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
470float tone_release[][2] = SONG(MUSICAL_NOTE(_A3, 2));
471float tone_tolelot[][2] = SONG(Q__NOTE(_E5), Q__NOTE(_C5), Q__NOTE(_D5));
472#endif
473
474void persistant_default_layer_set(uint16_t default_layer) {
475 eeconfig_update_default_layer(default_layer);
476 default_layer_set(default_layer);
477}
478
479bool process_record_user(uint16_t keycode, keyrecord_t *record) {
480 // faux clicky
481 // if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
482 #ifdef AUDIO_ENABLE
483 #ifdef TOLELOT_ENABLE
484 if (record->event.pressed) {
485 PLAY_NOTE_ARRAY(tone_tolelot, false, 0);
486 }
487 #else
488 if (record->event.pressed) {
489 PLAY_NOTE_ARRAY(tone_click, false, 0);
490 } else {
491 PLAY_NOTE_ARRAY(tone_release, false, 0);
492 }
493 #endif
494 #endif
495
496 bool lshifted = keyboard_report->mods & MOD_BIT(KC_LSFT);
497 bool rshifted = keyboard_report->mods & MOD_BIT(KC_RSFT);
498
499 switch (keycode) {
500 // Greek layer handling
501 case GREEK:
502 if (record->event.pressed) {
503 if (lshifted || rshifted) {
504 layer_on(_GREEKU);
505 layer_off(_GREEKL);
506 } else {
507 layer_on(_GREEKL);
508 layer_off(_GREEKU);
509 }
510 } else {
511 layer_off(_GREEKU);
512 layer_off(_GREEKL);
513 }
514 return false;
515 break;
516
517 case KC_LSFT:
518 case KC_RSFT:
519 ;
520 uint8_t layer = biton32(layer_state);
521 if (layer == _GREEKU || layer == _GREEKL) {
522 if (record->event.pressed) {
523 layer_on(_GREEKU);
524 layer_off(_GREEKL);
525 } else {
526 if (lshifted ^ rshifted) { // if only one shift is pressed
527 layer_on(_GREEKL);
528 layer_off(_GREEKU);
529 }
530 }
531 }
532 return true;
533 break;
534
535 // QWERTZ style comma and dot: semicolon and colon when shifted
536 case KC_COMM:
537 if (record->event.pressed) {
538 if (lshifted || rshifted) {
539 if (lshifted) unregister_code(KC_LSFT);
540 if (rshifted) unregister_code(KC_RSFT);
541 register_code(KC_SCLN);
542 unregister_code(KC_SCLN);
543 if (lshifted) register_code(KC_LSFT);
544 if (rshifted) register_code(KC_RSFT);
545 } else {
546 register_code(KC_COMM);
547 unregister_code(KC_COMM);
548 }
549 }
550 return false;
551 break;
552 case KC_DOT:
553 if (record->event.pressed) {
554 if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) || (keyboard_report->mods & MOD_BIT(KC_RSFT))) {
555 register_code(KC_SCLN);
556 unregister_code(KC_SCLN);
557 } else {
558 register_code(KC_DOT);
559 unregister_code(KC_DOT);
560 }
561 }
562 return false;
563 break;
564
565 // layout switcher
566 case QWERTY:
567 if (record->event.pressed) {
568 #ifdef AUDIO_ENABLE
569 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
570 #endif
571 persistant_default_layer_set(1UL<<_QWERTY);
572 }
573 return false;
574 break;
575 case COLEMAK:
576 if (record->event.pressed) {
577 #ifdef AUDIO_ENABLE
578 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
579 #endif
580 persistant_default_layer_set(1UL<<_COLEMAK);
581 }
582 return false;
583 break;
584 case WORKMAN:
585 if (record->event.pressed) {
586 #ifdef AUDIO_ENABLE
587 PLAY_NOTE_ARRAY(tone_workman, false, 0);
588 #endif
589 persistant_default_layer_set(1UL<<_WORKMAN);
590 }
591 return false;
592 break;
593
594 // layer switchers
595 case PUNC:
596 if (record->event.pressed) {
597 layer_on(_PUNC);
598 update_tri_layer(_PUNC, _EMOJI, _GUI);
599 } else {
600 layer_off(_PUNC);
601 update_tri_layer(_PUNC, _EMOJI, _GUI);
602 }
603 return false;
604 break;
605 case EMOJI:
606 if (record->event.pressed) {
607 layer_on(_EMOJI);
608 update_tri_layer(_PUNC, _EMOJI, _GUI);
609 } else {
610 layer_off(_EMOJI);
611 update_tri_layer(_PUNC, _EMOJI, _GUI);
612 }
613 return false;
614 break;
615 case NUM:
616 if (record->event.pressed) {
617 layer_on(_NUM);
618 } else {
619 layer_off(_NUM);
620 }
621 return false;
622 break;
623 case FUNC:
624 if (record->event.pressed) {
625 layer_on(_FUNC);
626 } else {
627 layer_off(_FUNC);
628 }
629 return false;
630 break;
631
632 // OS switchers
633 case LINUX:
634 set_unicode_input_mode(UC_LNX);
635 #ifdef AUDIO_ENABLE
636 PLAY_NOTE_ARRAY(tone_linux, false, 0);
637 #endif
638 return false;
639 break;
640 case WIN:
641 set_unicode_input_mode(UC_WINC);
642 #ifdef AUDIO_ENABLE
643 PLAY_NOTE_ARRAY(tone_windows, false, 0);
644 #endif
645 return false;
646 break;
647 case OSX:
648 set_unicode_input_mode(UC_OSX);
649 #ifdef AUDIO_ENABLE
650 PLAY_NOTE_ARRAY(tone_osx, false, 0);
651 #endif
652 return false;
653 break;
654 }
655 return true;
656}
657
658void matrix_init_user(void) {
659 #ifdef AUDIO_ENABLE
660 startup_user();
661 #endif
662 set_unicode_input_mode(UC_LNX);
663}
664
665#ifdef AUDIO_ENABLE
666
667void startup_user()
668{
669 _delay_ms(20); // gets rid of tick
670 PLAY_NOTE_ARRAY(tone_startup, false, 0);
671}
672
673void shutdown_user()
674{
675 PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
676 _delay_ms(150);
677 stop_all_notes();
678}
679
680#endif \ No newline at end of file