-- gui package — the dots layer + window rules, split out of ./hyprland.lua -- (required there in their original position). Plain hl.* registrations; -- nothing here depends on the rest of the layer. -- ── Layer rules ────────────────────────────────────────────────────────────── -- waybar blur ships upstream (layer_rules.lua), but its ignore_alpha uses the -- boolean form (default threshold), which drops the blur on low-alpha regions -- — the cavabar background is rgba(0,0,0,0.2) and went flat. The legacy chain -- set the threshold to 0 (blur everything) on both bars; restore that exactly. hl.layer_rule({ name = "dots_cavabar_blur", match = { namespace = "cavabar" }, blur = true, ignore_alpha = 0, }) hl.layer_rule({ name = "dots_waybar_ignore_alpha", match = { namespace = "waybar" }, ignore_alpha = 0, }) -- ── Window rules ───────────────────────────────────────────────────────────── -- Upstream's window_rules.lua consolidates most floats (dialogs, portals, -- dolphin, nm-*, qt*ct, vlc, pavucontrol, …) and the PiP/modal handling. -- Ported here: everything the repo's windowrules.conf had that upstream -- dropped when it went global-opacity — per-app opacity, idle_inhibit, -- jetbrains popups — plus the floats upstream does not cover. -- idle_inhibit while fullscreen (media players, browsers) hl.window_rule({ name = "dots_idle_inhibit_media", match = { class = "^(.*celluloid.*)$|^(.*mpv.*)$|^(.*vlc.*)$|^(.*[Ss]potify.*)$" }, idle_inhibit = "fullscreen", }) hl.window_rule({ name = "dots_idle_inhibit_browsers", match = { class = "^(.*LibreWolf.*)$|^(.*floorp.*)$|^(.*brave-browser.*)$|^(.*firefox.*)$|^(.*chromium.*)$|^(.*zen.*)$|^(.*vivaldi.*)$", }, idle_inhibit = "fullscreen", }) -- per-app opacity ("active inactive fullscreen", hyprlang-style value string -- -- the Lua rule's opacity field is string-typed and takes the whole triple) hl.window_rule({ name = "dots_opacity_browsers", match = { class = "^(firefox)$|^(zen)$|^(brave-browser)$" }, opacity = "0.90 0.90 1", }) hl.window_rule({ name = "dots_opacity_editors_terms", match = { class = "^(code-oss)$|^([Cc]ode)$|^(code-url-handler)$|^(code-insiders-url-handler)$|^(kitty)$|^(org.kde.dolphin)$|^(org.kde.ark)$|^(nwg-look)$|^(qt5ct)$|^(qt6ct)$|^(kvantummanager)$", }, opacity = "0.80 0.80 1", }) hl.window_rule({ name = "dots_opacity_applets", match = { class = "^(org.pulseaudio.pavucontrol)$|^(blueman-manager)$|^(nm-applet)$|^(nm-connection-editor)$|^(hyprpolkitagent)$|^(org.freedesktop.impl.portal.desktop.gtk)$|^(org.freedesktop.impl.portal.desktop.hyprland)$", }, opacity = "0.80 0.70 1", }) hl.window_rule({ name = "dots_opacity_spotify_class", match = { class = "^([Ss]potify)$" }, opacity = "0.70 0.70 1", }) hl.window_rule({ name = "dots_opacity_spotify_title", match = { initial_title = "^(Spotify Free)$|^(Spotify Premium)$" }, opacity = "0.70 0.70 1", }) hl.window_rule({ name = "dots_opacity_blender", match = { class = "^(blender)$" }, opacity = "1.00 1.00 1", }) hl.window_rule({ name = "dots_opacity_gtk_apps", match = { class = "^(com.github.rafostar.Clapper)$" }, opacity = "0.90 0.90", }) hl.window_rule({ name = "dots_opacity_misc_apps", match = { class = "^(com.github.tchx84.Flatseal)$|^(hu.kramo.Cartridges)$|^(com.obsproject.Studio)$|^(gnome-boxes)$|^(vesktop)$|^(discord)$|^(WebCord)$|^(ArmCord)$|^(app.drey.Warp)$|^(net.davidotek.pupgui2)$|^(yad)$|^(Signal)$|^(io.github.alainm23.planify)$|^(io.gitlab.theevilskeleton.Upscaler)$|^(com.github.unrud.VideoDownloader)$|^(io.gitlab.adhami3310.Impression)$|^(io.missioncenter.MissionCenter)$|^(io.github.flattool.Warehouse)$", }, opacity = "0.80 0.80", }) -- floats upstream's consolidated list does not cover hl.window_rule({ name = "dots_float_class", match = { class = "^(Signal)$|^(com.github.rafostar.Clapper)$|^(app.drey.Warp)$|^(net.davidotek.pupgui2)$|^(yad)$|^(eog)$|^(io.github.alainm23.planify)$|^(io.gitlab.theevilskeleton.Upscaler)$|^(com.github.unrud.VideoDownloader)$|^(io.gitlab.adhami3310.Impression)$|^(io.missioncenter.MissionCenter)$", }, float = true, }) hl.window_rule({ name = "dots_float_title", match = { title = "^(About Mozilla Firefox)$|^(Ghidra: NO ACTIVE PROJECT.*)$" }, float = true, }) hl.window_rule({ name = "dots_float_kitty_monitors", match = { class = "^(kitty)$", title = "^(top)$|^(btop)$|^(htop)$" }, float = true, }) hl.window_rule({ name = "dots_blender_image_editor", match = { class = "^(blender)$", initial_title = "^(Image Editor)$" }, float = true, size = "(monitor_w*0.5) (monitor_h*0.5)", }) -- jetbrains dropdowns/popups flicker workaround hl.window_rule({ name = "dots_jetbrains_popups", match = { class = "^(.*jetbrains.*)$", title = "^(win[0-9]+)$" }, no_initial_focus = true, })