OOKNET                             [ /  search the index  ]  
──────────────────────────────────────────────────────────────────────────────────────
══════════════════════════════════════════════════════════════════════════════════════
OOKNET   [ /  search  ]  
────────────────────────────────────────────────
════════════════════════════════════════════════
 
HASH      716e7283051b
DATE      2026-03-09
SUBJECT   hyprland: update to new rules schema
FILES     3 CHANGED
HASH      716e7283051b
DATE      2026-03-09
SUBJECT   hyprland: update to new rules schema
FILES     3 CHANGED
 

diff --git a/modules/home/nixos/hyprland/settings/options/default.nix b/modules/ho
me/nixos/hyprland/settings/options/default.nix
index d59c620..c59064c 100644
--- a/modules/home/nixos/hyprland/settings/options/default.nix
+++ b/modules/home/nixos/hyprland/settings/options/default.nix
@@ -26,7 +26,6 @@
     oneOf
     ;
 
-  # our cursed regex types
   hyprland = import ./rules.nix {inherit lib;};
 
   _toString = type: val:
@@ -37,22 +36,27 @@
         if val
         then "1"
         else "0"
-      else boolToString val # for workspace rules
+      else boolToString val
     else toString val;
 
-  # format rules for hyprland
-  formatRules = type: rule:
+  # format match props for window rules: match:name value
+  formatWindowMatches = rule:
+    concatStringsSep ", " (
+      mapAttrsToList (name: value: "match:${name} ${_toString "windowrule" value}
")
+      (filterAttrs (_: v: v != null) rule)
+    );
+
+  # format props for workspace rules: name:value
+  formatWorkspaceRules = rule:
     concatStringsSep "," (
-      mapAttrsToList (name: value: "${name}:${_toString type value}")
+      mapAttrsToList (name: value: "${name}:${_toString "workspacerule" value}")
       (filterAttrs (_: v: v != null) rule)
     );
 
-  # workspace handling
   mkWorkspaces = mapAttrsToList (
-    selector: rules: "${selector},${formatRules "workspacerule" rules}"
+    selector: rules: "${selector},${formatWorkspaceRules rules}"
   );
 
-  # rule options
   mkRuleOption = type: description:
     mkOption {
       type = nullOr type;
@@ -60,22 +64,28 @@
       inherit description;
     };
 
-  # window rule matchers
   windowRuleMatchers = submodule {
     options = {
       class = mkRuleOption str "Window class matcher";
       title = mkRuleOption str "Window title matcher";
-      initialClass = mkRuleOption str "Initial window class matcher";
-      initialTitle = mkRuleOption str "Initial window title matcher";
+      initial_class = mkRuleOption str "Initial window class matcher";
+      initial_title = mkRuleOption str "Initial window title matcher";
       tag = mkRuleOption str "Window tag matcher";
       xwayland = mkRuleOption bool "Match XWayland windows";
-      floating = mkRuleOption bool "Match floating windows";
+      float = mkRuleOption bool "Match floating windows";
       fullscreen = mkRuleOption bool "Match fullscreen windows";
       workspace = mkRuleOption str "Match windows on specific workspace";
+      pin = mkRuleOption bool "Match pinned windows";
+      focus = mkRuleOption bool "Match focused windows";
+      group = mkRuleOption bool "Match grouped windows";
+      modal = mkRuleOption bool "Match modal windows";
+      fullscreen_state_client = mkRuleOption int "Match fullscreen state client";
+      fullscreen_state_internal = mkRuleOption int "Match fullscreen state intern
al";
+      content = mkRuleOption str "Match content type";
+      xdg_tag = mkRuleOption str "Match XDG tag";
     };
   };
 
-  # Workspace rules submodule
   workspaceRules = submodule {
     options = {
       name = mkRuleOption str "Default name of workspace";
@@ -93,20 +103,17 @@
     };
   };
 
-  # Window rules type using our validated types from rules.nix
   windowRuleType = listOf (oneOf (attrValues hyprland.types));
 
   cfg = config.wayland.windowManager.hyprland;
 in {
   options.wayland.windowManager.hyprland = {
-    # Workspace configuration
     workspaces = mkOption {
       type = attrsOf workspaceRules;
       default = {};
       description = "Workspace-specific configurations";
     };
 
-    # Window rules configuration
     windowRules = mkOption {
       type = listOf (submodule {
         options = {
@@ -127,11 +134,10 @@ in {
 
   config.wayland.windowManager.hyprland.settings = {
     workspace = mkWorkspaces cfg.workspaces;
-    windowrulev2 = let
-      # Convert rules to Hyprland format
+    windowrule = let
       formatWindowRule = rule: let
-        matches = formatRules "windowrule" rule.matches;
-        rules = map (r: "${r},${matches}") rule.rules;
+        matches = formatWindowMatches rule.matches;
+        rules = map (r: "${r}, ${matches}") rule.rules;
       in
         rules;
     in

diff --git a/modules/home/nixos/hyprland/set
tings/options/default.nix b/modules/home/nix
os/hyprland/settings/options/default.nix
index d59c620..c59064c 100644
--- a/modules/home/nixos/hyprland/settings/o
ptions/default.nix
+++ b/modules/home/nixos/hyprland/settings/o
ptions/default.nix
@@ -26,7 +26,6 @@
     oneOf
     ;
 
-  # our cursed regex types
   hyprland = import ./rules.nix {inherit li
b;};
 
   _toString = type: val:
@@ -37,22 +36,27 @@
         if val
         then "1"
         else "0"
-      else boolToString val # for workspace
 rules
+      else boolToString val
     else toString val;
 
-  # format rules for hyprland
-  formatRules = type: rule:
+  # format match props for window rules: ma
tch:name value
+  formatWindowMatches = rule:
+    concatStringsSep ", " (
+      mapAttrsToList (name: value: "match:$
{name} ${_toString "windowrule" value}")
+      (filterAttrs (_: v: v != null) rule)
+    );
+
+  # format props for workspace rules: name:
value
+  formatWorkspaceRules = rule:
     concatStringsSep "," (
-      mapAttrsToList (name: value: "${name}
:${_toString type value}")
+      mapAttrsToList (name: value: "${name}
:${_toString "workspacerule" value}")
       (filterAttrs (_: v: v != null) rule)
     );
 
-  # workspace handling
   mkWorkspaces = mapAttrsToList (
-    selector: rules: "${selector},${formatR
ules "workspacerule" rules}"
+    selector: rules: "${selector},${formatW
orkspaceRules rules}"
   );
 
-  # rule options
   mkRuleOption = type: description:
     mkOption {
       type = nullOr type;
@@ -60,22 +64,28 @@
       inherit description;
     };
 
-  # window rule matchers
   windowRuleMatchers = submodule {
     options = {
       class = mkRuleOption str "Window clas
s matcher";
       title = mkRuleOption str "Window titl
e matcher";
-      initialClass = mkRuleOption str "Init
ial window class matcher";
-      initialTitle = mkRuleOption str "Init
ial window title matcher";
+      initial_class = mkRuleOption str "Ini
tial window class matcher";
+      initial_title = mkRuleOption str "Ini
tial window title matcher";
       tag = mkRuleOption str "Window tag ma
tcher";
       xwayland = mkRuleOption bool "Match X
Wayland windows";
-      floating = mkRuleOption bool "Match f
loating windows";
+      float = mkRuleOption bool "Match floa
ting windows";
       fullscreen = mkRuleOption bool "Match
 fullscreen windows";
       workspace = mkRuleOption str "Match w
indows on specific workspace";
+      pin = mkRuleOption bool "Match pinned
 windows";
+      focus = mkRuleOption bool "Match focu
sed windows";
+      group = mkRuleOption bool "Match grou
ped windows";
+      modal = mkRuleOption bool "Match moda
l windows";
+      fullscreen_state_client = mkRuleOptio
n int "Match fullscreen state client";
+      fullscreen_state_internal = mkRuleOpt
ion int "Match fullscreen state internal";
+      content = mkRuleOption str "Match con
tent type";
+      xdg_tag = mkRuleOption str "Match XDG
 tag";
     };
   };
 
-  # Workspace rules submodule
   workspaceRules = submodule {
     options = {
       name = mkRuleOption str "Default name
 of workspace";
@@ -93,20 +103,17 @@
     };
   };
 
-  # Window rules type using our validated t
ypes from rules.nix
   windowRuleType = listOf (oneOf (attrValue
s hyprland.types));
 
   cfg = config.wayland.windowManager.hyprla
nd;
 in {
   options.wayland.windowManager.hyprland = 
{
-    # Workspace configuration
     workspaces = mkOption {
       type = attrsOf workspaceRules;
       default = {};
       description = "Workspace-specific con
figurations";
     };
 
-    # Window rules configuration
     windowRules = mkOption {
       type = listOf (submodule {
         options = {
@@ -127,11 +134,10 @@ in {
 
   config.wayland.windowManager.hyprland.set
tings = {
     workspace = mkWorkspaces cfg.workspaces
;
-    windowrulev2 = let
-      # Convert rules to Hyprland format
+    windowrule = let
       formatWindowRule = rule: let
-        matches = formatRules "windowrule" 
rule.matches;
-        rules = map (r: "${r},${matches}") 
rule.rules;
+        matches = formatWindowMatches rule.
matches;
+        rules = map (r: "${r}, ${matches}")
 rule.rules;
       in
         rules;
     in
 

diff --git a/modules/home/nixos/hyprland/settings/options/rules.nix b/modules/home
/nixos/hyprland/settings/options/rules.nix
index 99b5356..555d957 100644
--- a/modules/home/nixos/hyprland/settings/options/rules.nix
+++ b/modules/home/nixos/hyprland/settings/options/rules.nix
@@ -1,6 +1,6 @@
 {lib, ...}: let
   inherit (lib) concatStringsSep attrValues;
-  inherit (lib.types) enum strMatching;
+  inherit (lib.types) strMatching;
 
   # helper function for constructing regex patterns for hyprland rules
   mkRegexTarget = {
@@ -17,69 +17,53 @@
   in
     strMatching "${name}${parameterPart}${extraRegex}";
 
-  # basic windowrules that can be validated with simple enum
-
-  basicWindowRules = enum [
+  toggleableRules = [
     "float"
     "tile"
     "fullscreen"
     "maximize"
     "pseudo"
-    "noinitialfocus"
+    "no_initial_focus"
     "pin"
-    "unset"
-    "nomaxsize"
-    "stayfocused"
-  ];
-
-  # toggleable options
-  toggleableRules = [
-    # window decoration
-    "decorate" # window decorations
-    "noborder" # borders
-    "noshadow" # shadows
-    "norounding" # corner rounding
-
-    # Visual effects
-    "noblur" # blur
-    "noanim" # animations
-    "nodim" # dimming
-    "opaque" # opacity enforcement
-    "forcergbx" # RGB handling
-    "xray" # blur xray mode
-    "immediate" # tearing mode
-
-    # Behavior
-    "dimaround" # dim around window
-    "focusonactivate" # focus on activation request
-    "nofocus" # disable focus
-    "stayfocused" # keep focus
-    "keepaspectratio" # maintain aspect ratio
-    "nearestneighbor" # nearest neighbor filtering
-    "nomaxsize" # disable max size
-    "noshortcutsinhibit" # shortcut inhibiting
-    "allowsinput" # XWayland input forcing
-    "renderunfocused" # unfocused rendering
-    "syncfullscreen" # fullscreen sync
+    "decorate"
+    "no_blur"
+    "no_anim"
+    "no_dim"
+    "opaque"
+    "force_rgbx"
+    "xray"
+    "immediate"
+    "dim_around"
+    "focus_on_activate"
+    "no_focus"
+    "stay_focused"
+    "keep_aspect_ratio"
+    "nearest_neighbor"
+    "no_max_size"
+    "no_shortcuts_inhibit"
+    "allows_input"
+    "render_unfocused"
+    "sync_fullscreen"
+    "no_shadow"
+    "center"
+    "persistent_size"
+    "no_follow_mouse"
+    "no_screen_share"
+    "no_vrr"
   ];
 
-  # reusable regex pattens to be used in constructing our types
   patterns = {
-    # toggles
-    onOpt = "1|true|on|yes|0|salse|off|no|toggle|unset";
+    onOpt = "1|true|on|yes|0|false|off|no|toggle|unset";
 
-    # numbers
     float = "[+-]?([0-9]*[.])?[0-9]+";
     int = "[0-9]+";
     alpha = ''(0|0?\.[[:digit:]]+|1|1\.0)'';
     percentage = "[0-9]+(%)?";
 
-    # position
     anchor = "100%-w?-[0-9]+";
     coordinate = "${patterns.percentage}|${patterns.anchor}";
     deg = "(0-360)";
 
-    # identification
     numericId = "[1-9][0-9]*";
     sign = "[+-]";
     relative = "${patterns.sign}${patterns.numericId}";
@@ -94,7 +78,6 @@
     previous = "previous(_per_monitor)?";
     openWorkspace = "e(${patterns.sign}${patterns.numericId}|~${patterns.numericI
d})";
 
-    # colors
     rgbValue = ''([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'';
     rgbaHex = ''rgba\([[:xdigit:]]{8}\)'';
     rgbaDecimal = ''rgba\(${patterns.rgbValue}, *${patterns.rgbValue}, *${pattern
s.rgbValue}, *${patterns.alpha}\)'';
@@ -123,11 +106,8 @@
     })
     toggleableRules);
 
-  # regex patterns to pass to the workspace rule
-
   types =
     {
-      inherit basicWindowRules;
       workspace = mkRegexTarget {
         name = "workspace";
         regex = attrValues {
@@ -164,13 +144,13 @@
         ];
       };
 
-      bordercolor = mkRegexTarget {
-        name = "bordercolor";
+      border_color = mkRegexTarget {
+        name = "border_color";
         regex = [patterns.color];
       };
 
-      idleinhibit = mkRegexTarget {
-        name = "idleinhibit";
+      idle_inhibit = mkRegexTarget {
+        name = "idle_inhibit";
         regex = [patterns.mode];
       };
 
@@ -185,19 +165,13 @@
         ];
       };
 
-      center = mkRegexTarget {
-        name = "center";
-        regex = ["[0-1]"];
-        optional = true;
-      };
-
-      roundingpower = mkRegexTarget {
-        name = "roundingpower";
+      rounding_power = mkRegexTarget {
+        name = "rounding_power";
         regex = [patterns.float];
       };
 
-      bordersize = mkRegexTarget {
-        name = "bordersize";
+      border_size = mkRegexTarget {
+        name = "border_size";
         regex = [patterns.int];
       };
 
@@ -206,13 +180,13 @@
         regex = [patterns.int];
       };
 
-      scrollmouse = mkRegexTarget {
-        name = "scrollmouse";
+      scroll_mouse = mkRegexTarget {
+        name = "scroll_mouse";
         regex = [patterns.float];
       };
 
-      scrolltouchpad = mkRegexTarget {
-        name = "scrolltouchpad";
+      scroll_touchpad = mkRegexTarget {
+        name = "scroll_touchpad";
         regex = [patterns.float];
       };
 
@@ -221,19 +195,40 @@
         regex = [''[+-]?[[:alnum:]_]+\*?''];
       };
 
-      maxsize = mkRegexTarget {
-        name = "maxsize";
+      max_size = mkRegexTarget {
+        name = "max_size";
         regex = ["${patterns.int} ${patterns.int}"];
       };
 
-      minsize = mkRegexTarget {
-        name = "minsize";
+      min_size = mkRegexTarget {
+        name = "min_size";
         regex = ["${patterns.int} ${patterns.int}"];
       };
+
       animation = mkRegexTarget {
         name = "animation";
         regex = ["(slide)( (left|right|up|down|top|bottom))?|(popin)( ([0-9]+%))?
"];
       };
+
+      fullscreen_state = mkRegexTarget {
+        name = "fullscreen_state";
+        regex = ["[0-3] [0-3]"];
+      };
+
+      suppress_event = mkRegexTarget {
+        name = "suppress_event";
+        regex = ["[a-z_]+( [a-z_]+)*"];
+      };
+
+      content = mkRegexTarget {
+        name = "content";
+        regex = ["none|photo|video|game"];
+      };
+
+      no_close_for = mkRegexTarget {
+        name = "no_close_for";
+        regex = [patterns.int];
+      };
     }
     // toggleTargets;
 in {

diff --git a/modules/home/nixos/hyprland/set
tings/options/rules.nix b/modules/home/nixos
/hyprland/settings/options/rules.nix
index 99b5356..555d957 100644
--- a/modules/home/nixos/hyprland/settings/o
ptions/rules.nix
+++ b/modules/home/nixos/hyprland/settings/o
ptions/rules.nix
@@ -1,6 +1,6 @@
 {lib, ...}: let
   inherit (lib) concatStringsSep attrValues
;
-  inherit (lib.types) enum strMatching;
+  inherit (lib.types) strMatching;
 
   # helper function for constructing regex 
patterns for hyprland rules
   mkRegexTarget = {
@@ -17,69 +17,53 @@
   in
     strMatching "${name}${parameterPart}${e
xtraRegex}";
 
-  # basic windowrules that can be validated
 with simple enum
-
-  basicWindowRules = enum [
+  toggleableRules = [
     "float"
     "tile"
     "fullscreen"
     "maximize"
     "pseudo"
-    "noinitialfocus"
+    "no_initial_focus"
     "pin"
-    "unset"
-    "nomaxsize"
-    "stayfocused"
-  ];
-
-  # toggleable options
-  toggleableRules = [
-    # window decoration
-    "decorate" # window decorations
-    "noborder" # borders
-    "noshadow" # shadows
-    "norounding" # corner rounding
-
-    # Visual effects
-    "noblur" # blur
-    "noanim" # animations
-    "nodim" # dimming
-    "opaque" # opacity enforcement
-    "forcergbx" # RGB handling
-    "xray" # blur xray mode
-    "immediate" # tearing mode
-
-    # Behavior
-    "dimaround" # dim around window
-    "focusonactivate" # focus on activation
 request
-    "nofocus" # disable focus
-    "stayfocused" # keep focus
-    "keepaspectratio" # maintain aspect rat
io
-    "nearestneighbor" # nearest neighbor fi
ltering
-    "nomaxsize" # disable max size
-    "noshortcutsinhibit" # shortcut inhibit
ing
-    "allowsinput" # XWayland input forcing
-    "renderunfocused" # unfocused rendering
-    "syncfullscreen" # fullscreen sync
+    "decorate"
+    "no_blur"
+    "no_anim"
+    "no_dim"
+    "opaque"
+    "force_rgbx"
+    "xray"
+    "immediate"
+    "dim_around"
+    "focus_on_activate"
+    "no_focus"
+    "stay_focused"
+    "keep_aspect_ratio"
+    "nearest_neighbor"
+    "no_max_size"
+    "no_shortcuts_inhibit"
+    "allows_input"
+    "render_unfocused"
+    "sync_fullscreen"
+    "no_shadow"
+    "center"
+    "persistent_size"
+    "no_follow_mouse"
+    "no_screen_share"
+    "no_vrr"
   ];
 
-  # reusable regex pattens to be used in co
nstructing our types
   patterns = {
-    # toggles
-    onOpt = "1|true|on|yes|0|salse|off|no|t
oggle|unset";
+    onOpt = "1|true|on|yes|0|false|off|no|t
oggle|unset";
 
-    # numbers
     float = "[+-]?([0-9]*[.])?[0-9]+";
     int = "[0-9]+";
     alpha = ''(0|0?\.[[:digit:]]+|1|1\.0)''
;
     percentage = "[0-9]+(%)?";
 
-    # position
     anchor = "100%-w?-[0-9]+";
     coordinate = "${patterns.percentage}|${
patterns.anchor}";
     deg = "(0-360)";
 
-    # identification
     numericId = "[1-9][0-9]*";
     sign = "[+-]";
     relative = "${patterns.sign}${patterns.
numericId}";
@@ -94,7 +78,6 @@
     previous = "previous(_per_monitor)?";
     openWorkspace = "e(${patterns.sign}${pa
tterns.numericId}|~${patterns.numericId})";
 
-    # colors
     rgbValue = ''([1-9]?[0-9]|1[0-9]{2}|2[0
-4][0-9]|25[0-5])'';
     rgbaHex = ''rgba\([[:xdigit:]]{8}\)'';
     rgbaDecimal = ''rgba\(${patterns.rgbVal
ue}, *${patterns.rgbValue}, *${patterns.rgbV
alue}, *${patterns.alpha}\)'';
@@ -123,11 +106,8 @@
     })
     toggleableRules);
 
-  # regex patterns to pass to the workspace
 rule
-
   types =
     {
-      inherit basicWindowRules;
       workspace = mkRegexTarget {
         name = "workspace";
         regex = attrValues {
@@ -164,13 +144,13 @@
         ];
       };
 
-      bordercolor = mkRegexTarget {
-        name = "bordercolor";
+      border_color = mkRegexTarget {
+        name = "border_color";
         regex = [patterns.color];
       };
 
-      idleinhibit = mkRegexTarget {
-        name = "idleinhibit";
+      idle_inhibit = mkRegexTarget {
+        name = "idle_inhibit";
         regex = [patterns.mode];
       };
 
@@ -185,19 +165,13 @@
         ];
       };
 
-      center = mkRegexTarget {
-        name = "center";
-        regex = ["[0-1]"];
-        optional = true;
-      };
-
-      roundingpower = mkRegexTarget {
-        name = "roundingpower";
+      rounding_power = mkRegexTarget {
+        name = "rounding_power";
         regex = [patterns.float];
       };
 
-      bordersize = mkRegexTarget {
-        name = "bordersize";
+      border_size = mkRegexTarget {
+        name = "border_size";
         regex = [patterns.int];
       };
 
@@ -206,13 +180,13 @@
         regex = [patterns.int];
       };
 
-      scrollmouse = mkRegexTarget {
-        name = "scrollmouse";
+      scroll_mouse = mkRegexTarget {
+        name = "scroll_mouse";
         regex = [patterns.float];
       };
 
-      scrolltouchpad = mkRegexTarget {
-        name = "scrolltouchpad";
+      scroll_touchpad = mkRegexTarget {
+        name = "scroll_touchpad";
         regex = [patterns.float];
       };
 
@@ -221,19 +195,40 @@
         regex = [''[+-]?[[:alnum:]_]+\*?'']
;
       };
 
-      maxsize = mkRegexTarget {
-        name = "maxsize";
+      max_size = mkRegexTarget {
+        name = "max_size";
         regex = ["${patterns.int} ${pattern
s.int}"];
       };
 
-      minsize = mkRegexTarget {
-        name = "minsize";
+      min_size = mkRegexTarget {
+        name = "min_size";
         regex = ["${patterns.int} ${pattern
s.int}"];
       };
+
       animation = mkRegexTarget {
         name = "animation";
         regex = ["(slide)( (left|right|up|d
own|top|bottom))?|(popin)( ([0-9]+%))?"];
       };
+
+      fullscreen_state = mkRegexTarget {
+        name = "fullscreen_state";
+        regex = ["[0-3] [0-3]"];
+      };
+
+      suppress_event = mkRegexTarget {
+        name = "suppress_event";
+        regex = ["[a-z_]+( [a-z_]+)*"];
+      };
+
+      content = mkRegexTarget {
+        name = "content";
+        regex = ["none|photo|video|game"];
+      };
+
+      no_close_for = mkRegexTarget {
+        name = "no_close_for";
+        regex = [patterns.int];
+      };
     }
     // toggleTargets;
 in {
 

diff --git a/modules/home/nixos/hyprland/settings/rules.nix b/modules/home/nixos/h
yprland/settings/rules.nix
index 020fd2d..d649668 100644
--- a/modules/home/nixos/hyprland/settings/rules.nix
+++ b/modules/home/nixos/hyprland/settings/rules.nix
@@ -6,8 +6,8 @@ in {
   wayland.windowManager.hyprland.windowRules = [
     # TODO tag games for immediate
     {
-      matches = {initialTitle = "Syncthing Tray";};
-      rules = ["float" "center 1" "size 50%"];
+      matches = {initial_title = "Syncthing Tray";};
+      rules = ["float 1" "center 1" "size 50%"];
     }
     {
       matches = {class = "factorio";};
@@ -18,12 +18,12 @@ in {
       rules = ["tag +games"];
     }
     {
-      matches = {initialTitle = "Dolphin";};
-      rules = ["tag +games" "idleinhibit focus"];
+      matches = {initial_title = "Dolphin";};
+      rules = ["tag +games" "idle_inhibit focus"];
     }
     {
       matches = {tag = "games";};
-      rules = ["workspace 6" "immediate"];
+      rules = ["workspace 6" "immediate 1"];
     }
     {
       matches = {title = "Steam";};
@@ -31,19 +31,19 @@ in {
     }
     {
       matches = {title = "Steam Settings";};
-      rules = ["float" "size 50%" "center 1"];
+      rules = ["float 1" "size 50%" "center 1"];
     }
     {
       matches = {class = "firefox";};
-      rules = ["idleinhibit fullscreen"];
+      rules = ["idle_inhibit fullscreen"];
     }
     {
       matches = {class = "1Password";};
-      rules = ["center 1" "float" "size 50%"];
+      rules = ["center 1" "float 1" "size 50%"];
     }
     {
       matches = {title = "BTOP";};
-      rules = ["float" "size 85%" "pin" "center 1" "stayfocused" "dimaround"];
+      rules = ["float 1" "size 85%" "pin 1" "center 1" "stay_focused 1" "dim_arou
nd 1"];
     }
     {
       matches = {class = "vesktop";};
@@ -51,18 +51,18 @@ in {
     }
     {
       matches = {title = "^(Picture-in-Picture)$";};
-      rules = ["float" "pin"];
+      rules = ["float 1" "pin 1"];
     }
     {
       matches = {title = "^(Open Files)$";};
-      rules = ["center 1" "float" "size 50%"];
+      rules = ["center 1" "float 1" "size 50%"];
     }
     {
-      matches = {initialTitle = "dropdown";};
+      matches = {initial_title = "dropdown";};
       rules = [
         "monitor 0"
         "animation slide down"
-        "float"
+        "float 1"
         "move 12 46"
         "size ${widthMinusGaps} 30%"
       ];

diff --git a/modules/home/nixos/hyprland/set
tings/rules.nix b/modules/home/nixos/hyprlan
d/settings/rules.nix
index 020fd2d..d649668 100644
--- a/modules/home/nixos/hyprland/settings/r
ules.nix
+++ b/modules/home/nixos/hyprland/settings/r
ules.nix
@@ -6,8 +6,8 @@ in {
   wayland.windowManager.hyprland.windowRule
s = [
     # TODO tag games for immediate
     {
-      matches = {initialTitle = "Syncthing 
Tray";};
-      rules = ["float" "center 1" "size 50%
"];
+      matches = {initial_title = "Syncthing
 Tray";};
+      rules = ["float 1" "center 1" "size 5
0%"];
     }
     {
       matches = {class = "factorio";};
@@ -18,12 +18,12 @@ in {
       rules = ["tag +games"];
     }
     {
-      matches = {initialTitle = "Dolphin";}
;
-      rules = ["tag +games" "idleinhibit fo
cus"];
+      matches = {initial_title = "Dolphin";
};
+      rules = ["tag +games" "idle_inhibit f
ocus"];
     }
     {
       matches = {tag = "games";};
-      rules = ["workspace 6" "immediate"];
+      rules = ["workspace 6" "immediate 1"]
;
     }
     {
       matches = {title = "Steam";};
@@ -31,19 +31,19 @@ in {
     }
     {
       matches = {title = "Steam Settings";}
;
-      rules = ["float" "size 50%" "center 1
"];
+      rules = ["float 1" "size 50%" "center
 1"];
     }
     {
       matches = {class = "firefox";};
-      rules = ["idleinhibit fullscreen"];
+      rules = ["idle_inhibit fullscreen"];
     }
     {
       matches = {class = "1Password";};
-      rules = ["center 1" "float" "size 50%
"];
+      rules = ["center 1" "float 1" "size 5
0%"];
     }
     {
       matches = {title = "BTOP";};
-      rules = ["float" "size 85%" "pin" "ce
nter 1" "stayfocused" "dimaround"];
+      rules = ["float 1" "size 85%" "pin 1"
 "center 1" "stay_focused 1" "dim_around 1"]
;
     }
     {
       matches = {class = "vesktop";};
@@ -51,18 +51,18 @@ in {
     }
     {
       matches = {title = "^(Picture-in-Pict
ure)$";};
-      rules = ["float" "pin"];
+      rules = ["float 1" "pin 1"];
     }
     {
       matches = {title = "^(Open Files)$";}
;
-      rules = ["center 1" "float" "size 50%
"];
+      rules = ["center 1" "float 1" "size 5
0%"];
     }
     {
-      matches = {initialTitle = "dropdown";
};
+      matches = {initial_title = "dropdown"
;};
       rules = [
         "monitor 0"
         "animation slide down"
-        "float"
+        "float 1"
         "move 12 46"
         "size ${widthMinusGaps} 30%"
       ];
 
[ BACK TO LOG ]
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET