-- config/windowrules.lua -- Translated from config_windowrules.conf to hl.window_rule() / hl.layer_rule(). -- ── Float rules ─────────────────────────────────────────────── local float_classes = { "org.pulseaudio.pavucontrol", "blueman-manager", "zenity", "pomodorolm", "CachyOSHello", "Rofi", "Picture in picture", "Save File", "Open File", "Steam - Self Updater", "^Extension:.*", } for _, cls in ipairs(float_classes) do hl.window_rule({ match = { class = cls }, float = true }) end hl.window_rule({ match = { class = "LibreWolf", title = "Picture-in-Picture" }, float = true }) hl.window_rule({ match = { class = "^(xdg-desktop-portal-gtk|xdg-desktop-portal-kde|xdg-desktop-portal-hyprland).*" }, float = true, }) hl.window_rule({ match = { class = "^(polkit-gnome-authentication-agent-1|hyprpolkitagent|org.kde.polkit-kde-authentication-agent-1).*", }, float = true, }) hl.window_rule({ match = { class = "Zotero", title = "Progress" }, float = true }) hl.window_rule({ match = { class = "Zotero", title = "Zotero Settings" }, float = true }) hl.window_rule({ match = { class = "Zotero", title = "Citation Dialog" }, float = true, center = true, no_anim = true }) hl.window_rule({ match = { class = "waypaper" }, float = true, center = true }) hl.window_rule({ match = { title = "calcure" }, float = true, center = true }) hl.window_rule({ match = { class = "org.gnome.Calculator" }, float = true, center = true }) hl.window_rule({ match = { class = "org.gnome.Calendar", title = "Calendar" }, float = true, center = true, animation = "popin", opacity = "0.8", }) hl.window_rule({ match = { class = "steam", title = "Freundesliste" }, float = true, size = { 400, 600 } }) -- ── PiP ────────────────────────────────────────────────────── hl.window_rule({ match = { title = "Picture-in-Picture" }, float = true, size = { 960, 540 }, move = { "(monitor_w*0.25)", "0" }, }) -- ── Media / misc float + position ──────────────────────────── hl.window_rule({ match = { title = "^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp|nwg-look|nwg-displays)$" }, float = true, }) hl.window_rule({ match = { title = "^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$" }, move = { "(monitor_w*0.25)", "0" }, size = { 960, 540 }, }) hl.window_rule({ match = { title = "danmufloat" }, pin = true }) hl.window_rule({ match = { title = "^(danmufloat|termfloat)$" }, rounding = 5 }) -- ── Opacity ─────────────────────────────────────────────────── hl.window_rule({ match = { class = "^(thunar|nemo|dolphin)$" }, opacity = "0.92" }) hl.window_rule({ match = { class = "^(discord|armcord|webcord)$" }, opacity = "0.96" }) hl.window_rule({ match = { title = "^(QQ|Telegram)$" }, opacity = "0.95" }) hl.window_rule({ match = { title = "NetEase Cloud Music Gtk4" }, opacity = "0.95" }) hl.window_rule({ match = { class = "kitty" }, opacity = "1.0" }) hl.window_rule({ match = { class = "^(libreoffice.*)$" }, opacity = "1.0 override 1.0 override 1.0" }) hl.window_rule({ match = { title = "^(.+nvim$)" }, opacity = "0.9" }) hl.window_rule({ match = { class = "^code$" }, opacity = "0.93" }) -- ── Blur / dim exceptions ───────────────────────────────────── hl.window_rule({ match = { class = "org.mozilla.firefox" }, no_blur = true }) hl.window_rule({ match = { class = "zen" }, no_dim = true }) -- ── Animations ─────────────────────────────────────────────── hl.window_rule({ match = { class = "^(kitty|Alacritty)$" }, animation = "slide right" }) -- ── Floating decoration overrides ──────────────────────────── hl.window_rule({ match = { float = true, workspace = "w[fv1-10]" }, border_size = 2, border_color = color4, rounding = 8, }) hl.window_rule({ match = { float = false, workspace = "f[1-10]" }, border_size = 3, rounding = 4, }) -- ── Pomodorolm size ────────────────────────────────────────── hl.window_rule({ match = { class = "pomodorolm" }, size = { 260, 340 } }) -- ── Layer rules ─────────────────────────────────────────────── hl.layer_rule({ match = { namespace = "logout_dialog" }, animation = "slide top" }) -- QuickShell bar (replaces waybar layer rule) hl.layer_rule({ match = { namespace = "quickshell" }, animation = "slide down" }) hl.layer_rule({ match = { namespace = "wallpaper" }, animation = "fade 50%" }) -- vicinae hl.layer_rule({ match = { namespace = "vicinae" }, blur = true, animation = "popin", dim_around = true, ignore_alpha = 1, }) -- screenshare fix hl.window_rule({ match = { class = "^(xwaylandvideobridge)$" }, opacity = "0.0 override 0.0", no_anim = true, no_initial_focus = true, no_focus = true, no_blur = true, max_size = { 1, 1 }, })