]> git.donarmstrong.com Git - qmk_firmware.git/blob - layouts/community/ortho_4x12/buswerks/keymap.c
[Keymap] Updates to ortho_4x12/buswerks keymap (#4996)
[qmk_firmware.git] / layouts / community / ortho_4x12 / buswerks / keymap.c
1 #include QMK_KEYBOARD_H
2
3 extern keymap_config_t keymap_config;
4
5 enum layers {
6     _QWERTY,
7     _COLEMAK,
8     _DVORAK,
9     _LOWER,
10     _RAISE,
11     _GAME,
12     _ADJUST
13 };
14
15 enum custom_keycodes {
16     QWERTY = SAFE_RANGE,
17     COLEMAK,
18     DVORAK,
19     LOWER,
20     RAISE,
21     GAME,
22     ADJUST
23 };
24
25 #define GAME TG(_GAME)
26 #define RSE_ENT LT(_RAISE, KC_ENT)
27 #define ESC_CTL LCTL_T(KC_ESC) // for Linux
28 #define ESC_CMD LGUI_T(KC_ESC) // for macOS
29
30 // Use these to switch desktops on macOS
31 #define DESK_L LCTL(KC_LEFT)
32 #define DESK_R LCTL(KC_RGHT)
33
34 // Use these to switch desktops on Gnome
35 #define DESK_UP LGUI(KC_PGUP)
36 #define DESK_DN LGUI(KC_PGDN)
37
38 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
39
40     // Use QWERTY on macOS (Colemak mapped using software)
41     [_QWERTY] = LAYOUT_ortho_4x12(
42             KC_TAB , KC_Q   , KC_W   , KC_E   , KC_R   , KC_T   , KC_Y   , KC_U   , KC_I,    KC_O   , KC_P   , KC_BSPC, \
43             ESC_CMD, KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_H   , KC_J   , KC_K,    KC_L   , KC_SCLN, KC_QUOT, \
44             KC_LSPO, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_N   , KC_M   , KC_COMM, KC_DOT , KC_SLSH, KC_RSPC, \
45             XXXXXXX, KC_LCTL, KC_LGUI, KC_LALT, LOWER  , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT \
46             ),
47
48     // Use Colemak on Linux (No native Colemak mapping)
49     [_COLEMAK] = LAYOUT_ortho_4x12( \
50             KC_TAB , KC_Q   , KC_W   , KC_F   , KC_P   , KC_G   , KC_J   , KC_L   , KC_U   , KC_Y   , KC_SCLN, KC_BSPC, \
51             ESC_CTL, KC_A   , KC_R   , KC_S   , KC_T   , KC_D   , KC_H   , KC_N   , KC_E   , KC_I   , KC_O   , KC_QUOT, \
52             KC_LSPO, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_K   , KC_M   , KC_COMM, KC_DOT , KC_SLSH, KC_RSPC, \
53             XXXXXXX, KC_LCTL, KC_LGUI, KC_LALT, LOWER  , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT \
54             ),
55
56     [_DVORAK] = LAYOUT_ortho_4x12( \
57             KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC, \
58             ESC_CTL, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
59             KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \
60             XXXXXXX, KC_LCTL, KC_LGUI, KC_LALT, LOWER  , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT \
61             ),
62
63     [_LOWER] = LAYOUT_ortho_4x12( \
64             KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_7,    KC_8,    KC_9,    KC_MINS, _______, \
65             KC_TILD, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_4,    KC_5,    KC_6,    KC_PLUS, KC_PIPE, \
66             _______, _______, _______, KC_UNDS, KC_EQL,  _______, _______, KC_1,    KC_2,    KC_3,    _______, _______, \
67             _______, _______, _______, _______, _______, _______, _______, KC_0,    KC_DOT,  KC_COMM, _______, _______ \
68             ),
69
70     [_RAISE] = LAYOUT_ortho_4x12( \
71             KC_GRV,  KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, _______, KC_INS,  KC_DEL, \
72             KC_TILD, _______, KC_LBRC, KC_LCBR, KC_RCBR, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, KC_BSLS, \
73             _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END,  _______, _______, \
74             _______, _______, _______, _______, _______, _______, _______, _______, DESK_R,  DESK_DN, DESK_UP, DESK_L \
75             ),
76
77     [_GAME] = LAYOUT_ortho_4x12( \
78             KC_TAB , KC_Q   , KC_W   , KC_F   , KC_P   , KC_G   , KC_J   , KC_L   , KC_U   , KC_Y   , KC_SCLN, KC_BSPC, \
79             ESC_CMD, KC_A   , KC_R   , KC_S   , KC_T   , KC_D   , KC_H   , KC_N   , KC_E   , KC_I   , KC_O   , KC_QUOT, \
80             KC_LSFT, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_K   , KC_M   , KC_COMM, KC_DOT , KC_SLSH, KC_ENT, \
81             xxxxxxx, KC_LCTL, KC_LGUI, KC_LALT, LOWER  , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT \
82             ),
83
84     [_ADJUST] = LAYOUT_planck_grid(
85             _______, RESET,   DEBUG,   _______, _______, _______, _______, _______, _______,  _______, _______, KC_DEL ,
86             _______, _______, MU_MOD,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK,  DVORAK,  GAME,    _______,
87             _______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______,  _______, _______, _______,
88             _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______
89             )
90
91 };
92
93 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
94     switch (keycode) {
95         case QWERTY:
96             if (record->event.pressed) {
97                 set_single_persistent_default_layer(_QWERTY);
98             }
99             return false;
100             break;
101         case COLEMAK:
102             if (record->event.pressed) {
103                 set_single_persistent_default_layer(_COLEMAK);
104             }
105             return false;
106             break;
107         case DVORAK:
108             if (record->event.pressed) {
109                 set_single_persistent_default_layer(_DVORAK);
110             }
111             return false;
112             break;
113         case LOWER:
114             if (record->event.pressed) {
115                 layer_on(_LOWER);
116                 update_tri_layer(_LOWER, _RAISE, _ADJUST);
117             } else {
118                 layer_off(_LOWER);
119                 update_tri_layer(_LOWER, _RAISE, _ADJUST);
120             }
121             return false;
122             break;
123         case RAISE:
124             if (record->event.pressed) {
125                 layer_on(_RAISE);
126                 update_tri_layer(_LOWER, _RAISE, _ADJUST);
127             } else {
128                 layer_off(_RAISE);
129                 update_tri_layer(_LOWER, _RAISE, _ADJUST);
130             }
131             return false;
132             break;
133         case ADJUST:
134             if (record->event.pressed) {
135                 layer_on(_ADJUST);
136             } else {
137                 layer_off(_ADJUST);
138             }
139             return false;
140             break;
141     }
142     return true;
143 }
144
145 void encoder_update(bool clockwise) {
146     if (IS_LAYER_ON(_RAISE) || IS_LAYER_ON(_LOWER)) {
147         if (clockwise) {
148             register_code(KC_VOLU);
149             unregister_code(KC_VOLU);
150         } else {
151             register_code(KC_VOLD);
152             register_code(KC_VOLD);
153         }
154     } else {
155         if (clockwise) {
156             #ifdef MOUSEKEY_ENABLE
157                 register_code(KC_MS_WH_DOWN);
158                 unregister_code(KC_MS_WH_DOWN);
159             #else
160                 register_code(KC_PGDN);
161                 unregister_code(KC_PGDN);
162             #endif
163         } else {
164             #ifdef MOUSEKEY_ENABLE
165                 register_code(KC_MS_WH_UP);
166                 unregister_code(KC_MS_WH_UP);
167             #else
168                 register_code(KC_PGUP);
169                 unregister_code(KC_PGUP);
170             #endif
171         }
172     }
173 }
174
175