2026-06-07 19:03:11 +01:00
|
|
|
-- Browser types
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "chromium-browser-tags",
|
|
|
|
|
tag = "+chromium-based-browser",
|
|
|
|
|
match = {
|
|
|
|
|
class = "((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "firefox-tags",
|
|
|
|
|
tag = "+firefox-based-browser",
|
|
|
|
|
match = {
|
|
|
|
|
class = "([fF]irefox|zen|librewolf)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "chromium-browser-opacity-tags",
|
|
|
|
|
tag = "-default-opacity",
|
|
|
|
|
match = {
|
|
|
|
|
tag = "chromium-based-browser",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "firefox-browser-opacity-tags",
|
|
|
|
|
tag = "-default-opacity",
|
|
|
|
|
match = {
|
|
|
|
|
tag = "firefox-based-browser",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
-- Video apps: remove chromium browser tag so they don't get opacity applied
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "video-apps-no-browser-tag",
|
|
|
|
|
tag = "-chromium-based-browser",
|
|
|
|
|
match = {
|
|
|
|
|
class = "(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "video-apps-no-opacity-tag",
|
|
|
|
|
tag = "-default-opacity",
|
|
|
|
|
match = {
|
|
|
|
|
class = "(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
-- Force chromium-based browsers into a tile to deal with --app bug
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "chromium-tile",
|
|
|
|
|
tile = true,
|
|
|
|
|
match = {
|
|
|
|
|
tag = "chromium-based-browser",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
-- Only a subtle opacity change, but not for video sites
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "chromium-browser-subtle-opacity",
|
|
|
|
|
opacity = "1.0 0.97",
|
|
|
|
|
match = {
|
|
|
|
|
tag = "chromium-based-browser",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "firefox-browser-subtle-opacity",
|
|
|
|
|
opacity = "1.0 0.97",
|
|
|
|
|
match = {
|
|
|
|
|
tag = "firefox-based-browser",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "geforce-now",
|
|
|
|
|
idle_inhibit = "fullscreen",
|
|
|
|
|
match = {
|
|
|
|
|
class = "GeForceNOW",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
-- Remove 1px border around hyprshot screenshots
|
|
|
|
|
hl.layer_rule({
|
|
|
|
|
name = "no-anim-for-selection",
|
|
|
|
|
match = { namespace = "selection" },
|
|
|
|
|
no_anim = true,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
-- Jetbrains
|
|
|
|
|
-- Fix splash screen showing in weird places and prevent annoying focus takeovers
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "jetbrains-splash",
|
|
|
|
|
tag = "+jetbrains-splash",
|
|
|
|
|
center = true,
|
|
|
|
|
no_focus = true,
|
|
|
|
|
border_size = 0,
|
|
|
|
|
match = {
|
|
|
|
|
class = "^(jetbrains-.*)$",
|
|
|
|
|
title = "^(splash)$",
|
|
|
|
|
float = true,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
-- Center popups/find windows
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "jetbrains-popups",
|
|
|
|
|
center = true,
|
|
|
|
|
stay_focused = true,
|
|
|
|
|
border_size = 0,
|
|
|
|
|
min_size = { "(monitor_w*0.5)", "(monitor_h*0.5)" },
|
|
|
|
|
tag = "+jetbrains",
|
|
|
|
|
match = {
|
|
|
|
|
class = "^(jetbrains-.*)$",
|
|
|
|
|
title = "^()$",
|
|
|
|
|
float = true,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Disable window flicker when autocomplete or tooltips appear
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "jetbrains-tooltip",
|
|
|
|
|
no_initial_focus = true,
|
|
|
|
|
match = {
|
|
|
|
|
class = "^(jetbrains-.*)$",
|
|
|
|
|
title = "^(win.*)$",
|
|
|
|
|
float = true,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Disable mouse focus
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "jetbrains-no-follow-mouse",
|
|
|
|
|
no_follow_mouse = true,
|
|
|
|
|
match = {
|
|
|
|
|
class = "^(jetbrains-.*)$",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Keep enpass focused
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "enpass-assistant",
|
|
|
|
|
stay_focused = true,
|
|
|
|
|
center = true,
|
|
|
|
|
match = {
|
|
|
|
|
class = "^(Enpass)$",
|
|
|
|
|
title = "^(Enpass Assistant)$",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Float LocalSend and fzf file picker
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "localsend-float",
|
|
|
|
|
float = true,
|
|
|
|
|
center = true,
|
|
|
|
|
match = {
|
|
|
|
|
class = "(localsend|Share|fzf-file-picker)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Picture-in-picture overlays
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "pip-overlay",
|
|
|
|
|
tag = "+pip",
|
|
|
|
|
match = {
|
|
|
|
|
title = "(Picture.?in.?[Pp]icture)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "pip-overlay",
|
|
|
|
|
tag = "-default-opacity",
|
|
|
|
|
float = true,
|
|
|
|
|
pin = true,
|
|
|
|
|
size = { 600, 338 },
|
|
|
|
|
keep_aspect_ratio = true,
|
|
|
|
|
border_size = 0,
|
|
|
|
|
opacity = "1 1",
|
|
|
|
|
match = {
|
|
|
|
|
tag = "pip",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Retroarch
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "retroarch-fullscreen",
|
|
|
|
|
fullscreen = true,
|
2026-06-27 17:04:05 +01:00
|
|
|
workspace = "name:Gaming_1",
|
2026-06-07 19:03:11 +01:00
|
|
|
tag = "-default-opacity",
|
|
|
|
|
opacity = "1 1",
|
|
|
|
|
idle_inhibit = "fullscreen",
|
|
|
|
|
match = {
|
|
|
|
|
class = "com.libretro.RetroArch",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Scratchpad apps
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "spotify-scratchpad",
|
|
|
|
|
workspace = "special:scratchpad",
|
|
|
|
|
match = {
|
|
|
|
|
class = "Spotify",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "signal-scratchpad",
|
|
|
|
|
workspace = "special:scratchpad",
|
|
|
|
|
match = {
|
|
|
|
|
class = "signal",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "discord-scratchpad",
|
|
|
|
|
workspace = "special:scratchpad",
|
|
|
|
|
match = {
|
|
|
|
|
class = "^(chrome-discord.com__channels_@me-Default)$",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Float Nextcloud
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "nextcloud-float",
|
|
|
|
|
float = true,
|
|
|
|
|
match = {
|
|
|
|
|
class = "com.nextcloud.desktopclient.nextcloud",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Position drawing
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "krita-drawing",
|
2026-06-27 17:04:05 +01:00
|
|
|
workspace = "name:Art_1",
|
2026-06-07 19:03:11 +01:00
|
|
|
tag = "-default-opacity",
|
|
|
|
|
opacity = "1 1",
|
|
|
|
|
match = {
|
|
|
|
|
class = "(krita)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Float Steam
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "steam-float",
|
|
|
|
|
float = true,
|
2026-06-28 20:26:30 +01:00
|
|
|
no_initial_focus = true,
|
2026-06-27 17:04:05 +01:00
|
|
|
workspace = "name:Gaming_1",
|
2026-06-07 19:03:11 +01:00
|
|
|
idle_inhibit = "fullscreen",
|
|
|
|
|
match = {
|
|
|
|
|
class = "steam",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "steam-app-size",
|
|
|
|
|
center = true,
|
|
|
|
|
match = {
|
|
|
|
|
class = "steam",
|
|
|
|
|
title = "Steam",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "steam-opacity",
|
|
|
|
|
tag = "-default-opacity",
|
|
|
|
|
opacity = "1 1",
|
|
|
|
|
match = {
|
|
|
|
|
class = "steam.*",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "steam-friends-size",
|
|
|
|
|
size = { 460, 800 },
|
|
|
|
|
match = {
|
|
|
|
|
class = "steam",
|
|
|
|
|
title = "Friends List",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Float Lunar Client
|
|
|
|
|
hl.window_rule({
|
2026-06-27 17:04:05 +01:00
|
|
|
name = "atlauncher-float",
|
2026-06-07 19:03:11 +01:00
|
|
|
float = true,
|
2026-06-27 17:04:05 +01:00
|
|
|
workspace = "name:Gaming_1",
|
2026-06-07 19:03:11 +01:00
|
|
|
center = true,
|
|
|
|
|
size = { 1100, 700 },
|
|
|
|
|
tag = "-default-opacity",
|
|
|
|
|
opacity = "1 1",
|
|
|
|
|
idle_inhibit = "fullscreen",
|
|
|
|
|
match = {
|
2026-06-27 17:04:05 +01:00
|
|
|
class = "atlauncher",
|
2026-06-07 19:03:11 +01:00
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Floating windows
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "floating-window-tags",
|
|
|
|
|
tag = "+floating-window",
|
|
|
|
|
match = {
|
|
|
|
|
class = "(org.station.bluetui|org.station.impala|org.station.wiremix|org.station.btop|org.station.terminal|org.station.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Station|About|TUI.float|imv|mpv)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "floating-dialog-tags",
|
|
|
|
|
tag = "+floating-window",
|
|
|
|
|
match = {
|
|
|
|
|
class = "(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus)",
|
|
|
|
|
title = "^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "floating-window-tags",
|
|
|
|
|
tag = "+floating-window",
|
|
|
|
|
float = true,
|
|
|
|
|
center = true,
|
|
|
|
|
size = { 875, 600 },
|
|
|
|
|
match = {
|
|
|
|
|
tag = "floating-window",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Calculator float
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "calculator-float",
|
|
|
|
|
float = true,
|
|
|
|
|
match = {
|
|
|
|
|
class = "org.gnome.Calculator",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Fullscreen screensaver
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "screensaver-fullscreen",
|
|
|
|
|
fullscreen = true,
|
|
|
|
|
float = true,
|
|
|
|
|
animation = "slide",
|
|
|
|
|
match = {
|
|
|
|
|
class = "org.station.screensaver",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- No transparency on media windows
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "media-no-opacity",
|
|
|
|
|
tag = "-default-opacity",
|
|
|
|
|
opacity = "1 1",
|
|
|
|
|
match = {
|
|
|
|
|
class = "^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Popped window rounding
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "popped-window-rounding",
|
|
|
|
|
rounding = 8,
|
|
|
|
|
match = {
|
|
|
|
|
tag = "pop",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Prevent idle while open
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "idle-inhibit-apps",
|
|
|
|
|
idle_inhibit = "always",
|
|
|
|
|
match = {
|
|
|
|
|
tag = "noidle",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Prevent Telegram from stealing focus on new messages
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "telegram-no-focus-steal",
|
|
|
|
|
focus_on_activate = false,
|
|
|
|
|
match = {
|
|
|
|
|
class = "org.telegram.desktop",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Define terminal tag to style them uniformly
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "terminal-tags",
|
|
|
|
|
tag = "+terminal",
|
|
|
|
|
match = {
|
|
|
|
|
class = "(Alacritty|kitty|com.mitchellh.ghostty)",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "terminal-opacity-tags",
|
|
|
|
|
tag = "-default-opacity",
|
|
|
|
|
opacity = "0.97 0.9",
|
|
|
|
|
match = {
|
|
|
|
|
tag = "terminal",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
-- Application-specific animation
|
|
|
|
|
hl.layer_rule({
|
|
|
|
|
name = "walker-no-anim",
|
|
|
|
|
no_anim = true,
|
|
|
|
|
match = { namespace = "walker" },
|
|
|
|
|
})
|
|
|
|
|
-- Webcam overlay for screen recording
|
|
|
|
|
hl.window_rule({
|
|
|
|
|
name = "webcam-overlay",
|
|
|
|
|
float = true,
|
|
|
|
|
pin = true,
|
|
|
|
|
no_initial_focus = true,
|
|
|
|
|
no_dim = true,
|
|
|
|
|
size = { 320, 180 },
|
2026-06-07 19:32:56 +01:00
|
|
|
move = { "(monitor_w-360)", "(monitor_h-220)" },
|
2026-06-07 19:03:11 +01:00
|
|
|
match = {
|
|
|
|
|
title = "WebcamOverlay",
|
|
|
|
|
},
|
|
|
|
|
})
|