Drag a monitor.
It is already applied.
kanshi_gui arranges multi-display setups under Wayland by hand instead of by config file. Move a screen and the running compositor moves with you — no save, no restart, no reload. Save the arrangement once and it comes back exactly like this, every time you dock.
curl -fsSL https://apt.nurkert.de/install/kanshi-gui | sudo shA working piece of the app, running in your browser. In the real thing, every one of these moves reaches the compositor.
The compositor moves while you drag
Position, scale, rotation and mode go into the running session the moment you change them. What you are looking at is not a preview of the result — it is the result.
A change that can black out a screen has 15 seconds
It is only kept if you say so. A click elsewhere, a focus change or simply waiting are not a yes. The timeout always puts it back, because the person who cannot see anymore cannot answer either.
It comes back exactly like this
The arrangement is written into your kanshi config by a real scfg parser that edits the file in place — your comments, your other profiles and anything it does not recognise survive the save.
The question you can only answer if it worked
Changing a mode or switching an output off can leave a screen black — and someone who sees nothing cannot take it back. So the app asks, on the screen, and waits.
Only a positive answer keeps the change. Not a click on the dimmed canvas, not a focus change, and above all not the clock running out. Doing nothing is the safe move — which is the whole point, because doing nothing is exactly what happens when you cannot see the question.
Try it: keep it, put it back, or just let the countdown finish.
Small app, decided details
Version 2.0 deleted ten preferences, a 248px rail and the first-run wizard. What is left is the part that had to be there — and each of these is a decision, not an option you have to find.
Smart snapping
Guide lines like a design tool, corner alignment on top, bottom and centre — and a magnet that backs off once you have escaped it twice in the same drag.
Hotplug aware
Plug a screen in or pull it out and the canvas refreshes itself. A drag that a hotplug invalidated is cancelled, never committed to the wrong output.
Identify displays
One button flashes a large pulsing number onto every screen, so you know which rectangle on the canvas is the panel on your left.
Mirror onto another output
Point one screen at another through wl-mirror. Mirrored tiles take a colour of their own, because mirroring is a relationship between two screens and not a selection.
Workspaces, if you want them
Optionally spread sway workspaces 1–9 across your monitors, interleaved or grouped. Off by default — a first launch never reshuffles the desk you already have.
Setups, not config blocks
Capture the screens you have now, rename them, forget them. Switching uses kanshictl reload where it exists, so re-applying no longer flickers the screen.
It will not lock you out
The last enabled output cannot be disabled. Not a warning dialog, not a preference — the app simply refuses, because there is no good reason to allow it.
Light, dark, and your accent
The theme follows the system, and the accent colour is read from sway's client.focused so the app agrees with the window manager it sits next to.
It picks its backend at startup
swaymsg where sway is actually running, wlr-randr everywhere else in the wlroots family. If neither is there, it stays useful as an offline profile editor rather than refusing to start.
| Compositor | Backend | Live apply | Mirror · identify · workspaces |
|---|---|---|---|
| sway | swaymsg | yes | Everything |
| Hyprland · Wayfire · niri · other wlroots | wlr-randr | yes | Layout only |
| GNOME on Wayland | not supported yet | no | Offline editor |
sway needs a SWAYSOCK that points at a live socket — having the sway tools installed is not enough, so a non-sway session with them lying around lands on the wlr-randr path on purpose. Mirroring, identify banners and workspace placement are sway-specific because they go through sway IPC, swaynag and wl-mirror.
Three ways in
You need a Wayland session and kanshi with a working config at ~/.config/kanshi/config. Everything else the app brings along.
Debian and Ubuntu users: the APT route is the one that keeps updating. The other two are for when you would rather build it yourself.
Registers apt.nurkert.de as a source, so kanshi_gui updates with the rest of the system instead of needing you to remember it.
curl -fsSL https://apt.nurkert.de/install/kanshi-gui | sudo shThen launch it with kanshi_gui — or from your application menu.
Arrange the screens once.
Then stop thinking about it.
curl -fsSL https://apt.nurkert.de/install/kanshi-gui | sudo sh