]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c
Merge pull request #584 from algernon/ergodox-ez/algernon
[qmk_firmware.git] / keyboards / ergodox_ez / keymaps / german-manuneo / keymap.c
1 #include "ergodox_ez.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] = KEYMAP(
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] = KEYMAP(
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] = KEYMAP(
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] = KEYMAP(
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] = KEYMAP(
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] = KEYMAP(
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] = KEYMAP(
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 const uint16_t PROGMEM fn_actions[] = {};
380
381 #define UC_MODE_WIN 0
382 #define UC_MODE_LINUX 1
383 #define UC_MODE_OSX 2
384
385 // TODO: allow default mode to be configured
386 static uint16_t unicode_mode = UC_MODE_WIN;
387
388 uint16_t hextokeycode(uint8_t hex) {
389     if (hex == 0x0) {
390         return KC_P0;
391     }
392     if (hex < 0xA) {
393         return KC_P1 + (hex - 0x1);
394     }
395     return KC_A + (hex - 0xA);
396 }
397
398 void unicode_action_function(uint16_t hi, uint16_t lo) {
399     switch (unicode_mode) {
400     case UC_MODE_WIN:
401         register_code(KC_LALT);
402
403         register_code(KC_PPLS);
404         unregister_code(KC_PPLS);
405
406         register_code(hextokeycode((hi & 0xF0) >> 4));
407         unregister_code(hextokeycode((hi & 0xF0) >> 4));
408         register_code(hextokeycode((hi & 0x0F)));
409         unregister_code(hextokeycode((hi & 0x0F)));
410         register_code(hextokeycode((lo & 0xF0) >> 4));
411         unregister_code(hextokeycode((lo & 0xF0) >> 4));
412         register_code(hextokeycode((lo & 0x0F)));
413         unregister_code(hextokeycode((lo & 0x0F)));
414
415         unregister_code(KC_LALT);
416         break;
417     case UC_MODE_LINUX:
418         register_code(KC_LCTL);
419         register_code(KC_LSFT);
420
421         register_code(KC_U);
422         unregister_code(KC_U);
423
424         register_code(hextokeycode((hi & 0xF0) >> 4));
425         unregister_code(hextokeycode((hi & 0xF0) >> 4));
426         register_code(hextokeycode((hi & 0x0F)));
427         unregister_code(hextokeycode((hi & 0x0F)));
428         register_code(hextokeycode((lo & 0xF0) >> 4));
429         unregister_code(hextokeycode((lo & 0xF0) >> 4));
430         register_code(hextokeycode((lo & 0x0F)));
431         unregister_code(hextokeycode((lo & 0x0F)));
432
433         unregister_code(KC_LCTL);
434         unregister_code(KC_LSFT);
435         break;
436     case UC_MODE_OSX:
437         break;
438     }
439 }
440
441 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
442     if (!record->event.pressed) {
443         return MACRO_NONE;
444     }
445     // MACRODOWN only works in this function
446     switch(id) {
447         case UM:
448             unicode_mode = (unicode_mode + 1) % 2;
449             break;
450
451 case UC_GREEK_SMALL_LETTER_OMICRON:
452     unicode_action_function(0x03, 0xbf);
453     break;
454 case UC_LEFTWARDS_ARROW:
455     unicode_action_function(0x21, 0x90);
456     break;
457 case UC_GREEK_CAPITAL_LETTER_RHO:
458     unicode_action_function(0x03, 0xa1);
459     break;
460 case UC_SUBSCRIPT_THREE:
461     unicode_action_function(0x20, 0x83);
462     break;
463 case UC_VULGAR_FRACTION_ONE_EIGHTH:
464     unicode_action_function(0x21, 0x5b);
465     break;
466 case UC_GREEK_SMALL_LETTER_LAMDA:
467     unicode_action_function(0x03, 0xbb);
468     break;
469 case UC_VULGAR_FRACTION_ONE_THIRD:
470     unicode_action_function(0x21, 0x53);
471     break;
472 case UC_GREEK_SMALL_LETTER_XI:
473     unicode_action_function(0x03, 0xbe);
474     break;
475 case UC_THERE_DOES_NOT_EXIST:
476     unicode_action_function(0x22, 0x04);
477     break;
478 case UC_SUPERSCRIPT_ONE:
479     unicode_action_function(0x00, 0xb9);
480     break;
481 case UC_GREEK_SMALL_LETTER_BETA:
482     unicode_action_function(0x03, 0xb2);
483     break;
484 case UC_SUBSCRIPT_FIVE:
485     unicode_action_function(0x20, 0x85);
486     break;
487 case UC_GREEK_CAPITAL_LETTER_IOTA:
488     unicode_action_function(0x03, 0x99);
489     break;
490 case UC_VULGAR_FRACTION_ONE_FIFTH:
491     unicode_action_function(0x21, 0x55);
492     break;
493 case UC_GREEK_SMALL_LETTER_PSI:
494     unicode_action_function(0x03, 0xc8);
495     break;
496 case UC_SUBSCRIPT_NINE:
497     unicode_action_function(0x20, 0x89);
498     break;
499 case UC_SUPERSCRIPT_FOUR:
500     unicode_action_function(0x20, 0x74);
501     break;
502 case UC_RIGHTWARDS_ARROW:
503     unicode_action_function(0x21, 0x92);
504     break;
505 case UC_SUPERSCRIPT_SIX:
506     unicode_action_function(0x20, 0x76);
507     break;
508 case UC_DOWNWARDS_ARROW:
509     unicode_action_function(0x21, 0x93);
510     break;
511 case UC_GREEK_SMALL_LETTER_PI:
512     unicode_action_function(0x03, 0xc0);
513     break;
514 case UC_SUPERSCRIPT_TWO:
515     unicode_action_function(0x00, 0xb2);
516     break;
517 case UC_GREEK_CAPITAL_LETTER_OMEGA:
518     unicode_action_function(0x03, 0xa9);
519     break;
520 case UC_GREEK_CAPITAL_LETTER_PSI:
521     unicode_action_function(0x03, 0xa8);
522     break;
523 case UC_SUBSCRIPT_FOUR:
524     unicode_action_function(0x20, 0x84);
525     break;
526 case UC_GREEK_CAPITAL_LETTER_NU:
527     unicode_action_function(0x03, 0x9d);
528     break;
529 case UC_DIVISION_SIGN:
530     unicode_action_function(0x00, 0xf7);
531     break;
532 case UC_GREEK_SMALL_LETTER_SIGMA:
533     unicode_action_function(0x03, 0xc3);
534     break;
535 case UC_GREEK_SMALL_LETTER_RHO:
536     unicode_action_function(0x03, 0xc1);
537     break;
538 case UC_VULGAR_FRACTION_ONE_SIXTH:
539     unicode_action_function(0x21, 0x59);
540     break;
541 case UC_GREEK_SMALL_LETTER_GAMMA:
542     unicode_action_function(0x03, 0xb3);
543     break;
544 case UC_VULGAR_FRACTION_TWO_THIRDS:
545     unicode_action_function(0x21, 0x54);
546     break;
547 case UC_GREEK_SMALL_LETTER_NU:
548     unicode_action_function(0x03, 0xbd);
549     break;
550 case UC_GREEK_SMALL_LETTER_ZETA:
551     unicode_action_function(0x03, 0xb6);
552     break;
553 case UC_GREEK_SMALL_LETTER_EPSILON:
554     unicode_action_function(0x03, 0xb5);
555     break;
556 case UC_GREEK_SMALL_LETTER_KAPPA:
557     unicode_action_function(0x03, 0xba);
558     break;
559 case UC_SUPERSCRIPT_SEVEN:
560     unicode_action_function(0x20, 0x77);
561     break;
562 case UC_GREEK_CAPITAL_LETTER_PI:
563     unicode_action_function(0x03, 0xa0);
564     break;
565 case UC_GREEK_SMALL_LETTER_FINAL_SIGMA:
566     unicode_action_function(0x03, 0xc2);
567     break;
568 case UC_GREEK_CAPITAL_LETTER_XI:
569     unicode_action_function(0x03, 0x9e);
570     break;
571 case UC_GREEK_SMALL_LETTER_THETA:
572     unicode_action_function(0x03, 0xb8);
573     break;
574 case UC_GREEK_SMALL_LETTER_ETA:
575     unicode_action_function(0x03, 0xb7);
576     break;
577 case UC_SUBSCRIPT_TWO:
578     unicode_action_function(0x20, 0x82);
579     break;
580 case UC_ASYMPTOTICALLY_EQUAL_TO:
581     unicode_action_function(0x22, 0x43);
582     break;
583 case UC_GREEK_SMALL_LETTER_ALPHA:
584     unicode_action_function(0x03, 0xb1);
585     break;
586 case UC_GREEK_CAPITAL_LETTER_PHI:
587     unicode_action_function(0x03, 0xa6);
588     break;
589 case UC_GREEK_SMALL_LETTER_PHI:
590     unicode_action_function(0x03, 0xc6);
591     break;
592 case UC_INFINITY:
593     unicode_action_function(0x22, 0x1e);
594     break;
595 case UC_GREEK_CAPITAL_LETTER_OMICRON:
596     unicode_action_function(0x03, 0x9f);
597     break;
598 case UC_ELEMENT_OF:
599     unicode_action_function(0x22, 0x08);
600     break;
601 case UC_MULTIPLICATION_SIGN:
602     unicode_action_function(0x00, 0xd7);
603     break;
604 case UC_SUBSCRIPT_ZERO:
605     unicode_action_function(0x20, 0x80);
606     break;
607 case UC_GREEK_CAPITAL_LETTER_SIGMA:
608     unicode_action_function(0x03, 0xa3);
609     break;
610 case UC_GREEK_SMALL_LETTER_OMEGA:
611     unicode_action_function(0x03, 0xc9);
612     break;
613 case UC_SUBSCRIPT_ONE:
614     unicode_action_function(0x20, 0x81);
615     break;
616 case UC_GREEK_CAPITAL_LETTER_ZETA:
617     unicode_action_function(0x03, 0x96);
618     break;
619 case UC_GREEK_SMALL_LETTER_TAU:
620     unicode_action_function(0x03, 0xc4);
621     break;
622 case UC_SUPERSCRIPT_FIVE:
623     unicode_action_function(0x20, 0x75);
624     break;
625 case UC_THERE_EXISTS:
626     unicode_action_function(0x22, 0x03);
627     break;
628 case UC_PLUS_MINUS_SIGN:
629     unicode_action_function(0x00, 0xb1);
630     break;
631 case UC_VULGAR_FRACTION_THREE_QUARTERS:
632     unicode_action_function(0x00, 0xbe);
633     break;
634 case UC_SUPERSCRIPT_THREE:
635     unicode_action_function(0x00, 0xb3);
636     break;
637 case UC_EMPTY_SET:
638     unicode_action_function(0x22, 0x05);
639     break;
640 case UC_UPWARDS_ARROW:
641     unicode_action_function(0x21, 0x91);
642     break;
643 case UC_SUPERSCRIPT_NINE:
644     unicode_action_function(0x20, 0x79);
645     break;
646 case UC_GREEK_SMALL_LETTER_DELTA:
647     unicode_action_function(0x03, 0xb4);
648     break;
649 case UC_GREEK_SMALL_LETTER_MU:
650     unicode_action_function(0x03, 0xbc);
651     break;
652 case UC_GREEK_CAPITAL_LETTER_KAPPA:
653     unicode_action_function(0x03, 0x9a);
654     break;
655 case UC_SUBSCRIPT_EIGHT:
656     unicode_action_function(0x20, 0x88);
657     break;
658 case UC_GREEK_CAPITAL_LETTER_ALPHA:
659     unicode_action_function(0x03, 0x91);
660     break;
661 case UC_SUBSCRIPT_SEVEN:
662     unicode_action_function(0x20, 0x87);
663     break;
664 case UC_GREEK_CAPITAL_LETTER_BETA:
665     unicode_action_function(0x03, 0x92);
666     break;
667 case UC_GREEK_CAPITAL_LETTER_ETA:
668     unicode_action_function(0x03, 0x97);
669     break;
670 case UC_SUPERSCRIPT_EIGHT:
671     unicode_action_function(0x20, 0x78);
672     break;
673 case UC_SUPERSCRIPT_ZERO:
674     unicode_action_function(0x20, 0x70);
675     break;
676 case UC_NOT_AN_ELEMENT_OF:
677     unicode_action_function(0x22, 0x09);
678     break;
679 case UC_GREEK_SMALL_LETTER_UPSILON:
680     unicode_action_function(0x03, 0xc5);
681     break;
682 case UC_NOT_EQUAL_TO:
683     unicode_action_function(0x22, 0x60);
684     break;
685 case UC_GREEK_CAPITAL_LETTER_CHI:
686     unicode_action_function(0x03, 0xa7);
687     break;
688 case UC_FOR_ALL:
689     unicode_action_function(0x22, 0x00);
690     break;
691 case UC_GREEK_CAPITAL_LETTER_TAU:
692     unicode_action_function(0x03, 0xa4);
693     break;
694 case UC_VULGAR_FRACTION_ONE_QUARTER:
695     unicode_action_function(0x00, 0xbc);
696     break;
697 case UC_GREEK_SMALL_LETTER_CHI:
698     unicode_action_function(0x03, 0xc7);
699     break;
700 case UC_GREEK_CAPITAL_LETTER_THETA:
701     unicode_action_function(0x03, 0x98);
702     break;
703 case UC_GREEK_SMALL_LETTER_IOTA:
704     unicode_action_function(0x03, 0xb9);
705     break;
706 case UC_GREEK_CAPITAL_LETTER_LAMDA:
707     unicode_action_function(0x03, 0x9b);
708     break;
709 case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N:
710     unicode_action_function(0x20, 0x7f);
711     break;
712 case UC_GREEK_CAPITAL_LETTER_UPSILON:
713     unicode_action_function(0x03, 0xa5);
714     break;
715 case UC_GREEK_CAPITAL_LETTER_MU:
716     unicode_action_function(0x03, 0x9c);
717     break;
718 case UC_GREEK_CAPITAL_LETTER_EPSILON:
719     unicode_action_function(0x03, 0x95);
720     break;
721 case UC_GREEK_CAPITAL_LETTER_GAMMA:
722     unicode_action_function(0x03, 0x93);
723     break;
724 case UC_SUBSCRIPT_SIX:
725     unicode_action_function(0x20, 0x86);
726     break;
727 case UC_GREEK_CAPITAL_LETTER_DELTA:
728     unicode_action_function(0x03, 0x94);
729     break;
730 case UC_VULGAR_FRACTION_ONE_HALF:
731     unicode_action_function(0x00, 0xbd);
732     break;
733         default:
734             break;
735     }
736     return MACRO_NONE;
737 };
738
739 // Runs just one time when the keyboard initializes.
740 void matrix_init_user(void) {
741
742 };
743
744 // Runs constantly in the background, in a loop.
745 void matrix_scan_user(void) {
746     uint8_t layer = biton32(layer_state);
747
748     ergodox_board_led_off();
749     ergodox_right_led_1_off();
750     ergodox_right_led_2_off();
751     ergodox_right_led_3_off();
752     switch (layer) {
753         case L1:
754             ergodox_right_led_1_on();
755             break;
756         case L2:
757             ergodox_right_led_2_on();
758             break;
759         case L3:
760             ergodox_right_led_3_on();
761             break;
762         case L4:
763             ergodox_right_led_1_on();
764             ergodox_right_led_2_on();
765             break;
766         case L5:
767             ergodox_right_led_1_on();
768             ergodox_right_led_3_on();
769             break;
770         // case L6:
771         //     ergodox_right_led_2_on();
772         //     ergodox_right_led_3_on();
773         //     break;
774         // case L7:
775         //     ergodox_right_led_1_on();
776         //     ergodox_right_led_2_on();
777         //     ergodox_right_led_3_on();
778         //     break;
779         default:
780             ergodox_board_led_off();
781             break;
782     }
783 };