Skip to main content
Available since version 25.01
Layer rules let you adjust behavior for individual layer-shell surfaces. They work similarly to window rules, with match and exclude directives that control which layer-shell surfaces the rule should apply to, and a number of properties that you can set. Layer rules are processed and work very similarly to window rules, just with different matchers and properties. Please read the window rules documentation to learn how matching works.

Configuration Structure

Here’s an example showing all available matchers and properties:

Layer Surface Matching

namespace

string (regex)
A regular expression that should match anywhere in the surface namespace. You can find the namespaces of all open layer-shell surfaces by running niri msg layers.
You can read about the supported regular expression syntax in the Rust regex documentation.

at-startup

boolean
Matches during the first 60 seconds after starting niri. Can be true or false.

Dynamic Properties

These properties apply continuously to open layer-shell surfaces.

block-out-from

string
Block out surfaces from xdg-desktop-portal screencasts or all screen captures. Surfaces will be replaced with solid black rectangles.Options:
  • "screencast" - Block from screencasts only
  • "screen-capture" - Block from all screen captures
This can be useful for notifications. The same caveats and instructions apply as for the block-out-from window rule.

opacity

number
Set the opacity of the surface. 0.0 is fully transparent, 1.0 is fully opaque. This is applied on top of the surface’s own opacity, so semitransparent surfaces will become even more transparent.
Opacity is applied to every child of the layer-shell surface individually, so subsurfaces and pop-up menus will show window content behind them.

shadow

Available since version 25.02
object
Override the shadow options for the surface. These rules have the same options as the normal shadow config in the layout section.
Unlike window shadows, layer surface shadows always need to be enabled with a layer rule. That is, enabling shadows in the layout config section won’t automatically enable them for layer surfaces.
Layer surfaces have no way to tell niri about their visual geometry. For example, if a layer surface includes some invisible margins (like mako), niri has no way of knowing that, and will draw the shadow behind the entire surface, including the invisible margins.To use niri shadows, you’ll need to configure layer-shell clients to remove their own margins or shadows.

geometry-corner-radius

Available since version 25.02
number
Set the corner radius of the surface in logical pixels. This setting will only affect the shadow—it will round its corners to match the geometry corner radius.

place-within-backdrop

Available since version 25.05
boolean
Set to true to place the surface into the backdrop visible in the Overview and between workspaces. This will only work for background layer surfaces that ignore exclusive zones (typical for wallpaper tools). Layers within the backdrop will ignore all input.

baba-is-float

Available since version 25.05
boolean
Make your layer surfaces FLOAT up and down. This is a natural extension of the April Fools’ 2025 feature.