# ────────────────────────────────────────────────────────────────────
#          ╭────────────────────────────────────────────────╮
#          │                    KEYBINDS                    │
#          ╰────────────────────────────────────────────────╯
# ────────────────────────────────────────────────────────────────────

$mainMod = SUPER
# These key-binds are non-specific, laptop config has a separate file that includes 
# extra config for it specifically
bind = $mainMod, Q, killactive
bind = $mainMod, Return, exec, kitty
bind = $mainMod SHIFT, E, exec, thunar
bind = $mainMod, E, exec, kitty --hold fish -c "y"
bind = $mainMod, V, togglefloating,
bind = $mainMod, F, fullscreen,

# ────────────────────────────────────────────────────────────────────
#          ╭────────────────────────────────────────────────╮
#          │                      AGS                       │
#          ╰────────────────────────────────────────────────╯
# ────────────────────────────────────────────────────────────────────

# ┌                                                ┐
# │                 Notifications                  │
# └                                                ┘
bind = $mainMod, N, exec, astal -i notifier toggle
bind = $mainMod, C, exec, astal -i notifier clear-newest
bind = $mainMod SHIFT, C, exec, astal -i notifier clear
bind = $mainMod SHIFT, N, exec, astal -i notifier show
bind = $mainMod CTRL SHIFT, N, exec, astal -i notifier hide


# ────────────────────────────────────────────────────────────────────
#          ╭────────────────────────────────────────────────╮
#          │                    General                     │
#          ╰────────────────────────────────────────────────╯
# ────────────────────────────────────────────────────────────────────


# ┌                                                ┐
# │                Launch commands                 │
# └                                                ┘
bind = $mainMod SHIFT, L, exec, librewolf
bind = $mainMod SHIFT, D, exec, vesktop
bind = $mainMod SHIFT, V, exec, vscodium
bind = $mainMod SHIFT, T, exec, thunderbird
bind = $mainMod CTRL, H, exec, heroic
bind = $mainMod SHIFT, Z, exec, zathura
bind = $mainMod SHIFT, I, exec, notify-send 'AirPlay video server starting...' --app-name="AirPlay Video" && terminator -e "systemctl start avahi-daemon && sleep 5 && uxplay -n LinuxVideoPlay -nh"
bind = $mainMod SHIFT, A, exec, notify-send 'AirPlay server starting...' --app-name="AirPlay Audio" && terminator -T "hidden-terminator" -e "systemctl start avahi-daemon && shairport-sync -a LinuxPlay"
bind = $mainMod SHIFT, P, exec, notify-send 'Steam is launching...' --app-name="Steam" && steam
bind = $mainMod CTRL, K, exec, notify-send 'Insta-Kill activated' --app-name="Hyprctl" && hyprctl kill
bind = $mainMod SHIFT, O, exec, terminator -e "~/projects/dotfiles/ai.sh"

# ┌                                                ┐
# │                  Screenshots                   │
# └                                                ┘
bind = $mainMod SHIFT, S, exec, grimblast --notify copy area
bind = $mainMod CTRL, S, exec, grimblast --notify copysave area
bind = $mainMod ALT, S, exec, grimblast --notify save area
bind = , PRINT, exec, grimblast --notify copy screen
bind = CTRL, PRINT, exec, grimblast --notify copysave screen
bind = SHIFT, PRINT, exec, grimblast --notify save screen

# ┌                                                ┐
# │                 Rofi commands                  │
# └                                                ┘
bind = $mainMod, Space, exec, killall rofi || rofi -show combi -modes combi -combi-modes "window,drun,run"
bind = $mainMod SHIFT, H, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy

# ┌                                                ┐
# │                Logout commands                 │
# └                                                ┘
bind = $mainMod, escape, exec, wlogout


# ────────────────────────────────────────────────────────────────────
#          ╭────────────────────────────────────────────────╮
#          │                  Layout binds                  │
#          ╰────────────────────────────────────────────────╯
# ────────────────────────────────────────────────────────────────────


# ┌                                                ┐
# │             Same with vim-motions              │
# └                                                ┘
bind = $mainMod, h, movefocus, l
bind = $mainMod, l, movefocus, r
bind = $mainMod, j, movefocus, d
bind = $mainMod, k, movefocus, u

# ┌                                                ┐
# │     Switch workspaces with mainMod + [0-9]     │
# └                                                ┘
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
bind = $mainMod CTRL, left, workspace, e-1
bind = $mainMod CTRL, right, workspace, e+1
bind = $mainMod CTRL, h, workspace, e-1
bind = $mainMod CTRL, l, workspace, e+1


# ┌                                                ┐
# │     Move active window to a workspace with     │
# │            mainMod + SHIFT + [0-9]             │
# └                                                ┘
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
bind = $mainMod SHIFT, left, movetoworkspace, e-1
bind = $mainMod SHIFT, right, movetoworkspace, e+1
bind = $mainMod SHIFT, j, movetoworkspace, e-1
bind = $mainMod SHIFT, k, movetoworkspace, e+1


# ┌                                                ┐
# │               Special workspace                │
# └                                                ┘
bind = $mainMod SHIFT, M, movetoworkspace, special
bind = $mainMod, M, togglespecialworkspace

# ┌                                                ┐
# │    Scroll through existing workspaces with     │
# │                mainMod + scroll                │
# └                                                ┘
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1


# ┌                                                ┐
# │   move to next window / previous window with   │
# │         ALT + Tab / SHIFT + ALT + Tab          │
# └                                                ┘
bind = ALT SHIFT, tab, cyclenext, prev
bind = ALT, tab, focusurgentorlast


# ┌                                                ┐
# │            Dwindle layout commands             │
# └                                                ┘
bind = $mainMod CTRL, M, layoutmsg, swapsplit


# ┌                                                ┐
# │   Move/resize windows with mainMod + LMB/RMB   │
# │                  and dragging                  │
# └                                                ┘
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow


# ┌                                                ┐
# │   Resize window with keybinds (change split)   │
# └                                                ┘
bind = $mainMod ALT, T, submap, split

# Submap for split
submap = split
binde = , H, splitratio, -0.01
binde = , L, splitratio, +0.01

# Reset bind
bind = , escape, submap, reset

submap = reset


# ┌                                                ┐
# │   Truly resize window with keybind (submap)    │
# └                                                ┘
bind = $mainMod ALT, R, submap, resize

# Submap for resize
submap = resize
binde = , L, resizeactive, 10 0
binde = , H, resizeactive, -10 0
binde = , K, resizeactive, 0 -10
binde = , J, resizeactive, 0 10

# Reset bind
bind = , escape, submap, reset

submap = reset

# ┌                                                ┐
# │                     Freeze                     │
# └                                                ┘
bind = $mainMod SHIFT, escape, exec, hyprfreeze -a


# ┌                                                ┐
# │                 Volume control                 │
# └                                                ┘
bind = ,code:123, exec, pamixer -i 5
bind = ,code:122, exec, pamixer -d 5
bind = ,code:121, exec, pamixer -t


# ┌                                                ┐
# │               Brightness-Control               │
# └                                                ┘
bind = ,code:232, exec, light -U 5
bind = ,code:233, exec, light -A 5


# ┌                                                ┐
# │              Monitor config binds              │
# └                                                ┘
bind = $mainMod CTRL, D, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 1920x0, 1, mirror, DP-1 && notify-send 'Set FPV goggles to mirror main screen' --app-name="Hyprctl"
bind = $mainMod CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 3840x0, 1 && notify-send 'Set to expand FPV goggles' --app-name="Hyprctl"



# ────────────────────────────────────────────────────────────────────
#          ╭────────────────────────────────────────────────╮
#          │       Funny windows user trolling binds        │
#          ╰────────────────────────────────────────────────╯
# ────────────────────────────────────────────────────────────────────
bind = CTRL ALT, Delete, exec, notify-send 'I am not Windows' 'Did ya really think that was gonna do anything? Only an eternally broken OS could need such a stupid keybind'
bind = ALT, F4, exec, notify-send 'I am not Windows' 'That just feels like a way too unergonomic keybind to be used for such a common action'
bind = $mainMod, left, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
bind = $mainMod, right, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
bind = $mainMod, up, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
bind = $mainMod, down, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
