# =============================================================================
# Aqueous window-rules configuration reference
# =============================================================================
# Discovery order (first path wins):
# 1. $AQUEOUS_RULES (~ is expanded)
# 2. [rules].path from wm.toml
# 3. $XDG_CONFIG_HOME/aqueous/rules.toml
# 4. ~/.config/aqueous/rules.toml
# Rules are hot-reloaded with the rest of the configuration. The unbound
# builtin action `reload_rules` can also reload only this file.
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Layout used for non-anchor companion windows. Each surviving side column gets
# an independent instance of this layout.
remainder_layout = "grid" # tile | monocle | grid | rows | dwindle | reverse-dwindle | scrolling | float
# Layout used on an output/workspace where Game Mode has no matching anchor.
fallback_layout = "grid" # same accepted values as remainder_layout
# Gap between the anchor and companion columns.
gaps_inner = 8 # integer >= 0
# [layout.options.game-mode] is not a substitute for this section: only common
# layout geometry/border keys are accepted there.
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Rules use first-match-wins order. At least one matcher is required; a block
# without app_id, class, or title is silently discarded. Every matcher present
# in a block must match. app_id is used by native Wayland clients, class is
# useful for XWayland clients, and title matches the current window title.
# Matchers support `*` and `?` globs.
# Accepted fields inside [[window]]:
# layout tile | monocle | grid | rows | dwindle | reverse-dwindle |
# reverse_dwindle | scrolling | float | floating |
# game-mode | game_mode | composable
# workspace 1-based workspace number
# floating true/false; enables floating placement independently of
# layout (layout="float" also sets floating=true)
# ignore_struts true/false; use the full output instead of panel struts
# width, height positive pixel sizes; 0/invalid means automatic
# x, y offsets from the usable area's origin; 0 means centered
# anchor center | top | bottom | left | right
# size native, pixels ("2560x1080"), or output fractions
# ("0.7x0.8", each component > 0 and <= 1)
# scale positive multiplier applied to the resolved anchor size
# blur true/false per-window preference; false is useful for
# opacity 0.0 through 1.0
# Stateful rule properties have lifecycle ownership. A manual workspace move,
# fullscreen toggle, or floating toggle overrides that property until a new
# matcher becomes active; the rule is not blindly enforced every manage cycle.
# -----------------------------------------------------------------------------
# Complete Game Mode example
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Complete floating placement example
# -----------------------------------------------------------------------------
# app_id = "org.example.Dialog"
# class = "ExampleDialog"
# -----------------------------------------------------------------------------
# Layer-shell blur examples
# -----------------------------------------------------------------------------
# Layer rules match the namespace advertised by panels, launchers, notification
# surfaces, and other layer-shell clients. blur covers the main surface;
# blur_popups also covers its XDG popups and nested popups. Global blur must be
# enabled in wm.toml, and blur_popups only takes effect when blur is also true.
# Run `aqueousctl scene` to discover a mapped surface's namespace.
# Blur a panel and its menus/popups:
# Blur only the main surface, leaving its popups unblurred:
# Namespace matchers support `*` and `?` globs:
# namespace = "notifications-*"
# Explicitly keep a matching layer surface and its popups unblurred:
# namespace = "screen-locker"
# Layer rules are first-match-wins. Put exact exceptions before broader glob
# rules when their namespace patterns overlap.
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Note: the current rule snapshot defaults an omitted layout to game-mode.
# Specify layout explicitly in every rule so visual-only or placement-only
# rules cannot unexpectedly select Game Mode for their output/workspace.