]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/atreus/keymaps/dvorak_42_key/keymap.c
Ergodox EZ and Atreus 42 key dvorak layout updates (#1964)
[qmk_firmware.git] / keyboards / atreus / keymaps / dvorak_42_key / keymap.c
1
2 #include "atreus.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
11 // macros
12 #define MOUSE_TOGGLE 1
13 #define MOUSE_LOCK 2
14
15 static bool mouse_lock = false;
16
17 // building instructions:
18 // make atreus:dvorak_42_key
19
20 // flashing instructions:
21 // avrdude -p atmega32u4 -c avr109 -U flash:w:atreus_dvorak_42_key.hex  -P COM7
22
23 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
24         
25 [BASE] = { 
26   {KC_QUOTE,      KC_COMMA,      KC_DOT,    KC_P,       KC_Y,         KC_TRNS,    KC_F,  KC_G,  KC_C,   KC_R,   KC_L, },
27   {KC_A,          KC_O,          KC_E,      KC_U,       KC_I,         KC_TRNS,    KC_D,  KC_H,  KC_T,   KC_N,   KC_S, },
28   {KC_SCOLON,     KC_Q,          KC_J,      KC_K,       KC_X,         MO(KEYNAV), KC_B,  KC_M,  KC_W,   KC_V,   KC_Z, },
29   {OSM(MOD_LSFT), OSM(MOD_LCTL), M(MOUSE_TOGGLE), MO(KEYSEL), MO(COMBINED), KC_ENTER,   KC_SPACE,  KC_BSPC, RCTL(KC_BSPC), KC_CAPSLOCK, OSM(MOD_LSFT), }
30 },      
31
32 [KEYNAV] = { 
33   {KC_ESC,      MEH(KC_F9),  RCTL(KC_Z),   RCTL(KC_S), MEH(KC_F10), KC_TRNS,    KC_TRNS,       KC_HOME,    KC_UP,           KC_END,     KC_PGUP, },
34   {MEH(KC_F11), MEH(KC_F12), RSFT(KC_TAB), KC_TAB,     MEH(KC_A),   KC_TRNS,    LCTL(KC_LEFT), KC_LEFT,    KC_DOWN,         KC_RIGHT,   LCTL(KC_RIGHT), },
35   {MEH(KC_B),   MEH(KC_C),   MEH(KC_D),    MEH(KC_E),  MEH(KC_F),   KC_TRNS,    KC_TRNS,       RCTL(KC_C), RCTL(KC_X),      RCTL(KC_V), KC_PGDOWN, },
36   {KC_TRNS,     KC_TRNS,     KC_TRNS,      KC_TRNS,    KC_TRNS,     KC_ENTER,   KC_SPACE,      KC_BSPC,   RCTL(KC_BSPC),    KC_DELETE,  LCTL(KC_DELETE), }
37 },      
38
39 [KEYSEL] = { 
40   {MEH(KC_G), MEH(KC_H),MEH(KC_I), MEH(KC_J), MEH(KC_K), KC_TRNS,    KC_TRNS,             RSFT(KC_HOME), RSFT(KC_UP),  RSFT(KC_END), RSFT(KC_PGUP), },
41   {MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P), KC_TRNS,    RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)), },
42   {MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U), KC_TRNS,    KC_TRNS,             RCTL(KC_C),RCTL(KC_X),     RCTL(KC_V), RSFT(KC_PGDN), },
43   {RESET,     KC_TRNS,  KC_TRNS,   KC_TRNS,   KC_TRNS,   KC_ENTER,   KC_SPACE,            KC_BSPC,   RCTL(KC_BSPC),  KC_DELETE,  LCTL(KC_DELETE), }
44 },      
45
46 [COMBINED] = { 
47   {KC_EXLM, KC_AT,      KC_HASH,     KC_DLR,      KC_PERC, KC_TRNS,    KC_PLUS,   KC_7, KC_8,    KC_9,    KC_ASTR, },
48   {KC_LPRN, KC_RPRN,    KC_LBRACKET, KC_RBRACKET, KC_UNDS,  KC_TRNS,    KC_MINS,  KC_4, KC_5,    KC_6,    KC_SLSH, },
49   {KC_COLN, KC_DQUO,    KC_LCBR,     KC_RCBR,     KC_TRNS,  KC_TRNS,    KC_EQUAL, KC_1, KC_2,    KC_3,    KC_QUES, },
50   {KC_PIPE, KC_BSLS,    KC_CIRC,     KC_AMPR,     KC_TRNS,  KC_TRNS,    KC_TRNS,  KC_0, KC_DOT,  KC_TILD, KC_GRAVE, }
51 },      
52
53 [MOUSE] = { 
54   {KC_TRNS,      KC_PGUP, KC_MS_WH_UP,   KC_UP,        KC_TRNS, KC_TRNS, KC_UP,     KC_HOME,   KC_MS_U,   KC_END,  KC_MS_WH_UP,  },
55   {KC_MS_ACCEL0, KC_PGDN, KC_MS_WH_DOWN, KC_DOWN,      KC_TRNS, KC_TRNS, KC_DOWN,   KC_MS_L,   KC_MS_D,   KC_MS_R, KC_MS_WH_DOWN, },
56   {KC_TRNS,      KC_TRNS, KC_TRNS,       KC_TRNS,      KC_TRNS, KC_BTN3, MEH(KC_X), MEH(KC_Y), MEH(KC_Z), KC_F5,   RCTL(KC_W), },
57   {KC_TRNS, M(MOUSE_LOCK), KC_TRNS, KC_MS_ACCEL0, KC_TRNS, KC_BTN1, KC_BTN2, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), }
58 },      
59
60
61 };
62
63 const uint16_t PROGMEM fn_actions[] = {
64
65 };
66
67 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
68 {
69   // MACRODOWN only works in this function
70       switch(id) {
71                 case MOUSE_TOGGLE:
72             if (record->event.pressed) {
73                                 layer_on(MOUSE);
74             } else {
75                                 if(!mouse_lock)
76                                         layer_off(MOUSE);
77                         }
78                         break;
79                 case MOUSE_LOCK:
80                         if (record->event.pressed)
81                         {
82                                 if(mouse_lock)
83                                 {
84                                         mouse_lock = false;
85                                         layer_off(MOUSE);
86                                 }
87                                 else
88                                         mouse_lock = true;
89                         }
90                         break;            
91       }
92     return MACRO_NONE;
93 };