1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
|
/* Copyright 2016-2017 Jack Humbert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "sequencer.h"
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
enum quantum_keycodes {
// Ranges used in shortcuts - not to be used directly
QK_BASIC = 0x0000,
QK_BASIC_MAX = 0x00FF,
QK_MODS = 0x0100,
QK_LCTL = 0x0100,
QK_LSFT = 0x0200,
QK_LALT = 0x0400,
QK_LGUI = 0x0800,
QK_RMODS_MIN = 0x1000,
QK_RCTL = 0x1100,
QK_RSFT = 0x1200,
QK_RALT = 0x1400,
QK_RGUI = 0x1800,
QK_MODS_MAX = 0x1FFF,
QK_FUNCTION = 0x2000,
QK_FUNCTION_MAX = 0x2FFF,
QK_MACRO = 0x3000,
QK_MACRO_MAX = 0x3FFF,
QK_LAYER_TAP = 0x4000,
QK_LAYER_TAP_MAX = 0x4FFF,
QK_TO = 0x5000,
QK_TO_MAX = 0x50FF,
QK_MOMENTARY = 0x5100,
QK_MOMENTARY_MAX = 0x51FF,
QK_DEF_LAYER = 0x5200,
QK_DEF_LAYER_MAX = 0x52FF,
QK_TOGGLE_LAYER = 0x5300,
QK_TOGGLE_LAYER_MAX = 0x53FF,
QK_ONE_SHOT_LAYER = 0x5400,
QK_ONE_SHOT_LAYER_MAX = 0x54FF,
QK_ONE_SHOT_MOD = 0x5500,
QK_ONE_SHOT_MOD_MAX = 0x55FF,
QK_SWAP_HANDS = 0x5600,
QK_SWAP_HANDS_MAX = 0x56FF,
QK_TAP_DANCE = 0x5700,
QK_TAP_DANCE_MAX = 0x57FF,
QK_LAYER_TAP_TOGGLE = 0x5800,
QK_LAYER_TAP_TOGGLE_MAX = 0x58FF,
QK_LAYER_MOD = 0x5900,
QK_LAYER_MOD_MAX = 0x59FF,
QK_STENO = 0x5A00,
QK_STENO_BOLT = 0x5A30,
QK_STENO_GEMINI = 0x5A31,
QK_STENO_COMB = 0x5A32,
QK_STENO_COMB_MAX = 0x5A3C,
QK_STENO_MAX = 0x5A3F,
// 0x5C00 - 0x5FFF are reserved, see below
QK_MOD_TAP = 0x6000,
QK_MOD_TAP_MAX = 0x7FFF,
QK_UNICODE = 0x8000,
QK_UNICODE_MAX = 0xFFFF,
QK_UNICODEMAP = 0x8000,
QK_UNICODEMAP_MAX = 0xBFFF,
QK_UNICODEMAP_PAIR = 0xC000,
QK_UNICODEMAP_PAIR_MAX = 0xFFFF,
// Loose keycodes - to be used directly
RESET = 0x5C00,
DEBUG, // 5C01
// Magic
MAGIC_SWAP_CONTROL_CAPSLOCK, // 5C02
MAGIC_CAPSLOCK_TO_CONTROL, // 5C03
MAGIC_SWAP_LALT_LGUI, // 5C04
MAGIC_SWAP_RALT_RGUI, // 5C05
MAGIC_NO_GUI, // 5C06
MAGIC_SWAP_GRAVE_ESC, // 5C07
MAGIC_SWAP_BACKSLASH_BACKSPACE, // 5C08
MAGIC_HOST_NKRO, // 5C09
MAGIC_SWAP_ALT_GUI, // 5C0A
MAGIC_UNSWAP_CONTROL_CAPSLOCK, // 5C0B
MAGIC_UNCAPSLOCK_TO_CONTROL, // 5C0C
MAGIC_UNSWAP_LALT_LGUI, // 5C0D
MAGIC_UNSWAP_RALT_RGUI, // 5C0E
MAGIC_UNNO_GUI, // 5C0F
MAGIC_UNSWAP_GRAVE_ESC, // 5C10
MAGIC_UNSWAP_BACKSLASH_BACKSPACE, // 5C11
MAGIC_UNHOST_NKRO, // 5C12
MAGIC_UNSWAP_ALT_GUI, // 5C13
MAGIC_TOGGLE_NKRO, // 5C14
MAGIC_TOGGLE_ALT_GUI, // 5C15
// Grave Escape
GRAVE_ESC, // 5C16
// Auto Shift
KC_ASUP, // 5C17
KC_ASDN, // 5C18
KC_ASRP, // 5C19
KC_ASTG, // 5C1A
KC_ASON, // 5C1B
KC_ASOFF, // 5C1C
// Audio
AU_ON, // 5C1D
AU_OFF, // 5C1E
AU_TOG, // 5C1F
// Audio Clicky
CLICKY_TOGGLE, // 5C20
CLICKY_ENABLE, // 5C21
CLICKY_DISABLE, // 5C22
CLICKY_UP, // 5C23
CLICKY_DOWN, // 5C24
CLICKY_RESET, // 5C25
// Music mode
MU_ON, // 5C26
MU_OFF, // 5C27
MU_TOG, // 5C28
MU_MOD, // 5C29
MUV_IN, // 5C2A
MUV_DE, // 5C2B
// MIDI
MI_ON, // 5C2C
MI_OFF, // 5C2D
MI_TOG, // 5C2E
MI_C, // 5C2F
MI_Cs, // 5C30
MI_Db = MI_Cs,
MI_D, // 5C31
MI_Ds, // 5C32
MI_Eb = MI_Ds,
MI_E, // 5C33
MI_F, // 5C34
MI_Fs, // 5C35
MI_Gb = MI_Fs,
MI_G, // 5C36
MI_Gs, // 5C37
MI_Ab = MI_Gs,
MI_A, // 5C38
MI_As, // 5C39
MI_Bb = MI_As,
MI_B, // 5C3A
MI_C_1, // 5C3B
MI_Cs_1, // 5C3C
MI_Db_1 = MI_Cs_1,
MI_D_1, // 5C3D
MI_Ds_1, // 5C3E
MI_Eb_1 = MI_Ds_1,
MI_E_1, // 5C3F
MI_F_1, // 5C40
MI_Fs_1, // 5C41
MI_Gb_1 = MI_Fs_1,
MI_G_1, // 5C42
MI_Gs_1, // 5C43
MI_Ab_1 = MI_Gs_1,
MI_A_1, // 5C44
MI_As_1, // 5C45
MI_Bb_1 = MI_As_1,
MI_B_1, // 5C46
MI_C_2, // 5C47
MI_Cs_2, // 5C48
MI_Db_2 = MI_Cs_2,
MI_D_2, // 5C49
MI_Ds_2, // 5C4A
MI_Eb_2 = MI_Ds_2,
MI_E_2, // 5C4B
MI_F_2, // 5C4C
MI_Fs_2, // 5C4D
MI_Gb_2 = MI_Fs_2,
MI_G_2, // 5C4E
MI_Gs_2, // 5C4F
MI_Ab_2 = MI_Gs_2,
MI_A_2, // 5C50
MI_As_2, // 5C51
MI_Bb_2 = MI_As_2,
MI_B_2, // 5C52
MI_C_3, // 5C53
MI_Cs_3, // 5C54
MI_Db_3 = MI_Cs_3,
MI_D_3, // 5C55
MI_Ds_3, // 5C56
MI_Eb_3 = MI_Ds_3,
MI_E_3, // 5C57
MI_F_3, // 5C58
MI_Fs_3, // 5C59
MI_Gb_3 = MI_Fs_3,
MI_G_3, // 5C5A
MI_Gs_3, // 5C5B
MI_Ab_3 = MI_Gs_3,
MI_A_3, // 5C5C
MI_As_3, // 5C5D
MI_Bb_3 = MI_As_3,
MI_B_3, // 5C5E
MI_C_4, // 5C5F
MI_Cs_4, // 5C60
MI_Db_4 = MI_Cs_4,
MI_D_4, // 5C61
MI_Ds_4, // 5C62
MI_Eb_4 = MI_Ds_4,
MI_E_4, // 5C63
MI_F_4, // 5C64
MI_Fs_4, // 5C65
MI_Gb_4 = MI_Fs_4,
MI_G_4, // 5C66
MI_Gs_4, // 5C67
MI_Ab_4 = MI_Gs_4,
MI_A_4, // 5C68
MI_As_4, // 5C69
MI_Bb_4 = MI_As_4,
MI_B_4, // 5C6A
MI_C_5, // 5C6B
MI_Cs_5, // 5C6C
MI_Db_5 = MI_Cs_5,
MI_D_5, // 5C6D
MI_Ds_5, // 5C6E
MI_Eb_5 = MI_Ds_5,
MI_E_5, // 5C6F
MI_F_5, // 5C70
MI_Fs_5, // 5C71
MI_Gb_5 = MI_Fs_5,
MI_G_5, // 5C72
MI_Gs_5, // 5C73
MI_Ab_5 = MI_Gs_5,
MI_A_5, // 5C74
MI_As_5, // 5C75
MI_Bb_5 = MI_As_5,
MI_B_5, // 5C76
MI_OCT_N2, // 5C77
MI_OCT_N1, // 5C78
MI_OCT_0, // 5C79
MI_OCT_1, // 5C7A
MI_OCT_2, // 5C7B
MI_OCT_3, // 5C7C
MI_OCT_4, // 5C7D
MI_OCT_5, // 5C7E
MI_OCT_6, // 5C7F
MI_OCT_7, // 5C80
MI_OCTD, // 5C81
MI_OCTU, // 5C82
MI_TRNS_N6, // 5C83
MI_TRNS_N5, // 5C84
MI_TRNS_N4, // 5C85
MI_TRNS_N3, // 5C86
MI_TRNS_N2, // 5C87
MI_TRNS_N1, // 5C88
MI_TRNS_0, // 5C89
MI_TRNS_1, // 5C8A
MI_TRNS_2, // 5C8B
MI_TRNS_3, // 5C8C
MI_TRNS_4, // 5C8D
MI_TRNS_5, // 5C8E
MI_TRNS_6, // 5C8F
MI_TRNSD, // 5C90
MI_TRNSU, // 5C91
MI_VEL_0, // 5C92
#ifdef VIA_ENABLE
MI_VEL_1 = MI_VEL_0,
#else
MI_VEL_1, // 5C93
#endif
MI_VEL_2, // 5C94
MI_VEL_3, // 5C95
MI_VEL_4, // 5C96
MI_VEL_5, // 5C97
MI_VEL_6, // 5C98
MI_VEL_7, // 5C99
MI_VEL_8, // 5C9A
MI_VEL_9, // 5C9B
MI_VEL_10, // 5C9C
MI_VELD, // 5C9D
MI_VELU, // 5C9E
MI_CH1, // 5C9F
MI_CH2, // 5CA0
MI_CH3, // 5CA1
MI_CH4, // 5CA2
MI_CH5, // 5CA3
MI_CH6, // 5CA4
MI_CH7, // 5CA5
MI_CH8, // 5CA6
MI_CH9, // 5CA7
MI_CH10, // 5CA8
MI_CH11, // 5CA9
MI_CH12, // 5CAA
MI_CH13, // 5CAB
MI_CH14, // 5CAC
MI_CH15, // 5CAD
MI_CH16, // 5CAE
MI_CHD, // 5CAF
MI_CHU, // 5CB0
MI_ALLOFF, // 5CB1
MI_SUS, // 5CB2
MI_PORT, // 5CB3
MI_SOST, // 5CB4
MI_SOFT, // 5CB5
MI_LEG, // 5CB6
MI_MOD, // 5CB7
MI_MODSD, // 5CB8
MI_MODSU, // 5CB9
MI_BENDD, // 5CBA
MI_BENDU, // 5CBB
// Backlight
BL_ON, // 5CBC
BL_OFF, // 5CBD
BL_DEC, // 5CBE
BL_INC, // 5CBF
BL_TOGG, // 5CC0
BL_STEP, // 5CC1
BL_BRTG, // 5CC2
// RGB underglow/matrix
RGB_TOG, // 5CC3
RGB_MODE_FORWARD, // 5CC4
RGB_MODE_REVERSE, // 5CC5
RGB_HUI, // 5CC6
RGB_HUD, // 5CC7
RGB_SAI, // 5CC8
RGB_SAD, // 5CC9
RGB_VAI, // 5CCA
RGB_VAD, // 5CCB
RGB_SPI, // 5CCC
RGB_SPD, // 5CCD
RGB_MODE_PLAIN, // 5CCE
RGB_MODE_BREATHE, // 5CCF
RGB_MODE_RAINBOW, // 5CD0
RGB_MODE_SWIRL, // 5CD1
RGB_MODE_SNAKE, // 5CD2
RGB_MODE_KNIGHT, // 5CD3
RGB_MODE_XMAS, // 5CD4
RGB_MODE_GRADIENT, // 5CD5
RGB_MODE_RGBTEST, // 5CD6
// Velocikey
VLK_TOG, // 5CD7
// Space Cadet
KC_LSPO, // 5CD8
KC_RSPC, // 5CD9
KC_SFTENT, // 5CDA
// Thermal Printer
PRINT_ON, // 5CDB
PRINT_OFF, // 5CDC
// Bluetooth: output selection
OUT_AUTO, // 5CDD
OUT_USB, // 5CDE
// Clear EEPROM
EEPROM_RESET, // 5CDF
// Unicode
UNICODE_MODE_FORWARD, // 5CE0
UNICODE_MODE_REVERSE, // 5CE1
UNICODE_MODE_MAC, // 5CE2
UNICODE_MODE_LNX, // 5CE3
UNICODE_MODE_WIN, // 5CE4
UNICODE_MODE_BSD, // 5CE5
UNICODE_MODE_WINC, // 5CE6
// Haptic
HPT_ON, // 5CE7
HPT_OFF, // 5CE8
HPT_TOG, // 5CE9
HPT_RST, // 5CEA
HPT_FBK, // 5CEB
HPT_BUZ, // 5CEC
HPT_MODI, // 5CED
HPT_MODD, // 5CEE
HPT_CONT, // 5CEF
HPT_CONI, // 5CF0
HPT_COND, // 5CF1
HPT_DWLI, // 5CF2
HPT_DWLD, // 5CF3
// Space Cadet (continued)
KC_LCPO, // 5CF4
KC_RCPC, // 5CF5
KC_LAPO, // 5CF6
KC_RAPC, // 5CF7
// Combos
CMB_ON, // 5CF8
CMB_OFF, // 5CF9
CMB_TOG, // 5CFA
// Magic (continued)
MAGIC_SWAP_LCTL_LGUI, // 5CFB
MAGIC_SWAP_RCTL_RGUI, // 5CFC
MAGIC_UNSWAP_LCTL_LGUI, // 5CFD
MAGIC_UNSWAP_RCTL_RGUI, // 5CFE
MAGIC_SWAP_CTL_GUI, // 5CFF
MAGIC_UNSWAP_CTL_GUI, // 5D00
MAGIC_TOGGLE_CTL_GUI, // 5D01
MAGIC_EE_HANDS_LEFT, // 5D02
MAGIC_EE_HANDS_RIGHT, // 5D03
// Dynamic Macros
DYN_REC_START1, // 5D04
DYN_REC_START2, // 5D05
DYN_REC_STOP, // 5D06
DYN_MACRO_PLAY1, // 5D07
DYN_MACRO_PLAY2, // 5D08
// Joystick
JS_BUTTON0, // 5D09
JS_BUTTON1, // 5D0A
JS_BUTTON2, // 5D0B
JS_BUTTON3, // 5D0C
JS_BUTTON4, // 5D0D
JS_BUTTON5, // 5D0E
JS_BUTTON6, // 5D0F
JS_BUTTON7, // 5D10
JS_BUTTON8, // 5D11
JS_BUTTON9, // 5D12
JS_BUTTON10, // 5D13
JS_BUTTON11, // 5D14
JS_BUTTON12, // 5D15
JS_BUTTON13, // 5D16
JS_BUTTON14, // 5D17
JS_BUTTON15, // 5D18
JS_BUTTON16, // 5D19
JS_BUTTON17, // 5D1A
JS_BUTTON18, // 5D1B
JS_BUTTON19, // 5D1C
JS_BUTTON20, // 5D1D
JS_BUTTON21, // 5D1E
JS_BUTTON22, // 5D1F
JS_BUTTON23, // 5D20
JS_BUTTON24, // 5D21
JS_BUTTON25, // 5D22
JS_BUTTON26, // 5D23
JS_BUTTON27, // 5D24
JS_BUTTON28, // 5D25
JS_BUTTON29, // 5D26
JS_BUTTON30, // 5D27
JS_BUTTON31, // 5D28
// Leader Key
KC_LEAD, // 5D29
// Bluetooth: output selection (continued)
OUT_BT, // 5D2A
// Lock Key
KC_LOCK, // 5D2B
// Terminal
TERM_ON, // 5D2C
TERM_OFF, // 5D2D
// Sequencer
SQ_ON, // 5D2E
SQ_OFF, // 5D2F
SQ_TOG, // 5D30
SQ_TMPD, // 5D31
SQ_TMPU, // 5D32
SQ_RESD, // 5D33
SQ_RESU, // 5D34
SQ_SALL, // 5D35
SQ_SCLR, // 5D36
SEQUENCER_STEP_MIN, // 5D37
SEQUENCER_STEP_MAX = SEQUENCER_STEP_MIN + SEQUENCER_STEPS,
SEQUENCER_RESOLUTION_MIN,
SEQUENCER_RESOLUTION_MAX = SEQUENCER_RESOLUTION_MIN + SEQUENCER_RESOLUTIONS,
SEQUENCER_TRACK_MIN,
SEQUENCER_TRACK_MAX = SEQUENCER_TRACK_MIN + SEQUENCER_TRACKS,
#define SQ_S(n) (n < SEQUENCER_STEPS ? SEQUENCER_STEP_MIN + n : KC_NO)
#define SQ_R(n) (n < SEQUENCER_RESOLUTIONS ? SEQUENCER_RESOLUTION_MIN + n : KC_NO)
#define SQ_T(n) (n < SEQUENCER_TRACKS ? SEQUENCER_TRACK_MIN + n : KC_NO)
// One Shot
ONESHOT_ENABLE,
ONESHOT_DISABLE,
ONESHOT_TOGGLE,
// RGB underglow/matrix (continued)
RGB_MODE_TWINKLE,
// Key Overrides
KEY_OVERRIDE_TOGGLE,
KEY_OVERRIDE_ON,
KEY_OVERRIDE_OFF,
// Start of custom keycode range for keyboards and keymaps - always leave at the end
SAFE_RANGE
};
// Keycode modifiers & aliases
#define LCTL(kc) (QK_LCTL | (kc))
#define LSFT(kc) (QK_LSFT | (kc))
#define LALT(kc) (QK_LALT | (kc))
#define LGUI(kc) (QK_LGUI | (kc))
#define LOPT(kc) LALT(kc)
#define LCMD(kc) LGUI(kc)
#define LWIN(kc) LGUI(kc)
#define RCTL(kc) (QK_RCTL | (kc))
#define RSFT(kc) (QK_RSFT | (kc))
#define RALT(kc) (QK_RALT | (kc))
#define RGUI(kc) (QK_RGUI | (kc))
#define ALGR(kc) RALT(kc)
#define ROPT(kc) RALT(kc)
#define RCMD(kc) RGUI(kc)
#define RWIN(kc) RGUI(kc)
#define HYPR(kc) (QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI | (kc))
#define MEH(kc) (QK_LCTL | QK_LSFT | QK_LALT | (kc))
#define LCAG(kc) (QK_LCTL | QK_LALT | QK_LGUI | (kc))
#define LSG(kc) (QK_LSFT | QK_LGUI | (kc))
#define SGUI(kc) LSG(kc)
#define SCMD(kc) LSG(kc)
#define SWIN(kc) LSG(kc)
#define LAG(kc) (QK_LALT | QK_LGUI | (kc))
#define RSG(kc) (QK_RSFT | QK_RGUI | (kc))
#define RAG(kc) (QK_RALT | QK_RGUI | (kc))
#define LCA(kc) (QK_LCTL | QK_LALT | (kc))
#define LSA(kc) (QK_LSFT | QK_LALT | (kc))
#define RSA(kc) (QK_RSFT | QK_RALT | (kc))
#define RCS(kc) (QK_RCTL | QK_RSFT | (kc))
#define SAGR(kc) RSA(kc)
#define MOD_HYPR 0xF
#define MOD_MEH 0x7
// US ANSI shifted keycode aliases
#define KC_TILD LSFT(KC_GRV) // ~
#define KC_TILDE KC_TILD
#define KC_EXLM LSFT(KC_1) // !
#define KC_EXCLAIM KC_EXLM
#define KC_AT LSFT(KC_2) // @
#define KC_HASH LSFT(KC_3) // #
#define KC_DLR LSFT(KC_4) // $
#define KC_DOLLAR KC_DLR
#define KC_PERC LSFT(KC_5) // %
#define KC_PERCENT KC_PERC
#define KC_CIRC LSFT(KC_6) // ^
#define KC_CIRCUMFLEX KC_CIRC
#define KC_AMPR LSFT(KC_7) // &
#define KC_AMPERSAND KC_AMPR
#define KC_ASTR LSFT(KC_8) // *
#define KC_ASTERISK KC_ASTR
#define KC_LPRN LSFT(KC_9) // (
#define KC_LEFT_PAREN KC_LPRN
#define KC_RPRN LSFT(KC_0) // )
#define KC_RIGHT_PAREN KC_RPRN
#define KC_UNDS LSFT(KC_MINS) // _
#define KC_UNDERSCORE KC_UNDS
#define KC_PLUS LSFT(KC_EQL) // +
#define KC_LCBR LSFT(KC_LBRC) // {
#define KC_LEFT_CURLY_BRACE KC_LCBR
#define KC_RCBR LSFT(KC_RBRC) // }
#define KC_RIGHT_CURLY_BRACE KC_RCBR
#define KC_LABK LSFT(KC_COMM) // <
#define KC_LEFT_ANGLE_BRACKET KC_LABK
#define KC_RABK LSFT(KC_DOT) // >
#define KC_RIGHT_ANGLE_BRACKET KC_RABK
#define KC_COLN LSFT(KC_SCLN) // :
#define KC_COLON KC_COLN
#define KC_PIPE LSFT(KC_BSLS) // |
#define KC_LT LSFT(KC_COMM) // <
#define KC_GT LSFT(KC_DOT) // >
#define KC_QUES LSFT(KC_SLSH) // ?
#define KC_QUESTION KC_QUES
#define KC_DQT LSFT(KC_QUOT) // "
#define KC_DOUBLE_QUOTE KC_DQT
#define KC_DQUO KC_DQT
#define KC_DELT KC_DELETE // Del key (four letter code)
// Modified keycode aliases
#define C(kc) LCTL(kc)
#define S(kc) LSFT(kc)
#define A(kc) LALT(kc)
#define G(kc) LGUI(kc)
// Deprecated - do not use
#define F(kc) (QK_FUNCTION | (kc))
#define M(kc) (QK_MACRO | (kc))
#define MACROTAP(kc) (QK_MACRO | (FUNC_TAP << 8) | (kc))
#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
#define KC_GESC GRAVE_ESC
#define EEP_RST EEPROM_RESET
// Audio Clicky aliases
#define CK_TOGG CLICKY_TOGGLE
#define CK_RST CLICKY_RESET
#define CK_UP CLICKY_UP
#define CK_DOWN CLICKY_DOWN
#define CK_ON CLICKY_ENABLE
#define CK_OFF CLICKY_DISABLE
// Fauxclicky (deprecated) redirects to Audio Clicky
#define FC_ON CLICKY_ENABLE
#define FC_OFF CLICKY_DISABLE
#define FC_TOGG CLICKY_TOGGLE
// RGB aliases
#define RGB_MOD RGB_MODE_FORWARD
#define RGB_RMOD RGB_MODE_REVERSE
#define RGB_M_P RGB_MODE_PLAIN
#define RGB_M_B RGB_MODE_BREATHE
#define RGB_M_R RGB_MODE_RAINBOW
#define RGB_M_SW RGB_MODE_SWIRL
#define RGB_M_SN RGB_MODE_SNAKE
#define RGB_M_K RGB_MODE_KNIGHT
#define RGB_M_X RGB_MODE_XMAS
#define RGB_M_G RGB_MODE_GRADIENT
#define RGB_M_T RGB_MODE_RGBTEST
#define RGB_M_TW RGB_MODE_TWINKLE
// Magic aliases
#define CL_SWAP MAGIC_SWAP_CONTROL_CAPSLOCK
#define CL_NORM MAGIC_UNSWAP_CONTROL_CAPSLOCK
#define CL_CTRL MAGIC_CAPSLOCK_TO_CONTROL
#define CL_CAPS MAGIC_UNCAPSLOCK_TO_CONTROL
#define LCG_SWP MAGIC_SWAP_LCTL_LGUI
#define LCG_NRM MAGIC_UNSWAP_LCTL_LGUI
#define RCG_SWP MAGIC_SWAP_RCTL_RGUI
#define RCG_NRM MAGIC_UNSWAP_RCTL_RGUI
#define CG_SWAP MAGIC_SWAP_CTL_GUI
#define CG_NORM MAGIC_UNSWAP_CTL_GUI
#define CG_TOGG MAGIC_TOGGLE_CTL_GUI
#define LAG_SWP MAGIC_SWAP_LALT_LGUI
#define LAG_NRM MAGIC_UNSWAP_LALT_LGUI
#define RAG_SWP MAGIC_SWAP_RALT_RGUI
#define RAG_NRM MAGIC_UNSWAP_RALT_RGUI
#define AG_SWAP MAGIC_SWAP_ALT_GUI
#define AG_NORM MAGIC_UNSWAP_ALT_GUI
#define AG_TOGG MAGIC_TOGGLE_ALT_GUI
#define GUI_OFF MAGIC_NO_GUI
#define GUI_ON MAGIC_UNNO_GUI
#define GE_SWAP MAGIC_SWAP_GRAVE_ESC
#define GE_NORM MAGIC_UNSWAP_GRAVE_ESC
#define BS_SWAP MAGIC_SWAP_BACKSLASH_BACKSPACE
#define BS_NORM MAGIC_UNSWAP_BACKSLASH_BACKSPACE
#define NK_ON MAGIC_HOST_NKRO
#define NK_OFF MAGIC_UNHOST_NKRO
#define NK_TOGG MAGIC_TOGGLE_NKRO
#define EH_LEFT MAGIC_EE_HANDS_LEFT
#define EH_RGHT MAGIC_EE_HANDS_RIGHT
// GOTO layer - 16 layers max
// when:
// ON_PRESS = 1
// ON_RELEASE = 2
// Unless you have a good reason not to do so, prefer ON_PRESS (1) as your default.
// In fact, we changed it to assume ON_PRESS for sanity/simplicity. If needed, you can add your own
// keycode modeled after the old version, kept below for this.
/* #define TO(layer, when) (QK_TO | (when << 0x4) | (layer & 0xFF)) */
#define TO(layer) (QK_TO | (ON_PRESS << 0x4) | ((layer)&0xFF))
// Momentary switch layer - 256 layer max
#define MO(layer) (QK_MOMENTARY | ((layer)&0xFF))
// Set default layer - 256 layer max
#define DF(layer) (QK_DEF_LAYER | ((layer)&0xFF))
// Toggle to layer - 256 layer max
#define TG(layer) (QK_TOGGLE_LAYER | ((layer)&0xFF))
// One-shot layer - 256 layer max
#define OSL(layer) (QK_ONE_SHOT_LAYER | ((layer)&0xFF))
// L-ayer M-od: Momentary switch layer with modifiers active - 16 layer max, left mods only
#define LM(layer, mod) (QK_LAYER_MOD | (((layer)&0xF) << 4) | ((mod)&0xF))
// One-shot mod
#define OSM(mod) (QK_ONE_SHOT_MOD | ((mod)&0xFF))
// Layer tap-toggle
#define TT(layer) (QK_LAYER_TAP_TOGGLE | ((layer)&0xFF))
// L-ayer, T-ap - 256 keycode max, 16 layer max
#define LT(layer, kc) (QK_LAYER_TAP | (((layer)&0xF) << 8) | ((kc)&0xFF))
// M-od, T-ap - 256 keycode max
#define MT(mod, kc) (QK_MOD_TAP | (((mod)&0x1F) << 8) | ((kc)&0xFF))
#define LCTL_T(kc) MT(MOD_LCTL, kc)
#define RCTL_T(kc) MT(MOD_RCTL, kc)
#define CTL_T(kc) LCTL_T(kc)
#define LSFT_T(kc) MT(MOD_LSFT, kc)
#define RSFT_T(kc) MT(MOD_RSFT, kc)
#define SFT_T(kc) LSFT_T(kc)
#define LALT_T(kc) MT(MOD_LALT, kc)
#define RALT_T(kc) MT(MOD_RALT, kc)
#define LOPT_T(kc) LALT_T(kc)
#define ROPT_T(kc) RALT_T(kc)
#define ALGR_T(kc) RALT_T(kc)
#define ALT_T(kc) LALT_T(kc)
#define OPT_T(kc) LOPT_T(kc)
#define LGUI_T(kc) MT(MOD_LGUI, kc)
#define RGUI_T(kc) MT(MOD_RGUI, kc)
#define LCMD_T(kc) LGUI_T(kc)
#define LWIN_T(kc) LGUI_T(kc)
#define RCMD_T(kc) RGUI_T(kc)
#define RWIN_T(kc) RGUI_T(kc)
#define GUI_T(kc) LGUI_T(kc)
#define CMD_T(kc) LCMD_T(kc)
#define WIN_T(kc) LWIN_T(kc)
#define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Left Control + Shift e.g. for gnome-terminal
#define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc) // Meh is a less hyper version of the Hyper key -- doesn't include GUI, so just Left Control + Shift + Alt
#define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left Control + Alt + GUI
#define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc) // Right Control + Alt + GUI
#define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
#define LSG_T(kc) MT(MOD_LSFT | MOD_LGUI, kc) // Left Shift + GUI
#define SGUI_T(kc) LSG_T(kc)
#define SCMD_T(kc) LSG_T(kc)
#define SWIN_T(kc) LSG_T(kc)
#define LAG_T(kc) MT(MOD_LALT | MOD_LGUI, kc) // Left Alt + GUI
#define RSG_T(kc) MT(MOD_RSFT | MOD_RGUI, kc) // Right Shift + GUI
#define RAG_T(kc) MT(MOD_RALT | MOD_RGUI, kc) // Right Alt + GUI
#define LCA_T(kc) MT(MOD_LCTL | MOD_LALT, kc) // Left Control + Alt
#define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc) // Left Shift + Alt
#define RSA_T(kc) MT(MOD_RSFT | MOD_RALT, kc) // Right Shift + Alt
#define RCS_T(kc) MT(MOD_RCTL | MOD_RSFT, kc) // Right Control + Shift
#define SAGR_T(kc) RSA_T(kc)
#define ALL_T(kc) HYPR_T(kc)
// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
#define KC_HYPR HYPR(KC_NO)
#define KC_MEH MEH(KC_NO)
// Unicode aliases
// UNICODE_ENABLE - Allows Unicode input up to 0x7FFF
#define UC(c) (QK_UNICODE | (c))
// UNICODEMAP_ENABLE - Allows Unicode input up to 0x10FFFF, requires unicode_map
#define X(i) (QK_UNICODEMAP | (i))
#define XP(i, j) (QK_UNICODEMAP_PAIR | ((i)&0x7F) | (((j)&0x7F) << 7)) // 127 max i and j
#define UC_MOD UNICODE_MODE_FORWARD
#define UC_RMOD UNICODE_MODE_REVERSE
#define UC_M_MA UNICODE_MODE_MAC
#define UNICODE_MODE_OSX UNICODE_MODE_MAC // Deprecated alias
#define UC_M_OS UNICODE_MODE_MAC // Deprecated alias
#define UC_M_LN UNICODE_MODE_LNX
#define UC_M_WI UNICODE_MODE_WIN
#define UC_M_BS UNICODE_MODE_BSD
#define UC_M_WC UNICODE_MODE_WINC
// Swap Hands
#define SH_T(kc) (QK_SWAP_HANDS | (kc))
#define SH_TG (QK_SWAP_HANDS | OP_SH_TOGGLE)
#define SH_TT (QK_SWAP_HANDS | OP_SH_TAP_TOGGLE)
#define SH_OS (QK_SWAP_HANDS | OP_SH_ONESHOT)
#define SH_MON (QK_SWAP_HANDS | OP_SH_ON_OFF)
#define SH_MOFF (QK_SWAP_HANDS | OP_SH_OFF_ON)
#define SH_ON (QK_SWAP_HANDS | OP_SH_ON)
#define SH_OFF (QK_SWAP_HANDS | OP_SH_OFF)
// MIDI aliases
#define MIDI_TONE_MIN MI_C
#define MIDI_TONE_MAX MI_B_5
#define MIDI_OCTAVE_MIN MI_OCT_N2
#define MIDI_OCTAVE_MAX MI_OCT_7
#define MIDI_TRANSPOSE_MIN MI_TRNS_N6
#define MIDI_TRANSPOSE_MAX MI_TRNS_6
#define MIDI_VELOCITY_MIN MI_VEL_0
#define MIDI_VELOCITY_MAX MI_VEL_10
#define MIDI_CHANNEL_MIN MI_CH1
#define MIDI_CHANNEL_MAX MI_CH16
// Dynamic Macros aliases
#define DM_REC1 DYN_REC_START1
#define DM_REC2 DYN_REC_START2
#define DM_RSTP DYN_REC_STOP
#define DM_PLY1 DYN_MACRO_PLAY1
#define DM_PLY2 DYN_MACRO_PLAY2
// Joystick aliases
#define JS_BUTTON_MIN JS_BUTTON0
#define JS_BUTTON_MAX JS_BUTTON31
// One Shot aliases
#define OS_TOGG ONESHOT_TOGGLE
#define OS_ON ONESHOT_ENABLE
#define OS_OFF ONESHOT_DISABLE
|