]> git.donarmstrong.com Git - qmk_firmware.git/blob - layouts/community/ergodox/german-manuneo/keymap.c
Remove empty fn_actions[]
[qmk_firmware.git] / layouts / community / ergodox / german-manuneo / keymap.c
1 #include QMK_KEYBOARD_H
2 #include "action_layer.h"
3 #include "keymap.h"
4 #include "keymap_german.h"
5
6 #define UC_ASYMPTOTICALLY_EQUAL_TO 0
7 #define UC_DIVISION_SIGN 1
8 #define UC_DOWNWARDS_ARROW 2
9 #define UC_ELEMENT_OF 3
10 #define UC_EMPTY_SET 4
11 #define UC_FOR_ALL 5
12 #define UC_GREEK_CAPITAL_LETTER_ALPHA 6
13 #define UC_GREEK_CAPITAL_LETTER_BETA 7
14 #define UC_GREEK_CAPITAL_LETTER_CHI 8
15 #define UC_GREEK_CAPITAL_LETTER_DELTA 9
16 #define UC_GREEK_CAPITAL_LETTER_EPSILON 10
17 #define UC_GREEK_CAPITAL_LETTER_ETA 11
18 #define UC_GREEK_CAPITAL_LETTER_GAMMA 12
19 #define UC_GREEK_CAPITAL_LETTER_IOTA 13
20 #define UC_GREEK_CAPITAL_LETTER_KAPPA 14
21 #define UC_GREEK_CAPITAL_LETTER_LAMDA 15
22 #define UC_GREEK_CAPITAL_LETTER_MU 16
23 #define UC_GREEK_CAPITAL_LETTER_NU 17
24 #define UC_GREEK_CAPITAL_LETTER_OMEGA 18
25 #define UC_GREEK_CAPITAL_LETTER_OMICRON 19
26 #define UC_GREEK_CAPITAL_LETTER_PHI 20
27 #define UC_GREEK_CAPITAL_LETTER_PI 21
28 #define UC_GREEK_CAPITAL_LETTER_PSI 22
29 #define UC_GREEK_CAPITAL_LETTER_RHO 23
30 #define UC_GREEK_CAPITAL_LETTER_SIGMA 24
31 #define UC_GREEK_CAPITAL_LETTER_TAU 25
32 #define UC_GREEK_CAPITAL_LETTER_THETA 26
33 #define UC_GREEK_CAPITAL_LETTER_UPSILON 27
34 #define UC_GREEK_CAPITAL_LETTER_XI 28
35 #define UC_GREEK_CAPITAL_LETTER_ZETA 29
36 #define UC_GREEK_SMALL_LETTER_ALPHA 30
37 #define UC_GREEK_SMALL_LETTER_BETA 31
38 #define UC_GREEK_SMALL_LETTER_CHI 32
39 #define UC_GREEK_SMALL_LETTER_DELTA 33
40 #define UC_GREEK_SMALL_LETTER_EPSILON 34
41 #define UC_GREEK_SMALL_LETTER_ETA 35
42 #define UC_GREEK_SMALL_LETTER_FINAL_SIGMA 36
43 #define UC_GREEK_SMALL_LETTER_GAMMA 37
44 #define UC_GREEK_SMALL_LETTER_IOTA 38
45 #define UC_GREEK_SMALL_LETTER_KAPPA 39
46 #define UC_GREEK_SMALL_LETTER_LAMDA 40
47 #define UC_GREEK_SMALL_LETTER_MU 41
48 #define UC_GREEK_SMALL_LETTER_NU 42
49 #define UC_GREEK_SMALL_LETTER_OMEGA 43
50 #define UC_GREEK_SMALL_LETTER_OMICRON 44
51 #define UC_GREEK_SMALL_LETTER_PHI 45
52 #define UC_GREEK_SMALL_LETTER_PI 46
53 #define UC_GREEK_SMALL_LETTER_PSI 47
54 #define UC_GREEK_SMALL_LETTER_RHO 48
55 #define UC_GREEK_SMALL_LETTER_SIGMA 49
56 #define UC_GREEK_SMALL_LETTER_TAU 50
57 #define UC_GREEK_SMALL_LETTER_THETA 51
58 #define UC_GREEK_SMALL_LETTER_UPSILON 52
59 #define UC_GREEK_SMALL_LETTER_XI 53
60 #define UC_GREEK_SMALL_LETTER_ZETA 54
61 #define UC_INFINITY 55
62 #define UC_LEFTWARDS_ARROW 56
63 #define UC_MULTIPLICATION_SIGN 57
64 #define UC_NOT_AN_ELEMENT_OF 58
65 #define UC_NOT_EQUAL_TO 59
66 #define UC_PLUS_MINUS_SIGN 60
67 #define UC_RIGHTWARDS_ARROW 61
68 #define UC_SUBSCRIPT_EIGHT 62
69 #define UC_SUBSCRIPT_FIVE 63
70 #define UC_SUBSCRIPT_FOUR 64
71 #define UC_SUBSCRIPT_NINE 65
72 #define UC_SUBSCRIPT_ONE 66
73 #define UC_SUBSCRIPT_SEVEN 67
74 #define UC_SUBSCRIPT_SIX 68
75 #define UC_SUBSCRIPT_THREE 69
76 #define UC_SUBSCRIPT_TWO 70
77 #define UC_SUBSCRIPT_ZERO 71
78 #define UC_SUPERSCRIPT_EIGHT 72
79 #define UC_SUPERSCRIPT_FIVE 73
80 #define UC_SUPERSCRIPT_FOUR 74
81 #define UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N 75
82 #define UC_SUPERSCRIPT_NINE 76
83 #define UC_SUPERSCRIPT_ONE 77
84 #define UC_SUPERSCRIPT_SEVEN 78
85 #define UC_SUPERSCRIPT_SIX 79
86 #define UC_SUPERSCRIPT_THREE 80
87 #define UC_SUPERSCRIPT_TWO 81
88 #define UC_SUPERSCRIPT_ZERO 82
89 #define UC_THERE_DOES_NOT_EXIST 83
90 #define UC_THERE_EXISTS 84
91 #define UC_UPWARDS_ARROW 85
92 #define UC_VULGAR_FRACTION_ONE_EIGHTH 86
93 #define UC_VULGAR_FRACTION_ONE_FIFTH 87
94 #define UC_VULGAR_FRACTION_ONE_HALF 88
95 #define UC_VULGAR_FRACTION_ONE_QUARTER 89
96 #define UC_VULGAR_FRACTION_ONE_SIXTH 90
97 #define UC_VULGAR_FRACTION_ONE_THIRD 91
98 #define UC_VULGAR_FRACTION_THREE_QUARTERS 92
99 #define UC_VULGAR_FRACTION_TWO_THIRDS 93
100 #define UM 94
101
102 #define L0   0      // layer_0
103 #define L1   1      // layer_1
104 #define L2   2      // layer_2
105 #define L3   3      // layer_3
106 #define L4   4      // layer_4
107 #define L5   5      // layer_5
108 #define L6   6      // layer_6
109
110 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
111 /*
112  * .------------------------------------.------------------------------------.
113  * |MO(5)| 1  | 2  | 3  | 4  | 5  |ACUT | GRV | 6  | 7  | 8  | 9  | 0  |CIRC |
114  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
115  * |MO(4)| X  | P  | F  | W  | G  |HOME |TG(2)| H  | J  | K  | L  | Q  |  Z  |
116  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
117  * |MO(1)| U  | I  | A  | E  | O  |-----!-----! S  | N  | R  | T  | D  | SS  |
118  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
119  * |MO(3)| UE | OE | AE | C  | V  |END  | TAB | B  | M  |COMM| DOT| UP |  Y  |
120  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
121  *  |    |    |LGUI|LALT|LCTL|                     !RCTL|RALT|LEFT|DOWN|RGHT|
122  *  '------------------------'                     '------------------------'
123  *                         .-----------. .-----------.
124  *                         |INS  |TG(2)| !M(UM)|DELT |
125  *                   .-----+-----+-----! !-----+-----+-----.
126  *                   !     !     | APP | ! PGUP|     !     !
127  *                   !     !     !-----! !-----!     !     !
128  *                   |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE|
129  *                   '-----------------' '-----------------'
130  */
131 [L0] = LAYOUT_ergodox(
132  MO(5),   DE_1,     DE_2,     DE_3,    DE_4,    DE_5,    DE_ACUT,
133  MO(4),   DE_X,     DE_P,     DE_F,    DE_W,    DE_G,    KC_HOME,
134  MO(1),   DE_U,     DE_I,     DE_A,    DE_E,    DE_O,
135  MO(3),   DE_UE,    DE_OE,    DE_AE,   DE_C,    DE_V,    KC_END,
136  KC_TRNS, KC_TRNS,  KC_LGUI,  KC_LALT, KC_LCTL,
137  /*-*/    /*-*/     /*-*/     /*-*/    /*-*/    KC_INS,  TG(2),
138  /*-*/    /*-*/     /*-*/     /*-*/    /*-*/    /*-*/    KC_APP,
139  /*-*/    /*-*/     /*-*/     /*-*/    KC_BSPC, KC_LSFT, KC_ESC,
140  DE_GRV,  DE_6,     DE_7,     DE_8,    DE_9,    DE_0,    DE_CIRC,
141  TG(2),   DE_H,     DE_J,     DE_K,    DE_L,    DE_Q,    DE_Z,
142  /*-*/    DE_S,     DE_N,     DE_R,    DE_T,    DE_D,    DE_SS,
143  KC_TAB,  DE_B,     DE_M,     DE_COMM, DE_DOT,  KC_UP,   DE_Y,
144  /*-*/    /*-*/     KC_RCTL,  KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT,
145  M(UM),   KC_DELT,
146  KC_PGUP,
147  KC_PGDN, KC_ENTER, KC_SPACE
148 ),
149 /*
150  * .------------------------------------.------------------------------------.
151  * |     |EXLM|DQOT|PARA|    |    |     |     |    |    |    |    |RING|     |
152  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
153  * |     |ASTR|PIPE|SLSH|LCBR|RCBR|     |     |HASH|LESS|MORE|    |DQOT|     |
154  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
155  * |     |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST |
156  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
157  * |     |    |PLUS|EQL |    |    |     |     |BSLS|PERC|SCLN|COLN| ↑  |     |
158  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
159  *  |    |    |    |    |    |                     !    |    | ←  | ↓  | →  |
160  *  '------------------------'                     '------------------------'
161  *                         .-----------. .-----------.
162  *                         |     |     | !     |     |
163  *                   .-----+-----+-----! !-----+-----+-----.
164  *                   !     !     |     | !     |     !     !
165  *                   !     !     !-----! !-----!     !     !
166  *                   |     |     |     | !     |     |     |
167  *                   '-----------------' '-----------------'
168  */
169 [L1] = LAYOUT_ergodox(
170  KC_TRNS, DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS,               KC_TRNS,               KC_TRNS,
171  KC_TRNS, DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR,               DE_RCBR,               KC_TRNS,
172  KC_TRNS, DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC,               DE_RBRC,
173  KC_TRNS, KC_TRNS, DE_PLUS, DE_EQL,  KC_TRNS,               KC_TRNS,               KC_TRNS,
174  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
175  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/                  KC_TRNS,               KC_TRNS,
176  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/                  /*-*/                  KC_TRNS,
177  /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,               KC_TRNS,               KC_TRNS,
178  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,               DE_RING,               KC_TRNS,
179  KC_TRNS, DE_HASH, DE_LESS, DE_MORE, KC_TRNS,               DE_DQOT,               KC_TRNS,
180  /*-*/    DE_DLR,  DE_LPRN, DE_RPRN, DE_TILD,               DE_QUOT,               DE_QST,
181  KC_TRNS, DE_BSLS, DE_PERC, DE_SCLN, DE_COLN,               M(UC_UPWARDS_ARROW),   KC_TRNS,
182  /*-*/    /*-*/    KC_TRNS, KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW),
183  KC_TRNS, KC_TRNS,
184  KC_TRNS,
185  KC_TRNS, KC_TRNS, KC_TRNS
186 ),
187 /*
188  * .------------------------------------.------------------------------------.
189  * |     | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL |
190  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
191  * |     |    |    |    |    |    |     |     |    | P7 | P8 | P9 |PAST|PSLS |
192  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
193  * |     |    |    |    |    |    |-----!-----!    | P4 | P5 | P6 |PMNS|PMNS |
194  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
195  * |     |    |    |    |    |    |     | NLCK|    | P1 | P2 | P3 |PPLS|PPLS |
196  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
197  *  |    |    |    |    |    |                     ! P0 |PCMM|PDOT|PENT|PENT|
198  *  '------------------------'                     '------------------------'
199  *                         .-----------. .-----------.
200  *                         |     |     | !     |     |
201  *                   .-----+-----+-----! !-----+-----+-----.
202  *                   !     !     |     | !     |     !     !
203  *                   !     !     !-----! !-----!     !     !
204  *                   |     |     |     | !     |     |     |
205  *                   '-----------------' '-----------------'
206  */
207 [L2] = LAYOUT_ergodox(
208  KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11,
209  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
210  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
211  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
212  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
213  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
214  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
215  /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
216  KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_PEQL,
217  KC_TRNS, KC_TRNS, KC_P7,   KC_P8,   KC_P9,   KC_PAST, KC_PSLS,
218  /*-*/    KC_TRNS, KC_P4,   KC_P5,   KC_P6,   KC_PMNS, KC_PMNS,
219  KC_NLCK, KC_TRNS, KC_P1,   KC_P2,   KC_P3,   KC_PPLS, KC_PPLS,
220  /*-*/    /*-*/    KC_P0,   KC_PCMM, KC_PDOT, KC_PENT, KC_PENT,
221  KC_TRNS, KC_TRNS,
222  KC_TRNS,
223  KC_TRNS, KC_TRNS, KC_TRNS
224 ),
225 /*
226  * .------------------------------------.------------------------------------.
227  * |     | ¹  | ²  | ³  | ⁴  | ⁵  |  ∀  |     | ⁶  | ⁷  | ⁸  | ⁹  |  ⁰ |     |
228  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
229  * |     | ×  | ½  | ÷  | ¼  |  ⅕ |     |     | ⅙  |    | ⅛  |    |    |     |
230  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
231  * |     |    | ±  | AT |EURO| ∅  |-----!-----! ∞  | ⁿ  | ∃  | ∈  |    |     |
232  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
233  * |     | ⅓  | ≠  | ⅔  | ¾  | ≃  |     |     |EXLM|    | ∄  | ∉  |    |     |
234  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
235  *  |    |    |    |    |    |                     !    |    |    |    |    |
236  *  '------------------------'                     '------------------------'
237  *                         .-----------. .-----------.
238  *                         |     |     | !     |     |
239  *                   .-----+-----+-----! !-----+-----+-----.
240  *                   !     !     |     | !     |     !     !
241  *                   !     !     !-----! !-----!     !     !
242  *                   |     |     |     | !     |     |     |
243  *                   '-----------------' '-----------------'
244  */
245 [L3] = LAYOUT_ergodox(
246  KC_TRNS, M(UC_SUPERSCRIPT_ONE),           M(UC_SUPERSCRIPT_TWO),                  M(UC_SUPERSCRIPT_THREE),          M(UC_SUPERSCRIPT_FOUR),               M(UC_SUPERSCRIPT_FIVE),          M(UC_FOR_ALL),
247  KC_TRNS, M(UC_MULTIPLICATION_SIGN),       M(UC_VULGAR_FRACTION_ONE_HALF),         M(UC_DIVISION_SIGN),              M(UC_VULGAR_FRACTION_ONE_QUARTER),    M(UC_VULGAR_FRACTION_ONE_FIFTH), KC_TRNS,
248  KC_TRNS, KC_TRNS,                         M(UC_PLUS_MINUS_SIGN),                  DE_AT,                            DE_EURO,                              M(UC_EMPTY_SET),
249  KC_TRNS, M(UC_VULGAR_FRACTION_ONE_THIRD), M(UC_NOT_EQUAL_TO),                     M(UC_VULGAR_FRACTION_TWO_THIRDS), M(UC_VULGAR_FRACTION_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO),   KC_TRNS,
250  KC_TRNS, KC_TRNS,                         KC_TRNS,                                KC_TRNS,                          KC_TRNS,
251  /*-*/    /*-*/                            /*-*/                                   /*-*/                             /*-*/                                 KC_TRNS,                         KC_TRNS,
252  /*-*/    /*-*/                            /*-*/                                   /*-*/                             /*-*/                                 /*-*/                            KC_TRNS,
253  /*-*/    /*-*/                            /*-*/                                   /*-*/                             KC_TRNS,                              KC_TRNS,                         KC_TRNS,
254  KC_TRNS, M(UC_SUPERSCRIPT_SIX),           M(UC_SUPERSCRIPT_SEVEN),                M(UC_SUPERSCRIPT_EIGHT),          M(UC_SUPERSCRIPT_NINE),               M(UC_SUPERSCRIPT_ZERO),          KC_TRNS,
255  KC_TRNS, M(UC_VULGAR_FRACTION_ONE_SIXTH), KC_TRNS,                                M(UC_VULGAR_FRACTION_ONE_EIGHTH), KC_TRNS,                              KC_TRNS,                         KC_TRNS,
256  /*-*/    M(UC_INFINITY),                  M(UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS),               M(UC_ELEMENT_OF),                     KC_TRNS,                         KC_TRNS,
257  KC_TRNS, DE_EXLM,                         KC_TRNS,                                M(UC_THERE_DOES_NOT_EXIST),       M(UC_NOT_AN_ELEMENT_OF),              KC_TRNS,                         KC_TRNS,
258  /*-*/    /*-*/                            KC_TRNS,                                KC_TRNS,                          KC_TRNS,                              KC_TRNS,                         KC_TRNS,
259  KC_TRNS, KC_TRNS,
260  KC_TRNS,
261  KC_TRNS, KC_TRNS,                         KC_TRNS
262 ),
263 /*
264  * .------------------------------------.------------------------------------.
265  * |     | ₁  | ₂  | ₃  | ₄  | ₅  |     |     | ₆  | ₇  | ₈  | ₉  | ₀  |     |
266  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
267  * |     | χ  | π  | φ  | ω  | γ  |     |     | η  | ξ  | κ  | λ  |    |  ζ  |
268  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
269  * |     | υ  | ι  | α  | ε  | ο  |-----!-----! σ  | ν  | ρ  | τ  | δ  |  ς  |
270  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
271  * |     |    | θ  |    |    |    |     |     | β  | μ  |    |    |    |  ψ  |
272  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
273  *  |    |    |    |    |    |                     !    |    |    |    |    |
274  *  '------------------------'                     '------------------------'
275  *                         .-----------. .-----------.
276  *                         |     |     | !     |     |
277  *                   .-----+-----+-----! !-----+-----+-----.
278  *                   !     !     |     | !     |     !     !
279  *                   !     !     !-----! !-----!     !     !
280  *                   |     |     |     | !     |     |     |
281  *                   '-----------------' '-----------------'
282  */
283 [L4] = LAYOUT_ergodox(
284  KC_TRNS, M(UC_SUBSCRIPT_ONE),              M(UC_SUBSCRIPT_TWO),            M(UC_SUBSCRIPT_THREE),          M(UC_SUBSCRIPT_FOUR),             M(UC_SUBSCRIPT_FIVE),             KC_TRNS,
285  KC_TRNS, M(UC_GREEK_SMALL_LETTER_CHI),     M(UC_GREEK_SMALL_LETTER_PI),    M(UC_GREEK_SMALL_LETTER_PHI),   M(UC_GREEK_SMALL_LETTER_OMEGA),   M(UC_GREEK_SMALL_LETTER_GAMMA),   KC_TRNS,
286  KC_TRNS, M(UC_GREEK_SMALL_LETTER_UPSILON), M(UC_GREEK_SMALL_LETTER_IOTA),  M(UC_GREEK_SMALL_LETTER_ALPHA), M(UC_GREEK_SMALL_LETTER_EPSILON), M(UC_GREEK_SMALL_LETTER_OMICRON),
287  KC_TRNS, KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_THETA), KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          KC_TRNS,
288  KC_TRNS, KC_TRNS,                          KC_TRNS,                        KC_TRNS,                        KC_TRNS,
289  /*-*/    /*-*/                             /*-*/                           /*-*/                           /*-*/                             KC_TRNS,                          KC_TRNS,
290  /*-*/    /*-*/                             /*-*/                           /*-*/                           /*-*/                             /*-*/                             KC_TRNS,
291  /*-*/    /*-*/                             /*-*/                           /*-*/                           KC_TRNS,                          KC_TRNS,                          KC_TRNS,
292  KC_TRNS, M(UC_SUBSCRIPT_SIX),              M(UC_SUBSCRIPT_SEVEN),          M(UC_SUBSCRIPT_EIGHT),          M(UC_SUBSCRIPT_NINE),             M(UC_SUBSCRIPT_ZERO),             KC_TRNS,
293  KC_TRNS, M(UC_GREEK_SMALL_LETTER_ETA),     M(UC_GREEK_SMALL_LETTER_XI),    M(UC_GREEK_SMALL_LETTER_KAPPA), M(UC_GREEK_SMALL_LETTER_LAMDA),   KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_ZETA),
294  /*-*/    M(UC_GREEK_SMALL_LETTER_SIGMA),   M(UC_GREEK_SMALL_LETTER_NU),    M(UC_GREEK_SMALL_LETTER_RHO),   M(UC_GREEK_SMALL_LETTER_TAU),     M(UC_GREEK_SMALL_LETTER_DELTA),   M(UC_GREEK_SMALL_LETTER_FINAL_SIGMA),
295  KC_TRNS, M(UC_GREEK_SMALL_LETTER_BETA),    M(UC_GREEK_SMALL_LETTER_MU),    KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_PSI),
296  /*-*/    /*-*/                             KC_TRNS,                        KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          KC_TRNS,
297  KC_TRNS, KC_TRNS,
298  KC_TRNS,
299  KC_TRNS, KC_TRNS,                          KC_TRNS
300 ),
301 /*
302  * .------------------------------------.------------------------------------.
303  * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
304  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
305  * |     | Χ  | Π  | Φ  | Ω  | Γ  |     |     | Η  | Ξ  | Κ  | Λ  |    |  Ζ  |
306  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
307  * |     | Υ  | Ι  | Α  | Ε  | Ο  |-----!-----! Σ  | Ν  | Ρ  | Τ  | Δ  |     |
308  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
309  * |     |    | Θ  |    |    |    |     |     | Β  | Μ  |    |    |    |  Ψ  |
310  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
311  *  |    |    |    |    |    |                     !    |    |    |    |    |
312  *  '------------------------'                     '------------------------'
313  *                         .-----------. .-----------.
314  *                         |     |     | !     |     |
315  *                   .-----+-----+-----! !-----+-----+-----.
316  *                   !     !     |     | !     |     !     !
317  *                   !     !     !-----! !-----!     !     !
318  *                   |     |     |     | !     |     |     |
319  *                   '-----------------' '-----------------'
320  */
321 [L5] = LAYOUT_ergodox(
322  KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
323  KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_CHI),     M(UC_GREEK_CAPITAL_LETTER_PI),    M(UC_GREEK_CAPITAL_LETTER_PHI),   M(UC_GREEK_CAPITAL_LETTER_OMEGA),   M(UC_GREEK_CAPITAL_LETTER_GAMMA),   KC_TRNS,
324  KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_UPSILON), M(UC_GREEK_CAPITAL_LETTER_IOTA),  M(UC_GREEK_CAPITAL_LETTER_ALPHA), M(UC_GREEK_CAPITAL_LETTER_EPSILON), M(UC_GREEK_CAPITAL_LETTER_OMICRON),
325  KC_TRNS, KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_THETA), KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
326  KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,
327  /*-*/    /*-*/                               /*-*/                             /*-*/                             /*-*/                               KC_TRNS,                            KC_TRNS,
328  /*-*/    /*-*/                               /*-*/                             /*-*/                             /*-*/                               /*-*/                               KC_TRNS,
329  /*-*/    /*-*/                               /*-*/                             /*-*/                             KC_TRNS,                            KC_TRNS,                            KC_TRNS,
330  KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
331  KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ETA),     M(UC_GREEK_CAPITAL_LETTER_XI),    M(UC_GREEK_CAPITAL_LETTER_KAPPA), M(UC_GREEK_CAPITAL_LETTER_LAMDA),   KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_ZETA),
332  /*-*/    M(UC_GREEK_CAPITAL_LETTER_SIGMA),   M(UC_GREEK_CAPITAL_LETTER_NU),    M(UC_GREEK_CAPITAL_LETTER_RHO),   M(UC_GREEK_CAPITAL_LETTER_TAU),     M(UC_GREEK_CAPITAL_LETTER_DELTA),   KC_TRNS,
333  KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_BETA),    M(UC_GREEK_CAPITAL_LETTER_MU),    KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_PSI),
334  /*-*/    /*-*/                               KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
335  KC_TRNS, KC_TRNS,
336  KC_TRNS,
337  KC_TRNS, KC_TRNS,                            KC_TRNS
338 ),
339 /*
340  * .------------------------------------.------------------------------------.
341  * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
342  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
343  * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
344  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
345  * |     |    |    |    |    |    |-----!-----!    |    |    |    |    |     |
346  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
347  * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
348  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
349  *  |    |    |    |    |    |                     !    |    |    |    |    |
350  *  '------------------------'                     '------------------------'
351  *                         .-----------. .-----------.
352  *                         |     |     | !     |     |
353  *                   .-----+-----+-----! !-----+-----+-----.
354  *                   !     !     |     | !     |     !     !
355  *                   !     !     !-----! !-----!     !     !
356  *                   |     |     |     | !     |     |     |
357  *                   '-----------------' '-----------------'
358  */
359 [L6] = LAYOUT_ergodox(
360  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
361  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
362  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
363  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
364  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
365  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
366  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
367  /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
368  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
369  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
370  /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
371  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
372  /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
373  KC_TRNS, KC_TRNS,
374  KC_TRNS,
375  KC_TRNS, KC_TRNS, KC_TRNS
376 ),
377 };
378
379 #define UC_MODE_WIN 0
380 #define UC_MODE_LINUX 1
381 #define UC_MODE_OSX 2
382
383 // TODO: allow default mode to be configured
384 static uint16_t unicode_mode = UC_MODE_WIN;
385
386 uint16_t hextokeycode(uint8_t hex) {
387     if (hex == 0x0) {
388         return KC_P0;
389     }
390     if (hex < 0xA) {
391         return KC_P1 + (hex - 0x1);
392     }
393     return KC_A + (hex - 0xA);
394 }
395
396 void unicode_action_function(uint16_t hi, uint16_t lo) {
397     switch (unicode_mode) {
398     case UC_MODE_WIN:
399         register_code(KC_LALT);
400
401         register_code(KC_PPLS);
402         unregister_code(KC_PPLS);
403
404         register_code(hextokeycode((hi & 0xF0) >> 4));
405         unregister_code(hextokeycode((hi & 0xF0) >> 4));
406         register_code(hextokeycode((hi & 0x0F)));
407         unregister_code(hextokeycode((hi & 0x0F)));
408         register_code(hextokeycode((lo & 0xF0) >> 4));
409         unregister_code(hextokeycode((lo & 0xF0) >> 4));
410         register_code(hextokeycode((lo & 0x0F)));
411         unregister_code(hextokeycode((lo & 0x0F)));
412
413         unregister_code(KC_LALT);
414         break;
415     case UC_MODE_LINUX:
416         register_code(KC_LCTL);
417         register_code(KC_LSFT);
418
419         register_code(KC_U);
420         unregister_code(KC_U);
421
422         register_code(hextokeycode((hi & 0xF0) >> 4));
423         unregister_code(hextokeycode((hi & 0xF0) >> 4));
424         register_code(hextokeycode((hi & 0x0F)));
425         unregister_code(hextokeycode((hi & 0x0F)));
426         register_code(hextokeycode((lo & 0xF0) >> 4));
427         unregister_code(hextokeycode((lo & 0xF0) >> 4));
428         register_code(hextokeycode((lo & 0x0F)));
429         unregister_code(hextokeycode((lo & 0x0F)));
430
431         unregister_code(KC_LCTL);
432         unregister_code(KC_LSFT);
433         break;
434     case UC_MODE_OSX:
435         break;
436     }
437 }
438
439 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
440     if (!record->event.pressed) {
441         return MACRO_NONE;
442     }
443     // MACRODOWN only works in this function
444     switch(id) {
445         case UM:
446             unicode_mode = (unicode_mode + 1) % 2;
447             break;
448
449 case UC_GREEK_SMALL_LETTER_OMICRON:
450     unicode_action_function(0x03, 0xbf);
451     break;
452 case UC_LEFTWARDS_ARROW:
453     unicode_action_function(0x21, 0x90);
454     break;
455 case UC_GREEK_CAPITAL_LETTER_RHO:
456     unicode_action_function(0x03, 0xa1);
457     break;
458 case UC_SUBSCRIPT_THREE:
459     unicode_action_function(0x20, 0x83);
460     break;
461 case UC_VULGAR_FRACTION_ONE_EIGHTH:
462     unicode_action_function(0x21, 0x5b);
463     break;
464 case UC_GREEK_SMALL_LETTER_LAMDA:
465     unicode_action_function(0x03, 0xbb);
466     break;
467 case UC_VULGAR_FRACTION_ONE_THIRD:
468     unicode_action_function(0x21, 0x53);
469     break;
470 case UC_GREEK_SMALL_LETTER_XI:
471     unicode_action_function(0x03, 0xbe);
472     break;
473 case UC_THERE_DOES_NOT_EXIST:
474     unicode_action_function(0x22, 0x04);
475     break;
476 case UC_SUPERSCRIPT_ONE:
477     unicode_action_function(0x00, 0xb9);
478     break;
479 case UC_GREEK_SMALL_LETTER_BETA:
480     unicode_action_function(0x03, 0xb2);
481     break;
482 case UC_SUBSCRIPT_FIVE:
483     unicode_action_function(0x20, 0x85);
484     break;
485 case UC_GREEK_CAPITAL_LETTER_IOTA:
486     unicode_action_function(0x03, 0x99);
487     break;
488 case UC_VULGAR_FRACTION_ONE_FIFTH:
489     unicode_action_function(0x21, 0x55);
490     break;
491 case UC_GREEK_SMALL_LETTER_PSI:
492     unicode_action_function(0x03, 0xc8);
493     break;
494 case UC_SUBSCRIPT_NINE:
495     unicode_action_function(0x20, 0x89);
496     break;
497 case UC_SUPERSCRIPT_FOUR:
498     unicode_action_function(0x20, 0x74);
499     break;
500 case UC_RIGHTWARDS_ARROW:
501     unicode_action_function(0x21, 0x92);
502     break;
503 case UC_SUPERSCRIPT_SIX:
504     unicode_action_function(0x20, 0x76);
505     break;
506 case UC_DOWNWARDS_ARROW:
507     unicode_action_function(0x21, 0x93);
508     break;
509 case UC_GREEK_SMALL_LETTER_PI:
510     unicode_action_function(0x03, 0xc0);
511     break;
512 case UC_SUPERSCRIPT_TWO:
513     unicode_action_function(0x00, 0xb2);
514     break;
515 case UC_GREEK_CAPITAL_LETTER_OMEGA:
516     unicode_action_function(0x03, 0xa9);
517     break;
518 case UC_GREEK_CAPITAL_LETTER_PSI:
519     unicode_action_function(0x03, 0xa8);
520     break;
521 case UC_SUBSCRIPT_FOUR:
522     unicode_action_function(0x20, 0x84);
523     break;
524 case UC_GREEK_CAPITAL_LETTER_NU:
525     unicode_action_function(0x03, 0x9d);
526     break;
527 case UC_DIVISION_SIGN:
528     unicode_action_function(0x00, 0xf7);
529     break;
530 case UC_GREEK_SMALL_LETTER_SIGMA:
531     unicode_action_function(0x03, 0xc3);
532     break;
533 case UC_GREEK_SMALL_LETTER_RHO:
534     unicode_action_function(0x03, 0xc1);
535     break;
536 case UC_VULGAR_FRACTION_ONE_SIXTH:
537     unicode_action_function(0x21, 0x59);
538     break;
539 case UC_GREEK_SMALL_LETTER_GAMMA:
540     unicode_action_function(0x03, 0xb3);
541     break;
542 case UC_VULGAR_FRACTION_TWO_THIRDS:
543     unicode_action_function(0x21, 0x54);
544     break;
545 case UC_GREEK_SMALL_LETTER_NU:
546     unicode_action_function(0x03, 0xbd);
547     break;
548 case UC_GREEK_SMALL_LETTER_ZETA:
549     unicode_action_function(0x03, 0xb6);
550     break;
551 case UC_GREEK_SMALL_LETTER_EPSILON:
552     unicode_action_function(0x03, 0xb5);
553     break;
554 case UC_GREEK_SMALL_LETTER_KAPPA:
555     unicode_action_function(0x03, 0xba);
556     break;
557 case UC_SUPERSCRIPT_SEVEN:
558     unicode_action_function(0x20, 0x77);
559     break;
560 case UC_GREEK_CAPITAL_LETTER_PI:
561     unicode_action_function(0x03, 0xa0);
562     break;
563 case UC_GREEK_SMALL_LETTER_FINAL_SIGMA:
564     unicode_action_function(0x03, 0xc2);
565     break;
566 case UC_GREEK_CAPITAL_LETTER_XI:
567     unicode_action_function(0x03, 0x9e);
568     break;
569 case UC_GREEK_SMALL_LETTER_THETA:
570     unicode_action_function(0x03, 0xb8);
571     break;
572 case UC_GREEK_SMALL_LETTER_ETA:
573     unicode_action_function(0x03, 0xb7);
574     break;
575 case UC_SUBSCRIPT_TWO:
576     unicode_action_function(0x20, 0x82);
577     break;
578 case UC_ASYMPTOTICALLY_EQUAL_TO:
579     unicode_action_function(0x22, 0x43);
580     break;
581 case UC_GREEK_SMALL_LETTER_ALPHA:
582     unicode_action_function(0x03, 0xb1);
583     break;
584 case UC_GREEK_CAPITAL_LETTER_PHI:
585     unicode_action_function(0x03, 0xa6);
586     break;
587 case UC_GREEK_SMALL_LETTER_PHI:
588     unicode_action_function(0x03, 0xc6);
589     break;
590 case UC_INFINITY:
591     unicode_action_function(0x22, 0x1e);
592     break;
593 case UC_GREEK_CAPITAL_LETTER_OMICRON:
594     unicode_action_function(0x03, 0x9f);
595     break;
596 case UC_ELEMENT_OF:
597     unicode_action_function(0x22, 0x08);
598     break;
599 case UC_MULTIPLICATION_SIGN:
600     unicode_action_function(0x00, 0xd7);
601     break;
602 case UC_SUBSCRIPT_ZERO:
603     unicode_action_function(0x20, 0x80);
604     break;
605 case UC_GREEK_CAPITAL_LETTER_SIGMA:
606     unicode_action_function(0x03, 0xa3);
607     break;
608 case UC_GREEK_SMALL_LETTER_OMEGA:
609     unicode_action_function(0x03, 0xc9);
610     break;
611 case UC_SUBSCRIPT_ONE:
612     unicode_action_function(0x20, 0x81);
613     break;
614 case UC_GREEK_CAPITAL_LETTER_ZETA:
615     unicode_action_function(0x03, 0x96);
616     break;
617 case UC_GREEK_SMALL_LETTER_TAU:
618     unicode_action_function(0x03, 0xc4);
619     break;
620 case UC_SUPERSCRIPT_FIVE:
621     unicode_action_function(0x20, 0x75);
622     break;
623 case UC_THERE_EXISTS:
624     unicode_action_function(0x22, 0x03);
625     break;
626 case UC_PLUS_MINUS_SIGN:
627     unicode_action_function(0x00, 0xb1);
628     break;
629 case UC_VULGAR_FRACTION_THREE_QUARTERS:
630     unicode_action_function(0x00, 0xbe);
631     break;
632 case UC_SUPERSCRIPT_THREE:
633     unicode_action_function(0x00, 0xb3);
634     break;
635 case UC_EMPTY_SET:
636     unicode_action_function(0x22, 0x05);
637     break;
638 case UC_UPWARDS_ARROW:
639     unicode_action_function(0x21, 0x91);
640     break;
641 case UC_SUPERSCRIPT_NINE:
642     unicode_action_function(0x20, 0x79);
643     break;
644 case UC_GREEK_SMALL_LETTER_DELTA:
645     unicode_action_function(0x03, 0xb4);
646     break;
647 case UC_GREEK_SMALL_LETTER_MU:
648     unicode_action_function(0x03, 0xbc);
649     break;
650 case UC_GREEK_CAPITAL_LETTER_KAPPA:
651     unicode_action_function(0x03, 0x9a);
652     break;
653 case UC_SUBSCRIPT_EIGHT:
654     unicode_action_function(0x20, 0x88);
655     break;
656 case UC_GREEK_CAPITAL_LETTER_ALPHA:
657     unicode_action_function(0x03, 0x91);
658     break;
659 case UC_SUBSCRIPT_SEVEN:
660     unicode_action_function(0x20, 0x87);
661     break;
662 case UC_GREEK_CAPITAL_LETTER_BETA:
663     unicode_action_function(0x03, 0x92);
664     break;
665 case UC_GREEK_CAPITAL_LETTER_ETA:
666     unicode_action_function(0x03, 0x97);
667     break;
668 case UC_SUPERSCRIPT_EIGHT:
669     unicode_action_function(0x20, 0x78);
670     break;
671 case UC_SUPERSCRIPT_ZERO:
672     unicode_action_function(0x20, 0x70);
673     break;
674 case UC_NOT_AN_ELEMENT_OF:
675     unicode_action_function(0x22, 0x09);
676     break;
677 case UC_GREEK_SMALL_LETTER_UPSILON:
678     unicode_action_function(0x03, 0xc5);
679     break;
680 case UC_NOT_EQUAL_TO:
681     unicode_action_function(0x22, 0x60);
682     break;
683 case UC_GREEK_CAPITAL_LETTER_CHI:
684     unicode_action_function(0x03, 0xa7);
685     break;
686 case UC_FOR_ALL:
687     unicode_action_function(0x22, 0x00);
688     break;
689 case UC_GREEK_CAPITAL_LETTER_TAU:
690     unicode_action_function(0x03, 0xa4);
691     break;
692 case UC_VULGAR_FRACTION_ONE_QUARTER:
693     unicode_action_function(0x00, 0xbc);
694     break;
695 case UC_GREEK_SMALL_LETTER_CHI:
696     unicode_action_function(0x03, 0xc7);
697     break;
698 case UC_GREEK_CAPITAL_LETTER_THETA:
699     unicode_action_function(0x03, 0x98);
700     break;
701 case UC_GREEK_SMALL_LETTER_IOTA:
702     unicode_action_function(0x03, 0xb9);
703     break;
704 case UC_GREEK_CAPITAL_LETTER_LAMDA:
705     unicode_action_function(0x03, 0x9b);
706     break;
707 case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N:
708     unicode_action_function(0x20, 0x7f);
709     break;
710 case UC_GREEK_CAPITAL_LETTER_UPSILON:
711     unicode_action_function(0x03, 0xa5);
712     break;
713 case UC_GREEK_CAPITAL_LETTER_MU:
714     unicode_action_function(0x03, 0x9c);
715     break;
716 case UC_GREEK_CAPITAL_LETTER_EPSILON:
717     unicode_action_function(0x03, 0x95);
718     break;
719 case UC_GREEK_CAPITAL_LETTER_GAMMA:
720     unicode_action_function(0x03, 0x93);
721     break;
722 case UC_SUBSCRIPT_SIX:
723     unicode_action_function(0x20, 0x86);
724     break;
725 case UC_GREEK_CAPITAL_LETTER_DELTA:
726     unicode_action_function(0x03, 0x94);
727     break;
728 case UC_VULGAR_FRACTION_ONE_HALF:
729     unicode_action_function(0x00, 0xbd);
730     break;
731         default:
732             break;
733     }
734     return MACRO_NONE;
735 };
736
737 // Runs just one time when the keyboard initializes.
738 void matrix_init_user(void) {
739
740 };
741
742 // Runs constantly in the background, in a loop.
743 void matrix_scan_user(void) {
744     uint8_t layer = biton32(layer_state);
745
746     ergodox_board_led_off();
747     ergodox_right_led_1_off();
748     ergodox_right_led_2_off();
749     ergodox_right_led_3_off();
750     switch (layer) {
751         case L1:
752             ergodox_right_led_1_on();
753             break;
754         case L2:
755             ergodox_right_led_2_on();
756             break;
757         case L3:
758             ergodox_right_led_3_on();
759             break;
760         case L4:
761             ergodox_right_led_1_on();
762             ergodox_right_led_2_on();
763             break;
764         case L5:
765             ergodox_right_led_1_on();
766             ergodox_right_led_3_on();
767             break;
768         // case L6:
769         //     ergodox_right_led_2_on();
770         //     ergodox_right_led_3_on();
771         //     break;
772         // case L7:
773         //     ergodox_right_led_1_on();
774         //     ergodox_right_led_2_on();
775         //     ergodox_right_led_3_on();
776         //     break;
777         default:
778             ergodox_board_led_off();
779             break;
780     }
781 };