# See https://wiki.hyprland.org/Configuring/Monitors/
monitorv2 {
  output = eDP-1
  mode = preferred
  position = auto
  scale = 1.5
  vrr = 1
  bitdepth = 10
}

$hypr_dir="$HOME/.config/hypr"
$accent=6FAAFF
#$browser=google-chrome-stable
$browser=firefox

#envs
env = BROWSER,$browser
env = CLUTTER_BACKEND,wayland
env = EDITOR,nvim
env = GDK_BACKEND,wayland,x11
env = GDK_SCALE,2 #xwayland fractional scaling
env = GTK_THEME,Materia-dark
env = GLOBAL_ACCENT,$accent
env = IMAGE,nsxiv
env = LIBSEAT_BACKEND,logind
env = MOZ_ENABLE_WAYLAND,1
env = OPENER,xdg-open
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_QPA_PLATFORMTHEME,gtk3
env = QT_QPA_PLATFORM,wayland;xcb
env = SDL_VIDEODRIVER,wayland
env = TERMINAL,foot
env = VIDEO,mpv
env = VISUAL,nvim
env = WLR_NO_HARDWARE_CURSORS,1
env = WM,hyprland
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland

# See https://wiki.hyprland.org/Configuring/Keywords/ for more
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
    kb_layout = us
    kb_variant =
    kb_model =
    kb_options =
    kb_rules =

    follow_mouse = 1

    touchpad {
        natural_scroll = yes
	drag_lock = 0
    }

    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}

general {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more

    gaps_in = 1
    gaps_out = 1
    border_size = 2
    col.active_border = rgb($accent)
    col.inactive_border = rgba(484848aa)
    resize_on_border=false

    layout = dwindle
}

decoration {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more

    rounding = 10
    shadow {
        enabled = true
        range = 3
        render_power = 2
        color = rgba(1a1a1aee)
    }

    blur {
    	enabled = yes
	size = 8
	passes = 2
    }
}

animations {
    enabled = yes

    # 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 {
    # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
    preserve_split = yes # you probably want this
    force_split=2
}

gestures {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more
    gesture = 3, horizontal, workspace
    #gesture = 3, up, fullscreen,maximize
}

misc {
    force_default_wallpaper = 0
}

xwayland {
    force_zero_scaling = false
}

ecosystem {
    no_update_news = true
    no_donation_nag = true
}

# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER

# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, W, killactive, 
bind = $mainMod, M, fullscreen, 
bind = $mainMod, F, togglefloating, 
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, layoutmsg,togglesplit

# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
bind = ALT,Tab,cyclenext,
bind = ALT,Tab,bringactivetotop,

# 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, 49, togglespecialworkspace
#bind = $mainMod, 49,exec,hyprctl dispatch $(head -1 /tmp/workprev)

# 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, up, movewindow, u
bind = $mainMod SHIFT, down, movewindow, d
bind = $mainMod SHIFT, left, movewindow, l
bind = $mainMod SHIFT, right, movewindow, r
bind = $mainMod SHIFT, 49, movetoworkspace, special

# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1

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

#applications shortcuts
bind = $mainMod, F4, exec, $HOME/scripts/ani-new
bind = $mainMod, F5, exec, $hypr_dir/wifi
bind = $mainMod, F6, exec, $hypr_dir/workspace
bind = $mainMod, F11, exec, $hypr_dir/info
bind = $mainMod, F12, exec, $hypr_dir/date
bind = $mainMod, Q, exec, $hypr_dir/dmenu_run_history
bind = $mainMod, G, exec, $hypr_dir/rungame
bind = $mainMod, A, exec, [workspace 1] $browser
bind = $mainMod, C, exec, [workspace 3] zeditor
bind = $mainMod, E, exec, [workspace 3] pcmanfm
bind = $mainMod, I, exec, $hypr_dir/bkmark
bind = $mainMod SHIFT, I, exec, $hypr_dir/bkmark "copy"
bind = $mainMod, B, exec, $hypr_dir/bkmark "add"
bind = $mainMod SHIFT, B, exec, $hypr_dir/bkmark "rm"
bind = $mainMod, L, exec, loginctl lock-session
bind = $mainMod SHIFT, L, exit,
bind = $mainMod, return, exec, [workspace 2] foot
bind = $mainMod, SPACE, exec, $hypr_dir/bemoji
bind = , Print, exec, $hypr_dir/screenshot selclip
bind = $mainMod,Print, exec, $hypr_dir/screenshot fullclip
bind = $mainMod SHIFT, Print, exec, $hypr_dir/screenshot fullsave
bind = $mainMod, Delete, exec, $hypr_dir/workspace list
bind = $mainMod SHIFT, M, exec, $hypr_dir/pinmpv

#xf86 keys
binde =, XF86AudioLowerVolume, exec, $hypr_dir/volume set-volume -l 1.4 @DEFAULT_SINK@ 2%-
binde =, XF86AudioRaiseVolume, exec, $hypr_dir/volume set-volume -l 1.4 @DEFAULT_SINK@ 2%+
binde =, XF86AudioMute, exec, $hypr_dir/volume set-mute @DEFAULT_SINK@ toggle
binde =, XF86AudioMicMute, exec, $hypr_dir/volume set-mute @DEFAULT_SOURCE@ toggle
binde =, XF86AudioPlay, exec, echo cycle pause | socat - "/tmp/yt-music/yt-music-mpvsocket"
binde =, XF86AudioPause, exec, echo cycle pause | socat - "/tmp/yt-music/yt-music-mpvsocket"
binde =, XF86Launch2, exec, $HOME/scripts/yt-music search_play #why not :)
binde =, XF86AudioNext, exec, flock -n /tmp/yt-music/play_next.lock $HOME/scripts/yt-music play_next
binde =, XF86AudioPrev, exec, flock -n /tmp/yt-music/play_next_menu.lock $HOME/scripts/yt-music play_next menu
binde =, XF86MonBrightnessUp, exec, $hypr_dir/brightness '+'
binde =, XF86MonBrightnessDown, exec, $hypr_dir/brightness '-'
bind = $mainMod, F8, exec, $hypr_dir/wifi

#windows rules
# Browsers
windowrule {
    name = google-chrome
    match:class = ^(google-chrome)$
    workspace = 1
}

windowrule {
    name = firefox
    match:class = ^(firefox)$
    workspace = 1
}

windowrule {
    name = google-chrome
    match:class = ^(Google-chrome)$
    workspace = 4
}

# Media / Utilities
windowrule {
    name = mpv
    match:class = ^(mpv)$
    workspace = 4
}

windowrule {
    name = virt-manager
    match:class = ^(virt-manager)$
    workspace = 4
}

windowrule {
    name = waydroid
    match:class = ^(Waydroid)$
    workspace = 4
    pseudo = on
}

# XWayland apps
windowrule {
    name = xwayland-apps
    match:xwayland = true
    border_color = rgba(64f2a4FF)
}

windowrule {
    name = xwayland
    match:class = ^(org.freedesktop.Xwayland)$
    workspace = 4
    fullscreen = on
}

# Picture-in-Picture
windowrule {
    name = firefox-pip
    match:title = ^(Picture-in-Picture)$
    workspace = 3
    float = on
    pin = on
    size = 640 360
    move = 100%-641 100%-361
}

# Portals / dialogs
windowrule {
    name = xdg-desktop-portal
    match:class = ^(xdg-desktop-portal-gtk)$
    float = on
}

#workspace rules
workspace = 1, on-created-empty:$browser
workspace = 2, on-created-empty:foot
workspace = special, on-created-empty:[float] foot

#startup applications
exec-once = systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS WAYLAND_DISPLAY XDG_SESSION_TYPE XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP QT_QPA_PLATFORMTHEME GTK_THEME
exec-once = dbus-update-activation-environment --systemd --all

# misc
exec-once = systemctl --user start ssh-agent
exec-once = systemctl --user start ntfy_sub
exec-once = systemctl --user start workspace

# hypr ecosystem
exec-once = systemctl --user start hyprpolkitagent
exec-once = systemctl --user start hypridle

# power
exec-once = systemctl --user start power-mode@check
exec-once = systemctl --user start monitor-battery

# UI
exec-once = systemctl --user start theme
exec-once = systemctl --user start set-background@1.png

