# #######################################################################################
# AUTOGENERATED HYPR CONFIG.
# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT,
# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
# #######################################################################################

#autogenerated = 1 # remove this line to remove the warning

# This is an example Hyprland config file.
# Refer to the wiki for more information.
# https://wiiki.hyprland.org/Configuring/Configuring-Hyprland/

# Please note not all available settings / options are set here.
# For a full list, see the wiki

# You can split this configuration into multiple files
# Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf


################
### MONITORS ###
################

# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=DP-1,2560x1440@165,0x0,1,vrr,2
monitor=DP-2,preferred,auto,1, transform, 1

xwayland {
  force_zero_scaling = true
}

###################
### MY PROGRAMS ###
###################

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

# Set programs that you use
$terminal = konsole
$fileManager = nautilus
$menu = wofi --show drun

#################
### AUTOSTART ###
#################

# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
# exec-once = ~/.config/hypr/portal-setup.sh
exec-once = mako

exec-once = /usr/lib/polkit-kde-authentication-agent-1
exec-once = hyprpaper
#exec-once = ~/Capybara/scripts/hyprland_change_bg.sh
exec-once = waybar
exec-once = hypridle
exec-once = wl-paste --type text --watch cliphist store #Stores only text data
exec-once = wl-paste --type image --watch cliphist store #Stores only image data
# exec-once = $terminal
# exec-once = nm-applet &
# exec-once = waybar & hyprpaper & firefox
exec-once = [workspace 2 silent] qutebrowser
exec-once = [workspace 1 silent] emacs
exec-once = [workspace special:aux silent] konsole 
exec-once = vesktop
exec-once = steam

#############################
### ENVIRONMENT VARIABLES ###
#############################

# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = QT_QPA_PLATFORMTHEME,qt5ct
env = STEAM_GAMESCOPE_VRR_SUPPORTED,1
env = WLR_DRM_NO_ATOMIC,1

#####################
### LOOK AND FEEL ###
#####################

# Refer to https://wiki.hyprland.org/Configuring/Variables/

# https://wiki.hyprland.org/Configuring/Variables/#general
general {
    gaps_in = 6
    gaps_out = 15,10,10,10

    border_size = 2

    # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
    #col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
    col.active_border = rgb(ffb2ee) rgba(00ff99ee) rgb(FFFFFF) 90deg
    col.inactive_border = rgba(ffffff7a) rgba(00ff997a) rgba(ffb2ee7a) 90deg #204, 136, 24

    # Set to true enable resizing windows by clicking and dragging on borders and gaps
    resize_on_border = false 

    # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
    allow_tearing = true

    layout = master
}


# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
    rounding = 10

    # Change transparency of focused and unfocused windows
    active_opacity = 1.0
    inactive_opacity = 0.96
	dim_inactive = true
	dim_strength = 0.12
	dim_special = 0.1

	shadow {
		enabled = true
		range = 40
		render_power = 3
		sharp = false
		color = rgba(87658aff)
		color_inactive =  rgba(1a1a1aee)
		offset = 5, 2
		scale = 1.0
	}

    # https://wiki.hyprland.org/Configuring/Variables/#blur
    blur {
        enabled = true
        size = 3
        passes = 1
        xray = false
		
		noise = 0.0117
		contrast =  0.8916
		brightness = 1.0072
        vibrancy = 0.2696
		vibrancy_darkness = 0.2696
		
		special = false
		popups = false
    }
}

# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
    enabled = true
    # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
  # 	global
  # ↳ windows - styles: slide, popin
  #   ↳ windowsIn - window open
  #   ↳ windowsOut - window close
  #   ↳ windowsMove - everything in between, moving, dragging, resizing.
  # ↳ layers - styles: slide, popin, fade
  #   ↳ layersIn - layer open
  #   ↳ layersOut - layer close
  # ↳ fade
  #   ↳ fadeIn - fade in for window open
  #   ↳ fadeOut - fade out for window close
  #   ↳ fadeSwitch - fade on changing activewindow and its opacity
  #   ↳ fadeShadow - fade on changing activewindow for shadows
  #   ↳ fadeDim - the easing of the dimming of inactive windows
  #   ↳ fadeLayers - for controlling fade on layers
  #     ↳ fadeLayersIn - fade in for layer open
  #     ↳ fadeLayersOut - fade out for layer close
  # ↳ border - for animating the border's color switch speed
  # ↳ borderangle - for animating the border's gradient angle - styles: once (default), loop
  # ↳ workspaces - styles: slide, slidevert, fade, slidefade, slidefadevert
  #   ↳ specialWorkspace - styles: same as workspaces
#   For animation style popin in windows, you can specify a minimum percentage to start from. For example, the following will make the animation 80% -> 100% of the size:

# animation=windows,1,8,default,popin 80%

# For animation styles slidefade and slidefadevert in workspaces, you can specify a movement percentage. For example, the following will make windows move 20% of the screen width:

# animation=workspaces,1,8,default,slidefade 20%

# For animation style slide in windows and layers you can specify a forced side, e.g.:

# animation=windows,1,8,default,slide left

# You can use top, bottom, left or right.

    bezier = pop, 0.05, 0.8, 0.1, 1.10
	bezier = layers, 0.25, 0.46, 0, 0.92

    animation = windows, 1, 3, pop
    animation = windowsOut, 1, 7, default, popin 80%

	animation = layersIn, 1, 3, layers

    animation = fade, 1, 3, default

    animation = border, 1, 8, default
    animation = borderangle, 1, 8, default
	
    animation = workspaces, 1, 4, default
	animation = workspaces, 1, 4, default, slidefade 40%


}

# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
    pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
    preserve_split = true # You probably want this
	force_split = 2
	smart_resizing = false
	
}

# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
	# no_gaps_when_only = 2
	mfact = 0.55
    # new_is_master = true
	
}

# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
    font_family = 0x Proto Nerd Font Mono
    force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
    disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(	
    vfr = true #Fullscreen stutter in fullscreen videos with this on, as if VRR was disabled
}

render {
#	explicit_sync = 1
#	explicit_sync_kms = 1
	direct_scanout = false #Important!
}

group {
	
	groupbar {
		render_titles = true
		font_family = 0x Proto Nerd Font Mono
		height = 20
		font_size = 10
		stacked = false
		text_color = rgba(674e69ff)
		col.active = rgba(fadbf7ff)
		col.inactive = rgba(E1D2CEff)
	}

}


#############
### INPUT ###
#############

# https://wiki.hyprland.org/Configuring/Variables/#input
input {
    kb_layout = us
    kb_variant =
    kb_model =
    kb_options = eyy:eyymacs,shift:both_capslock
    kb_rules =
	accel_profile = flat
    follow_mouse = 1
	mouse_refocus = false
	# 0 - Cursor movement will not change focus.
	# 1 - Cursor movement will always change focus to the window under the cursor.
	# 2 - Cursor focus will be detached from keyboard focus. Clicking on a window will move keyboard focus to that window.
	# 3 - Cursor focus will be completely separate from keyboard focus. Clicking on a window will not change keyboard focus.

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

    touchpad {
        natural_scroll = false
    }
}

# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
 #   workspace_swipe = false
}

cursor {
	no_hardware_cursors = true
	no_break_fs_vrr = 2
	inactive_timeout = 1
}

# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device {
    name = epic-mouse-v1
    sensitivity = -0.5
}


####################
### KEYBINDINGSS ###
####################

# See https://wiki.hyprland.org/Configuring/Keywords/
#$mainMod =  MOD5 # Sets "RAlt" key as main modifier
$mainMod = SUPER
#$emergencyMod = SHIFT # for whenever kbd/evdev is reset, so that I don't have to open another tty
$secondaryMod = LCTRL


# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, T, exec, $terminal
bind = $mainMod, F, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, C, pin,
bind = $mainMod, B, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy
bind = $mainMod, R, exec, $menu
bind = $secondaryMod $emergencyMod, R, exec, $menu
bind = $secondaryMod, P, pseudo, # dwindle
bind = $secondaryMod, L, togglesplit, # dwindle
bind = $secondaryMod, P, layoutmsg, swapwithmaster	 # master ;
bind = $secondaryMod, code:47, layoutmsg, orientationnext # master
bind = $secondaryMod, M, layoutmsg, addmaster # master
bind = $secondaryMod, N, layoutmsg, removemaster # master
bind = $secondaryMod, Y, layoutmsg, mfact -0.1 # master
bind = $secondaryMod, U, layoutmsg, mfact +0.1 # master
bind = $secondaryMod, code:60, exec, wofi-emoji #. key

# Group management
bind = $secondaryMod, I, togglegroup,
bind = ALT, Tab, changegroupactive, f
bind = ALT SHIFT, Tab, changegroupactive, b
bind = $secondaryMod, L, moveintogroup, r
bind = $secondaryMod, K, moveintogroup, u
bind = $secondaryMod, J, moveintogroup, d
bind = $secondaryMod, H, moveintogroup, l
bind = $secondaryMod, O, moveoutofgroup, active
#resizeactive moveactive swapwindow movewindow

# Locks 	  and exits
bind = $mainMod, F8,  exec, hyprlock
bind = $mainMod, code:59,   exec, makoctl dismiss -a #, key
bind = $mainMod, F9,  exec, shutdown --no-wall && notify-send "Shutting down in 1 min!"
bind = $mainMod, F10, exec, shutdown --no-wall -c && notify-send "Shutdown aborted"
bind = $mainMod, F11, exit,
# bind = $mainMod, T, exec, hyprctl activewindow | grep pid | tr -d 'pid:' | xargs kill
# bind = $mainMod, C, killactive,

# Move focus
bind = $mainMod, h, movefocus, l
bind = $mainMod, j, movefocus, d
bind = $mainMod, k, movefocus, u
bind = $mainMod, l, movefocus, r

# 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 = $secondaryMod, 1, workspace, 1
bind = $secondaryMod, 2, workspace, 2
bind = $secondaryMod, 3, workspace, 3
bind = $secondaryMod, 4, workspace, 4
bind = $secondaryMod, 5, workspace, 5
bind = $secondaryMod, 6, workspace, 6
bind = $secondaryMod, 7, workspace, 7
bind = $secondaryMod, 8, workspace, 8
bind = $secondaryMod, 9, workspace, 9
bind = $secondaryMod, 0, workspace, 10

#Discord mute
bindln = , Pause, sendshortcut,CTRL SHIFT, m, class:^(vesktop)

# 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 = $secondaryMod SHIFT, 1, movetoworkspace, 1
bind = $secondaryMod SHIFT, 2, movetoworkspace, 2
bind = $secondaryMod SHIFT, 3, movetoworkspace, 3
bind = $secondaryMod SHIFT, 4, movetoworkspace, 4
bind = $secondaryMod SHIFT, 5, movetoworkspace, 5
bind = $secondaryMod SHIFT, 6, movetoworkspace, 6
bind = $secondaryMod SHIFT, 7, movetoworkspace, 7
bind = $secondaryMod SHIFT, 8, movetoworkspace, 8
bind = $secondaryMod SHIFT, 9, movetoworkspace, 9
bind = $secondaryMod SHIFT, 0, movetoworkspace, 10

# Special workspaces
bind = $mainMod, Tab, togglespecialworkspace, aux
bind = $mainMod SHIFT, Tab, movetoworkspace, special:aux
bind = $secondaryMod $emergencyMod, Tab, togglespecialworkspace, aux
bind = $secondaryMod, S, togglespecialworkspace, launchers
bind = $secondaryMod SHIFT, S, movetoworkspace, special:launchers
bind = $secondaryMod, D, togglespecialworkspace, comms
bind = $secondaryMod SHIFT, D, movetoworkspace, special:comms

# Scroll through existing workspaces with mainMod + scroll or ^J/^K
bind = $mainMod CTRL, K, workspace, e+1
bind = $mainMod CTRL, J, workspace, e-1
bind = SUPER, mouse_up, workspace, e+1
bind = SUPER, mouse_down, workspace, e-1

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

# Waybar
bind = $mainMod, Y, exec, pkill -SIGUSR1 waybar
bind = $mainMod, code:51, exec, pkill -SIGUSR2 waybar
bind = $mainMod, code:35, exec, waybar

# screenshot 
bind= SHIFT, Print, exec, grim -g "$(slurp)" - | wl-copy && wl-paste > ~/Pictures/Screenshots/Screenshot-$(date +%F_%T).png | notify-send "Screenshot of the region taken" -t 3000 # screenshot of a region 
bind = , Print, exec, grim - | wl-copy && wl-paste > ~/Pictures/Screenshots/Screenshot-$(date +%F_%T).png | notify-send "Screenshot of whole screen taken" -t 3000 # screenshot of the whole screen

bind = CTRL SHIFT, Print, exec, grim -g "$(slurp)" - | swappy -f -  # screenshot of a region, sent to swappy

##############################
### WINDOWS AND WORKSPACES ###
##############################

# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules

# Example windowrule v1
# windowrule = float, ^(kitty)$

# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$

windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
# windowrulev2 = immediate, class:^(StreetFighter6.exe)$

# Games rules
windowrulev2 = immediate, class:^(steam_app_\d+)
windowrulev2 = immediate, class:^(cs2)$
windowrulev2 = workspace 5, class:^(steam_app_\d+)
windowrulev2 = workspace 5, class:^(cs2)$
windowrulev2 = workspace 5, class:^(Bridge_Constructor_Portal.x86_64)$

# Make forked UIs appear on corresponding workspaces
windowrulev2 = workspace special:comms silent, class:^(vesktop)$ 
windowrulev2 = workspace special:launchers silent, class:^(steam)$
windowrulev2 = workspace special:launchers, class:^(steam)$,title:(^$)
windowrulev2 = workspace special:launchers, class:^(steam)$,title:(^*$)
windowrulev2 = workspace special:launchers, class:^(heroic)$

# Steam bugfix rules
windowrulev2 = nofocus, title:^()$,class:^(steam)$
windowrulev2 = minsize 1 1, title:^()$,class:^(steam)$
# windowrulev2 = stayfocused,class:(steam),title:(^$)

# Steam window rules
windowrule = float,title:^(Create or select new Steam library folder)$
windowrule = float,title:^(Steam Settings)$
windowrule = float,title:^(0_Alert)$
# windowrule = workspace special:game,title:^(Steam Big Picture Mode)$
# windowrule = tile,title:^(Steam Big Picture Mode)$

#No gaps when only substitute
workspace = w[tv1], shadow:false, gapsout:0, gapsin:0
workspace = f[1], shadow:false, gapsout:0, gapsin:0
windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
windowrulev2 = rounding 0, floating:0, onworkspace:f[1]

# Layer rules
layerrule = dimaround, wofi
#layerrule = noanim, selection

