]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/atreus62/keymaps/atreus52/keymap.c
Atreus52- BDO keymap.
[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 #define LOWER 3
8 #define BDO 4
9
10 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11 [QWERTY] = KC_KEYMAP(
12     NO, 1,    2,    3,    4,    5,                6,    7,    8,    9,    0,    NO, \
13     NO, Q,    W,    E,    R,    T,                Y,    U,    I,    O,    P,    NO, \
14     NO, A,    S,    D,    F,    G,                H,    J,    K,    L,    SCLN, NO, \
15     NO, Z,    X,    C,    V,    B,                N,    M,    COMM, DOT,  SLSH, NO, \
16     NO, FN2,  LALT, LCTL, FN1,  FN3,  BSPC, ENT,  SPC,  FN0,  LGUI, LEFT, RGHT, NO  ),
17
18 [DVORAK] = KC_KEYMAP(
19     NO, 1,    2,    3,    4,    5,                6,    7,    8,    9,    0,    NO, \
20     NO, QUOT, COMM, DOT,  P,    Y,                F,    G,    C,    R,    L,    NO, \
21     NO, A,    O,    E,    U,    I,                D,    H,    T,    N,    S,    NO, \
22     NO, SCLN, Q,    J,    K,    X,                B,    M,    W,    V,    Z,    NO, \
23     NO, FN2,  LALT, LCTL, FN1,  FN3,  BSPC, ENT,  SPC,  FN0,  LGUI, LEFT, RGHT, NO  ),
24
25 [RAISE] = KC_KEYMAP(
26     NO, MRWD, MPRV, MPLY, MNXT, MFFD,             TRNS, MUTE, VOLD, VOLU, DEL,  NO, \
27     NO, TILD, GRV,  DQUO, QUOT, LCBR,             RCBR, EQL,  PLUS, MINS, QUES, NO, \
28     NO, ESC,  TAB,  BSLS, SLSH, LPRN,             RPRN, LEFT, DOWN, UP,   RGHT, NO, \
29     NO, TRNS, TRNS, TRNS, TRNS, LBRC,             RBRC, PIPE, UNDS, TRNS, TRNS, NO, \
30     NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, NO  ),
31
32 [LOWER] = KC_KEYMAP(
33     NO, TRNS, TRNS, TRNS, TRNS, TRNS,             TRNS, TRNS, TRNS, TRNS, TRNS, NO, \
34     NO, EXLM, AT,   HASH, DLR,  PERC,             CIRC, AMPR, ASTR, LPRN, RPRN, NO, \
35     NO, 1,    2,    3,    4,    5,                6,    7,    8,    9,    0,    NO, \
36     NO, TRNS, TRNS, TRNS, TRNS, TRNS,             TRNS, DOT,  TRNS, TRNS, TRNS, NO, \
37     NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, NO  ),
38
39 [BDO] = KC_KEYMAP(
40     NO, ESC,  1,    2,    3,    4,                5,    NO,   NO,   NO,   NO,   NO, \
41     NO, TAB,  Q,    W,    E,    R,                6,    Y,    I,    O,    P,    NO, \
42     NO, LSFT, A,    S,    D,    F,                7,    G,    H,    J,    K,    NO, \
43     NO, T,    Z,    X,    C,    V,                8,    B,    N,    M,    L,    NO, \
44     NO, LCTL, SPC,  SPC,  SPC,  SPC,  0,    9,    SLSH, NO,   NO,   NO,   FN2,  NO  )
45
46 };
47
48 const uint16_t PROGMEM fn_actions[] = {
49     [0] = ACTION_LAYER_MOMENTARY(RAISE), // Raise layer
50     [1] = ACTION_LAYER_MOMENTARY(LOWER), // Lower layer
51     [2] = ACTION_LAYER_TOGGLE(BDO), // BDO layer
52     [3] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_SPC)
53 };
54
55 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
56 {
57     // MACRODOWN only works in this function
58     switch (id) {
59     case 0:
60         if (record->event.pressed) {
61             register_code(KC_RSFT);
62         }
63         else {
64             unregister_code(KC_RSFT);
65         }
66         break;
67     }
68     return MACRO_NONE;
69 };
70
71 static uint8_t qw_dv_swap_state = 0;
72
73 bool process_record_user (uint16_t keycode, keyrecord_t *record) {
74     if (keycode == KC_LGUI) {
75         if (record->event.pressed)
76             qw_dv_swap_state |= 0b00000001;
77         else
78             qw_dv_swap_state &= ~(0b00000001);
79     }
80     if (keycode == KC_LCTL) {
81         if (record->event.pressed)
82             qw_dv_swap_state |= 0b00000010;
83         else
84             qw_dv_swap_state &= ~(0b00000010);
85     }
86
87     if (qw_dv_swap_state == 0b00000011) {
88         layer_invert(DVORAK);
89     }
90     return true;
91 }