]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/lets_split/keymaps/normacos/keymap.c
Merge branch 'master' of github.com:qmk/qmk_firmware into hf/shinydox
[qmk_firmware.git] / keyboards / lets_split / keymaps / normacos / keymap.c
1 #include QMK_KEYBOARD_H
2
3 extern keymap_config_t keymap_config;
4
5 // Each layer gets a name for readability, which is then used in the keymap matrix below.
6 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
7 // Layer names don't all need to be of the same length, obviously, and you can also skip them
8 // entirely and just use numbers.
9 #define _NORMAN 0
10 #define _LOWER 1
11 #define _RAISE 2
12 #define _ADJUST 3
13
14 // To be used in process_record_user
15 enum custom_keycodes {
16   NORMAN = SAFE_RANGE,
17   LOWER,
18   RAISE,
19   ADJUST,
20   SH_LOG,
21   SH_GOUP,
22   SH_TERM,
23   SPOT,
24   SLACK,
25   OUTLOOK,
26   CHROME
27 };
28
29 // Fillers (to make layering more clear)
30 #define _______ KC_TRNS
31 #define XXXXXXX KC_NO
32
33 // Mod taps
34 #define SFT_ENT    SFT_T(KC_ENT)        // Tap for Enter, hold for Shift
35 #define CTL_ESC    CTL_T(KC_ESC)        // Tap for Escape, hold for Control
36
37 // Custom macros
38 #define SCN_SHT    LSFT(LGUI(KC_4))     // Take a screenshot (MacOS)
39 #define SCN_LCK    LCTL(LGUI(KC_Q))     // Lock screen (MacOS)
40 #define SH_HOME    LCTL(KC_A)           // Go to start of line
41 #define SH_END     LCTL(KC_E)           // Go to end of line
42 #define SH_RSCH    LCTL(KC_R)           // Search command history
43 #define SH_CLRH    LCTL(KC_U)           // Erase to beginning of line
44 #define SH_CLRE    LCTL(KC_K)           // Erase to end of line
45
46 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
47
48 /* Norman
49  * ,-----------------------------------------. ,-----------------------------------------.
50  * |  Tab |   Q  |   W  |   D  |   F  |   K  | |   J  |   U  |   R  |   L  |   ;  | Bksp |
51  * |------+------+------+------+------+------| |------+------+------+------+------+------|
52  * |CtlEsc|   A  |   S  |   E  |   T  |   G  | |   Y  |   N  |   I  |   O  |   H  |  '   |
53  * |------+------+------+------+------+------| |------+------+------+------+------+------|
54  * | Shift|   Z  |   X  |   C  |   V  |   B  | |   P  |   M  |   ,  |   .  |   /  |SftEnt|
55  * |------+------+------+------+------+------| |------+------+------+------+------+------|
56  * | Lock | Home |  End | Alt  | Lower| GUI  | | Space| Raise| Left | Down |  Up  | Right|
57  * `-----------------------------------------' `-----------------------------------------'
58  */
59 [_NORMAN] = LAYOUT_ortho_4x12( \
60   KC_TAB,  KC_Q,    KC_W,    KC_D,    KC_F,  KC_K,    KC_J,   KC_U,  KC_R,    KC_L,    KC_SCLN, KC_BSPC, \
61   CTL_ESC, KC_A,    KC_S,    KC_E,    KC_T,  KC_G,    KC_Y,   KC_N,  KC_I,    KC_O,    KC_H,    KC_QUOT, \
62   KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,  KC_B,    KC_P,   KC_M,  KC_COMM, KC_DOT,  KC_SLSH, SFT_ENT, \
63   SCN_LCK, KC_HOME, KC_END,  KC_LALT, LOWER, KC_LGUI, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
64 ),
65
66 /* Lower
67  * ,-----------------------------------------. ,-----------------------------------------.
68  * |  Tab |  F1  |  F2  |  F3  |  F4  |      | |NumLck|   7  |   8  |   9  |   =  | Bksp |
69  * |------+------+------+------+------+------| |------+------+------+------+------+------|
70  * |CtlEsc|  F5  |  F6  |  F7  |  F8  |      | |   *  |   4  |   5  |   6  |   +  |  Del |
71  * |------+------+------+------+------+------| |------+------+------+------+------+------|
72  * | Shift|  F9  |  F10 |  F11 |  F12 |      | |   /  |   1  |   2  |   3  |   -  |SftEnt|
73  * |------+------+------+------+------+------| |------+------+------+------+------+------|
74  * | Lock | Home |  End |  Alt | Lower|  GUI | |   .  | Raise|   0  | Spot |Chrome|      |
75  * `-----------------------------------------' `-----------------------------------------'
76  */
77 [_LOWER] = LAYOUT_ortho_4x12( \
78   _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   XXXXXXX, KC_NLCK, KC_P7,   KC_P8, KC_P9, KC_PEQL, _______, \
79   _______, KC_F5,   KC_F6,   KC_F8,   KC_F9,   XXXXXXX, KC_PAST, KC_P4,   KC_P5, KC_P6, KC_PPLS, KC_DEL,  \
80   _______, KC_F9,   KC_F10,  KC_F11,  KC_F12,  XXXXXXX, KC_PSLS, KC_P1,   KC_P2, KC_P3, KC_PMNS, _______, \
81   _______, _______, _______, _______, _______, _______, KC_PDOT, _______, KC_P0, SPOT,  CHROME,  XXXXXXX
82 ),
83
84 /* Raise
85  * ,-----------------------------------------. ,-----------------------------------------.
86  * |  Tab |   !  |   @  |   #  |   $  |   %  | |   ^  |   &  |   *  |   (  |   )  |  Del |
87  * |------+------+------+------+------+------| |------+------+------+------+------+------|
88  * |CtlEsc|  Log | UpDir| Slack| Term | OutLk| |   =  |   -  |   \  |   [  |   ]  |   `  |
89  * |------+------+------+------+------+------| |------+------+------+------+------+------|
90  * | Shift|ClrHom|ClrEnd|ShHome| ShEnd|Search| | Play | Mute | VolDn| VolUp|ScnSht|SftEnt|
91  * |------+------+------+------+------+------| |------+------+------+------+------+------|
92  * | Lock | Home |  End |  Alt | Lower|  GUI | | Space| Raise| Left | Down |  Up  | Right|
93  * `-----------------------------------------' `-----------------------------------------'
94  */
95 [_RAISE] = LAYOUT_ortho_4x12( \
96   _______, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,  \
97   _______, SH_LOG,  SH_GOUP, SLACK,   SH_TERM, OUTLOOK,  KC_EQL, KC_MINS, KC_BSLS, KC_LBRC, KC_RBRC, KC_GRV,  \
98   _______, SH_CLRH, SH_CLRE, SH_HOME, SH_END,  SH_RSCH, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, SCN_SHT, _______, \
99   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
100 ),
101
102 /* Adjust (Lower + Raise)
103  * ,-----------------------------------------. ,-----------------------------------------.
104  * |      |      |      |      |      |      | |      |      |      |      | Reset|      |
105  * |------+------+------+------+------+------| |------+------+------+------+------+------|
106  * |      |      |      |      | AudOn|AudOff| |      |Norman|      |      |      |      |
107  * |------+------+------+------+------+------| |------+------+------+------+------+------|
108  * |      |      |      |      |      |      | |      |      |      |      |      |      |
109  * |------+------+------+------+------+------| |------+------+------+------+------+------|
110  * |      |      |      |      | Lower|      | |      | Raise|      |      |      |      |
111  * `-----------------------------------------' `-----------------------------------------'
112  */
113 [_ADJUST] = LAYOUT_ortho_4x12( \
114   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,   XXXXXXX, \
115   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, AU_ON,   AU_OFF,  XXXXXXX, NORMAN,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
116   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
117   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
118 )
119
120 };
121
122 #ifdef AUDIO_ENABLE
123 float tone_norman[][2] = SONG(QWERTY_SOUND);
124 #endif
125
126 void persistent_default_layer_set(uint16_t default_layer) {
127   eeconfig_update_default_layer(default_layer);
128   default_layer_set(default_layer);
129 }
130
131 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
132   if (record->event.pressed) {
133     switch(keycode) {
134       case NORMAN:
135         #ifdef AUDIO_ENABLE
136           PLAY_SONG(tone_norman);
137         #endif
138         persistent_default_layer_set(1UL<<_NORMAN);
139         return false;
140       case LOWER:
141         layer_on(_LOWER);
142         update_tri_layer(_LOWER, _RAISE, _ADJUST);
143         return false;
144       case RAISE:
145         layer_on(_RAISE);
146         update_tri_layer(_LOWER, _RAISE, _ADJUST);
147         return false;
148       case ADJUST:
149         layer_on(_ADJUST);
150         return false;
151       case SH_LOG:  // Open Jira log work window
152         SEND_STRING(SS_TAP(X_DOT));
153         _delay_ms(100);
154         SEND_STRING("log work");
155         _delay_ms(100);
156         SEND_STRING(SS_TAP(X_ENTER));
157         return false;
158       case SH_GOUP:  // Go up a directory
159         SEND_STRING("cd .."SS_TAP(X_ENTER));
160         return false;
161       case SH_TERM:  // Open Terminal
162         SEND_STRING(SS_LGUI(SS_TAP(X_SPACE)));
163         _delay_ms(100);
164         SEND_STRING("terminal");
165         _delay_ms(100);
166         SEND_STRING(SS_TAP(X_ENTER));
167         return false;
168       case SPOT:  // Open Spotify
169         SEND_STRING(SS_LGUI(SS_TAP(X_SPACE)));
170         _delay_ms(100);
171         SEND_STRING("spotify app");
172         _delay_ms(100);
173         SEND_STRING(SS_TAP(X_ENTER));
174         return false;
175       case SLACK:  // Open Slack
176         SEND_STRING(SS_LGUI(SS_TAP(X_SPACE)));
177         _delay_ms(100);
178         SEND_STRING("slack");
179         _delay_ms(100);
180         SEND_STRING(SS_TAP(X_ENTER));
181         return false;
182       case OUTLOOK:  // Open MS Outlook
183         SEND_STRING(SS_LGUI(SS_TAP(X_SPACE)));
184         _delay_ms(100);
185         SEND_STRING("outlook");
186         _delay_ms(100);
187         SEND_STRING(SS_TAP(X_ENTER));
188         return false;
189       case CHROME:  // Open Chrome
190         SEND_STRING(SS_LGUI(SS_TAP(X_SPACE)));
191         _delay_ms(100);
192         SEND_STRING("chrome");
193         _delay_ms(100);
194         SEND_STRING(SS_TAP(X_ENTER));
195         return false;
196     }
197   } else {
198     switch(keycode) {
199       case LOWER:
200         layer_off(_LOWER);
201         update_tri_layer(_LOWER, _RAISE, _ADJUST);
202         return false;
203       case RAISE:
204         layer_off(_RAISE);
205         update_tri_layer(_LOWER, _RAISE, _ADJUST);
206         return false;
207       case ADJUST:
208         layer_off(_ADJUST);
209         return false;
210     }
211   }
212   return true;
213 }