summaryrefslogtreecommitdiff
path: root/users/ericgebhart/layers.h
blob: aff401d65ed3376d5cba604611e4747abfb00b63 (plain)
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
#pragma once
/*
  Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com>

  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/>.
*/

#include "core_keys.h"
/*********************************************************************/
/* Non-Base Layer Definitions.                                       */
/*                                                                   */
/* Keypads, sympads, funcpads, symbols, RGB, Layers, Controls, etc.  */
/* Qwerty and Bepo versions exist as needed.                         */
/*                                                                   */
/* This file defines every auxillary layer I use on every keyboard   */
/* Ergodox, keebio/viterbi, xd75, rebound, crkbd, morpho, dactyl,..  */
/*********************************************************************/
/********************************************************************************/
/* The following Transient/Non-Base Layers are provided within.                 */
/* Each layer is named with the size of Keymatrix it has entries for.           */
/* 3x12 or 4x12 are usual for these. Splitting is managed in the macros as      */
/* needed. BP indicates the Bepo equivalent to the Qwerty layer when needed.    */
/********************************************************************************/
/*                                                                              */
/* Explore below to see what they all are.                                      */
/* Naming gives the sizes of things, a prefix number is the length.             */
/* BP is the bepo version of things.                                            */
/* BKL is the beakl 15 version of a layout or chunk.                            */
/* C on the end of a name means its a compact version of something.             */
/* Compact meaning for use on a 3 row layout.                                   */
/*                                                                              */
/* TOPROWS - numbers, symbols, functions, all on one layer.                     */
/* ___TOPROWS_3x12___                                                           */
/* ___TOPROWS_BP_3x12___                                                        */
/*    // just numbers on the home row                                           */
/* ___NUM_HOME_BEAKL_3x12___                                                    */
/* ___NUM_HOME_BEAKL_BP_3x12___                                                 */
/* ___NUM_HOME_3x12___                                                          */
/* ___NUM_HOME_BP_3x12___                                                       */
/*                                                                              */
/* KEYPADS/FUNCPADS.                                                            */
/* ___KEY_BKL_FUNC_4x12___   -- The BEAKL15 Keypad with a Funcpad on the right  */
/* ___KEY_BKL_FUNC_BP_4x12___                                                   */
/* ___FUNC_KEYPAD_4x12___    -- A Funcpad and a keypad                          */
/* ___FUNC_KEYPAD_BP_4x12___ -- For Bepo                                        */
/*                                                                              */
/* // Compact Funcpad and keypad, 3x12                                          */
/* ___KP_C_3x12___                                                              */
/* ___KP_C_BP_3x12___                                                           */
/* ___KP_C_BKL_FUNC_3x12___  -- BEAKL key/func pads.                            */
/* ___KP_C_BKL_FUNC_BP_3x12___                                                  */
/*                                                                              */
/* SYMBOLS   -Beakl or Beakl extended                                           */
/* ___SYMB_BEAKL_3x12___                                                        */
/* ___SYMB_BEAKL_BP_3x12___                                                     */
/*                                                                              */
/* Beakl extended symbol layer with additional corner symbols.                  */
/* For use with non-beakl base layers.                                          */
/* ___SYMB_BEAKLA_3x12___                                                       */
/* ___SYMB_BEAKLA_BP_3x12___                                                    */
/* For use with vi bindings optimized                                           */
/* ___SYMB_BEAKLB_3x12___                                                       */
/* ___SYMB_BEAKLB_BP_3x12___                                                    */
/*                                                                              */
/* NAVIGATION                                                                   */
/* ___NAV_3x12___                                                               */
/* ___NAV_4x12___                                                               */
/*                                                                              */
/* CONTROLS                                                                     */
/* ___RGB_3x12___                                                               */
/* ___ADJUST_3x12___                                                            */
/* ___LAYERS_3x12___                                                            */
/********************************************************************************/
/*********************************************************************/
/* XXXXXX Layer chunk  -- These are the final layers.                */
/*                                                                   */
/* Each section defines the necessary pieces to create a layer.      */
/* It builds them up into consistently shaped lists for the layout   */
/* wrapper.                                                          */
/*                                                                   */
/* Each Section ends with a _Layer Chunk_. This is so the            */
/* layer can be easily given to the Layout Wrapper macros which      */
/* takes a list of keys in lengths of 2x3x5, 2x3x6, 2x4x5, or 2x4x6. */
/*                                                                   */
/* All of my keyboard definitions use these same chunks with similar */
/* macros. The differences between keyboards are all managed in the  */
/* macro. Here we just have nice rectangular sets of keys to         */
/* complete a layout.                                                */
/*********************************************************************/


/*******************************************************************/
/* A Top Rows layer.  Pick your parts.  Bepo and Qwerty            */
/*                                                                 */
/* This is, to me, a stop gap layer. If I need symbols, numbers or */
/* function keys these rows are nicely predictable to most people. */
/* I currently use the beakl number row with regular symbols.      */
/* I never use function keys for anything.                         */
/*******************************************************************/
#define ___12_SYMB___        ___, ___SYMS___, ___
#define ___12_SYMB_BP___       ___12_SYMS_BEPO___,

#define ___12_NUM___         ___, ___NUMS___, ___
#define ___12_NUM_BP___        ___, ___NUMS_BP___, ___
#define ___12_NUM_BEAKL___   ___, ___BKLNUMS___, ___
#define ___12_NUM_BEAKL_BP___ ___, ___BKLNUMS_BP___, ___

#define ___12_FUNC___        ___FUNC_1_6___, ___FUNC_7_12___
#define ___12_SYMS_BEPO___   ___6SYMBOL_BEPO_L___, ___6SYMBOL_BEPO_R___
#define ___12_SYMS_FR___     ___SYMB_L_FR___, ___SYMB_R_FR___

// Kinesis function key row. I don't use them. but might as well define them.
#define ___KINTFUNC_L___ KC_ESC, ___FUNC_1_6___, KC_F7, KC_F8
// #define ___KINTFUNC_RIGHT___ KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_FN0, RESET
#define ___KINTFUNC_R___ KC_F9, KC_F10, KC_F11, KC_F12, XXX, XXX, XXX, XXX, RESET

// A TOPROWS Layer.
// set it how you like it, if you like it.
#define ___TOPROW_1___    ___12_SYMB___
#define ___TOPROW_2___    ___12_NUM_BEAKL___
#define ___TOPROW_3___    ___12_FUNC___

#define ___TOPROW_1_BP___ ___12_SYMS_BEPO___
#define ___TOPROW_2_BP___ ___12_NUM_BEAKL_BP___
#define ___TOPROW_3_BP___ ___12_FUNC___

/********************************************************************************/
/* TOPROWS Layer chunk                                                          */
/********************************************************************************/
// altogether in a chunk.
#define ___TOPROWS_3x12___     ___TOPROW_1___,    ___TOPROW_2___,    ___TOPROW_3___
#define ___TOPROWS_BP_3x12___ ___TOPROW_1_BP___, ___TOPROW_2_BP___, ___TOPROW_3_BP___

// Some layers with just a home row of numbers.
// The beakl ones, r the usual ones.
#define ___NUM_HOME_BEAKL_3x12___    ___12___, ___12_NUM_BEAKL___,    ___12___
#define ___NUM_HOME_BEAKL_BP_3x12___ ___12___, ___12_NUM_BEAKL_BP___, ___12___
#define ___NUM_HOME_3x12___          ___12___, ___12_NUM___,          ___12___
#define ___NUM_HOME_BP_3x12___       ___12___, ___12_NUM_BP___,       ___12___


/********************************************************************************/
/*  KEYPADS.  Mostly all in Bepo and Qwerty versions                            */
/*      4 row Pads:                                                             */
/*         * The BEAKL 15 Number pad, for the left hand.                        */
/*         * Regular Number pad, for the right hand.                            */
/*         * 12 Function pad.                                                   */
/*      3 row pads:                                                             */
/*         keypad                                                               */
/*         function pad                                                         */
/*                                                                              */
/*  LAYERS:                                                                     */
/*      4 Row:                                                                  */
/*         * BEAKL with a compact FuncPad on the right.                         */
/*         * Funcpad on the left, keypad on the right.                          */
/*      3 Row:                                                                  */
/*         * Funcpad on the left, keypad on the right.                          */
/*         * BEAKL with a compact FuncPad on the right.                         */
/*                                                                              */
/********************************************************************************/

// BEAKL 15 (numpad layer):
/*    +=*   ^%~ */
/*   ↹523:      */
/* - 7.104      */
/*   /698,      */

// Keypads
#define ___6KEYPAD_BEAKL_L1___     ___, _X_,        KC_PLUS,  KC_PEQL,  KC_ASTR, _X_
#define ___6KEYPAD_BEAKL_L2___     ___, TAB_BKTAB,  KC_5,     KC_2,     KC_3,   KC_COLON
#define ___6KEYPAD_BEAKL_L3___ KC_MINS, KC_7,       KC_DOT,   KC_1,     KC_0,   KC_4
#define ___6KEYPAD_BEAKL_L4___     ___, KC_SLASH,   KC_6,     KC_9,     KC_8,   KC_COMM

#define ___5KEYPAD_BEAKL_R1___     ___, KC_CIRC,  KC_PERC,  KC_TILD, ___

#define ___6KEYPAD_BEAKL_L1_BP___     ___, _X_,        BP_PLUS,  BP_EQL,  BP_ASTR, _X_
#define ___6KEYPAD_BEAKL_L2_BP___     ___, TAB_BKTAB,  BP_5,     BP_2,     BP_3,   BP_COLN
#define ___6KEYPAD_BEAKL_L3_BP___ BP_MINS, BP_7,       BP_DOT,   BP_1,     BP_0,   BP_4
#define ___6KEYPAD_BEAKL_L4_BP___     ___, BP_SLSH,   BP_6,     BP_9,     BP_8,   BP_COMM

#define ___5KEYPAD_BEAKL_R1_BP___     ___, BP_CIRC,  BP_PERC,  BP_TILD, ___

#define ___5KEYPAD_1___ _X_, KC_7,  KC_8,    KC_9,     KC_PSLS
#define ___5KEYPAD_2___ _X_, KC_4,  KC_5,    KC_6,     KC_PAST
#define ___5KEYPAD_3___ _X_, KC_1,  KC_2,    KC_3,     KC_PMNS
#define ___5KEYPAD_4___ _X_, KC_0,  KC_DOT,  KC_PEQL,  KC_PPLS
// For Bepo
#define ___5KEYPAD_1_BP___ _X_, DB_7,  DB_8,    DB_9,     BP_SLSH
#define ___5KEYPAD_2_BP___ _X_, DB_4,  DB_5,    DB_6,     BP_ASTR
#define ___5KEYPAD_3_BP___ _X_, DB_1,  DB_2,    DB_3,     DB_MINUS
#define ___5KEYPAD_4_BP___ _X_, DB_0,  DB_DOT,  DB_EQL,   BP_PLUS

// Keypad from the default keymap.c of the xd75
#define ___4KEYPAD_1_ALT___ _X_, KC_P7, KC_P8,  KC_P9,   KC_MINS
#define ___4KEYPAD_2_ALT___ _X_, KC_P4, KC_P5,  KC_P6,   KC_PLUS
#define ___4KEYPAD_3_ALT___ _X_, KC_P1, KC_P2,  KC_P3,   KC_PENT
#define ___4KEYPAD_4_ALT___ _X_, KC_P0, KC_DOT, KC_PENT, KC_PENT

// Function pad.  Same idea as above, but for function keys.
// For the left side.
#define ___5FUNCPAD_T___   _X_, KC_F10,  KC_F11,  KC_F12, _X_
#define ___5FUNCPAD_1___   _X_, KC_F7,   KC_F8,   KC_F9, _X_
#define ___5FUNCPAD_2___   _X_, KC_F4,   KC_F5,   KC_F6, _X_
#define ___5FUNCPAD_3___   _X_, KC_F1,   KC_F2,   KC_F3, _X_


// Put them together for complete left and right layers.
// Beakl keypad with a funcpad
#define ___12_KEYPAD_BKL_FUNCPAD_1___ ___6KEYPAD_BEAKL_L1___, _X_, ___5KEYPAD_BEAKL_R1___
#define ___12_KEYPAD_BKL_FUNCPAD_2___ ___6KEYPAD_BEAKL_L2___, _X_, ___5_FUNCPADC_1___
#define ___12_KEYPAD_BKL_FUNCPAD_3___ ___6KEYPAD_BEAKL_L3___, _X_, ___5_FUNCPADC_2___
#define ___12_KEYPAD_BKL_FUNCPAD_4___ ___6KEYPAD_BEAKL_L4___, _X_, ___5_FUNCPADC_3___

#define ___12_KEYPAD_BKL_FUNCPAD_1_BP___ ___6KEYPAD_BEAKL_L1_BP___, _X_, ___5KEYPAD_BEAKL_R1_BP___
#define ___12_KEYPAD_BKL_FUNCPAD_2_BP___ ___6KEYPAD_BEAKL_L2_BP___, _X_, ___5_FUNCPADC_1___
#define ___12_KEYPAD_BKL_FUNCPAD_3_BP___ ___6KEYPAD_BEAKL_L3_BP___, _X_, ___5_FUNCPADC_2___
#define ___12_KEYPAD_BKL_FUNCPAD_4_BP___ ___6KEYPAD_BEAKL_L4_BP___, _X_, ___5_FUNCPADC_3___

// Funcpad and keypad layer for Qwerty based layers.
#define ___12_FUNCPAD_KEYPAD_1___ ___,  ___5FUNCPAD_T___,  ___5KEYPAD_1___,  ___
#define ___12_FUNCPAD_KEYPAD_2___ ___,  ___5FUNCPAD_1___,  ___5KEYPAD_2___,  ___
#define ___12_FUNCPAD_KEYPAD_3___ ___,  ___5FUNCPAD_2___,  ___5KEYPAD_3___,  KC_PENT
#define ___12_FUNCPAD_KEYPAD_4___ ___,  ___5FUNCPAD_3___,  ___5KEYPAD_4___,  ___

// Funcpad and keypad layer for BEPO
#define ___12_FUNCPAD_KEYPAD_BP_1___    ___,  ___5FUNCPAD_T_BP___,  ___5KEYPAD_1_BP___,  ___
#define ___12_FUNCPAD_KEYPAD_BP_2___    ___,  ___5FUNCPAD_1_BP___,  ___5KEYPAD_2_BP___,  ___
#define ___12_FUNCPAD_KEYPAD_BP_3___    ___,  ___5FUNCPAD_2_BP___,  ___5KEYPAD_3_BP___,  KC_PENT
#define ___12_FUNCPAD_KEYPAD_BP_4___    ___,  ___5FUNCPAD_3_BP___,  ___5KEYPAD_4_BP___,  ___

/********************************************************************************/
/* COMPACT - KEYPAD and FUNCPAD.  3 Rows.                                       */
/********************************************************************************/
// Compact versions of each. 3 rows.
//Compact keypad, 3 rows.
#define ___6KEYPADC_1___ ___,    KC_7,  KC_8,    KC_9,     KC_PSLS, ___
#define ___6KEYPADC_2___ KC_DOT, KC_4,  KC_5,    KC_6,     KC_PAST, KC_PEQL
#define ___6KEYPADC_3___ KC_0,   KC_1,  KC_2,    KC_3,     KC_PMNS, KC_PPLS
// For Bepo
#define ___6KEYPADC_1_BP___ ___,    DB_7,  DB_8,    DB_9,  BP_SLSH
#define ___6KEYPADC_2_BP___ DB_DOT, DB_4,  DB_5,    DB_6,  BP_ASTR,  DB_EQL
#define ___6KEYPADC_3_BP___ DB_0,   DB_1,  DB_2,    DB_3,  DB_MINUS, DB_PLUS

// compact 1-12 funcpad for 3 row keyboards.
#define ___5_FUNCPADC_1___   KC_F9, KC_F10, KC_F11, KC_F12, ___
#define ___5_FUNCPADC_2___   KC_F5, KC_F6,  KC_F7,  KC_F8,  ___
#define ___5_FUNCPADC_3___   KC_F1, KC_F2,  KC_F3,  KC_F4,  ___

// Compact funcpads/keypad Layer
#define ___12_KP_1C___ ___,  ___5_FUNCPADC_1___,   ___5KEYPAD_1___, ___
#define ___12_KP_2C___ ___,  ___5_FUNCPADC_2___,   ___5KEYPAD_2___, ___
#define ___12_KP_3C___ ___,  ___5_FUNCPADC_3___,   ___5KEYPAD_3___, ___
// Reversed
#define ___12_KP_FP_1C___ ___,  ___5KEYPAD_1___,   ___5_FUNCPADC_1___, ___
#define ___12_KP_FP_2C___ ___,  ___5KEYPAD_2___,   ___5_FUNCPADC_2___, ___
#define ___12_KP_FP_3C___ ___,  ___5KEYPAD_3___,   ___5_FUNCPADC_3___, ___

//Bepo funcpad and keypad Layer
#define ___12_KP_1_BP___ ___,  ___5_FUNCPADC_1___, ___5KEYPAD_1_BP___, ___
#define ___12_KP_2_BP___ ___,  ___5_FUNCPADC_2___, ___5KEYPAD_2_BP___, ___
#define ___12_KP_3_BP___ ___,  ___5_FUNCPADC_3___, ___5KEYPAD_3_BP___, ___

/********************************************************************************/
/* FUNCPAD and Keypad Layer chunks                                              */
/********************************************************************************/
// Full size, 4x12
#define ___KEYPAD_BKL_FUNC_4x12___ \
  ___12_KEYPAD_BKL_FUNCPAD_1___,                                        \
    ___12_KEYPAD_BKL_FUNCPAD_2___,                                      \
    ___12_KEYPAD_BKL_FUNCPAD_3___, \
    ___12_KEYPAD_BKL_FUNCPAD_4___
#define ___KEYPAD_BKL_FUNC_BP_4x12___                                   \
   ___12_KEYPAD_BKL_FUNCPAD_1_BP___,                                    \
     ___12_KEYPAD_BKL_FUNCPAD_2_BP___,                                  \
     ___12_KEYPAD_BKL_FUNCPAD_3_BP___,                                  \
     ___12_KEYPAD_BKL_FUNCPAD_4_BP___
#define ___FUNC_KEYPAD_4x12___ \
  ___12_FUNCPAD_KEYPAD_1___,                                    \
    ___12_FUNCPAD_KEYPAD_2___,                                  \
    ___12_FUNCPAD_KEYPAD_3___,                                \
    ___12_FUNCPAD_KEYPAD_4___
#define ___FUNC_KEYPAD_BP_4x12___ \
    ___12_FUNCPAD_KEYPAD_BP_1___,                                       \
      ___12_FUNCPAD_KEYPAD_BP_2___,                                     \
      ___12_FUNCPAD_KEYPAD_BP_3___,                                     \
      ___12_FUNCPAD_KEYPAD_BP_4___

// Compact, 3x12
#define ___KP_C_BKL_FUNC_3x12___                \
  ___12_KEYPAD_BKL_FUNCPAD_2___,                \
    ___12_KEYPAD_BKL_FUNCPAD_3___,              \
    ___12_KEYPAD_BKL_FUNCPAD_4___
#define ___KP_C_BKL_FUNC_BP_3x12___             \
  ___12_KEYPAD_BKL_FUNCPAD_2_BP___,             \
    ___12_KEYPAD_BKL_FUNCPAD_3_BP___,           \
    ___12_KEYPAD_BKL_FUNCPAD_4_BP___

#define ___KP_C_3x12___    ___12_KP_1C___,   ___12_KP_2C___,   ___12_KP_3C___
#define ___KP_FP_C_3x12___  ___12_KP_FP_1C___,   ___12_KP_FP_2C___,   ___12_KP_FP_3C___
#define ___KP_C_BP_3x12___ ___12_KP_1_BP___, ___12_KP_2_BP___, ___12_KP_3_BP___



/********************************************************************************/
/* SYMBOLS.  The BEAKL15 Symbol layer with or without additions.  */
/*                                                                */
/* Symbol layers:                                                 */
/*                                                                */
/*     BEAKL symbol layer                                         */
/*         <$>   [_]                                              */
/*      - \(")# %{=}| ;                                           */
/*         :*+   &^~                                              */
/*                                                                */
/*     BEAKL Extended symbol layer                                */
/*        `<$>' ?[_]                                              */
/*      - \(")# %{=}| ;                                           */
/*        @:*+; !&^~/                                             */
/*                                                                */
/* This layer has replaced my former Symbol pad and Symbols       */
/* layer. The Sympad was nice, But this incorporates the matching */
/* (){}[] that I had and at the same time provides an easily      */
/* Learnable layer that makes sense. It was also easy to          */
/* Supplement with new keys that other layouts might need.        */
/*                                                                */
/* The first Layer defined is the "Official" version.             */
/* The second Layer defined only adds to the original by          */
/* Placing 8 keys in the pinky and index corners                  */
/* at the edges of the, 3x3, BEAKL home Region.                   */
/*                                                                */
/* Namely these: !?@`'/-;                                         */
/*                                                                */
/* Beakl has these keys in it's base layer which isn't the case   */
/* for other layouts like dvorak, colemak, etc.                   */
/*                                                                */
/******************************************************************/

/******************************************************************/
/* Official BEAKL15 Symbol layer. */
/* BEAKL 15 (punctuation layer): */
/*                 */
/*    <$>   [_]    */
/* - \(")# %{=}| ; */
/*    :*+   &^~    */
/******************************************************************/
/********************************************************************************/
/* The expanded Beakl Symbol Layer                                              */
/*                                                                              */
/* Expanded with: !?@`'/-;                                                      */
/*                                                                              */
/* This insures access to all common symbols, regardless of availabilily on     */
/* other layers. All the extra characters are added to the pinky and index      */
/* corners which are empty in the BEAKL symbol layer.                           */
/*                                                                              */
/* Both ; and ' could find their dvorak positions.                              */
/* Analysis showed that only caused pinky overuse. Rotating the symbols around  */
/* Put better keys on the index finger which showed a huge improvement          */
/* in efficiency.  The same is true of the exclamation point.                   */
/*                                                                              */
/* A:                                                                           */
/*   `<$>' ?[_]                                              */
/* - \(")# %{=}| ;                                           */
/*   @:*+; !&^~/                                             */
/*                                                                              */
/* B:                                                                           */
/*  With vi bindings /:? and a leader key for vi/emacs.*/
/*  ; is popular, I use , it's easy in dvorak.:   */
/*                                                                              */
/*   `<$>' ?[_]-                                             */
/* - \(")# !{:}/ ;                                           */
/*   @=*+; %&^~|                                             */
/********************************************************************************/
// Left
#define ___SB_L1___               KC_OCLTGT,     KC_DLR,   KC_GT
#define ___SB_L2___   KC_BACKSLASH,  KC_OCPRN,   KC_OCDQUO,   KC_RPRN,  KC_HASH
#define ___SB_L3___               KC_COLON,  KC_ASTR,  KC_PLUS
#define ___SB_L3b___              KC_EQL,  KC_ASTR,  KC_PLUS

// Bepo
#define ___SB_L1_BP___                BP_OCLTGT,   BP_DLR,   DB_GRTR
#define ___SB_L2_BP___  DB_BACKSLASH, DB_LPRN,   BP_OCDQUO,  DB_RPRN,  DB_HASH
#define ___SB_L3_BP___                KC_COLON,  BP_ASTR,  BP_PLUS
#define ___SB_L3b_BP___               BP_EQL,  BP_ASTR,  BP_PLUS

// Right
#define ___SB_R1___               KC_OCBRC,   KC_UNDS,  KC_RBRC
#define ___SB_R2___    KC_PERC,   KC_OCCBR,   KC_EQL,   KC_RCBR,  KC_PIPE
#define ___SB_R3___               KC_AMPR,   KC_CIRC,  KC_TILD

#define ___SB_R2a___   KC_PERC, KC_OCCBR,   KC_EXLM,   KC_RCBR,  KC_PIPE
#define ___SB_R2b___   KC_EXLM,   KC_OCCBR,   KC_COLN,  KC_RCBR,  KC_SLASH

// Bepo
#define ___SB_R1_BP___            BP_OCBRC,   BP_UNDS,  DB_RBRC
#define ___SB_R2_BP___  BP_PERC, BP_OCCBR,   BP_EQL,   DB_RCBR,  DB_PIPE
#define ___SB_R3_BP___            BP_AMPR,   DB_CIRC,  DB_TILD

#define ___SB_R2a_BP___ BP_PERC, BP_OCCBR,   BP_EXLM,   DB_RCBR,  DB_PIPE
#define ___SB_R2b_BP___ BP_EXLM, BP_OCCBR,   KC_COLON,   DB_RCBR,  DB_SLASH

// ---------------------------
// ---------------------------

// Square it to 6, Add in the - and ;.
#define ___6SYMBOLS_BEAKL_L1___  ___,     ___,  ___SB_L1___, ___
#define ___6SYMBOLS_BEAKL_L2___  KC_MINS, ___SB_L2___
#define ___6SYMBOLS_BEAKL_L3___  ___,     ___,  ___SB_L3___, ___

#define ___6SYMBOLS_BEAKL_R1___  ___, ___SB_R1___,  ___, ___
#define ___6SYMBOLS_BEAKL_R2___  ___SB_R2___,            KC_SCLN
#define ___6SYMBOLS_BEAKL_R3___  ___, ___SB_R3___,  ___, ___
// ---------------------------
#define ___6SYMBOLS_BEAKL_L1a___  ___, KC_OCGRV,  ___SB_L1___,  KC_OCQUOT
#define ___6SYMBOLS_BEAKL_L2a___  ___6SYMBOLS_BEAKL_L2___
#define ___6SYMBOLS_BEAKL_L3a___  ___, KC_AT,  ___SB_L3___,  KC_SCLN

#define ___6SYMBOLS_BEAKL_R1a___  LSFT(KC_SLASH), ___SB_R1___,  KC_MINS, ___
#define ___6SYMBOLS_BEAKL_R2a___  ___SB_R2a___, KC_SCLN
#define ___6SYMBOLS_BEAKL_R3a___  KC_EXLM, ___SB_R3___,  KC_SLASH,    ___
// ---------------------------
#define ___6SYMBOLS_BEAKL_L1b___  ___, KC_OCGRV,  ___SB_L1___,  KC_OCQUOT
#define ___6SYMBOLS_BEAKL_L2b___  ___6SYMBOLS_BEAKL_L2___
#define ___6SYMBOLS_BEAKL_L3b___  ___, KC_AT,  ___SB_L3b___,  KC_SCLN

#define ___6SYMBOLS_BEAKL_R1b___ ___6SYMBOLS_BEAKL_R1a___
#define ___6SYMBOLS_BEAKL_R2b___  ___SB_R2b___,            KC_SCLN
#define ___6SYMBOLS_BEAKL_R3b___  KC_PERC, ___SB_R3___,  KC_PIPE,    ___

// ---------------------------
// ---------------------------
// Bepo
#define ___6SYMBOLS_BEAKL_L1_BP___    ___,     ___,  ___SB_L1_BP___, ___
#define ___6SYMBOLS_BEAKL_L2_BP___    BP_MINS, ___SB_L2_BP___
#define ___6SYMBOLS_BEAKL_L3_BP___    ___,     ___,  ___SB_L3_BP___, ___

#define ___6SYMBOLS_BEAKL_R1_BP___   ___,     ___SB_R1_BP___,  ___, ___
#define ___6SYMBOLS_BEAKL_R2_BP___   ___SB_R2_BP___,                BP_SCLN
#define ___6SYMBOLS_BEAKL_R3_BP___   ___,     ___SB_R3_BP___,  ___, ___
// ---------------------------
#define ___6SYMBOLS_BEAKL_L1a_BP___  ___, BP_GRV, ___SB_L1_BP___,  BP_AT
#define ___6SYMBOLS_BEAKL_L2a_BP___  ___6SYMBOLS_BEAKL_L2_BP___
#define ___6SYMBOLS_BEAKL_L3a_BP___  ___, BP_AT, ___SB_L3_BP___,  BP_SCLN

#define ___6SYMBOLS_BEAKL_R1a_BP___  BP_QUES, ___SB_R1_BP___,  BP_MINS, ___
#define ___6SYMBOLS_BEAKL_R2a_BP___  ___SB_R2a_BP___, BP_SCLN
#define ___6SYMBOLS_BEAKL_R3a_BP___  BP_EXLM, ___SB_R3_BP___,  BP_SLSH, ___
// ---------------------------
#define ___6SYMBOLS_BEAKL_L1b_BP___  ___, BP_GRV,  ___SB_L1___,  BP_OCQUOT
#define ___6SYMBOLS_BEAKL_L2b_BP___  ___6SYMBOLS_BEAKL_L2_BP___
#define ___6SYMBOLS_BEAKL_L3b_BP___  ___, BP_AT,  ___SB_L3b_BP___,  BP_SCLN

#define ___6SYMBOLS_BEAKL_R1b_BP___  ___, ___SB_R1_BP___,  BP_MINS, ___
#define ___6SYMBOLS_BEAKL_R2b_BP___  ___SB_R2b_BP___,            BP_SCLN
#define ___6SYMBOLS_BEAKL_R3b_BP___  BP_PERC, ___SB_R3_BP___,  BP_PIPE, ___
// ---------------------------

// Some 12 column rows.
#define ___12_SYM_BKL_1_BP___ ___6SYMBOLS_BEAKL_L1_BP___,  ___6SYMBOLS_BEAKL_R1_BP___
#define ___12_SYM_BKL_2_BP___ ___6SYMBOLS_BEAKL_L2_BP___,  ___6SYMBOLS_BEAKL_R2_BP___
#define ___12_SYM_BKL_3_BP___ ___6SYMBOLS_BEAKL_L3_BP___,  ___6SYMBOLS_BEAKL_R3_BP___

#define ___12_SYM_BKL_1___    ___6SYMBOLS_BEAKL_L1___,  ___6SYMBOLS_BEAKL_R1___
#define ___12_SYM_BKL_2___    ___6SYMBOLS_BEAKL_L2___,  ___6SYMBOLS_BEAKL_R2___
#define ___12_SYM_BKL_3___    ___6SYMBOLS_BEAKL_L3___,  ___6SYMBOLS_BEAKL_R3___

// Some 12 column rows.
#define ___12_SYM_BKL_A1_BP___ ___6SYMBOLS_BEAKL_L1a_BP___,  ___6SYMBOLS_BEAKL_R1a_BP___
#define ___12_SYM_BKL_A2_BP___ ___6SYMBOLS_BEAKL_L2a_BP___,  ___6SYMBOLS_BEAKL_R2a_BP___
#define ___12_SYM_BKL_A3_BP___ ___6SYMBOLS_BEAKL_L3a_BP___,  ___6SYMBOLS_BEAKL_R3a_BP___

#define ___12_SYM_BKL_A1___ ___6SYMBOLS_BEAKL_L1a___,  ___6SYMBOLS_BEAKL_R1a___
#define ___12_SYM_BKL_A2___ ___6SYMBOLS_BEAKL_L2a___,  ___6SYMBOLS_BEAKL_R2a___
#define ___12_SYM_BKL_A3___ ___6SYMBOLS_BEAKL_L3a___,  ___6SYMBOLS_BEAKL_R3a___

#define ___12_SYM_BKL_B1_BP___ ___6SYMBOLS_BEAKL_L1b_BP___, ___6SYMBOLS_BEAKL_R1b_BP___
#define ___12_SYM_BKL_B2_BP___ ___6SYMBOLS_BEAKL_L2b_BP___, ___6SYMBOLS_BEAKL_R2b_BP___
#define ___12_SYM_BKL_B3_BP___ ___6SYMBOLS_BEAKL_L3b_BP___, ___6SYMBOLS_BEAKL_R3b_BP___

#define ___12_SYM_BKL_B1___ ___6SYMBOLS_BEAKL_L1b___, ___6SYMBOLS_BEAKL_R1b___
#define ___12_SYM_BKL_B2___ ___6SYMBOLS_BEAKL_L2b___, ___6SYMBOLS_BEAKL_R2b___
#define ___12_SYM_BKL_B3___ ___6SYMBOLS_BEAKL_L3b___, ___6SYMBOLS_BEAKL_R3b___

/********************************************************************************/
/* The BEAKL and BEAKL-A SYMBOL LAYER Chunks                                    */
/********************************************************************************/
// The Official beakl symbol layer as a chunk, Bepo and Qwerty
#define ___SYMB_BEAKL_BP_3x12___ ___12_SYM_BKL_1_BP___, \
    ___12_SYM_BKL_2_BP___,                              \
    ___12_SYM_BKL_3_BP___

#define ___SYMB_BEAKL_3x12___    ___12_SYM_BKL_1___,    \
    ___12_SYM_BKL_2___,                                 \
    ___12_SYM_BKL_3___

// Alternate Beakle symbol layer with additional corner symbols.
#define ___SYMB_BEAKLA_BP_3x12___ ___12_SYM_BKL_A1_BP___, \
    ___12_SYM_BKL_A2_BP___,                               \
    ___12_SYM_BKL_A3_BP___

#define ___SYMB_BEAKLA_3x12___    ___12_SYM_BKL_A1___,  \
    ___12_SYM_BKL_A2___,                                \
    ___12_SYM_BKL_A3___

#define ___SYMB_BEAKLB_BP_3x12___ ___12_SYM_BKL_B1_BP___,       \
    ___12_SYM_BKL_B2_BP___,                                     \
    ___12_SYM_BKL_B3_BP___

#define ___SYMB_BEAKLB_3x12___    ___12_SYM_BKL_B1___,  \
    ___12_SYM_BKL_B2___,                                \
    ___12_SYM_BKL_B3___

/********************************************************************************/
/* NAVIGATION  - MOUSE, Scroll, Buttons, Arrows, Tab, Home, page up/down, End   */
/* Navigation layers:                                                           */
/*    3 row Layer                                                               */
/*    4 Row Layer with repeated and swapped VI arrows, and Scroll wheel.        */
/********************************************************************************/
/*                                                                              */
/* Navigation layer with optional 4th Row....                                   */
/*                                                                              */
/* M = Mouse                                                                    */
/* B = Button                                                                   */
/* W = Wheel                                                                    */
/* AC   = Acceleration                                                          */
/* CCCV = Tap -> Ctrl-C, hold for double tap duration -> Ctrl-V                 */
/* CTCN = Tap -> Ctrl-T, hold for double tap duration -> Ctrl-N                 */
/* CWCQ = Tap -> Ctrl-W, hold for double tap duration -> Ctrl-Q                 */
/* TAB  = Tap -> Tab,    Double-tap -> Back Tab                                 */
/* HOME = Tap -> Home,   Double-tap -> End                                      */
/*                                                                              */
/* MB5  MB4    MB3    MB2  MB1     MAC0  |  CTCN  MB1    MB2    MB3  MB4   MB5 */
/* TAB  MLeft  MDown  MUp  MRight  MAC1  |  CCCV  Left   Down   UP   Right TAB */
/*      WLeft  WDown  WUp  WRight  MAC2  |  CWCQ  HOME   PGDN   PGUP END       */
/*                                                                              */
/*      Left   Down   Up   Right   CCCV  |  CCCV   MLeft  MDown  MUp  MRight    */
/*                                                                              */
/********************************************************************************/

#define ___MOUSE_LDUR___      KC_MS_L,  KC_MS_D,  KC_MS_U,  KC_MS_R
#define ___MWHEEL_LDUR___     KC_WH_L,  KC_WH_D,  KC_WH_U,  KC_WH_R
//  really BTN 1, 2, 3, 8, 9 - according to xev.
#define ___MOUSE_BTNS_R___    KC_BTN1,  KC_BTN3,  KC_BTN2,  KC_BTN4,  KC_BTN5
//  really BTN 9, 8, 3, 2, 1 - according to xev
#define ___MOUSE_BTNS_L___    KC_BTN5,  KC_BTN4,  KC_BTN2,  KC_BTN3,  KC_BTN1
#define ___MOUSE_ACCL_012___  KC_ACL0,  KC_ACL1,  KC_ACL2
#define ___MACCL___ ___MOUSE_ACCL_012___


#define ___VI_ARROWS___          KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT
#define ___HOME_PGDN_PGUP_END___ KC_HOME, KC_PGDN, KC_PGUP, KC_END

#define ___6NAV_L_1___ ___MOUSE_BTNS_L___,           KC_ACL0
#define ___6NAV_L_2___ TAB_BKTAB, ___MOUSE_LDUR___,  KC_ACL1
#define ___6NAV_L_3___ ___,       ___MWHEEL_LDUR___, KC_ACL2
#define ___6NAV_L_4___ ___,       ___VI_ARROWS___,   KC_CCCV

#define ___6NAV_R_1___ KC_CTCN, ___MOUSE_BTNS_R___
#define ___6NAV_R_2___ KC_CCCV, ___VI_ARROWS___,          TAB_BKTAB
#define ___6NAV_R_3___ KC_CWCQ, ___HOME_PGDN_PGUP_END___, ___
#define ___6NAV_R_4___ KC_CCCV, ___MOUSE_LDUR___, ___

  // compact. Initially for corne. So 3x12 per layer.
#define ___12_NAV_1___ ___6NAV_L_1___, ___6NAV_R_1___
#define ___12_NAV_2___ ___6NAV_L_2___, ___6NAV_R_2___
#define ___12_NAV_3___ ___6NAV_L_3___, ___6NAV_R_3___

#define ___12_NAV_4___ ___6NAV_L_4___, ___6NAV_R_4___

/********************************************************************************/
/* The Navigation LAYER Chunks                                                  */
/********************************************************************************/
// A Navigation Layer
#define ___NAV_3x12___ ___12_NAV_1___, ___12_NAV_2___, ___12_NAV_3___
#define ___NAV_4x12___ ___NAV_3x12___, ___12_NAV_4___


/********************************************************************************/
/* MEDIA  - Mute, Vol, play, pause, stop, next, prev, etc.   */
/********************************************************************************/
#define ___PRV_PLAY_NXT_STOP___ KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP
#define ___VDN_MUTE_VUP___ KC_VOLD, KC_MUTE, KC_VOLU

#define ___MUTE_PRV_PLAY_NXT_STOP___  KC_MUTE,  KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP
#define ___MUTE_PLAY_STOP___  KC_MUTE,  KC_MPLY,  KC_MSTP


/********************************************************************************/
/* RGB  - Control those lights.                                                 */

/* ___, HUE SAT_INT MOD (UP),            | */
/* ___, HUE SAT INT MOD (DOWN), RGB_TOG  | P_B_R_SW_SN___, ___ */
/* ___6___,                              | ___, ___RGB_KXGT___, ___ */
/********************************************************************************/
// RGB FUNCTION Keysets
// RGB row for the _FN layer from the redo of the default keymap.c
#define ___RGB_HUE_SAT_INT_UP___ RGB_HUI, RGB_SAI, RGB_VAI, RGB_RMOD
#define ___RGB_HUE_SAT_INT_DN___ RGB_HUD, RGB_SAD, RGB_VAD, RGB_MOD
#define ___RGB_MODE_PRV_NXT___   RGB_RMOD, RGB_MOD
#define ___RGB_TOGGLE___         RGB_TOG
#define ___RGB_P_B_R_SW_SN___    RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN
#define ___RGB_KXGT___           RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T

/// An RGB Layer
#define ___12_RGB_1___ ___, ___RGB_HUE_SAT_INT_UP___, ___,     ___6___
#define ___12_RGB_2___ ___, ___RGB_HUE_SAT_INT_DN___, RGB_TOG, ___RGB_P_B_R_SW_SN___, ___
#define ___12_RGB_3___ ___6___,                                ___, ___RGB_KXGT___, ___

/********************************************************************************/
/* The RGB LAYER Chunk                                                          */
/********************************************************************************/
#define ___RGB_3x12___ ___12_RGB_1___, ___12_RGB_2___, ___12_RGB_3___


/********************************************************************************/
/* ADJUST - Miscellaneous Melange.                                              */
/********************************************************************************/
// For an Adjust layer. Like RBB with audio, flash, etc.
#define ___6_ADJUST_L1___ KC_MAKE,  ___RGB_HUE_SAT_INT_UP___,       RGB_TOG
#define ___6_ADJUST_L2___ VRSN,     MU_TOG, CK_TOGG, AU_ON, AU_OFF, CG_NORM
#define ___6_ADJUST_L3___ MG_NKRO,  ___RGB_HUE_SAT_INT_DN___,        KC_RGB_T

#define ___6_ADJUST_R1___  ___5___,                          KC_RESET
#define ___6_ADJUST_R2___  ___,     ___PRV_PLAY_NXT_STOP___, EEP_RST
#define ___6_ADJUST_R3___  MG_NKRO, ___VDN_MUTE_VUP___, ___, RGB_IDL

/********************************************************************************/
/* The Adjust LAYER Chunks                                                      */
/********************************************************************************/
#define ___ADJUST_3x12___  ___6_ADJUST_L1___, ___6_ADJUST_R1___,    \
                           ___6_ADJUST_L2___, ___6_ADJUST_R2___,       \
                           ___6_ADJUST_L3___, ___6_ADJUST_R3___


/********************************************************************************/
/* LAYERS - Define a base layer, switch to any layer. Get around. Experiment.   */
/*                                                                              */
/* Base Layers on the left hand,                                                */
/* transient layers on the right. Centered on the home region.                  */
/* A good place to attach an experimental layer.                                */
/*                                                                              */
/********************************************************************************/
//  Base Layers
#define ___5_LAYERS_B1___ ___,        KC_BEPO,    KC_DVORAK_BP, KC_BEAKL_BP, ___
#define ___5_LAYERS_B2___ KC_QWERTY,  KC_COLEMAK, KC_DVORAK,    KC_BEAKL, ___

#define ___5_LAYERS_B3___ ___, KC_QWERTY,    KC_NORMAN,    KC_WORKMAN, ___
#define ___5_LAYERS_B4___ ___, DF(_MALTRON), DF(_EUCALYN), DF(_CARPLAX), ___

#define ___5_LAYERS_B1b___ DF(_NORMAN),  DF(_MALTRON), DF(_CARPLAX), DF(_COLEMAK), ___
#define ___5_LAYERS_B2b___ DF(_EUCALYN), DF(_WORKMAN), DF(_QWERTY),  DF(_DVORAK), ___
#define ___5_LAYERS_B3b___ ___,          DF(_BEAKL),   DF(_BEPO),    DF(_DVORAK_BP), ___

// transient layers.
#define ___5_LAYERS_T___     ___, MO(_NAV),  MO(_SYMB),     MO(_KEYPAD),       MO(_TOPROWS)
#define ___5_LAYERS_T_BP___  ___, MO(_NAV),  MO(_SYMB_BP),  MO(_KEYPAD_BP),    MO(_TOPROWS_BP)
#define ___5_LAYERS_T_CTL___ ___, MO(_RGB),  ___,                 ___, MO(_ADJUST)


/// A Layers Layer
#define ___12_LAYERS_1___ ___, ___5_LAYERS_B1___,  ___5_LAYERS_T_BP___,  ___
#define ___12_LAYERS_2___ ___, ___5_LAYERS_B2___,  ___5_LAYERS_T___,     ___
#define ___12_LAYERS_3___ KC_SPACETEST, ___5___,            ___5_LAYERS_T_CTL___, ___

/********************************************************************************/
/* The LAYERS LAYER Chunk                                                       */
/********************************************************************************/
#define ___LAYERS_3x12___ ___12_LAYERS_1___, ___12_LAYERS_2___, ___12_LAYERS_3___