server-desktop-01/docs/hyprland/window-rules.md

88 lines
3.0 KiB
Markdown
Raw Permalink Normal View History

# Window Rules — Hyprland 0.480.51
Reference for the syntax currently used on this machine.
See [version-history.md](version-history.md) for what changes on upgrade.
## Syntax (current: 0.480.51)
```
windowrule = match:class classname, effect
windowrule = match:class classname, match:title titlepattern, effect1, effect2
```
Patterns are plain names or bare regexes. **Do NOT use `^(...)$` wrapping** — Hyprland 0.51
rejects it as "Invalid rulev2" (that was the old windowrulev2 class-matching format).
Anchors are fine without outer grouping: `^org\.gnome\.` matches any GNOME reverse-DNS class.
Multiple props and effects can be on one line, comma-separated, any order.
## Match props (filtering)
| Prop | Example | Notes |
|------|---------|-------|
| `match:class` | `match:class firefox` | Window class (app ID) |
| `match:title` | `match:title Picture-in-Picture` | Window title |
| `match:xwayland` | `match:xwayland true` | XWayland windows only |
| `match:float` | `match:float true` | Currently floating |
| `match:fullscreen` | `match:fullscreen true` | Currently fullscreen |
Use `hyprctl clients` to find a window's class and title.
## Static effects (applied once at window open)
| Effect | Example | Notes |
|--------|---------|-------|
| `float` | `float` | Force float |
| `tile` | `tile` | Force tile |
| `fullscreen` | `fullscreen` | Force fullscreen |
| `maximize` | `maximize` | Force maximize |
| `rounding` | `rounding 12` | Pixel rounding (overrides global) |
| `no_initial_focus` | `no_initial_focus` | Don't steal focus on open |
| `pin` | `pin` | Show on all workspaces (float only) |
| `move` | `move 100 200` | Position (float only) |
| `size` | `size 800 600` | Size (float only) |
| `workspace` | `workspace 2` | Open on specific workspace |
| `monitor` | `monitor 1` | Open on specific monitor |
| `suppress_event` | `suppress_event maximize` | Ignore window events |
## Dynamic effects (re-evaluated on change)
| Effect | Example |
|--------|---------|
| `opacity` | `opacity 0.9` or `opacity 0.9 0.7` (active inactive) |
| `border_color` | `border_color rgb(FF0000)` |
| `no_blur` | `no_blur` |
| `no_shadow` | `no_shadow` |
| `no_anim` | `no_anim` |
| `no_focus` | `no_focus` |
| `idle_inhibit` | `idle_inhibit always` |
## Our rules (reference)
```
# Force-tile apps that default to floating
windowrule = match:class gnome-control-center, tile
windowrule = match:class pavucontrol, tile
# Force-float small utilities
windowrule = match:class gnome-calculator, float
windowrule = match:class org\.gnome\.Nautilus, float
# Rounded corners for all GNOME apps (prefix match)
windowrule = match:class ^org\.gnome\., rounding 12
# Multi-prop (steam toasts)
windowrule = match:class steam, match:title notificationtoasts, no_initial_focus, pin
# Firefox PiP
windowrule = match:class firefox, match:title Picture-in-Picture, float
```
## Finding window class/title
```bash
hyprctl clients | grep -E "class:|title:"
# or run this in a terminal, then open the window:
hyprctl -j clients | jq '.[] | {class, title}'
```