]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/atreus/keymaps/dvorak_42_key/keymap.c
QMK Configurator updates: Atom47, Atomic and Atreus (#2883)
[qmk_firmware.git] / keyboards / atreus / keymaps / dvorak_42_key / keymap.c
1
2 #include QMK_KEYBOARD_H
3
4 // layers
5 #define BASE      0
6 #define KEYNAV    1
7 #define KEYSEL    2
8 #define MOUSE     3
9 #define COMBINED  4
10 #define BROWSER_CONTROL 5
11
12 // macros
13 #define MOUSE_TOGGLE 1
14 #define MOUSE_LOCK 2
15
16 static bool mouse_lock = false;
17
18 enum custom_keycodes {
19   PLACEHOLDER = SAFE_RANGE, // can always be here
20
21   // Cloud9 macros
22   CLOUD9_TAB_LEFT,
23   CLOUD9_TAB_RIGHT,
24   CLOUD9_TAB_CLOSE,
25   CLOUD9_GOTO_SYMBOL,
26   CLOUD9_GOTO_LINE,
27   CLOUD9_NAVIGATE,
28
29 };
30
31 // building instructions:
32 // make atreus:dvorak_42_key
33
34 // flashing instructions:
35 // avrdude -p atmega32u4 -c avr109 -U flash:w:atreus_dvorak_42_key.hex  -P COM7
36
37 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38   [BASE] = LAYOUT(
39     KC_QUOTE,      KC_COMMA,      KC_DOT,     KC_P,                KC_Y,                                 KC_F,       KC_G,      KC_C,    KC_R,          KC_L,
40     KC_A,          KC_O,          KC_E,       KC_U,                KC_I,                                 KC_D,       KC_H,      KC_T,    KC_N,          KC_S,
41     KC_SCOLON,     KC_Q,          KC_J,       KC_K,                KC_X,                                 KC_B,       KC_M,      KC_W,    KC_V,          KC_Z,
42     OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL), MO(COMBINED), MO(KEYNAV), KC_ENTER,   KC_SPACE,  KC_BSPC, RCTL(KC_BSPC), KC_CAPSLOCK, OSM(MOD_LSFT)
43   ),
44
45   [KEYNAV] = LAYOUT(
46     KC_ESC,      CLOUD9_GOTO_LINE,   RCTL(KC_Z),      RCTL(KC_S),       MEH(KC_F10),                         KC_TRNS,       KC_HOME,    KC_UP,           KC_END,     KC_PGUP,
47     MEH(KC_F11), CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB),    KC_TAB,           MEH(KC_A),                           LCTL(KC_LEFT), KC_LEFT,    KC_DOWN,         KC_RIGHT,   LCTL(KC_RIGHT),
48     MEH(KC_B),   CLOUD9_NAVIGATE,    CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE,                    KC_TRNS,       RCTL(KC_C), RCTL(KC_X),      RCTL(KC_V), KC_PGDOWN,
49     KC_TRNS,     KC_TRNS,            KC_TRNS,         KC_TRNS,          KC_TRNS,          KC_TRNS, KC_ENTER, KC_SPACE,      KC_BSPC,    RCTL(KC_BSPC),   KC_DELETE,  LCTL(KC_DELETE)
50   ),
51
52   [KEYSEL] = LAYOUT(
53     MEH(KC_G), MEH(KC_H),MEH(KC_I), MEH(KC_J), MEH(KC_K),                    KC_TRNS,             RSFT(KC_HOME), RSFT(KC_UP),   RSFT(KC_END),   RSFT(KC_PGUP),
54     MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P),                    RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)),
55     MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U),                    KC_TRNS,             RCTL(KC_C),    RCTL(KC_X),    RCTL(KC_V),     RSFT(KC_PGDN),
56     RESET,     KC_TRNS,  KC_TRNS,   KC_TRNS,   KC_TRNS,   KC_TRNS, KC_ENTER, KC_SPACE,            KC_BSPC,       RCTL(KC_BSPC), KC_DELETE,      LCTL(KC_DELETE)
57   ),
58
59   [COMBINED] = LAYOUT(
60     KC_EXLM, KC_AT,   KC_HASH,     KC_DLR,      KC_PERC,                   KC_PLUS,  KC_7, KC_8,   KC_9,    KC_ASTR,
61     KC_LPRN, KC_RPRN, KC_LBRACKET, KC_RBRACKET, KC_UNDS,                   KC_MINS,  KC_4, KC_5,   KC_6,    KC_SLSH,
62     KC_COLN, KC_DQUO, KC_LCBR,     KC_RCBR,     KC_AMPR,                   KC_EQUAL, KC_1, KC_2,   KC_3,    KC_QUES,
63     KC_TRNS, KC_TILD, KC_GRAVE,    KC_CIRC,     KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_0, KC_DOT, KC_PIPE, KC_BSLS
64   ),
65
66   [MOUSE] = LAYOUT(
67     KC_TRNS,      KC_PGUP,       KC_MS_WH_UP,   KC_UP,        KC_TRNS,                   KC_UP,     KC_HOME,            KC_MS_U,      KC_END,     KC_MS_WH_UP,
68     KC_MS_ACCEL0, KC_PGDN,       KC_MS_WH_DOWN, KC_DOWN,      KC_TRNS,                   KC_DOWN,   KC_MS_L,            KC_MS_D,      KC_MS_R,    KC_MS_WH_DOWN,
69     KC_TRNS,      KC_TRNS,       KC_TRNS,       KC_TRNS,      KC_TRNS,                   MEH(KC_X), MEH(KC_Y),          MEH(KC_Z),    KC_F5,      RCTL(KC_W),
70     KC_TRNS,      M(MOUSE_LOCK), KC_TRNS,       KC_MS_ACCEL0, KC_TRNS, KC_BTN3, KC_BTN1, KC_BTN2,   RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT)
71   ),
72
73   [BROWSER_CONTROL] = LAYOUT(
74     KC_TRNS, KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2,                      KC_UP,      KC_PGUP,            KC_PGDN,      KC_MS_WH_UP,   KC_TRNS,
75     KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,                      KC_DOWN,    RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT),
76     KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                      KC_TRNS,    RCTL(KC_1),         RCTL(KC_9),   KC_F6,         KC_F5,
77     KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), RSFT(RCTL(KC_TAB)), KC_TRNS,      KC_TRNS,       KC_TRNS
78   ),
79 };
80
81 const uint16_t PROGMEM fn_actions[] = {
82
83 };
84
85 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
86   if(record->event.pressed) {
87     switch (keycode) {
88                 // Cloud9 macros
89                 case CLOUD9_TAB_LEFT:
90             SEND_STRING(SS_LCTRL("["));
91             return true;
92                         break;
93                 case CLOUD9_TAB_RIGHT:
94             SEND_STRING(SS_LCTRL("]"));
95             return true;
96                         break;
97                 case CLOUD9_TAB_CLOSE:
98             SEND_STRING(SS_LALT("w"));
99             return true;
100                         break;
101                 case CLOUD9_GOTO_SYMBOL:
102             SEND_STRING(SS_LSFT(SS_LCTRL("e")));
103             return true;
104                         break;
105                 case CLOUD9_GOTO_LINE:
106             SEND_STRING(SS_LCTRL("g"));
107             return true;
108                         break;
109                 case CLOUD9_NAVIGATE:
110             SEND_STRING(SS_LCTRL("e"));
111             return true;
112                         break;
113         }
114   }
115
116   return true;
117 }
118
119 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
120 {
121   // MACRODOWN only works in this function
122       switch(id) {
123                 case MOUSE_TOGGLE:
124             if (record->event.pressed) {
125                                 layer_on(MOUSE);
126             } else {
127                                 if(!mouse_lock)
128                                         layer_off(MOUSE);
129                         }
130                         break;
131                 case MOUSE_LOCK:
132                         if (record->event.pressed)
133                         {
134                                 if(mouse_lock)
135                                 {
136                                         mouse_lock = false;
137                                         layer_off(MOUSE);
138                                 }
139                                 else
140                                         mouse_lock = true;
141                         }
142                         break;
143       }
144     return MACRO_NONE;
145 };