| `output.<name>.scale` | `1` | 1 to 4, e.g. `1.5` or `4/3` |
58
58
| `output.<name>.primary` | `off` | Gets focus and pointer at startup |
59
59
| `output.<name>.right-of` / `.left-of` / `.above` / `.below` | automatic | Connector to place the output against, e.g. `DP-1` |
60
-
| `output.<name>.offset` | `0` | Logical px along the shared edge: down for `right-of`/`left-of`, right for `above`/`below`. Negative allowed, −65536 to 65536. Ignored without a relation, with a warning |
60
+
| `output.<name>.offset` | `0` | Logical px along the shared edge, −65536 to 65536; see [Output placement](#output-placement) |
61
61
| `output.<name>.hdr` | `off` | Turns on HDR10 on capable outputs; otherwise falls back to SDR (reason in the log) |
62
62
| `output.<name>.sdr-brightness` | `203` | How bright SDR desktop content appears in HDR, in nits (80–1000) |
63
63
| `render.direct-scanout` | `on` | Fullscreen buffers straight to the display |
An output with no relation is placed automatically, left to right after the others, at y=0. An output whose reference is not connected is placed automatically too, and returns to its relation when the reference connects. Relation cycles are ignored with a warning. Positions set by an output-management client (kanshi, wdisplays, wlr-randr) take precedence over relations until the next config reload. The pointer crosses any touching edge. Monitor navigation and column edge crossings follow output geometry; stacked outputs are reached with focus-monitor-up/down.
72
+
Without relations, outputs sit left to right in config order, top-aligned. A relation places an output against another one; `offset` slides it along the shared edge so the pointer crosses where the screens really meet.
73
+
74
+
```ini
75
+
output.DP-2.right-of = DP-1
76
+
output.DP-2.offset = 360 # DP-2 starts 360 px lower than DP-1's top
77
+
```
78
+
79
+
```
80
+
┌────────────┐
81
+
│ │┌─────────┐
82
+
│ DP-1 ││ DP-2 │
83
+
│ 2560x1440 ││1920x1080│
84
+
│ │└─────────┘
85
+
└────────────┘
86
+
```
87
+
88
+
Rules:
89
+
90
+
-`offset` moves down for `right-of`/`left-of` and right for `above`/`below`; negative moves the other way.
91
+
- Sizes are logical: the layout follows scale changes on its own.
92
+
- An output whose reference is not connected is placed automatically until the reference returns.
93
+
- Cycles and invalid values are ignored with a warning in the log.
94
+
- Positions set by kanshi, wdisplays or wlr-randr win until the next config reload.
95
+
-`focus-monitor-*`, `move-workspace-to-monitor-*` and column moves past the edge go to the output on that side.
# Top row: 1200p sides, bottoms aligned with HDMI-1 (1440 - 1200 = 240)
85
116
output.HDMI-1.above = DP-1
86
-
output.DP-4 = 1920x1200
87
117
output.DP-4.left-of = HDMI-1
88
118
output.DP-4.offset = 240
89
-
output.DP-5 = 1920x1200
90
119
output.DP-5.right-of = HDMI-1
91
120
output.DP-5.offset = 240
92
121
```
93
122
94
-
The bottom row is DP-2 | DP-1 | DP-3 and the top row DP-4 | HDMI-1 | DP-5.
95
-
96
123
## Workspace size
97
124
98
125
A workspace inherits its monitor size unless `workspace.<name>.size` sets a logical `WxH`. Its viewport is centered, and columns, maximization, floating windows and fullscreen use that real layout size—not scaled overview previews. Oversized dimensions are limited to the monitor; reserved layer zones still reduce usable space. Monitor mode and scale stay unchanged. Omit `size` or use `inherit` to restore the default. Workspace transitions involving a smaller viewport switch without the vertical slide, keeping scrolling columns inside their frame. Fullscreen inside a smaller viewport uses composition rather than output-covering direct scanout, so fullscreen-game VRR/tearing eligibility does not apply.
| `output.<name>.scale` | `1` | 1 to 4, e.g. `1.5` or `4/3` |
57
| `output.<name>.scale` | `1` | 1 to 4, e.g. `1.5` or `4/3` |
58
| `output.<name>.primary` | `off` | Gets focus and pointer at startup |
58
| `output.<name>.primary` | `off` | Gets focus and pointer at startup |
59
| `output.<name>.right-of` / `.left-of` / `.above` / `.below` | automatic | Connector to place the output against, e.g. `DP-1` |
59
| `output.<name>.right-of` / `.left-of` / `.above` / `.below` | automatic | Connector to place the output against, e.g. `DP-1` |
60
-
| `output.<name>.offset` | `0` | Logical px along the shared edge: down for `right-of`/`left-of`, right for `above`/`below`. Negative allowed, −65536 to 65536. Ignored without a relation, with a warning |
60
+
| `output.<name>.offset` | `0` | Logical px along the shared edge, −65536 to 65536; see [Output placement](#output-placement) |
61
| `output.<name>.hdr` | `off` | Turns on HDR10 on capable outputs; otherwise falls back to SDR (reason in the log) |
61
| `output.<name>.hdr` | `off` | Turns on HDR10 on capable outputs; otherwise falls back to SDR (reason in the log) |
62
| `output.<name>.sdr-brightness` | `203` | How bright SDR desktop content appears in HDR, in nits (80–1000) |
62
| `output.<name>.sdr-brightness` | `203` | How bright SDR desktop content appears in HDR, in nits (80–1000) |
63
| `render.direct-scanout` | `on` | Fullscreen buffers straight to the display |
63
| `render.direct-scanout` | `on` | Fullscreen buffers straight to the display |
An output with no relation is placed automatically, left to right after the others, at y=0. An output whose reference is not connected is placed automatically too, and returns to its relation when the reference connects. Relation cycles are ignored with a warning. Positions set by an output-management client (kanshi, wdisplays, wlr-randr) take precedence over relations until the next config reload. The pointer crosses any touching edge. Monitor navigation and column edge crossings follow output geometry; stacked outputs are reached with focus-monitor-up/down.
72
+
Without relations, outputs sit left to right in config order, top-aligned. A relation places an output against another one; `offset` slides it along the shared edge so the pointer crosses where the screens really meet.
73
+
74
+
```ini
75
+
output.DP-2.right-of = DP-1
76
+
output.DP-2.offset = 360 # DP-2 starts 360 px lower than DP-1's top
77
+
```
78
+
79
+
```
80
+
┌────────────┐
81
+
│ │┌─────────┐
82
+
│ DP-1 ││ DP-2 │
83
+
│ 2560x1440 ││1920x1080│
84
+
│ │└─────────┘
85
+
└────────────┘
86
+
```
87
+
88
+
Rules:
89
+
90
+
-`offset` moves down for `right-of`/`left-of` and right for `above`/`below`; negative moves the other way.
91
+
- Sizes are logical: the layout follows scale changes on its own.
92
+
- An output whose reference is not connected is placed automatically until the reference returns.
93
+
- Cycles and invalid values are ignored with a warning in the log.
94
+
- Positions set by kanshi, wdisplays or wlr-randr win until the next config reload.
95
+
-`focus-monitor-*`, `move-workspace-to-monitor-*` and column moves past the edge go to the output on that side.
# Top row: 1200p sides, bottoms aligned with HDMI-1 (1440 - 1200 = 240)
85
output.HDMI-1.above = DP-1
116
output.HDMI-1.above = DP-1
86
-
output.DP-4 = 1920x1200
87
output.DP-4.left-of = HDMI-1
117
output.DP-4.left-of = HDMI-1
88
output.DP-4.offset = 240
118
output.DP-4.offset = 240
89
-
output.DP-5 = 1920x1200
90
output.DP-5.right-of = HDMI-1
119
output.DP-5.right-of = HDMI-1
91
output.DP-5.offset = 240
120
output.DP-5.offset = 240
92
```
121
```
93
122
94
-
The bottom row is DP-2 | DP-1 | DP-3 and the top row DP-4 | HDMI-1 | DP-5.
95
-
96
## Workspace size
123
## Workspace size
97
124
98
A workspace inherits its monitor size unless `workspace.<name>.size` sets a logical `WxH`. Its viewport is centered, and columns, maximization, floating windows and fullscreen use that real layout size—not scaled overview previews. Oversized dimensions are limited to the monitor; reserved layer zones still reduce usable space. Monitor mode and scale stay unchanged. Omit `size` or use `inherit` to restore the default. Workspace transitions involving a smaller viewport switch without the vertical slide, keeping scrolling columns inside their frame. Fullscreen inside a smaller viewport uses composition rather than output-covering direct scanout, so fullscreen-game VRR/tearing eligibility does not apply.
125
A workspace inherits its monitor size unless `workspace.<name>.size` sets a logical `WxH`. Its viewport is centered, and columns, maximization, floating windows and fullscreen use that real layout size—not scaled overview previews. Oversized dimensions are limited to the monitor; reserved layer zones still reduce usable space. Monitor mode and scale stay unchanged. Omit `size` or use `inherit` to restore the default. Workspace transitions involving a smaller viewport switch without the vertical slide, keeping scrolling columns inside their frame. Fullscreen inside a smaller viewport uses composition rather than output-covering direct scanout, so fullscreen-game VRR/tearing eligibility does not apply.