summaryrefslogtreecommitdiffstats
path: root/users
diff options
context:
space:
mode:
Diffstat (limited to 'users')
-rw-r--r--users/billypython/billypython.c32
-rw-r--r--users/billypython/billypython.h34
-rw-r--r--users/billypython/config.h19
-rw-r--r--users/billypython/rules.mk6
-rw-r--r--users/billypython/tap_dance.c33
-rw-r--r--users/billypython/tap_dance.h9
-rw-r--r--users/drashna/config.h63
-rw-r--r--users/drashna/drashna.h7
-rw-r--r--users/drashna/process_records.c24
-rw-r--r--users/drashna/process_records.h4
-rw-r--r--users/drashna/rgb_stuff.c8
-rw-r--r--users/drashna/wrappers.h4
-rw-r--r--users/konstantin/config.h1
-rw-r--r--users/konstantin/konstantin.c5
-rw-r--r--users/konstantin/konstantin.h10
-rw-r--r--users/konstantin/rules.mk1
-rw-r--r--users/vosechu/config.h24
-rw-r--r--users/vosechu/readme.md14
-rw-r--r--users/vosechu/rules.mk1
-rw-r--r--users/vosechu/vosechu.c25
-rw-r--r--users/vosechu/vosechu.h71
21 files changed, 341 insertions, 54 deletions
diff --git a/users/billypython/billypython.c b/users/billypython/billypython.c
new file mode 100644
index 000000000..7bdfe33a4
--- /dev/null
+++ b/users/billypython/billypython.c
@@ -0,0 +1,32 @@
+#include "billypython.h"
+
+__attribute__((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_keymap(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case CLEAR:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
+ }
+ return false;
+
+ default:
+ return true;
+ }
+}
+
+__attribute__((weak))
+uint32_t layer_state_set_keymap(uint32_t state) {
+ return state;
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return layer_state_set_keymap(state);
+}
diff --git a/users/billypython/billypython.h b/users/billypython/billypython.h
new file mode 100644
index 000000000..4a444e978
--- /dev/null
+++ b/users/billypython/billypython.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef TAP_DANCE_ENABLE
+ #include "tap_dance.h"
+#endif
+
+#ifdef LAYER_FN
+ #define FN MO(L_FN)
+ #define FN_CAPS LT(L_FN, KC_CAPS)
+ #define FN_FNLK TT(L_FN)
+#endif
+
+#define TOP LCTL(KC_HOME)
+#define BOTTOM LCTL(KC_END)
+
+enum keycodes_user {
+ CLEAR = SAFE_RANGE,
+
+ RANGE_KEYMAP,
+};
+
+enum layers_user {
+ L_BASE,
+#ifdef LAYER_FN
+ L_FN,
+#endif
+
+ L_RANGE_KEYMAP,
+};
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
+uint32_t layer_state_set_keymap(uint32_t state);
diff --git a/users/billypython/config.h b/users/billypython/config.h
new file mode 100644
index 000000000..705e6c934
--- /dev/null
+++ b/users/billypython/config.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#define MAGIC_KEY_BOOTLOADER B
+
+#define MOUSEKEY_DELAY 50
+#define MOUSEKEY_INTERVAL 15
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 50
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 50
+
+#define NO_ACTION_FUNCTION
+#define NO_ACTION_MACRO
+
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
diff --git a/users/billypython/rules.mk b/users/billypython/rules.mk
new file mode 100644
index 000000000..915323b49
--- /dev/null
+++ b/users/billypython/rules.mk
@@ -0,0 +1,6 @@
+SRC += billypython.c
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ SRC += tap_dance.c
+endif
+
+EXTRAFLAGS += -flto
diff --git a/users/billypython/tap_dance.c b/users/billypython/tap_dance.c
new file mode 100644
index 000000000..74ae16639
--- /dev/null
+++ b/users/billypython/tap_dance.c
@@ -0,0 +1,33 @@
+#include "tap_dance.h"
+
+#define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \
+ .fn = { td_double_mods_each, NULL, td_double_mods_reset }, \
+ .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \
+ }
+
+void td_double_mods_each(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+ // Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2
+ if (state->count == 1 || state->count == 3) {
+ register_code(mods->kc1);
+ } else if (state->count == 2) {
+ unregister_code(mods->kc1);
+ register_code(mods->kc2);
+ }
+ // Prevent tap dance from sending kc1 and kc2 as weak mods
+ state->weak_mods &= ~(MOD_BIT(mods->kc1) | MOD_BIT(mods->kc2));
+}
+
+void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+ if (state->count == 1 || state->count >= 3) {
+ unregister_code(mods->kc1);
+ }
+ if (state->count >= 2) {
+ unregister_code(mods->kc2);
+ }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_RSF_RCT] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RSFT, KC_RCTL),
+};
diff --git a/users/billypython/tap_dance.h b/users/billypython/tap_dance.h
new file mode 100644
index 000000000..258198141
--- /dev/null
+++ b/users/billypython/tap_dance.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#include "quantum.h"
+
+#define RSF_RCT TD(TD_RSF_RCT)
+
+enum tap_dance {
+ TD_RSF_RCT,
+};
diff --git a/users/drashna/config.h b/users/drashna/config.h
index 827b1b8ac..20e58fd0b 100644
--- a/users/drashna/config.h
+++ b/users/drashna/config.h
@@ -2,43 +2,50 @@
#ifdef AUDIO_ENABLE
-#define AUDIO_CLICKY
-#define STARTUP_SONG SONG(RICK_ROLL)
-#define GOODBYE_SONG SONG(SONIC_RING)
-#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
- SONG(COLEMAK_SOUND), \
- SONG(DVORAK_SOUND), \
- SONG(OVERWATCH_THEME) \
- }
-
-#define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f
-// #ifdef RGBLIGHT_ENABLE
-// #define NO_MUSIC_MODE
-// #endif //RGBLIGHT_ENABLE/
-#ifndef __arm__
-#undef NOTE_REST
-#define NOTE_REST 1.00f
-#endif // !__arm__
+ #define AUDIO_CLICKY
+ #define STARTUP_SONG SONG(RICK_ROLL)
+ #define GOODBYE_SONG SONG(SONIC_RING)
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND), \
+ SONG(OVERWATCH_THEME) \
+ }
+
+ #define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f
+ // #ifdef RGBLIGHT_ENABLE
+ // #define NO_MUSIC_MODE
+ // #endif //RGBLIGHT_ENABLE/
+ #ifndef __arm__
+ #undef NOTE_REST
+ #define NOTE_REST 1.00f
+ #endif // !__arm__
+
+#define UNICODE_SONG_OSX SONG(RICK_ROLL)
+#define UNICODE_SONG_LNX SONG(RICK_ROLL)
+#define UNICODE_SONG_WIN SONG(RICK_ROLL)
+#define UNICODE_SONG_BSD SONG(RICK_ROLL)
+#define UNICODE_SONG_WINC SONG(RICK_ROLL)
+
#endif // !AUDIO_ENABLE
#ifdef RGBLIGHT_ENABLE
-#define RGBLIGHT_SLEEP
-#undef RGBLIGHT_ANIMATIONS
-#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_KNIGHT
+ #define RGBLIGHT_SLEEP
+ #undef RGBLIGHT_ANIMATIONS
+ #define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_SNAKE
+ #define RGBLIGHT_EFFECT_KNIGHT
#endif // RGBLIGHT_ENABLE
#ifndef ONESHOT_TAP_TOGGLE
-#define ONESHOT_TAP_TOGGLE 2
+ #define ONESHOT_TAP_TOGGLE 2
#endif // !ONESHOT_TAP_TOGGLE
#ifndef ONESHOT_TIMEOUT
-#define ONESHOT_TIMEOUT 3000
+ #define ONESHOT_TIMEOUT 3000
#endif// !ONESHOT_TIMEOUT
#ifndef QMK_KEYS_PER_SCAN
-#define QMK_KEYS_PER_SCAN 4
+ #define QMK_KEYS_PER_SCAN 4
#endif // !QMK_KEYS_PER_SCAN
@@ -48,18 +55,18 @@
// and when this option isn't enabled, z rapidly followed by x
// actually sends Ctrl-x. That's bad.)
#define IGNORE_MOD_TAP_INTERRUPT
-#undef PERMISSIVE_HOLD
+// #define PERMISSIVE_HOLD
//#define TAPPING_FORCE_HOLD
//#define RETRO_TAPPING
#define FORCE_NKRO
#ifndef TAPPING_TOGGLE
-#define TAPPING_TOGGLE 1
+ #define TAPPING_TOGGLE 1
#endif
#ifdef TAPPING_TERM
-#undef TAPPING_TERM
+ #undef TAPPING_TERM
#endif // TAPPING_TERM
#if defined(KEYBOARD_ergodox_ez)
#define TAPPING_TERM 185
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
index 0a3d0f632..ca55198e3 100644
--- a/users/drashna/drashna.h
+++ b/users/drashna/drashna.h
@@ -36,7 +36,11 @@ enum userspace_layers {
_COLEMAK,
_DVORAK,
_WORKMAN,
- _MODS,
+ _NORMAN,
+ _MALTRON,
+ _EUCALYN,
+ _CARPLAX,
+ _MODS, /* layer 8 */
_GAMEPAD,
_DIABLO,
_MACROS,
@@ -76,6 +80,7 @@ typedef union {
bool is_overwatch :1;
bool nuke_switch :1;
uint8_t unicode_mod :4;
+ bool swapped_numbers :1;
};
} userspace_config_t;
diff --git a/users/drashna/process_records.c b/users/drashna/process_records.c
index 17d7dc01c..73cad92f6 100644
--- a/users/drashna/process_records.c
+++ b/users/drashna/process_records.c
@@ -20,34 +20,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status of each key pressed
#ifdef KEYLOGGER_ENABLE
#if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2)
- xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed);
+ xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.row, record->event.key.col, record->event.pressed);
#else
- xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
+ xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
#endif
#endif //KEYLOGGER_ENABLE
switch (keycode) {
- case KC_QWERTY:
+ case KC_QWERTY ... KC_CARPLAX:
if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
+ set_single_persistent_default_layer(keycode - KC_QWERTY);
}
break;
- case KC_COLEMAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_COLEMAK);
- }
- break;
- case KC_DVORAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_DVORAK);
- }
- break;
- case KC_WORKMAN:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_WORKMAN);
- }
- break;
-
case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
if (!record->event.pressed) {
diff --git a/users/drashna/process_records.h b/users/drashna/process_records.h
index 620997add..f7f2193ec 100644
--- a/users/drashna/process_records.h
+++ b/users/drashna/process_records.h
@@ -13,6 +13,10 @@ enum userspace_custom_keycodes {
KC_COLEMAK, // Sets default layer to COLEMAK
KC_DVORAK, // Sets default layer to DVORAK
KC_WORKMAN, // Sets default layer to WORKMAN
+ KC_NORMAN, // Sets default layer to NORMAN
+ KC_MALTRON, // Sets default layer to MALTRON
+ KC_EUCALYN, // Sets default layer to EUCALYN
+ KC_CARPLAX, // Sets default layer to CARPLAX
KC_DIABLO_CLEAR, // Clears all Diablo Timers
KC_OVERWATCH, // Toggles game macro input mode (so in OW, it defaults to game chat)
KC_SALT, // See drashna.c for details
diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c
index 7d00604b4..37076ce99 100644
--- a/users/drashna/rgb_stuff.c
+++ b/users/drashna/rgb_stuff.c
@@ -315,6 +315,14 @@ uint32_t layer_state_set_rgb(uint32_t state) {
rgblight_sethsv_noeeprom_springgreen(); break;
case _WORKMAN:
rgblight_sethsv_noeeprom_goldenrod(); break;
+ case _NORMAN:
+ rgblight_sethsv_noeeprom_coral(); break;
+ case _MALTRON:
+ rgblight_sethsv_noeeprom_yellow(); break;
+ case _EUCALYN:
+ rgblight_sethsv_noeeprom_pink(); break;
+ case _CARPLAX:
+ rgblight_sethsv_noeeprom_blue(); break;
default:
rgblight_sethsv_noeeprom_cyan(); break;
}
diff --git a/users/drashna/wrappers.h b/users/drashna/wrappers.h
index 070a5a0a4..3260c58ae 100644
--- a/users/drashna/wrappers.h
+++ b/users/drashna/wrappers.h
@@ -91,11 +91,11 @@ NOTE: These are all the same length. If you do a search/replace
#define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B
#define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F
-#define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J KC_G, KC_COMM
+#define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J, KC_G, KC_COMM
#define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L
#define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R
-#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X
+#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X
#define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q
diff --git a/users/konstantin/config.h b/users/konstantin/config.h
index d03333f05..800b8e49b 100644
--- a/users/konstantin/config.h
+++ b/users/konstantin/config.h
@@ -14,6 +14,7 @@
#define NO_ACTION_FUNCTION
#define NO_ACTION_MACRO
+#define NO_ACTION_ONESHOT
#define PERMISSIVE_HOLD
#define TAPPING_TERM 200
diff --git a/users/konstantin/konstantin.c b/users/konstantin/konstantin.c
index 977111c1f..47596279c 100644
--- a/users/konstantin/konstantin.c
+++ b/users/konstantin/konstantin.c
@@ -3,8 +3,9 @@
#ifdef LAYER_NUMPAD
static void toggle_numpad(void) {
layer_invert(L_NUMPAD);
- bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK;
- if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) {
+ bool numpad_on = IS_LAYER_ON(L_NUMPAD);
+ bool num_lock_on = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
+ if (num_lock_on != numpad_on) {
tap_code(KC_NLCK); // Toggle Num Lock to match layer state
}
}
diff --git a/users/konstantin/konstantin.h b/users/konstantin/konstantin.h
index 06081496b..f67f9f1b7 100644
--- a/users/konstantin/konstantin.h
+++ b/users/konstantin/konstantin.h
@@ -25,6 +25,16 @@
#define LCT_CPS LCTL_T(KC_CAPS)
+#ifdef SEND_STRING_CLEAN
+ #undef SEND_STRING
+ #define SEND_STRING(...) { \
+ uint8_t ss_mods = get_mods(); \
+ clear_mods(); \
+ send_string_P(PSTR(__VA_ARGS__)); \
+ set_mods(ss_mods); \
+ }
+#endif
+
enum keycodes_user {
CLEAR = SAFE_RANGE,
#ifdef LAYER_NUMPAD
diff --git a/users/konstantin/rules.mk b/users/konstantin/rules.mk
index 7f25a8107..d2522b952 100644
--- a/users/konstantin/rules.mk
+++ b/users/konstantin/rules.mk
@@ -2,7 +2,6 @@ BOOTMAGIC_ENABLE = no
COMMAND_ENABLE = yes
CONSOLE_ENABLE = yes
EXTRAKEY_ENABLE = yes
-KEYBOARD_SHARED_EP = yes # TODO: Disable once Command is fixed
MOUSEKEY_ENABLE = yes
NKRO_ENABLE = yes
TAP_DANCE_ENABLE = yes
diff --git a/users/vosechu/config.h b/users/vosechu/config.h
new file mode 100644
index 000000000..837cc60ff
--- /dev/null
+++ b/users/vosechu/config.h
@@ -0,0 +1,24 @@
+#pragma once
+
+// this makes it possible to do rolling combos (zx) with keys that
+// convert to other keys on hold (z becomes ctrl when you hold it,
+// and when this option isn't enabled, z rapidly followed by x
+// actually sends Ctrl-x. That's bad.)
+#define IGNORE_MOD_TAP_INTERRUPT
+#undef PERMISSIVE_HOLD
+//#define TAPPING_FORCE_HOLD
+//#define RETRO_TAPPING
+
+#ifndef TAPPING_TOGGLE
+#define TAPPING_TOGGLE 2
+#endif
+
+#ifdef TAPPING_TERM
+#undef TAPPING_TERM
+#endif
+#define TAPPING_TERM 150
+
+// Disable action_get_macro and fn_actions, since we don't use these
+// and it saves on space in the firmware.
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/users/vosechu/readme.md b/users/vosechu/readme.md
new file mode 100644
index 000000000..44789a9ff
--- /dev/null
+++ b/users/vosechu/readme.md
@@ -0,0 +1,14 @@
+Copyright 2018 Chuck Lauer Vose vosechu@gmail.com @vosechu
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/users/vosechu/rules.mk b/users/vosechu/rules.mk
new file mode 100644
index 000000000..e346db93f
--- /dev/null
+++ b/users/vosechu/rules.mk
@@ -0,0 +1 @@
+SRC += vosechu.c
diff --git a/users/vosechu/vosechu.c b/users/vosechu/vosechu.c
new file mode 100644
index 000000000..3f58ca26a
--- /dev/null
+++ b/users/vosechu/vosechu.c
@@ -0,0 +1,25 @@
+#include "vosechu.h"
+
+// void my_custom_function(void) {
+
+// }
+
+// [DV] = { /* ================================================== DVORAK ============================================================ */
+// { KC_1, KC_A, KC_B, KC_C, KC_D, KC_E, _______ , KC_G, KC_H, KC_J, KC_K, KC_L, KC_M },
+// { KC_2, KC_A, KC_B, KC_C, KC_D, KC_E, _______ , KC_G, KC_H, KC_J, KC_K, KC_L, KC_M },
+// { KC_3, KC_A, KC_B, KC_C, KC_D, KC_E, _______ , KC_G, KC_H, KC_J, KC_K, KC_L, KC_M },
+// { KC_4, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F , KC_G, KC_H, KC_J, KC_K, KC_L, KC_M },
+// { KC_5, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F , KC_G, KC_H, KC_J, KC_K, KC_L, KC_M }
+// },
+
+// bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+// if (record->event.pressed) {
+// // These also need to be defined in the header file
+// switch(keycode) {
+// case PAWFIVE:
+// SEND_STRING(":pawfive:");
+// return false;
+// }
+// }
+// return true;
+// };
diff --git a/users/vosechu/vosechu.h b/users/vosechu/vosechu.h
new file mode 100644
index 000000000..5cd2217ea
--- /dev/null
+++ b/users/vosechu/vosechu.h
@@ -0,0 +1,71 @@
+#pragma once
+
+#include "quantum.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+enum userspace_custom_layers {
+ DV = 0,
+ QW,
+ GAM1,
+ RSE,
+ LWR,
+ LFT,
+ MOUSE
+};
+
+enum userspace_custom_keycodes {
+ PAWFIVE = SAFE_RANGE,
+ MOUKEY,
+ MS_BTN1,
+ MS_BTN2,
+ MS_BTN3
+};
+
+// Transparent macro to indicate that this spot is already being pressed
+// to activate this layer
+#define _LAYER_ KC_TRNS
+
+// == Dual-action keys on most of the modifiers
+#define CTL_ESC CTL_T(KC_ESC)
+#define CTL_GRV CTL_T(KC_GRV)
+#define ALT_TAB ALT_T(KC_TAB)
+#define SFT_SPC SFT_T(KC_SPC)
+
+// == Macro keys for commonly used apps
+// -- Slack
+// Move one conversation up/down
+#define SLACKUP LALT(LSFT(KC_UP))
+#define SLACKDN LALT(LSFT(KC_DOWN))
+
+// -- Browser and OS X
+// Activate one tab left/right
+#define TAB_LFT LGUI(LSFT(KC_LBRC))
+#define TAB_RGT LGUI(LSFT(KC_RBRC))
+// Go back/forward in history
+#define BWSR_BK LGUI(KC_LBRC)
+#define BWSR_FW LGUI(KC_RBRC)
+
+// -- Screen management
+// Make window fill the left/right side
+#define SCR_LFT HYPR(KC_LEFT)
+#define SCR_RGT HYPR(KC_RGHT)
+// Make window fill the whole monitor
+#define SCR_FUL HYPR(KC_F)
+
+// == Extended alpha layer toggles
+// -- Dvorak
+// Pressing U opens up the LWR layer (numpad)
+#define LWR_U LT(LWR, KC_U)
+// Pressing H opens up the RSE layer (brackets/parens)
+#define RSE_H LT(RSE, KC_H)
+
+// -- Qwerty
+// Pressing F opens up the LWR layer (numpad)
+#define LWR_F LT(LWR, KC_F)
+// Pressing J opens up the RSE layer (brackets/parens)
+#define RSE_J LT(RSE, KC_J)
+
+// -- LFT layer (Works on both Qwerty and Dvorak)
+// Pressing Back space or Enter opens up the LFT layer (media/navigation)
+#define LFT_BK LT(LFT, KC_BSPC)
+#define LFT_ENT LT(LFT, KC_ENT)