]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/m10a/keymaps/gam3cat/keymap.c
M10-A, M65-A, GonNerd keymaps (#2418)
[qmk_firmware.git] / keyboards / m10a / keymaps / gam3cat / keymap.c
1 #include "m10a.h"
2 #include "action_layer.h"
3 #include "eeconfig.h"
4 #include "version.h"
5
6 extern keymap_config_t keymap_config;
7
8 enum layers {
9     _L0 = 0,
10     _L1,
11     _L2,
12     _L3,
13     _L4,
14     _L5,
15     _L6,
16     _L7,
17     _L8,
18     _L9
19 };
20
21 enum m10a_keycodes {
22     DYNAMIC_MACRO_RANGE = SAFE_RANGE,
23 };
24
25 #include "dynamic_macro.h"
26 #define _______ KC_TRNS
27 #define XXXXXXX KC_NO
28 #define FN_ZERO LT(_L9, KC_0)
29 #define KC_DMR1 DYN_REC_START1
30 #define KC_DMR2 DYN_REC_START2
31 #define KC_DMP1 DYN_MACRO_PLAY1
32 #define KC_DMP2 DYN_MACRO_PLAY2
33 #define KC_DMRS DYN_REC_STOP
34
35 static uint8_t current_layer;
36
37 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38     /* .-----------.  .-----------.  .-----------.  .-----------.  .-----------.
39     *  |  7|  8|  9|  |  +|  -|  *|  |  ^|  &|  !|  |VLU|Ver|WFD|  |VLU|NXT|FFD|
40     *  |-----------|  |-----------|  |-----------|  |-----------|  |-----------|
41     *  |  4|  5|  6|  |  /|  %|  ,|  |  D|  E|  F|  |MUT|C-W|CHR|  |MUT|STP|PLY|
42     *  |-----------|  |-----------|  |-----------|  |-----------|  |-----------|
43     *  |  1|  2|  3|  |  .|  =|Ent|  |  A|  B|  C|  |VLD|CMP|WBK|  |VLD|PRV|RWD|
44     *  |-----------|  |-----------|  |-----------|  |-----------|  |-----------|
45     *  |L0 |  _L9/0|  |L1 |  _L9  |  |L2 |  _L9  |  |L3 |  _L9  |  |L4 |  _L9  |
46     *  *-----------*  *-----------*  *-----------*  *-----------*  *-----------*
47     *  .-----------.  .-----------.  .-----------.  .-----------.  .-----------.
48     *  |   |   |   |  |   |   |   |  |MP1|   |MP2|  |   |   |RST|  |_L6|_L7|_L8|
49     *  |-----------|  |-----------|  |-----------|  |-----------|  |-----------|
50     *  |   |   |   |  |   |   |   |  |   |MRS|   |  |   |   |   |  |_L3|_L4|_L5|
51     *  |-----------|  |-----------|  |-----------|  |-----------|  |-----------|
52     *  |   |   |   |  |   |   |   |  |MR1|   |MR2|  |   |   |   |  |_L0|_L1|_L2|
53     *  |-----------|  |-----------|  |-----------|  |-----------|  |-----------|
54     *  |L5 |  _L9  |  |L6 |  _L9  |  |L7 |  _L9  |  |L8 |  _L9  |  |L9 |       |
55     *  *-----------*  *-----------*  *-----------*  *-----------*  *-----------*
56     */
57     [_L0] = {{KC_7,    KC_8,    KC_9   }, {KC_4,    KC_5,    KC_6   }, {KC_1,    KC_2,    KC_3   }, {XXXXXXX, XXXXXXX, FN_ZERO}},
58     [_L1] = {{KC_PPLS, KC_PMNS, KC_PAST}, {KC_PSLS, KC_PERC, KC_COMM}, {KC_PDOT, KC_EQL,  KC_PENT}, {XXXXXXX, XXXXXXX, MO(_L9)}},
59     [_L2] = {{KC_CIRC, KC_AMPR, KC_EXLM}, {S(KC_D), S(KC_E), S(KC_F)}, {S(KC_A), S(KC_B), S(KC_C)}, {XXXXXXX, XXXXXXX, MO(_L9)}},
60     [_L3] = {{KC_VOLU, F(0),    KC_WFWD}, {KC_MUTE, M(1),    M(0)   }, {KC_VOLD, KC_MYCM, KC_WBAK}, {XXXXXXX, XXXXXXX, MO(_L9)}},
61     [_L4] = {{KC_VOLU, KC_MNXT, KC_MFFD}, {KC_MUTE, KC_MSTP, KC_MPLY}, {KC_VOLD, KC_MPRV, KC_MRWD}, {XXXXXXX, XXXXXXX, MO(_L9)}},
62     [_L5] = {{_______, _______, _______}, {_______, _______, _______}, {_______, _______, _______}, {XXXXXXX, XXXXXXX, MO(_L9)}},
63     [_L6] = {{_______, _______, _______}, {_______, _______, _______}, {_______, _______, _______}, {XXXXXXX, XXXXXXX, MO(_L9)}},
64     [_L7] = {{KC_DMP1, _______, KC_DMP2}, {_______, KC_DMRS, _______}, {KC_DMR1, _______, KC_DMR2}, {XXXXXXX, XXXXXXX, MO(_L9)}},
65     [_L8] = {{_______, _______, RESET  }, {_______, _______, _______}, {_______, _______, _______}, {XXXXXXX, XXXXXXX, MO(_L9)}},
66     [_L9] = {{DF(_L6), DF(_L7), DF(_L8)}, {DF(_L3), DF(_L4), DF(_L5)}, {DF(_L0), DF(_L1), DF(_L2)}, {XXXXXXX, XXXXXXX, _______}},
67 };
68
69 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
70     switch(id) {
71         case 0:
72             if (record->event.pressed) {
73                 return MACRO(I(10), D(LGUI), T(R), U(LGUI), END);
74             }
75             else {
76                 SEND_STRING("chrome.exe\n");
77                 return false;
78             }
79         break;
80         case 1:
81             if (record->event.pressed) {
82                 return MACRO(I(10), D(LCTL), T(W), U(LCTL), END);
83             }
84         break;
85     }
86     return MACRO_NONE;
87 };
88
89 const uint16_t PROGMEM fn_actions[] = {
90     [0] = ACTION_FUNCTION(0),
91 };
92
93 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
94     switch (id) {
95         case 0:
96             if (record->event.pressed) {
97                 SEND_STRING ("[Keyboard: " QMK_KEYBOARD "]  --  [QMK Version: " QMK_VERSION "]  --  [Keymap: " QMK_KEYMAP "]");
98             }
99         break;
100     }
101 }
102
103 void matrix_init_user(void) {
104   #ifdef BACKLIGHT_ENABLE
105     backlight_level(0);
106   #endif
107 }
108
109 // Runs constantly in the background, in a loop.
110 void matrix_scan_user(void) {
111     uint8_t layer = biton32(layer_state);
112
113     if (current_layer == layer) {
114     }
115     else {
116         current_layer = layer;
117         switch (layer) {
118             case 0:
119                 backlight_level(0);
120                 break;
121             case 1:
122                 backlight_level(1);
123                 break;
124             case 2:
125                 backlight_level(2);
126                 break;
127             case 3:
128                 backlight_level(3);
129                 break;
130             case 4:
131                 backlight_level(4);
132                 break;
133             case 5:
134                 backlight_level(5);
135                 break;
136             case 6:
137                 backlight_level(6);
138                 break;
139             case 7:
140                 backlight_level(6);
141                 break;
142             case 8:
143                 backlight_level(6);
144                 break;
145             case 9:
146                 backlight_level(0);
147                 break;
148             default:
149                 backlight_level(0);
150                 break;
151         }
152     }
153 }
154
155 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
156     // Enable Dynamic Macros.
157     if (!process_record_dynamic_macro(keycode, record)) {
158         return false;
159     }
160     return true;
161 }