summaryrefslogtreecommitdiffstats
path: root/users/gordon/gordon.h
blob: 92641a8aae11fef1e2b9863e8b7d25056203cb8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#ifndef GORDON
#define GORDON

#include "quantum.h"
#include "process_keycode/process_tap_dance.h"


// Fillers to make layering more clear
#define _______   KC_TRNS
#define ________  KC_TRNS
#define _________ KC_TRNS
#define _XXXXXX_  KC_TRNS
#define XXXXXXX   KC_NO

// KC codes that are too long
#define DOLLAR    KC_DOLLAR
#define LSQUIGLY  KC_LBRACKET
#define RSQUIGLY  KC_RBRACKET
#define NUMLOCK   KC_NUMLOCK
#define CAPLOCK   KC_CAPSLOCK
#define BK_SLASH  KC_BSLASH
#define ASTERSK   KC_KP_ASTERISK

// Navigation
#define SNAPLEFT  LGUI(KC_LEFT)
#define SNAPRGHT  LGUI(KC_RIGHT)
#define SNAPUP    LGUI(KC_UP)
#define SNAPDOWN  LGUI(KC_DOWN)
#define PREVTAB   LCTL(LSFT(KC_TAB))
#define NEXTTAB   LCTL(KC_TAB)
#define WORKRIGHT LCTL(LGUI(KC_RIGHT))
#define WORKLEFT  LCTL(LGUI(KC_LEFT))

#define APP_1     LCTL(LGUI(KC_1))
#define APP_2     LCTL(LGUI(KC_2))
#define APP_3     LCTL(LGUI(KC_3))
#define APP_4     LCTL(LGUI(KC_4))
#define APP_5     LCTL(LGUI(KC_5))
#define APP_6     LCTL(LGUI(KC_6))
#define APP_7     LCTL(LGUI(KC_7))
#define APP_8     LCTL(LGUI(KC_8))

// KC/modifier hold
#define CTRL_F    CTL_T(KC_F)
#define CTRL_J    CTL_T(KC_J)
#define CTRL_Z    CTL_T(KC_Z)
#define ALT_V     ALT_T(KC_V)
#define ALT_M     ALT_T(KC_M)
#define WIN_G     GUI_T(KC_G)
#define WIN_H     GUI_T(KC_H)
#define HYPER_X   ALL_T(KC_X)
#define HYPE_DOT  ALL_T(KC_DOT)
#define MEH_S     MEH_T(KC_S)
#define MEH_L     MEH_T(KC_L)
#define ALT_HOME  ALT_T(KC_HOME)


// KC/Layer Hold
#define NAV_E    LT(_NAV,KC_E)
#define NUMPAD_D LT(_NUMPAD,KC_D)
#define MOUSE_C  LT(_MOUSE,KC_C)
#define SYMB_BSP LT(_SYMBOLS,KC_BSPACE)
#define COL_MOUS LT(_MOUSE,KC_SCOLON)
#define SPAC_SYM LT(_SYMBOLS,KC_SPACE)
#define SPAC_TXT LT(_TEXTNAV,KC_SPACE)

#define APP_SW_I LT(_APPSWITCH,KC_I)
#define APP_SW_K LT(_APPSWITCH,KC_K)

// #define TLSLSH   TIL_SLASH
// #define TILDA_3x TILD3
// #define _RESET_  UP_ENTER_RESET


// Double Modifier ONLY hold
#define ALT_SHFT LSFT(KC_LALT)
#define CTR_SHFT LSFT(KC_LCTL)

// KC/Double modifier Hold
#define CTR_SH_W MT(MOD_LCTL|MOD_LSFT,KC_W)
#define CTR_AL_R MT(MOD_LCTL|MOD_LALT,KC_R)
#define ALT_SH_R MT(MOD_LSFT|MOD_LALT,KC_R)

//MISC
#define PRINTSCR KC_PSCREEN
#define CALTDEL LCTL(LALT(KC_DEL))
#define TSKMGR LCTL(LSFT(KC_ESC))


typedef struct {
  bool is_press_action;
  int state;
} xtap;

enum {
  SINGLE_TAP = 1,
  SINGLE_HOLD = 2,
  DOUBLE_TAP = 3,
  DOUBLE_HOLD = 4,
  DOUBLE_SINGLE_TAP = 5, //send two single taps
  TRIPLE_TAP = 6,
  TRIPLE_HOLD = 7
};

//Tap dance enums
enum
{
  F12TAP = 0,
  F12ETAPS,
  CALCCOMP,
  REFRESH, //send R, or Control+R if double tapped.
  ENDESC,
  XESC, //'quad function'. x, control, escape, alt
  ALY2, //'quad function': a, Hyper, ctrl+a, layer 2
  PRLOCK,
  F6F7, // Shift F6 or Alt F7
  TABCOMBO,
  FCTRL,
  F3D,
  ALTF4,
  COMMA,
  AT,
  HTAB,
  F1F13,
  F2F14,
  F5F15,
  ENDHOME,
  Q_ESCAPE
};

#ifdef TAP_DANCE_ENABLE
#define F1_F13      TD(F1F13)
#define F2_F14      TD(F2F14)
#define F5_F15      TD(F5F15)
#define F4_ALTF4    TD(ALTF4)
#define END_ESC     TD(ENDESC)
#define Q_ESC       TD(Q_ESCAPE)
#define END_HOME    TD(ENDHOME)
#define SHF6_AF7    TD(F6F7)
#define F12_RUN     TD(F12ETAPS)
#define COMMA_TD    TD(COMMA)
#define CALC_COM    TD(CALCCOMP)
#else //just to make things compile
#define F1_F13      KC_1
#define F2_F14      KC_1
#define F5_F15      KC_1
#define F4_ALTF4    KC_1
#define END_ESC     KC_1
#define END_HOME    KC_1
#define SHF6_AF7    KC_1
#define F12_RUN     KC_1
#define COMMA_TD    KC_1
#define CALC_COM    KC_1
#endif

enum gordon_layers
{
  _QWERTY = 0,
  _SYMBOLS,         // Programming and all other commonlye used symbols
  _MOUSE,           // Mouse movement and also a few macros
  _NUMPAD,          // For getting a numpad under the right hand, and a few helpful things under the left
  _NAV,             // Windows navigation. Windows snapping, changing workspaces, and ARROWS
  _MACROS,          // Non-text related Macros.
  _FUNCTION,        // Not sure what I had in mind for this one
  _APPSWITCH,       // For switching between apps using the `ctrl + Win + [num]` shortcut.
                    // This allows for toggling windows of the same app with one button.
                    // Example: Press and hold `I`, then tap `j` multiple times to cycle through all
                    // Intellij windows (and only Intellij). This requires the app to be pinned to the Windows bar
  _ONESHOT,         // A layer I use for shortcuts that require multiple modifiers and a button not on my home layer
                    // Example: If I need to hit `alt + shift + 5`
  _TEXTNAV,         // Navigate through text
  _QWERTY_KIDS,     // So my kids can do nothing but type. Could also be a `speed typing` layer with no LT or MTs
  _STREET_FIGHTER,  // For Street Fighter 5. Die 1000x Deaths!!!!
  _DIRNAV,          // For navigating to different directories.
  _TEXT_MACROS      // For text-manipulation macros. Passwords, saved strings, pre-formatting
};



void register_hyper (void);
void unregister_hyper (void);

void register_ctrl_a (void);
void unregister_ctrl_a (void);

void register_alt_f7 (void);
void unregister_alt_f7 (void);

void register_shift_f6 (void);
void unregister_shift_f6 (void);

void register_ctrl_shift (void);
void unregister_ctrl_shift (void);

void register_alt_shift (void);
void unregister_alt_shift (void);

int cur_dance (qk_tap_dance_state_t *state);
int hold_cur_dance (qk_tap_dance_state_t *state);

void x_finished (qk_tap_dance_state_t *state, void *user_data);
void x_reset (qk_tap_dance_state_t *state, void *user_data);

void h_finished (qk_tap_dance_state_t *state, void *user_data);
void h_reset (qk_tap_dance_state_t *state, void *user_data);

void tab_finished (qk_tap_dance_state_t *state, void *user_data);
void tab_reset (qk_tap_dance_state_t *state, void *user_data);

void comma_finished (qk_tap_dance_state_t *state, void *user_data);
void comma_reset (qk_tap_dance_state_t *state, void *user_data);

void bt_finished (qk_tap_dance_state_t *state, void *user_data);
void bt_reset (qk_tap_dance_state_t *state, void *user_data);

enum secret_strings {
  KC_SECRET_1 = SAFE_RANGE,
  KC_SECRET_2,
  KC_SECRET_3,
  KC_SECRET_4,
  KC_SECRET_5,
  END_SECRET_SAFE_RANGE
};


// Macro Declarations
enum {
  INFOQM = END_SECRET_SAFE_RANGE,
  MODRESET,
  TIL_SLASH,
  DEREF,
  EQRIGHT,
  TILD3,
  TICK3,
  SPRK_TCK,
  ALTTAB_START,
  ALTTAB_END,
  UP_ENTER_RESET,
  DBMS_OUT,
  DIE_1000X_RIGHT,
  DIE_1000X_LEFT,
  ID_MAN_IP
};



const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt);

#endif