PlasmaZones

Zone-based window tiling for KDE Plasma.

Define named regions on your screen, drag windows into them, and get a layout that actually fits the way you work. Built on the Phosphor library suite; scriptable, themeable, Wayland-native.

Hero screenshot src/assets/plasmazones/editor.png
The layout editor. Named zones designed visually, with normalized coordinates so the same layout works at any screen size.

Features

Drag-to-snap tiling

Hold a modifier while dragging any window. Zones light up, drop to fill. The modifier is configurable (Alt, Meta, Ctrl+Alt, Alt+Shift, Alt+Meta, Ctrl+Alt+Meta), and Ctrl+Alt over two adjacent zones snaps across both.

26 built-in layouts, custom editor

Grids, BSP and fibonacci, master+stack, portrait / ultrawide / super-ultrawide variants, priority grids. The visual editor draws custom zones freehand with grid snapping, undo/redo, and per-zone colors. Coordinates are normalized, so one layout works at any screen size.

Per-monitor, per-desktop, per-activity

Assign different layouts to each monitor, virtual desktop, and Plasma activity. Quick-layout slots bind Meta+Alt+1..9 for fast layout switches.

Virtual screens

Subdivide a physical monitor into 2–10 virtual screens with drag-to-resize boundaries. Each gets its own layout, autotile state, and settings. Swap with Meta+Ctrl+Shift+arrows.

25 autotile algorithms

BSP, spiral, master+stack, Krohnkite-style deck stacking, plus 21 more. Runs in a sandboxed QJSEngine. Per-side inner and outer gaps, smart-gaps when only one window is tiled, hot-reload for custom JS in ~/.local/share/plasmazones/algorithms/.

Zone overlays and GLSL shaders

Zone highlights, snap previews, and drag ghosts render through a multipass ShaderEffect. 26 bundled shaders (audio-reactive, procedural, distro-themed) plus your own in ~/.local/share/plasmazones/shaders/.

Snap assist

After you drop a window into a zone, empty zones show thumbnails of other windows for one-click follow-up placement.

Global shortcuts

Snap, switch zones, move windows, cycle layouts — bound through KGlobalAccel, with an XDG Portal fallback in the portable build.

See it in action

Tiles auto-swap placeholder → real image as soon as the PNG lands under src/assets/plasmazones/ with the listed filename. No code edit needed.

Install

Arch Linux (AUR) → Prebuilt binary, or plasmazones for the source package.

yay -S plasmazones-bin

Fedora (COPR) → Official COPR repo.

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

openSUSE Tumbleweed (OBS) → Community-maintained by ilFrance.

sudo zypper addrepo https://download.opensuse.org/repositories/home:ilFrance/openSUSE_Tumbleweed/home:ilFrance.repo
sudo zypper refresh
sudo zypper install plasmazones

Nix → Or wire the flake into your inputs.

nix profile install github:fuddlesworth/PlasmaZones

Portable tarball → Lands in ~/.local. Best for Fedora Atomic or no-root environments.

curl -L -o plasmazones.tar.gz \
https://github.com/fuddlesworth/PlasmaZones/releases/latest/download/plasmazones-linux-x86_64.tar.gz
tar xzf plasmazones.tar.gz
cd plasmazones-linux-x86_64 && ./install.sh

Build from source → Needs Qt 6.6+, KF6, CMake 3.16+, a C++20 compiler, wayland-scanner.

git clone https://github.com/fuddlesworth/PlasmaZones.git
cd PlasmaZones
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build -j$(nproc)
sudo cmake --install build

Galleries

Every built-in, rendered from the same metadata the daemon reads at runtime.

Learn

Extend it

PlasmaZones has two first-class extension points. Custom content goes in ~/.local/share/plasmazones/ and hot-reloads.

Advanced

Built on Phosphor

Every major subsystem is its own library. Fixes land once and reach every consumer, and third-party code can depend on only the pieces it needs.