layout.gaps = 0: tmux-style lines between tiles, unchanged.
layout.gaps > 0: every tile owns a full border (border.width, border.active / border.inactive), even alone.
New border.radius (0–64, default 0, reloadable): rounds floats always and tiles with gaps; fullscreen, popups and layers stay square.
Rounded corners are done in the compose shader with an SDF coverage mask (flagRounded / flagRing); square windows pay one branch. The border is one ring draw.
Rounded windows are never opaque occluders, direct-scanned out or put on overlay planes.
README no longer rules out rounded corners; docs/config.md and examples/config list border.radius.
Checks
make check, make race, make mocks-check, staticcheck, make spv-check; headless e2e with gaps 8 / radius 10 (borders, AA corner, overview) and gaps 0 (tmux line unchanged).
Written in Go, without cgo. Each piece of state has one owner goroutine, connected to the others by channels; hot paths reuse memory and client buffers stay off the Go heap. See [Architecture](docs/dev/architecture.md) for the concurrency model, the GC strategy and the reusable Go libraries.
29
29
30
-
Small on purpose, and staying small: no blur, shadows, rounded corners or themes. No built-in bar or wallpaper either: bring your own, any layer-shell client works.
30
+
Small on purpose, and staying small: no blur, shadows or themes. No built-in bar or wallpaper either: bring your own, any layer-shell client works.
Written in Go, without cgo. Each piece of state has one owner goroutine, connected to the others by channels; hot paths reuse memory and client buffers stay off the Go heap. See [Architecture](docs/dev/architecture.md) for the concurrency model, the GC strategy and the reusable Go libraries.
28
Written in Go, without cgo. Each piece of state has one owner goroutine, connected to the others by channels; hot paths reuse memory and client buffers stay off the Go heap. See [Architecture](docs/dev/architecture.md) for the concurrency model, the GC strategy and the reusable Go libraries.
29
29
30
-
Small on purpose, and staying small: no blur, shadows, rounded corners or themes. No built-in bar or wallpaper either: bring your own, any layer-shell client works.
30
+
Small on purpose, and staying small: no blur, shadows or themes. No built-in bar or wallpaper either: bring your own, any layer-shell client works.
31
31
32
## Install
32
## Install
33
33
Mdocs/config.md+3-0
@@ -29,6 +29,7 @@ See [examples/config](../examples/config) for every key with its default.
29
29
| `startup` | none | Commands run at session start, separated by `;` |
| `bind.<keys>` | see [Default binds](#default-binds) | [Binds](#binds) |
86
87
88
+
With `layout.gaps = 0`, borders are tmux-style lines between tiles. With gaps, every tile gets a full border, even alone. `border.radius` rounds floating windows always and tiles with gaps; fullscreen windows, popups and layers stay square.
89
+
87
90
`<output>` is a connector such as `DP-2`, or a monitor key (`make model serial`).
88
91
89
92
The position hint follows actual workspace/band changes and monitor focus, regardless
@@ -29,6 +29,7 @@ See [examples/config](../examples/config) for every key with its default.
29
| `startup` | none | Commands run at session start, separated by `;` |
29
| `startup` | none | Commands run at session start, separated by `;` |
| `bind.<keys>` | see [Default binds](#default-binds) | [Binds](#binds) |
86
| `bind.<keys>` | see [Default binds](#default-binds) | [Binds](#binds) |
86
87
88
+
With `layout.gaps = 0`, borders are tmux-style lines between tiles. With gaps, every tile gets a full border, even alone. `border.radius` rounds floating windows always and tiles with gaps; fullscreen windows, popups and layers stay square.
89
+
87
`<output>` is a connector such as `DP-2`, or a monitor key (`make model serial`).
90
`<output>` is a connector such as `DP-2`, or a monitor key (`make model serial`).
88
91
89
The position hint follows actual workspace/band changes and monitor focus, regardless
92
The position hint follows actual workspace/band changes and monitor focus, regardless
Mexamples/config+2-0
@@ -30,6 +30,8 @@ background = #111111
30
30
# The lines along the focused window use active; width 0 disables them,
31
31
# empty inactive draws only the focused lines. Floats get a full border.
32
32
border.width = 2
33
+
# Corner radius in logical pixels (0 to 64): floats always, tiles only with gaps.
34
+
border.radius = 0
33
35
border.active = #808080
34
36
border.inactive = #111111
35
37
@@ -30,6 +30,8 @@ background = #111111
30
# The lines along the focused window use active; width 0 disables them,
30
# The lines along the focused window use active; width 0 disables them,
31
# empty inactive draws only the focused lines. Floats get a full border.
31
# empty inactive draws only the focused lines. Floats get a full border.
32
border.width = 2
32
border.width = 2
33
+
# Corner radius in logical pixels (0 to 64): floats always, tiles only with gaps.