1-- ── Workspace ─────────────────────────────────────
2hl.workspace_rule({ workspace = "1", monitor = "HDMI-A-2", default_name = "AI" })
3hl.workspace_rule({ workspace = "2", monitor = "HDMI-A-2" })
4hl.workspace_rule({ workspace = "3", monitor = "HDMI-A-2" })
5
6hl.workspace_rule({ workspace = "4", monitor = "DP-1", default_name = "YT", persistent = true })
7hl.workspace_rule({ workspace = "5", monitor = "DP-1", default_name = "Code", persistent = true })
8hl.workspace_rule({ workspace = "6", monitor = "DP-1", default_name = "Research", persistent = true })
9
10hl.workspace_rule({ workspace = "7", monitor = "HDMI-A-1" })
11hl.workspace_rule({ workspace = "8", monitor = "HDMI-A-1" })
12hl.workspace_rule({ workspace = "9", monitor = "HDMI-A-1", default_name = "Communication", persistent = true })
13
14-- ── Window ─────────────────────────────────────
15
16hl.window_rule({
17 match = { tag = "floating-window" },
18 float = true,
19 center = true,
20 size = "875 600",
21})
22
23local floating_apps = {
24 "imv",
25 "mpv",
26 "nwg-look",
27 "localsend",
28 "zenity",
29 "xdg-desktop-portal-gtk",
30 "Termius",
31 "rustdesk",
32 "com.mitchellh.ghostty",
33 "org.telegram.desktop",
34 "org.pulseaudio.pavucontrol",
35 "org.wraith.*",
36 "org.gnome.*",
37}
38
39for _, cls in ipairs(floating_apps) do
40 hl.window_rule({ match = { initial_class = cls }, tag = "+floating-window" })
41end
42
43hl.window_rule({
44 match = {
45 title =
46 "^(Open.*Files?|Open [Ff]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to (?:open|save).*|[Cc]hoose.*)",
47 },
48 tag = "+floating-window",
49})
50
51hl.window_rule({
52 match = {
53 title =
54 "^(Settings|Preferences|Options|About|Help|License|Shortcuts|Keybindings|Update|Updates|Checking for updates|Extensions|Add-ons|Choose a Font|About .*)$",
55 },
56 tag = "+floating-window",
57})
58
59hl.window_rule({
60 match = { initial_class = "code|code-oss|Code-Insiders|zenity" },
61 workspace = "name:Code",
62})
63
64hl.window_rule({
65 match = { initial_class = "chrome-gemini\\.google\\.com.*|chrome-claude\\.ai.*|chrome-chatgpt\\.com.*" },
66 workspace = "name:AI",
67})
68
69hl.window_rule({
70 match = { initial_class = "Beeper|org.mozilla.Thunderbird" },
71 workspace = "name:Communication silent",
72})
73
74hl.window_rule({
75 match = { initial_class = "chrome-music\\.youtube\\..*" },
76 workspace = "special:music",
77})
78
79
80hl.window_rule({
81 match = { title = "^(.*-popup)" }, float = true
82})