]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/atreus62/keymaps/atreus52/keymap.c
31f94340c4faddc7138e6407e01c7445246f747c
[qmk_firmware.git] / keyboards / atreus62 / keymaps / atreus52 / keymap.c
1 #include "atreus62.h"
2
3 // Layers
4 #define QWERTY 0
5 #define DVORAK 1
6 #define RAISE 2
7
8 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
9 [QWERTY] = KC_KEYMAP(
10     NO, 1,    2,    3,    4,    5,                6,    7,    8,    9,    0,    NO, \
11     NO, Q,    W,    E,    R,    T,                Y,    U,    I,    O,    P,    NO, \
12     NO, A,    S,    D,    F,    G,                H,    J,    K,    L,    SCLN, NO, \
13     NO, Z,    X,    C,    V,    B,                N,    M,    COMM, DOT,  SLSH, NO, \
14     NO, ESC,  TAB,  LCTL, FN0,  FN10, BSPC, ENT,  SPC,  LALT, LGUI, LEFT, RGHT, NO  ),
15
16 [DVORAK] = KC_KEYMAP(
17     NO, 1,    2,    3,    4,    5,                6,    7,    8,    9,    0,    NO, \
18     NO, QUOT, COMM, DOT,  P,    Y,                F,    G,    C,    R,    L,    NO, \
19     NO, A,    O,    E,    U,    I,                D,    H,    T,    N,    S,    NO, \
20     NO, SCLN, Q,    J,    K,    X,                B,    M,    W,    V,    Z,    NO, \
21     NO, ESC,  TAB,  LCTL, FN0,  FN10, BSPC, ENT,  SPC,  LALT, LGUI, LEFT, RGHT, NO  ),
22
23 [RAISE] = KC_KEYMAP(
24     NO, ESC,  TRNS, MPRV, MPLY, MNXT,             TRNS, MUTE, VOLD, VOLU, DEL,  NO, \
25     NO, TRNS, TRNS, GRV,  FN13, FN14,             BSLS, FN16, FN18, LBRC, QUOT, NO, \
26     NO, FN12, MINS, FN11, EQL,  FN15,             SLSH, LEFT, DOWN, UP,   RGHT, NO, \
27     NO, TRNS, TRNS, TRNS, TRNS, TRNS,             TRNS, FN17, FN19, RBRC, FN20, NO, \
28     NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, NO  )
29 };
30
31 const uint16_t PROGMEM fn_actions[] = {
32     [0] = ACTION_LAYER_MOMENTARY(RAISE), // Raise layer
33
34     [10] = OSM(MOD_LSFT),   // One shot shift
35     [11] = LSFT(KC_EQUAL),  // +
36     [12] = LSFT(KC_MINUS),  // _
37     [13] = LSFT(KC_SLASH),  // ?
38     [14] = LSFT(KC_BSLASH), // |
39     [15] = LSFT(KC_GRAVE),  // ~
40     [16] = LSFT(KC_9),      // (
41     [17] = LSFT(KC_0),      // )
42     [18] = LSFT(KC_LBRC),   // {
43     [19] = LSFT(KC_RBRC),   // }
44     [20] = LSFT(KC_QUOT)    // "
45 };
46
47 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
48 {
49     // MACRODOWN only works in this function
50     switch (id) {
51     case 0:
52         if (record->event.pressed) {
53             register_code(KC_RSFT);
54         }
55         else {
56             unregister_code(KC_RSFT);
57         }
58         break;
59     }
60     return MACRO_NONE;
61 };
62
63 static uint8_t qw_dv_swap_state = 0;
64
65 bool process_record_user (uint16_t keycode, keyrecord_t *record) {
66     if (keycode == KC_LGUI) {
67         if (record->event.pressed)
68             qw_dv_swap_state |= 0b00000001;
69         else
70             qw_dv_swap_state &= ~(0b00000001);
71     }
72     if (keycode == KC_LCTL) {
73         if (record->event.pressed)
74             qw_dv_swap_state |= 0b00000010;
75         else
76             qw_dv_swap_state &= ~(0b00000010);
77     }
78
79     if (qw_dv_swap_state == 0b00000011) {
80         layer_invert(DVORAK);
81     }
82     return true;
83 }