Migrate hyprland config to lua

This commit is contained in:
Tobias Reisinger 2026-09-03 12:41:22 +02:00
commit bdaeb19666
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
29 changed files with 485 additions and 437 deletions

83
.config/hypr/rules.lua Normal file
View file

@ -0,0 +1,83 @@
require("defaults")
--hl.layer_rule({ match = { namespace = "match:namespace menu" }, no_anim on = true })
--hl.layer_rule({ match = { namespace = "match:namespace notifications" }, no_anim on = true })
-- Workspace rules
hl.workspace_rule({ workspace = "w[t1]", gaps_in = 0, gaps_out = 0, border_size = 0 })
hl.window_rule({ match = { class = "org.qutebrowser.qutebrowser" }, workspace = WS_WEB .. " silent" })
hl.window_rule({ match = { class = "[bB]rave-browser" }, workspace = WS_WEB })
hl.window_rule({ match = { class = "firefox" }, workspace = WS_WEB })
hl.window_rule({ match = { class = "^jetbrains-" }, workspace = WS_FOCUS })
hl.window_rule({ match = { class = "[cC]hromium" }, workspace = WS_MEDIA })
hl.window_rule({ match = { class = "io.freetubeapp.FreeTube" }, workspace = WS_MEDIA, fullscreen = true })
hl.window_rule({ match = { class = "org.qutebrowser.qutebrowser-kiosk" }, workspace = WS_MEDIA })
hl.window_rule({ match = { class = "[bB]rave-.*-Default" }, workspace = WS_MEDIA })
--
hl.window_rule({ match = { class = "discord" }, workspace = WS_CHAT .. " silent" })
hl.window_rule({ match = { class = "Element" }, workspace = WS_CHAT .. " silent" })
hl.window_rule({ match = { class = "[cC]inny" }, workspace = WS_CHAT .. " silent" })
hl.window_rule({ match = { class = "im.riot.Riot" }, workspace = WS_CHAT .. " silent" })
hl.window_rule({ match = { class = "TeamSpeak 3" }, workspace = WS_CHAT })
hl.window_rule({ match = { class = "(thunderbird|net.thunderbird.Thunderbird)" }, workspace = WS_MSG .. " silent" })
hl.window_rule({ match = { class = "^(Signal|org.signal.Signal)" }, workspace = WS_MSG .. " silent" })
-- General rules
hl.window_rule({ match = { class = "^$" }, no_blur = true }) -- intended for menus. not sure about side-effects
-- Specific rules
hl.window_rule({ match = { class = "xdg-desktop-portal-gtk" }, float = true })
hl.window_rule({ match = { class = "([bB]rave-browser)", initial_title = "^about:blank - Brave$" }, float = true })
hl.window_rule({
match = { class = "(thunderbird|net.thunderbird.Thunderbird)", title = "^$" },
no_initial_focus = true,
float = true,
})
hl.window_rule({
match = { class = "(thunderbird|net.thunderbird.Thunderbird)", title = "Reminder" },
float = true,
})
hl.window_rule({
match = { class = "org.keepassxc.KeePassXC", title = "KeePassXC - Browser Access Request" },
float = true,
})
hl.window_rule({ match = { class = "Pinentry-gtk" }, stay_focused = true, pin = true })
-- https://github.com/hyprwm/Hyprland/issues/4257#issuecomment-1879781806
-- fix tooltips (always have a title of `win.<id>`)
hl.window_rule({ match = { class = "^.*jetbrains.*$", title = "^win.*$" }, no_initial_focus = true, no_focus = true })
-- fix tab dragging (always have a single space character as their title)
hl.window_rule({ match = { class = "^.*jetbrains.*$", title = "^\\s$" }, no_initial_focus = true, no_focus = true })
-- Gaming Rules (steam and games)
--
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = move 100%-300 100%-30, match:class (steam), match:title ^(notificationtoasts)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = no_focus on, match:class (steam), match:title ^(notificationtoasts)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = float on, match:class (zenity), match:title ^(Progress)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = no_initial_focus on, match:class (steam), match:title ^(Friends List)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = workspace $ws_chat silent, match:class (steam), match:title ^(Friends List)
-- --
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = fullscreen on, match:class ^Minecraft
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = fullscreen on, match:class ^cs2$
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = workspace $ws_focus, match:class ^cs2$
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = fullscreen on, match:class ^factorio$
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = workspace $ws_focus, match:class ^factorio$
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = fullscreen on, match:class ^(steam_app_)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = workspace $ws_focus, match:class ^(steam_app_)