79 lines
2.2 KiB
Markdown
79 lines
2.2 KiB
Markdown
|
|
# Hyprland Version History — Breaking Config Changes
|
|||
|
|
|
|||
|
|
Focus: syntax changes that affect our config. Not a full changelog.
|
|||
|
|
|
|||
|
|
## Installed: 0.51.1 (Sept 2025)
|
|||
|
|
|
|||
|
|
## windowrule syntax timeline
|
|||
|
|
|
|||
|
|
### Pre-0.48 (old — do not use)
|
|||
|
|
```
|
|||
|
|
windowrule = float, ^(class-regex)$ # v1: positional class, no prefix
|
|||
|
|
windowrulev2 = float, class:^(regex)$ # v2: explicit class: prefix
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 0.48–0.51 (CURRENT — use this)
|
|||
|
|
Both `windowrule` and `windowrulev2` keywords work, but `windowrulev2` is deprecated.
|
|||
|
|
Use `windowrule` with `match:` prefixed props. Patterns are plain strings or bare regexes —
|
|||
|
|
do NOT use the old rulev2 `^(...)$` wrapping; Hyprland 0.51 rejects it as "Invalid rulev2".
|
|||
|
|
```
|
|||
|
|
windowrule = match:class classname, effect
|
|||
|
|
windowrule = match:class classname, match:title titlepattern, effect1, effect2
|
|||
|
|
windowrule = match:class ^org\.gnome\., rounding 12 # prefix regex — anchor ok, no outer ()
|
|||
|
|
```
|
|||
|
|
Props can come in any order relative to effects.
|
|||
|
|
Boolean effects: `float`, `tile`, `pin`, `no_initial_focus` (no "on" suffix needed)
|
|||
|
|
Value effects: `rounding 12`, `opacity 0.9`
|
|||
|
|
|
|||
|
|
### 0.52+ (not yet installed — do not use until upgrade)
|
|||
|
|
Block syntax introduced:
|
|||
|
|
```
|
|||
|
|
windowrule {
|
|||
|
|
name = optional-name
|
|||
|
|
match:class = ^(regex)$
|
|||
|
|
float = yes
|
|||
|
|
rounding = 12
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
Anonymous flat block syntax also available:
|
|||
|
|
```
|
|||
|
|
windowrule = match:class regex, effect value
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## layerrule syntax timeline
|
|||
|
|
|
|||
|
|
### Pre-0.48 (old)
|
|||
|
|
```
|
|||
|
|
layerrule = no_anim, ^(namespace)$ # positional namespace
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 0.48–0.51 (CURRENT — use this)
|
|||
|
|
```
|
|||
|
|
layerrule = match:namespace namespacename, no_anim
|
|||
|
|
```
|
|||
|
|
Same rule as windowrule: plain string or bare regex, no `^(...)$` wrapping.
|
|||
|
|
|
|||
|
|
### 0.52+ (block syntax)
|
|||
|
|
```
|
|||
|
|
layerrule {
|
|||
|
|
match:namespace = ^(regex)$
|
|||
|
|
no_anim = on
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Other notable changes
|
|||
|
|
|
|||
|
|
| Version | Change |
|
|||
|
|
|---------|--------|
|
|||
|
|
| 0.48 | `windowrulev2` deprecated; new `windowrule` with `match:` prefix |
|
|||
|
|
| 0.48 | `layerrule` updated to use `match:namespace` prefix |
|
|||
|
|
| 0.52+ | Block syntax for `windowrule` and `layerrule` |
|
|||
|
|
|
|||
|
|
## Upgrade checklist
|
|||
|
|
|
|||
|
|
When upgrading Hyprland:
|
|||
|
|
1. Check `hyprland --version` (or `rpm -q hyprland`)
|
|||
|
|
2. Scan release notes for "windowrule", "layerrule", "deprecated"
|
|||
|
|
3. Update this file
|
|||
|
|
4. Update the comment in `hyprland.conf` window rules section
|