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