feat(gaming): unify and automate game window rules

Refactors 'modules/home/gaming.nix' to use a unified 'mkGameRules' function.
Applies full gaming rules (monitor 0, workspace gaming, immediate, fullscreen) to:
- Steam apps (class:^steam_app_\d+$)
- Gamescope, Lutris, Heroic
- Wine/Proton windows
Preserves manual overrides in the 'games' list.
This commit is contained in:
kenji
2026-01-21 20:02:25 -06:00
parent ac3232ac80
commit 54737695af
+25 -31
View File
@@ -8,22 +8,20 @@
"Deadlock"
];
# Generate monitor rules for each game in the config
gameRules =
lib.flatten (map (game: [
"monitor 0, title:^(${game})$"
"workspace name:gaming, title:^(${game})$"
"fullscreen, title:^(${game})$"
"immediate, title:^(${game})$"
"stayfocused, title:^(${game})$"
"monitor 0, class:^(${game})$"
"workspace name:gaming, class:^(${game})$"
"fullscreen, class:^(${game})$"
"immediate, class:^(${game})$"
"stayfocused, class:^(${game})$"
])
games);
mkGameRules = selector: [
"monitor 0, ${selector}"
"workspace name:gaming, ${selector}"
"fullscreen, ${selector}"
"immediate, ${selector}"
"stayfocused, ${selector}"
];
manualGameRules = lib.flatten (map (
game:
(mkGameRules "title:^(${game})$")
++ (mkGameRules "class:^(${game})$")
)
games);
in {
home.packages = with pkgs; [
protonup-qt
@@ -61,24 +59,20 @@ in {
windowrulev2 =
[
# --- STEAM RULES ---
# --- STEAM LAUNCHER RULES ---
"workspace special:steam silent, class:^(steam)$"
"noinitialfocus, class:^(steam)$"
"suppressevent activate, class:^(steam)$"
# --- GAMING RULES ---
"fullscreen, class:^steam_app_\d+$"
"monitor 0, class:^steam_app_\d+$"
"workspace name:gaming, class:^steam_app_\d+$"
"immediate, class:^steam_app_\d+$"
"stayfocused, class:^steam_app_\d+$"
"fullscreen, class:^(gamescope)$"
"fullscreen, class:^(lutris)$"
"fullscreen, class:^(heroic)$"
"fullscreen, class:^wine-.*$"
"fullscreen, title:^Wine .*$"
]
++ gameRules;
# --- AUTO-DETECTED GAMES ---
++ (mkGameRules "class:^steam_app_\\d+$")
++ (mkGameRules "class:^(gamescope)$")
++ (mkGameRules "class:^(lutris)$")
++ (mkGameRules "class:^(heroic)$")
++ (mkGameRules "class:^wine-.*$")
++ (mkGameRules "title:^Wine .*$")
# --- MANUAL GAMES ---
++ manualGameRules;
};
}