Animation settings live in the top-level animation section. duration_ms and
curve set defaults for every event when present; a nested event can override
either value. The master switch makes every transition instant. Each event also
has its own switch.
[animation]
enabled = true
duration_ms = 250
curve = "easeout"
[animation.windows_in]
enabled = true
duration_ms = 150
curve = "easeout"
style = "popin" # "popin", "zoom", "slide", "fade", or "none"
scale = 0.85 # 0.1-1.0, used by "popin"
[animation.windows_out]
enabled = true
duration_ms = 150
curve = "easeout"
style = "fade" # "fade" or "slide"
[animation.windows_move]
enabled = true
duration_ms = 250
curve = "snappy"
[animation.workspaces]
enabled = true
duration_ms = 250
curve = "easeout"
[animation.overview]
enabled = true
duration_ms = 250
curve = "easeout"
[animation.scratchpad]
enabled = false
duration_ms = 250
curve = "easeout"
dim = 0.5 # 0.0-1.0
blur = false # requires appearance.blur.enabled
scale = 0.0 # 0 preserves geometry; 0.1-1.0 sizes and centers on entry
maximize = false # maximize to edges on entry
fullscreen = false # fullscreen on entry
[animation.border]
enabled = false
duration_ms = 250
curve = "easeout"
[animation.dim_unfocused]
enabled = false
duration_ms = 250
curve = "easeout"
dim = 0.0 # 0.0-1.0
[animation.layers]
enabled = false
duration_ms = 250
curve = "easeout"| Key | Type | Default | Description |
|---|---|---|---|
enabled |
bool | true |
Master switch. When false, every animation transition is instant. |
duration_ms |
int | 250 |
Default duration for all events when explicitly set (1-10000 milliseconds). |
curve |
string | easeout |
Default curve for all events when explicitly set. |
Each event table accepts enabled, duration_ms, and curve. The following
fields are specific to individual event tables:
| Table | Additional fields | Transition |
|---|---|---|
[animation.windows_in] |
style (popin, zoom, slide, fade, or none); scale (0.1-1.0, for popin) |
Window open. |
[animation.windows_out] |
style (fade or slide) |
Window close, using a scene snapshot. |
[animation.windows_move] |
None | Window move and resize. |
[animation.workspaces] |
None | Workspace switch. |
[animation.overview] |
None | Overview open, close, and row settling. |
[animation.scratchpad] |
dim (0.0-1.0); blur; scale (0.0-1.0); maximize; fullscreen |
Scratchpad show, hide, and backdrop. |
[animation.border] |
None | Focus-ring color transition in OkLab color space. |
[animation.dim_unfocused] |
dim (0.0-1.0) |
Unfocused-window opacity. dim = 0 disables it. |
[animation.layers] |
None | Layer-shell surface map and unmap fades. |
An event's enabled = false makes only that transition instant. Scratchpad
dim and blur remain active, without a fade, when animation is disabled.
Scratchpad scale, maximize, and fullscreen apply when a window enters the
scratchpad.
Each curve accepts a built-in name such as linear, ease, easeout,
snappy, bounce, or elastic; a cubic bezier string
"x1,y1,x2,y2"; or a spring string "spring: damping,stiffness". Bezier x
coordinates must be between 0 and 1. Spring damping must be between 0.01 and 5,
and stiffness between 1 and 1000.
Custom named curves can be registered once and reused by name:
[animation.beziers]
myBezier = [0.05, 0.9, 0.1, 1.05]
[animation.springs]
myBounce = { damping = 0.5, stiffness = 200 }Then reference them as curve = "myBezier" or curve = "myBounce" in any
event section.