From 933fd13639dc06ad5ea1af2f119989a6f35fe585 Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Sat, 3 Jan 2026 19:25:56 +1100 Subject: [PATCH] feat: Update hyprland window rules to v3 --- .config/hypr/windowrules.conf | 284 +++++++++++++++++++++++++--------- 1 file changed, 207 insertions(+), 77 deletions(-) diff --git a/.config/hypr/windowrules.conf b/.config/hypr/windowrules.conf index 2ef24ba..a9c0af9 100644 --- a/.config/hypr/windowrules.conf +++ b/.config/hypr/windowrules.conf @@ -1,107 +1,237 @@ # Default floating rules to stop windows being too large or small -windowrulev2 = size <80% <80%,floating:1 -windowrulev2 = size >50% >75%, class:(^org.kde.kdenlive$) -windowrule = float, class:(^xdg-desktop-portal-gtk$) -windowrule = size <80% <80%, class:(^xdg-desktop-portal-gtk$) -# windowrulev2 = size >50% >50%,floating:1 +windowrule { + name = default-floating-size-limit + max_size = (monitor_w*0.8) (monitor_h*0.8) + match:float = 1 +} + +windowrule { + name = kdenlive-floating-size + min_size = (monitor_w*0.5) (monitor_h*0.75) + match:class = (^org.kde.kdenlive$) +} + +windowrule { + name = xdg-desktop-portal-gtk-floating + float = on + max_size = (monitor_w*0.8) (monitor_h*0.8) + opacity = 1 override 1 override + stay_focused = on + match:class = (^xdg-desktop-portal-gtk$) +} + +windowrule { + name = floating-windowrule-1 + float = on + max_size = (monitor_w*0.8) (monitor_h*0.8) + center = on + match:class = (float) +} + +windowrule { + name = floating-windowrule-2 + float = on + size = (monitor_w*0.8) (monitor_h*0.8) + center = on + match:class = (float-80) +} -# windowrulev2 = float,class:(clipse) -# windowrulev2 = size 622 652,class:(clipse) -# windowrulev2 = opacity 1 override 1 override,class:(clipse) +windowrule { + name = swayimg-floating + float = on + size = (monitor_w*0.8) + match:class = (swayimg) +} -windowrulev2 = float,class:(float) -windowrule = size <80% <80%,class:(float) -windowrulev2 = float,class:(float-80) -windowrule = size 80% 80%,class:(float-80) +windowrule { + name = null-class-windowrule + no_blur = 1 noanim 1 noshadow 1 + match:class = (^$) +} -windowrulev2 = float,class:(swayimg) -windowrulev2 = size 80%,class:(swayimg) -windowrule = noblur 1 noanim 1 noshadow 1, class:(^$) -windowrule = noblur 1 noanim 0 noshadow 1, title:(^$) -windowrule = nofocus 1, title:(^$) -windowrulev2 = float,class:(mpv) -windowrulev2 = float,class:^(brave-)(.*)(-.*)$ -windowrulev2 = move onscreen cursor,class:^(brave-)(.*)(-.*)$ +windowrule { + name = null-title-windowrule + no_blur = 1 noanim 0 noshadow 1 + no_focus = 1 + match:title = (^$) +} -windowrulev2 = move onscreen cursor -50% 0,class:^(com.nextcloud.desktopclient.nextcloud)$ -windowrulev2 = float,class:^(com.nextcloud.desktopclient.nextcloud)$ -windowrule = size 800 500,class:^(com.nextcloud.desktopclient.nextcloud)$ +windowrule { + name = mpv-floating + float = on + match:class = (mpv) +} -workspace = special:gromit, gapsin:0, gapsout:0, shadow:0, on-created-empty: gromit-mpx -a -windowrule = noblur, class:^(Gromit-mpx)$ -windowrule = opacity 1 override 1 override, class:^(Gromit-mpx)$ -windowrule = noshadow, class:^(Gromit-mpx)$ -windowrule = size 100% 100%, class:^(Gromit-mpx)$ +windowrule { + name = brave-floating + float = on + move = + match:class = ^(brave-)(.*)(-.*)$ +} -# Floating broken windows -windowrule = opacity 1 override 1 override, class:^(xdg-desktop-portal-gtk)$ -windowrule = stayfocused, class:^(xdg-desktop-portal-gtk)$ -windowrule = stayfocused, class:^(soffice)$ -windowrule = stayfocused, class:^(virt-manager)$, title:^$ -#windowrule = float 1, class:^(xdg-desktop-portal-gtk)$ - -windowrulev2 = stayfocused, class:^(Sparrow)$, title:^$, xwayland:1 -windowrulev2 = focusonactivate 1, class:^(Sparrow)$, title:^$, xwayland:1 -windowrulev2 = allowsinput 1, class:^(Sparrow)$, title:^$, xwayland:1 -windowrulev2 = stayfocused, class:^(Sparrow)$, title:^$, xwayland:1 +windowrule { + name = nextcloud-floating + move = (monitor_w-window_w) 45 + float = on + size = 800 800 + match:class = ^(com.nextcloud.desktopclient.nextcloud)$ +} +windowrule { + name = soffice-focused + stay_focused = on + match:class = ^(soffice)$ +} +windowrule { + name = virt-manager-focused + stay_focused = on + match:class = ^(virt-manager)$ + match:title = ^$ +} + +windowrule { + name = sparrow-wallet-focused + opacity = 1 override 1 override + stay_focused = on + match:class = ^(Sparrow)$ + match:title = ^$ +} # No Opacity windowrules -windowrule = opacity 1 override 1 override, class:^(brave-browser)$ -windowrule = opacity 1 override 1 override, class:^(mpv)$ -windowrule = opacity 1 override 1 override, class:^(virt-manager)$ -windowrule = opacity 1 override 1 override, class:^(Bootstrap Studio)$ -windowrule = opacity 1 override 1 override, class:^(Minecraft)(.*)$ -windowrule = opacity 1 override 1 override, class:^(gimp)$ -windowrule = opacity 1 override 1 override, class:^(com.obsproject.Studio)$ -windowrule = opacity 1 override 1 override, class:^$ +windowrule { + name = brave-browser-opacity + opacity = 1 override 1 override + match:class = ^(brave-browser)$ +} +windowrule { + name = mpv-opacity + opacity = 1 override 1 override + match:class = ^(mpv)$ +} + +windowrule { + name = virt-manager-opacity + opacity = 1 override 1 override + match:class = ^(virt-manager)$ +} + +windowrule { + name = bootstrap-studio-opacity + opacity = 1 override 1 override + match:class = ^(Bootstrap Studio)$ +} + +windowrule { + name = minecraft-opacity + opacity = 1 override 1 override + match:class = ^(Minecraft)(.*)$ +} + +windowrule { + name = gimp-opacity + opacity = 1 override 1 override + match:class = ^(gimp)$ +} + +windowrule { + name = com-obsproject-Studio-opacity + opacity = 1 override 1 override + match:class = ^(com.obsproject.Studio)$ +} + +windowrule { + name = empty-class-opacity + opacity = 1 override 1 override + match:class = ^$ +} # Disable opacity for Alacritty (as it already has a transparent background) -windowrule = opacity 1 override 0.75 override, class:^(Alacritty)$ +windowrule { + name = alacritty-opacity + opacity = 1 override 0.75 override + match:class = ^(Alacritty)$ +} + workspace = special:terminal, on-created-empty: alacritty # Tags for opacity -windowrule = opacity 0.1 override 0.1 override, tag:opacity:0.1 -windowrule = opacity 0.2 override 0.2 override, tag:opacity:0.2 -windowrule = opacity 0.3 override 0.3 override, tag:opacity:0.3 -windowrule = opacity 0.4 override 0.4 override, tag:opacity:0.4 -windowrule = opacity 0.5 override 0.5 override, tag:opacity:0.5 -windowrule = opacity 0.6 override 0.6 override, tag:opacity:0.6 -windowrule = opacity 0.7 override 0.7 override, tag:opacity:0.7 -windowrule = opacity 0.8 override 0.8 override, tag:opacity:0.8 -windowrule = opacity 0.9 override 0.9 override, tag:opacity:0.9 -windowrule = opacity 1 override 1 override, tag:opacity:1 +windowrule { + name = tag-opacity-0.1 + opacity = 0.1 override 0.1 override + match:tag = opacity:0.1 +} +windowrule { + name = tag-opacity-0.2 + opacity = 0.2 override 0.2 override + match:tag = opacity:0.2 +} -# freeRDP - Remote Desktop Protocol Client -windowrule = float, class:^(xfreerdp)$ -# match by X11 WM_CLASS you set in xfreerdp -windowrule = float, class:^(Autodesk Fusion)$ -windowrule = center, class:^(Autodesk Fusion)$ -# prevent tiling / auto-fullscreen for these windows -#windowrulev2 = disableautotile, xclass:Autodesk Fusion -windowrule = float, class:^(Autodesk Fusion)$ -# optionally force borderless (if you prefer) -windowrule = noborder, class:^(Autodesk Fusion)$ +windowrule { + name = tag-opacity-0.3 + opacity = 0.3 override 0.3 override + match:tag = opacity:0.3 +} +windowrule { + name = tag-opacity-0.4 + opacity = 0.4 override 0.4 override + match:tag = opacity:0.4 +} +windowrule { + name = tag-opacity-0.5 + opacity = 0.5 override 0.5 override + match:tag = opacity:0.5 +} +windowrule { + name = tag-opacity-0.6 + opacity = 0.6 override 0.6 override + match:tag = opacity:0.6 +} -#! (Still doesn't work) Add org.kde.kdeconnect.daemon for KDE connect pointer -windowrule = noblur, class:^(org.kde.kdeconnect.daemon)$ #As it is transparent it will prevent it blurring so you can see what you are ponting at -windowrule = nofocus,class:^(org.kde.kdeconnect.daemon)$ # Disables focus so if you have the option to dim on focus it will not dim the window behind it -windowrule = nodim,class:^(org.kde.kdeconnect.daemon)$ # As it is out of focus it will prevent it from diming, so its brighter if you have window dimming on -windowrule = noshadow,class:^(org.kde.kdeconnect.daemon)$ # Preents it having a shadow if you have window shadows on -windowrule = idleinhibit,class:^(org.kde.kdeconnect.daemon)$ # Will prevent your computer from idling if this is in use -windowrule = float,class:^(org.kde.kdeconnect.daemon)$ -# windowrule = maximize,class:^(org.kde.kdeconnect.daemon)$ -# windowrule = move 0 0,class:^(org.kde.kdeconnect.daemon)$ +windowrule { + name = tag-opacity-0.7 + opacity = 0.7 override 0.7 override + match:tag = opacity:0.7 +} +windowrule { + name = tag-opacity-0.8 + opacity = 0.8 override 0.8 override + match:tag = opacity:0.8 +} + +windowrule { + name = tag-opacity-0.9 + opacity = 0.9 override 0.9 override + match:tag = opacity:0.9 +} + +windowrule { + name = tag-opacity-1 + opacity = 1 override 1 override + match:tag = opacity:1 +} + +windowrule { + name = xfreerdp-floating + float = on + match:class = ^(xfreerdp)$ +} +windowrule { + name = autodesk-fusion-floating + float = on + center = on + border_size = 0 + match:class = ^(Autodesk Fusion)$ +} \ No newline at end of file