# See https://wiki.hyprland.org/Configuring/Monitors/
#{{{ Monitor config
monitor = eDP-1, 1920x1080@60, 0x0, 1
monitor = , preferred, auto, 1
monitor = HDMI-A-1, 1920x1080@60, 0x0, 1
monitor = DP-1, 1920x1080@60, 1920x0, 1
#}}}

# See https://wiki.hyprland.org/Configuring/Keywords/ for more

#{{{ Autostart
# Execute your favorite apps at launch
# exec-once = waybar & hyprpaper & firefox
exec-once = xdph
exec-once = hyprpm reload -n
exec-once = hyprpaper
#exec-once = hypridle
exec-once = waybar
exec-once = pypr
exec-once = lxqt-policykit-agent
exec-once = import-gsettings gtk-theme 'Flat-Remix-GTK-Green-Darkest-Solid'
exec-once = import-gsettings icon-theme 'Mint-X-Grey'
exec-once = import-gsettings cursor-theme 'Breeze'
exec-once = xrdb -load "$XDG_CONFIG_HOME"/X11/xresources
exec-once = com.github.wwmm.easyeffects
exec-once = systemctl --user start dunst
exec-once = systemctl --user start hypridle
#exec-once = mpd
#}}}

#{{{ env
# Environment variables set at launch
env = HYPRCURSOR_THEME,BreezeHypr
env = HYPRCURSOR_SIZE,32
env = XCURSOR_THEME,BreezeX-Black
env = XCURSOR_SIZE,32
#}}}

# Source a file (multi-file configs)
# source = ~/.config/hypr/myColors.conf

# Debug {{{
debug {
  enable_stdout_logs = true
  disable_logs = false
}
# }}}

# device {{{
$LAPTOP_TP_ENABLED = true
device {
  name = synps/2-synaptics-touchpad
  enabled = $LAPTOP_TP_ENABLED
}
# }}}

#{{{ Input options
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
    kb_layout = us
    kb_variant =
    kb_model =
    kb_options = caps:escape
    kb_rules =
    numlock_by_default = true
    scroll_method = "2fg"
    follow_mouse = 1
    mouse_refocus = false
    touchpad {
        natural_scroll = no
    }
    float_switch_override_focus = 0
    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}
#}}}

#{{{ General options
general {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more
    gaps_in = 5
    gaps_out = 20
    border_size = 2
    #col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
    #col.inactive_border = rgba(595959aa)
    col.active_border = rgba(198844ee)
    col.inactive_border = rgba(1b1d1cee)
    layout = master
}
#}}}

#{{{ cursor
cursor {
  no_warps = false
}
#}}}

#{{{ Misc options
misc {
    disable_hyprland_logo = true
    disable_splash_rendering = true
    enable_swallow = true
    swallow_regex = ^(kitty)$
    swallow_exception_regex = ^(.*ueberzug)$
    vfr = true
    vrr = 1
}
#}}}

#{{{ Decoration options
decoration {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more
    rounding = 10
    #{{{ Blur options
    blur {
        enabled = true
        size = 3
        passes = 1
        new_optimizations = true
        xray = true
    }
    #}}}
    #{{{ Shadow options
    shadow {
      enabled = false
      range = 4
      render_power = 3
      color = 0xee1a1a1a
    }
    #}}}
}

#}}}

#{{{ Animations options
animations {
    enabled = no
    # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
    bezier = myBezier, 0.05, 0.9, 0.1, 1.05
    animation = windows, 1, 7, myBezier
    animation = windowsOut, 1, 7, default, popin 80%
    animation = border, 1, 10, default
    animation = borderangle, 1, 8, default
    animation = fade, 1, 7, default
    animation = workspaces, 1, 6, default
}
#}}}

#{{{ Dwindle layout options
dwindle {
    # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
    pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
    preserve_split = yes # you probably want this
    special_scale_factor = 0.55
}
#}}}

#{{{ Master layout options
master {
    special_scale_factor = 0.55
    mfact = 0.55
    # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
    new_status = inherit
    new_on_top = true
    #no_gaps_when_only = false
    orientation = left
    inherit_fullscreen = true
    drop_at_cursor = true
}
#}}}

#{{{ Gestures options
gestures {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more
    workspace_swipe = off
}
#}}}

#{{{ plugin options
plugin {
  hyprsplit {
    num_workspaces = 9
  }
}
#}}}

#{{{ Windowrules
# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float, class:^(kitty)$, title:^(kitty)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
windowrule = fullscreen, ^(Xephyr)$
windowrule = float, title:^(LibreWolf - Choose User Profile)$
windowrule = float, ^(xdg-desktop-portal-gtk)
windowrule = float, title:^(UNDERTALE)$
windowrule = float, ^(Tk)$
windowrule = float, ^(lxqt-policykit-agent)$
windowrule = float, ^(Kdenlive)$
windowrulev2 = stayfocused, title:^()$, class:^(steam)$
windowrulev2 = minsize 1 1, title:^()$, class:^(steam)$
windowrulev2 = stayfocused, title:^(menu)$,class:^(yabridge-host.exe.so)$
windowrulev2 = minsize 1 1, title:^(menu)$,class:^(yabridge-host.exe.so)$
windowrulev2 = float, class:^(yabridge-host.exe.so)$, title:^(menu)$
windowrulev2 = float, floating:0, title:^(menu*)
windowrule = workspace 2, title:^(REAPER .*initializing.*)$
windowrulev2 = tile, class:^(REAPER)$, title:^(.*REAPER v[0-9.]* - Licensed for personal/small business use)$
windowrule = tile, ^(WebApp-Qobuz[0-9]*)$
windowrulev2 = float, title:^(menu)$
windowrulev2 = move cursor -50% -50%, class:^(yabridge-host.exe.so)$, title:^(menu)$
#windowrulev2 = nofocus, class:^(yabridge-host.exe.so)$, title:^(\s*)$
#windowrulev2 = move cursor -50% -50%, class:^(REAPER)$, title:^(Snap/Grid Settings)$
#windowrulev2 = move cursor -50% -50%, class:^(REAPER)$, title:^(Routing for track [0-9]*)$
#windowrulev2 = move cursor -50% -50%, class:^(REAPER)$, title:^(Metronome and pre-roll settings)$
#windowrulev2 = move cursor -50% -50%, class:^(yabridge-host.exe.so)$, title:^(menu)$
#windowrulev2 = nofocus, class:^(yabridge-host.exe.so)$, title:^(\s*)$
#windowrulev2 = move cursor -50% -50%, class:^(yabridge-host.exe.so)$, title:^(\s*)$
#windowrulev2 = move cursor -50% -50%, class:^(REAPER)$, title:^(Snap/Grid Settings)$
#windowrulev2 = move cursor -50% -50%, class:^(REAPER)$, title:^(Routing for track [0-9]*)$
#windowrulev2 = float, floating:0, title:^(menu)$
#windowrulev2 = forceinput, title:^(menu)$
#}}}

#{{{ Mods
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER
$secdMod = ALT
#}}}

#{{{ Layout toggle bind
# Layout toggle
#bind = $mainMod $secdMod, A, exec, hypr-layout -t
#}}}

#{{{ Master layout binds
# Master layout binds
bind = $mainMod+SHIFT, Return, layoutmsg, swapwithmaster master #MASTER
bind = $mainMod+SHIFT, J, layoutmsg, swapnext #MASTER
bind = $mainMod+SHIFT, K, layoutmsg, swapprev #MASTER
bind = $mainMod+SHIFT, H, layoutmsg, addmaster #MASTER
bind = $mainMod+SHIFT, L, layoutmsg, removemaster #MASTER
binde = $mainMod, J, layoutmsg, cyclenext #MASTER
binde = $mainMod, K, layoutmsg, cycleprev #MASTER
binde = $mainMod, H, splitratio, -0.01 #MASTER
binde = $mainMod, L, splitratio, +0.01 #MASTER
bind = $mainMod+SHIFT, O, splitratio, exact 0.55 #MASTER
bind = $mainMod, O, splitratio, exact 0.69 #MASTER
#}}}

#{{{ Group binds
# Group binds
#bind = $mainMod CONTROL, G, togglegroup,
#bind = $mainMod CONTROL, I, lockgroups, lock
#bind = $mainMod CONTROL, U, lockgroups, unlock
#bind = $mainMod CONTROL, H, moveintogroup, r
#bind = $mainMod CONTROL, L, moveintogroup, l
#bind = $mainMod CONTROL, J, moveintogroup, d
#bind = $mainMod CONTROL, K, moveintogroup, u
#}}}

#{{{ Device binds
bind = $mainMod, Backspace, exec, touchpad.sh
#}}}

#{{{ WC binds
bind = $mainMod SHIFT, Q, killactive, 
bind = $mainMod SHIFT, E, exit, 
bind = $mainMod SHIFT, SPACE, togglefloating, 
bind = $mainMod $secdMod, F2, exec, ~/.config/hypr/gamemode.sh
bind = $mainMod, F, fullscreen, 0
bind = $mainMod, M, fullscreen, 1
bind = $mainMod, N, exec, pypr toggle_special
bind = $mainMod SHIFT, N, togglespecialworkspace, minimized
#}}}

#{{{ Workspace binds (using split-monitor-workspaces plugin!)
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, split:workspace, 1
bind = $mainMod, 2, split:workspace, 2
bind = $mainMod, 3, split:workspace, 3
bind = $mainMod, 4, split:workspace, 4
bind = $mainMod, 5, split:workspace, 5
bind = $mainMod, 6, split:workspace, 6
bind = $mainMod, 7, split:workspace, 7
bind = $mainMod, 8, split:workspace, 8
bind = $mainMod, 9, split:workspace, 9
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, split:movetoworkspacesilent, 1
bind = $mainMod SHIFT, 2, split:movetoworkspacesilent, 2
bind = $mainMod SHIFT, 3, split:movetoworkspacesilent, 3
bind = $mainMod SHIFT, 4, split:movetoworkspacesilent, 4
bind = $mainMod SHIFT, 5, split:movetoworkspacesilent, 5
bind = $mainMod SHIFT, 6, split:movetoworkspacesilent, 6
bind = $mainMod SHIFT, 7, split:movetoworkspacesilent, 7
bind = $mainMod SHIFT, 8, split:movetoworkspacesilent, 8
bind = $mainMod SHIFT, 9, split:movetoworkspacesilent, 9
bind = $mainMod CONTROL SHIFT, 1, split:movetoworkspace, 1
bind = $mainMod CONTROL SHIFT, 2, split:movetoworkspace, 2
bind = $mainMod CONTROL SHIFT, 3, split:movetoworkspace, 3
bind = $mainMod CONTROL SHIFT, 4, split:movetoworkspace, 4
bind = $mainMod CONTROL SHIFT, 5, split:movetoworkspace, 5
bind = $mainMod CONTROL SHIFT, 6, split:movetoworkspace, 6
bind = $mainMod CONTROL SHIFT, 7, split:movetoworkspace, 7
bind = $mainMod CONTROL SHIFT, 8, split:movetoworkspace, 8
bind = $mainMod CONTROL SHIFT, 9, split:movetoworkspace, 9
#bind = $mainMod, mouse_down, split:workspace, e+1
#bind = $mainMod, mouse_up, split:workspace, e-1
bind = $mainMod, G, split:grabroguewindows
bind = $mainMod, comma, focusmonitor, -1
bind = $mainMod, period, focusmonitor, +1
bind = $mainMod SHIFT, comma, movewindow, mon:-1
bind = $mainMod SHIFT, period, movewindow, mon:+1
#}}}

#{{{ Mouse binds
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
#}}}

#{{{ Resize submap binds
bind = $mainMod $secdMod, R, submap, resize
submap = resize
binde = CONTROL, L, resizeactive, 10 0
binde = CONTROL, H, resizeactive, -10 0
binde = CONTROL, K, resizeactive, 0 -10
binde = CONTROL, J, resizeactive, 0 10
binde = , escape, submap, reset
submap = reset
#}}}

#{{{ Menu bindings
bind = $mainMod, R, exec, sh -c "$(tofi-drun -c ~/.config/tofi/themes/dmenu_vertical --prompt-text Run:)"
bind = $mainMod, D, exec, sh -c "$(tofi-run -c ~/.config/tofi/themes/dmenu_vertical --prompt-text Run:)"
bind = $mainMod $secdMod, Q, exec, qbc
bind = $mainMod $secdMod, W, exec, lwc
bind = $mainMod $secdMod, E, exec, mbc
bind = $mainMod $secdMod, R, exec, ffc
bind = $mainMod $secdMod, 1, exec, bm
bind = $mainMod $secdMod, comma, exec, dmount -p
bind = $mainMod $secdMod, period, exec, dmenuumount
bind = $mainMod $secdMod CONTROL, U, exec, dmenuunicode
bind = $mainMod $secdMod, U, exec, mprisctl
bind = $mainMod $secdMod, P, exec, passmenu
#}}}

#{{{ Misc bindings
bind = $mainMod, Return, exec, kitty
bind = $mainMod $secdMod, F, exec, kitty -e lf
bind = $mainMod, W, exec, pkill -USR1 waybar
bind = $mainMod, Q, exec, loginctl lock-session
bind = $mainMod $secdMod CONTROL, Q, exec, systemctl suspend
bind = $mainMod SHIFT, G, exec, get-app-id
bind = $mainMod Control, M, exec, volsv -m
bind = $mainMod, Comma, exec, acpi-notify.sh
#bind = $mainMod CONTROL, R, exec, startx -- /usr/bin/Xephyr -screen 1920x1080 :1
#}}}

#{{{ Scratchpads
bind = $mainMod CONTROL, Z, exec, pypr toggle sphtop
$sphtop = ^(sphtop)$
windowrule = float,$sphtop
windowrule = workspace special:sphtop silent,$sphtop
windowrule = size 50% 50%,$sphtop
windowrule = move 25% 25%,$sphtop
bind = $mainMod CONTROL, X, exec, pypr toggle spterm
$spterm = ^(spterm)$
windowrule = float,$spterm
windowrule = workspace special:spterm silent,$dropterm
windowrule = size 50% 50%,$spterm
windowrule = move 25% 25%,$spterm
bind = $mainMod CONTROL, C, exec, pypr toggle sppmxr
$sppmxr = ^(sppmxr)$
windowrule = float,$sppmxr
windowrule = workspace special:sppmxr silent,$sppmxr
windowrule = size 50% 50%,$sppmxr
windowrule = move 25% 25%,$sppmxr
bind = $mainMod CONTROL, V, exec, pypr toggle spblue
$spblue = ^(spblue)$
windowrule = float,$spblue
windowrule = workspace special:spblue silent,$spblue
windowrule = size 50% 50%,$spblue
windowrule = move 25% 25%,$spblue
bind = $mainMod CONTROL, B, exec, pypr toggle spncmp
$spncmp = ^(spncmp)$
windowrule = float,$spncmp
windowrule = workspace special:spncmp silent,$spncmp
windowrule = size 50% 50%,$spncmp
windowrule = move 25% 25%,$spncmp
bind = $mainMod CONTROL, A, exec, pypr toggle spmutt
$spmutt = ^(spmutt)$
windowrule = float,$spmutt
windowrule = workspace special:spmutt silent,$spmutt
windowrule = size 50% 50%,$spmutt
windowrule = move 25% 25%,$spmutt
bind = $mainMod CONTROL, S, exec, pypr toggle spprof
$spprof = ^(spprof)$
windowrule = float,$spprof
windowrule = workspace special:spprof silent,$spprof
windowrule = size 50% 50%,$spprof
windowrule = move 25% 25%,$spprof
bind = $mainMod CONTROL, D, exec, pypr toggle spirss
$spirss = ^(spirss)$
windowrule = float,$spirss
windowrule = workspace special:spirss silent,$spirss
windowrule = size 50% 50%,$spirss
windowrule = move 25% 25%,$spirss
bind = $mainMod CONTROL, F, exec, pypr toggle sptodo
$sptodo = ^(sptodo)$
windowrule = float,$sptodo
windowrule = workspace special:sptodo silent,$sptodo
windowrule = size 50% 50%,$sptodo
windowrule = move 25% 25%,$sptodo
bind = $mainMod CONTROL, G, exec, pypr toggle sptrmc
$sptrmc = ^(sptrmc)$
windowrule = float,$sptrmc
windowrule = workspace special:sptrmc silent,$sptrmc
windowrule = size 50% 50%,$sptrmc
windowrule = move 25% 25%,$sptrmc

bind = $mainMod CONTROL, Q, exec, pypr toggle qpwgraph
$spqpwg = ^(org\.rncbc\.qpwgraph)$
windowrule = float,$spqpwg
windowrule = workspace special:spqpwg silent,$spqpwg
windowrule = size 50% 50%,$spqpwg
windowrule = move 25% 25%,$spqpwg

bind = $mainMod CONTROL, E, togglespecialworkspace, speasy
$speasy = ^(com\.github\.wwmm\.easyeffects)$
windowrule = float,$speasy
windowrule = workspace special:speasy silent,$speasy
windowrule = size 50% 50%,$speasy
windowrule = move 25% 25%,$speasy
#}}}

#{{{ OBS bindings
bind = $mainMod CONTROL, 1, pass, ^(com\.obsproject\.Studio)$
bind = $mainMod CONTROL, 2, pass, ^(com\.obsproject\.Studio)$
bind = $mainMod CONTROL, 3, pass, ^(com\.obsproject\.Studio)$
bind = $mainMod CONTROL, 4, pass, ^(com\.obsproject\.Studio)$
bind = $mainMod CONTROL, 5, pass, ^(com\.obsproject\.Studio)$
bind = $mainMod CONTROL, 6, pass, ^(com\.obsproject\.Studio)$
bind = $mainMod CONTROL, 7, pass, ^(com\.obsproject\.Studio)$
bind = $mainMod CONTROL, 8, pass, ^(com\.obsproject\.Studio)$
bind = $mainMod CONTROL, 9, pass, ^(com\.obsproject\.Studio)$
bind = $mainMod CONTROL, 0, pass, ^(com\.obsproject\.Studio)$
#}}}

#{{{ Inert submap binds
bind = $mainMod, B, submap, inert
submap = inert
bind = $mainMod, B, submap, reset
submap = reset
#}}}

#{{{ Media bindings
bindl = $secdMod, P, exec, playerctl play-pause
bindel = , XF86AudioRaiseVolume, exec, volsv -i 5
bindel = , XF86AudioLowerVolume, exec, volsv -d 5
bind = , XF86AudioPlay, exec, playerctl play-pause
bind = , XF86AudioStop, exec, playerctl stop
bind = , XF86AudioPrev, exec, playerctl previous
bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioMute, exec, volsv -t
#bindl = , XF86AudioMicMute, exec, volsv -m
bind = , XF86AudioMicMute, exec, volsv -m
bindel = , XF86MonBrightnessUp, exec, bl -i
bindel = , XF86MonBrightnessDown, exec, bl -d
bindl = $mainMod, XF86MonBrightnessUp, exec, bl -I 1
bindl = $mainMod, XF86MonBrightnessDown, exec, bl -D 1
bind = , Print, exec, scrshot
#}}}