Window zone management for KDE Plasma
Define zones on your screen. Drag windows into them. Done.
Docs and screenshots: phosphor-works.github.io/plasmazones
Hold Alt (or your configured modifier) while dragging a window. Zones light up. Drop the window into one and it resizes to fill that zone.
- Drag-to-snap tiling with a modifier-held overlay and post-snap zone thumbnails for follow-up placement — Features →
- 26 built-in layouts (grids, BSP, master+stack, fibonacci, portrait / ultrawide / super-ultrawide variants) plus a visual editor — Layouts gallery →
- 25 JavaScript autotile algorithms in a sandboxed engine, with hot-reload for custom ones — Autotile gallery → · authoring guide →
- 26 GLSL shader overlays (audio-reactive, procedural, distro-themed) with up to 4 image textures each — Shader gallery → · authoring guide →
- Per-monitor, per-desktop, and virtual-screen layouts — subdivide any physical monitor into independent logical workspaces with their own layouts, autotile state, and shortcuts
- Coming from FancyZones? Feature map →
yay -S plasmazones-bin # Arch (AUR, prebuilt)
sudo dnf copr enable fuddlesworth/PlasmaZones && sudo dnf install plasmazones # Fedora (COPR)openSUSE Tumbleweed, a portable tarball for Fedora Atomic / no-root setups, and source-build instructions (including the -DUSE_KDE_FRAMEWORKS=OFF portable build): Install page →.
After install, enable the daemon:
systemctl --user enable --now plasmazones.service
kbuildsycoca6 --noincremental # KDE only — refresh the service cacheRequirements: KDE Plasma 6 on Wayland — the integration runs as a KWin effect — plus Qt 6.6+, CMake 3.16+, and a C++20 compiler. Optional: KDE Frameworks 6.6+ for the settings KCM and KGlobalAccel shortcuts, PlasmaActivities for activity-based layouts. The portable build (-DUSE_KDE_FRAMEWORKS=OFF) drops the framework deps.
Add to your flake inputs:
plasmazones.url = "github:fuddlesworth/PlasmaZones";Import the module and enable it in your NixOS configuration:
imports = [ inputs.plasmazones.nixosModules.default ];
programs.plasmazones.enable = true;After rebuilding, enable the daemon and refresh KDE:
systemctl --user enable --now plasmazones.service
kbuildsycoca6 --noincrementalThen log out and back in.
nix profile install github:fuddlesworth/PlasmaZonesNote: This pins the package to the flake's nixpkgs. If your system's KWin updates, the effect plugin may stop loading until you reinstall. The NixOS module method above avoids this by always building against your system's KWin.
- Enable the daemon:
systemctl --user enable --now plasmazones.service - Open the settings app:
plasmazones-settings(or System Settings → PlasmaZones on KDE) - Enable the effect in System Settings → Window Management → Desktop Effects → PlasmaZones. This is required — PlasmaZones runs as a KWin effect, so nothing works until it is ticked.
- Drag any window while holding Alt — zones appear, drop to snap.
Full first-run tour: Getting started →.
| Action | Default |
|---|---|
| Open editor | Meta+Shift+E |
| Open settings | Meta+Shift+P |
| Snap window to zone 1–9 | Meta+Ctrl+1 … Meta+Ctrl+9 |
| Previous / next layout | Meta+Alt+[ / Meta+Alt+] |
| Open layout picker | Meta+Alt+Space |
| Toggle autotile | Meta+Shift+T |
| Toggle floating | Meta+F |
| Restore window size | Meta+Alt+Escape |
Full reference — around 50 bindings across core actions, zone movement, snap, layouts, autotile, virtual screens, and the editor: Keyboard shortcuts →.
All bindings are rebindable in System Settings → Shortcuts → PlasmaZones (KDE) or the PlasmaZones settings app.
Settings live in ~/.config/plasmazones/config.json. Layouts live in ~/.local/share/plasmazones/layouts/. Everything is edited through the settings app:
plasmazones-settings # overview
plasmazones-settings -p layouts # jump straight to layouts
plasmazones-settings --page tiling-behaviorThe app is single-instance — launching it again while running raises the existing window and switches to the requested page.
Daemon startup, verbose logging, KWin minimum-size rules, and the full support-report flow: Troubleshooting →.
Better Blur DX: the force-blur mode blurs every window not on its allowlist, which catches PlasmaZones' overlay surfaces and makes the screen look blurred all the time. To fix it, open System Settings → Window Management → Desktop Effects → Better Blur DX → Configure → Force blur tab, select "Blur all except matching", then add this line:
/^plasmazones/
The slashes are required, they put the parser into regex mode. One entry covers the daemon, editor, and settings. The "Blur all except matching" toggle is the important part. The default mode treats the list as a whitelist instead of an exclusion list.
When filing a bug, attach a support report:
plasmazones-reportThe archive lands in /tmp by default with home paths redacted, so it's safe to attach to a public issue.
13 interfaces on org.plasmazones for scripting and integration. Interface inventory, scripting recipes, and signal watching: D-Bus scripting guide →.
Directory tree and data locations: Project Structure on the wiki.
See CONTRIBUTING.md for guidelines on code style, license headers, testing, and translations.
If PlasmaZones is useful to you, consider supporting development:
Bug reports and feature requests: GitHub Issues
GPL-3.0-or-later
Inspired by FancyZones from PowerToys.
Built for KDE Plasma 6 on Wayland.
