Skip to content

Releases: fuddlesworth/PlasmaZones

PlasmaZones v3.1.2

26 Jun 03:43
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

PlasmaZones v3.1.2

Fixed

  • A "Default / Any window" layout rule was ignored: a per-context rule that set the engine or snapping layout for any window did nothing, so a virtual desktop with no specific assignment fell through to the global default (for example BSP) instead of the configured layout. A layout-only rule (a snapping layout or tiling algorithm with no engine set) was dropped the same way. Per-context rules now resolve each slot on its own, so the catch-all rule applies as the default and a layout-only rule fills its slot without forcing the engine (#698).
  • Editor zone edits were lost when the geometry snapped back: dragging or resizing a zone updated it on screen, but the change was never written to the layout or shown in the properties panel when the committed geometry rounded back to roughly its original spot. The visual is now reconciled with the saved geometry whenever an operation ends (#697, discussion #696).

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-3.1.2-*-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.1.2-*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (COPR):

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

Fedora (manual RPM):

# Fedora 44
sudo dnf install plasmazones-3.1.2-*.fc44.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:

tar xzf plasmazones-3.1.2-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.sh

NixOS (flake):

# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";

# configuration.nix
programs.plasmazones.enable = true;

NixOS (without flakes):
Build this tag's source against your host's pkgs (no release asset needed):

# configuration.nix
environment.systemPackages = [
  (pkgs.callPackage
    "${builtins.fetchTarball "https://github.com/fuddlesworth/PlasmaZones/archive/v3.1.2.tar.gz"}/packaging/nix/package.nix"
    { version = "3.1.2"; })
];

Post-Installation

systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones

PlasmaZones v3.1.1

25 Jun 01:03
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

PlasmaZones v3.1.1

Added

  • Route a window to a monitor or virtual desktop: two new window-rule actions, RouteToScreen and RouteToDesktop, open a matched window on a specific monitor or virtual desktop (or both) and can snap it into a zone there. On its own a rule can just move the window to that monitor. This restores the per-monitor app-to-zone assignment from v3 and generalizes it to "open app X on context Y" for both snapping and tiling (#691).
  • Autotile capability badges in layout previews: the shared preview cards used by the overlay picker, the zone selector, and the settings layout surfaces now show the autotile capability badges, matching the Layouts page (#688).

Changed

  • Curated default layout and algorithm visibility on fresh installs: the plain grid autotile algorithm is hidden by default because the resize-aware aligned-grid supersedes it, and the Wide snapping layout is now shown by default. This only seeds on a fresh config, so existing users keep their current visibility (#687).

Removed

  • The "is one of" match operator: this window-rule match operator was unusable in the editor and has been removed (#691).

Fixed

  • Autotiling failed to load any algorithm in non-C locales: scripted algorithms compile through Luau, which parsed numbers with the system locale, so a regional locale with a decimal comma broke every algorithm, including the shared prelude, and the UI reported "No autotile algorithms available". LC_NUMERIC is now pinned to "C" while Luau compiles and runs (#692, discussion #690).
  • Per-monitor app assignments stopped working after upgrading from v3: the v3 to v4 migration dropped the legacy per-monitor targetScreen pin and left X11 two-token patterns (chromium chromium) that never matched the normalized app id. The migration now carries the pin across as a RouteToScreen action and normalizes the pattern (#691, discussion #686).
  • Quick Shortcuts applied the wrong layout: Meta+Alt+# applied whatever layout sat at that position in Priority order instead of the layout bound to that quick slot (#684).
  • Windows landed in the wrong zones during fast rotation: holding the rotate shortcut applied superseded geometry updates after the daemon had already moved on, so windows ended up in stale zones. The effect now drops superseded geometry ticks (#689).
  • restoreWindowsToZonesOnLogin did nothing: the toggle round-tripped through config, D-Bus, and the UI but its value was never read, so a window snapped at logout always restored to its zone. It is now honored on login (#685).
  • Per-context gap and padding overrides were ignored for tiled windows: window-rule gap overrides applied only to snapped windows, not autotiled ones. They now apply to both (#685).
  • Snapping ignored some window-rule exclusions: window-class, title, and minimum-size exclusion conditions were not honored on the snapping path. The full window query is now consulted (#685).
  • Layout names were blank in the overlay previews: the picker, OSD, and zone-selector preview cards read the old name key instead of displayName, so the name label rendered empty. They now read displayName (#688).
  • The layout dropdown highlight washed out the badges: the layout combo box highlighted the active row with a full opaque band that left the category, capability, and aspect-ratio badges illegible. It now uses the same subtle tint as the rest of the app (#693).

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-3.1.1-*-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.1.1-*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (COPR):

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

Fedora (manual RPM):

# Fedora 44
sudo dnf install plasmazones-3.1.1-*.fc44.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:

tar xzf plasmazones-3.1.1-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.sh

NixOS (flake):

# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";

# configuration.nix
programs.plasmazones.enable = true;

NixOS (without flakes):
Build this tag's source against your host's pkgs (no release asset needed):

# configuration.nix
environment.systemPackages = [
  (pkgs.callPackage
    "${builtins.fetchTarball "https://github.com/fuddlesworth/PlasmaZones/archive/v3.1.1.tar.gz"}/packaging/nix/package.nix"
    { version = "3.1.1"; })
];

Post-Installation

systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones

PlasmaZones v3.1.0

23 Jun 21:06
Immutable release. Only release title and notes can be modified.
b3f7903

Choose a tag to compare

PlasmaZones v3.1.0

Added

  • Window Rules: a new unified settings page replaces the old Snapping Assignments, Tiling Assignments, Animations App Rules, and per-mode "disabled apps" lists. Rules are browsed, added, edited, drag-reordered, duplicated, and disabled from one place. Matching composes class, title, role, app-id, virtual desktop, activity, and screen predicates with AND/OR/NOT. A rule's actions cover snapping/tiling assignment, animation-curve and shader overrides, and exclusion from snapping, autotile, and effects, the four surfaces that previously each had their own editor.
  • org.plasmazones.WindowRules D-Bus interface (dbus/org.plasmazones.WindowRules.xml): getAllRules, setAllRules, addRule, removeRule, and related lifecycle methods for programmatic rule management.
  • phosphor-window-rules LGPL-2.1+ library housing the rule model, parser, and RuleEvaluator, so third parties can link the matcher without inheriting GPL.
  • Snapping focus behavior: two new opt-in toggles on Snapping → Window → Behavior (both default off). focus new windows auto-activates a window when it is auto-placed into a zone on open, and focus follows mouse activates the snapped window under the cursor. Brings snapping to parity with the existing autotile focus options.
  • Zone span toggle mode (#563): an opt-in switch in the Zone Span card so the span modifier can be tapped to start/stop spanning instead of held down for the whole drag (default off, motivated by accessibility).
  • Restore floated window positions on login (#606): floated windows are now restored to the monitor and position they closed on after a KWin session restore (previously only snapped windows were restored cross-screen). Parallel per-engine toggles (both default on), restore unsnapped windows under Snapping → Window → Behavior and restore untiled windows under Tiling → Behavior, plus an engine-neutral per-window RestorePosition rule action let specific windows opt in or out for either mode.
  • Per-window appearance for snapping: snapping gains its own border, corner-radius, hide-title-bar, and accent-color settings, mirroring tiling, and the former "Snapping → Appearance" page is renamed Zones. Window restore state across daemon restart and logout/login is now backed by a single WindowPlacementStore instead of several overlapping mechanisms.
  • New window-rule actions for window chrome: per-window border, title-bar, corner-radius, accent-color, gap/padding, and opacity overrides, applied to snapped or floating windows (e.g. "floating windows on monitor 2 → no title bar + red border", "activity Gaming → zero gaps").
  • New window-rule match conditions: IsTransient, IsNotification, Width, Height, and IsFocused, plus a built-in "Don't animate small windows" template. IsFocused lets any action be focus-scoped (e.g. "WHEN NOT focused → dim").
  • Collapsible settings sidebar categories with smart-expand of the active page's category and animated chevrons, cutting clicks to reach deep pages.
  • Per-monitor scope map: per-monitor settings cards carry a scope chip that opens a spatial map of the real monitor arrangement to switch outputs, replacing the tall repeated monitor-selector block. The scope choice persists across pages.
  • Shader-driven window-move/resize morph (window-morph): window move, resize, snap, and layout-switch transitions animate as a smooth shader cross-fade geometry morph instead of a plain C++ paint transform, the default for window-move and overridable per event. Overlay show/hide (OSD, zone selector, layout picker, snap assist) now defaults to the shader-based fade effect.
  • In-app live shader preview: the Snapping → Shaders browser gains an animated, interactive preview with mouse and audio input, shader presets (load/save, shared with the editor), and an in-app compile-error banner.
  • Shader authoring API: authors write only the effect body and read parameters by name (p_<id>) instead of decoding UBO slots, with a generated preamble and entry-point conventions, plus a plasmazones-shader-validate CLI (with --animation / --overlay modes and did-you-mean diagnostics) wired into CI to catch broken packs offline.
  • dma-buf zero-copy window-preview transport for snap-assist thumbnails (opt-in via the PLASMAZONES_DMABUF_THUMBNAILS env var, with default builds unchanged), the foundation for live window previews.
  • Phosphor SDK groundwork: the reusable LGPL Phosphor library line gains a Phase 1 foundation tier (phosphor-theme, phosphor-popout, phosphor-registry, phosphor-ipc + the phosphorctl driver, phosphor-shell per-screen helper) and a Phase 2 system-service tier (phosphor-service-{pipewire,network,bluetooth,brightness,notifications,polkit,idle,clipboard,lock,session,upower,mpris,icontheme,sni}). All of it is gated behind BUILD_PHOSPHOR_SHELL (default off) and driveable only from standalone examples/CLIs. It is groundwork for the standalone Phosphor shell direction and is not part of the shipping PlasmaZones tiler.
  • Resize-aware tiling (#666): six split-ratio algorithms (master-stack, wide, focus-sidebar, zen, deck, and horizontal-deck) now reflow on interactive resize. Dragging the master or boundary edge updates the split ratio for that desktop the same way a master-ratio keystroke does, without bleeding into other screens or the global default. The Layouts page shows a per-algorithm Reflows badge and can group algorithms by it.
  • Suppress default layout assignment (#676): a new setting, with a matching DefaultLayoutAssignment window-rule action, stops a context from falling back to the synthesized default layout. A suppressed context shows no snapping overlay or zone selector, reports no layout, and shows a "No layout assigned" OSD. Switching it into autotile sets the mode without applying the global default algorithm until a concrete one is assigned.
  • Layouts page rebuilt as a searchable, card-based catalogue with collapsible capability groups, per-layout deep links, and global-search reveal, matching the shader browser and Window Rules. Tiling algorithms expose a Script State capability (filter, group-by, and a card badge) alongside the reflow and persistent-memory badges, layout and algorithm cards show their description on hover, and bundled snapping layouts open in a text editor.

Changed

  • Single rule format: window assignments, per-mode disable lists, animation App Rules, and effect exclusion lists are unified into one rule list stored in ~/.config/plasmazones/windowrules.json. The KWin effect now consults the same RuleEvaluator as the daemon for animation App-Rule resolution and exclusion checks, so the two cannot drift.
  • LayoutRegistry::walkCascade removed, replaced by RuleEvaluator. The old per-axis cascade (context-keyed assignments vs window-property matching) no longer exists. All matching goes through the evaluator.
  • org.plasmazones.WindowTracking.setWindowMetadata widened from 4 to 9 arguments to carry the additional fields the evaluator needs (role, app-id, desktop, activity, screen). The KWin effect and daemon must be installed and running as a matched pair. MinPeerApiVersion bumped 3 → 4, and either side refuses to register a mismatched peer rather than silently degrading. Packagers must rebuild and ship both binaries together.
  • org.plasmazones.Layout.assignmentChangesApplied signal dropped its second argument (the per-key field tag). Subscribers that depended on that field must update or they will receive the wrong arity.
  • Scripted autotiling moved from QJSEngine (JavaScript) to an embedded, sandboxed Luau VM (phosphor-scripting). The 25 bundled algorithms were ported *.js*.luau, written against a new frozen pz standard library, with a per-engine CPU-time watchdog and a 64 MiB heap cap. The TilingAlgorithm contract, daemon, editor, and settings are unchanged. Breaking for custom algorithms: the loader now discovers only *.luau files, so user scripts in ~/.local/share/plasmazones/algorithms/ written in the old JavaScript form are no longer loaded and must be rewritten in Luau (see docs/architecture/luau-algorithm-authoring.md).
  • Snapping and Tiling settings aligned for parity. Tiling gains a dedicated Focus card. Section and label naming is unified across both modes ("Inner gap" / "Outer gap", "Window Handling", parallel quick-shortcut labels), and the placement settings are reorganized into a consistent Overlay / Window / Configuration shape with gaps moved into Window → Appearance and per-monitor gap selectors. User settings are preserved (C++ symbol renames only).
  • Performance. Daemon peak heap is down ~58% (149 → 63 MB) and idle CPU drops from ~25% to ~0. The overlay and snap-assist release their full-screen image buffers when dismissed (≈33 MB per shader-enabled 4K screen, ≈6 MB of thumbnail cache), and a content-addressed on-disk shader cache speeds warm launches. Settings pages that were slow on first visit now open fast via a page-instance cache, background compile-warming, and viewport virtualization of the animation-event card lists.
  • Settings app rebuilt on the reusable phosphor-control library (extracted from the in-app settings chrome, formerly named phosphor-settings-ui), reducing the app to a thin consumer with visual parity.
  • Internal pzp symbol-prefix debrand across shader params, classes, macros, CMake helpers, and the Luau tiling global (pzphosphor_luau). The user-facing PlasmaZones brand and the global-shortcut ID namespace are deliberately unchanged. All ad-hoc registries (shaders, animation, cu...
Read more

PlasmaZones v3.0.17

19 Jun 02:19
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

PlasmaZones v3.0.17

Fixed

  • PlasmaZones held back KWin upgrades, stranding Plasma in a half-upgraded state: the native packages pinned KWin to the exact version PlasmaZones was built against (to guarantee the KWin effect plugin's IID matched the running KWin). On distros that ship KWin and PlasmaZones from separate repos (e.g. Fedora KWin from the distro, PlasmaZones from COPR), a newer KWin landing before a matching PlasmaZones rebuild could not satisfy the exact pin, so the package manager held KWin back. That left KWin out of sync with the rest of Plasma, which surfaced as "No KScreen backend found" and, at worst, a black screen at login (reported on Fedora 44 / Plasma 6.7). The runtime dependency is now a minimum (kwin >= 6.7.0) across the RPM, Debian, and Arch (source/bin/git) packages instead of an exact pin, so a newer KWin no longer blocks the upgrade. A mismatched effect is harmless — KWin reads the IID from plugin metadata and never loads a non-matching effect, so the plugin stays inert and only the drag overlay is missing until PlasmaZones is rebuilt; core tiling (daemon + layer-shell QPA plugin) is unaffected. Nix is unchanged: it has no install-time pin and rebuilds the whole system, so it cannot strand the desktop.

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-3.0.17-*-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.0.17-*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (COPR):

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

Fedora (manual RPM):

# Fedora 44
sudo dnf install plasmazones-3.0.17-*.fc44.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:

tar xzf plasmazones-3.0.17-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.sh

NixOS (flake):

# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";

# configuration.nix
programs.plasmazones.enable = true;

NixOS (standalone):
Download plasmazones.nix from the release assets, then:

# configuration.nix
environment.systemPackages = [
  (pkgs.callPackage ./plasmazones.nix {})
];

Post-Installation

systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones

PlasmaZones v3.0.16

18 Jun 22:50
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

PlasmaZones v3.0.16

Changed

  • Support KDE Plasma 6.7 (#638): the build baseline moves to the Plasma 6.7 stack — KDE Frameworks 6.26, Qt 6.10, and KWin 6.7 — and the KWin C++ effect is ported to the 6.7 effect API. Notable upstream changes handled: prePaintScreen/prePaintWindow dropped their presentTime argument (the effect now self-sources frame time from a steady clock, matching KWin's own effects), EffectWindow::frameGeometry() and EffectsHandler::clientArea() now return KWin::RectF, the clientArea per-desktop overload was removed, addRepaint() gained RectF/Rect/Region overloads, and GLShader::isValid() was removed. Plasma 6.6 is no longer supported.

Fixed

  • Snap-assist window thumbnails on Plasma 6.7 (#638): KWin 6.7 removed the offscreen-QML readback (OffscreenQuickView::bufferAsImage()) that the in-process thumbnail capture relied on. Capture was reworked to render each candidate window into an offscreen GLFramebuffer via effects->drawWindow() and read it back with GLTexture::toImage(), so snap-assist thumbnails keep working without a second screenshot round-trip.

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-3.0.16-*-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.0.16-*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (COPR):

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

Fedora (manual RPM):

# Fedora 44
sudo dnf install plasmazones-3.0.16-*.fc44.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:

tar xzf plasmazones-3.0.16-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.sh

NixOS (flake):

# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";

# configuration.nix
programs.plasmazones.enable = true;

NixOS (standalone):
Download plasmazones.nix from the release assets, then:

# configuration.nix
environment.systemPackages = [
  (pkgs.callPackage ./plasmazones.nix {})
];

Post-Installation

systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones

PlasmaZones v3.0.15

28 May 20:22
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

PlasmaZones v3.0.15

Fixed

  • Zone-selector popup at the screen edge switched the active layout on hover, resnapping every tiled window (#542): the zone-selector slot was supposed to be input-transparent during drag — cursor coordinates come in via the D-Bus updateSelectorPosition path and the snap commits at drag-end via drop.cpp, never via a Qt hover event. But the slot's QML MouseAreas still fired zoneSelected on every pointer-enter, and once snap-assist became visible the shared shell surface flipped to input-grabbing (anyInputGrabbing = isVisible(snapAssistSlot) || isVisible(layoutPickerSlot) in syncPassiveShellSurfaceState) — those leaked hover events committed manualLayoutSelected, which immediately resnapped every other tiled window into the new layout's zones. Visible as "my layout changes to one with more or fewer windows whenever I drag windows up". The QML hover commit path is gone (ZoneSelectorContent is now interactive: false and the daemon's manualLayoutSelected handler / signal are removed); cross-layout switching on drop still works because WindowDragAdaptor::dragStopped reads m_selectedLayoutId from the C++ hit-test and applies the layout when the user actually releases the drag on a zone in a different layout.

Removed

  • Switching the autotile algorithm by hovering an autotile preview in the zone-selector popup (#542): the autotile-hover commit path went away with the input-contract fix above (drop.cpp resolves the selected id as a UUID and skips non-UUID autotile ids, so the hover path was the only commit point for autotile-via-zone-selector). Algorithm swaps still work through the existing on-by-default routes: NextLayout / PreviousLayout, QuickLayout1QuickLayout9, and the Layout Picker (Meta+Alt+Space by default). The IOverlayService::autotileLayoutSelected signal and its daemon handler were removed as dead code.

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-3.0.15-*-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.0.15-*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (COPR):

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

Fedora (manual RPM):

# Fedora 43
sudo dnf install plasmazones-3.0.15-*.fc43.x86_64.rpm
# Fedora 44
sudo dnf install plasmazones-3.0.15-*.fc44.x86_64.rpm

openSUSE Tumbleweed (manual RPM):

sudo zypper install plasmazones-3.0.15-*.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:

tar xzf plasmazones-3.0.15-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.sh

NixOS (flake):

# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";

# configuration.nix
programs.plasmazones.enable = true;

NixOS (standalone):
Download plasmazones.nix from the release assets, then:

# configuration.nix
environment.systemPackages = [
  (pkgs.callPackage ./plasmazones.nix {})
];

Post-Installation

systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones

PlasmaZones v3.0.14

27 May 14:52
Immutable release. Only release title and notes can be modified.
d08b094

Choose a tag to compare

PlasmaZones v3.0.14

Fixed

  • DPMS-wake autotile orphan reassignment still triggered intermittently (#527, #536): 3.0.13 closed the dropped-monitor case but missed the dual-monitor wake-up where the second output coming back simply shifts the first output's x-offset. With no output actually removed, oldScreenStillConnected stayed true, and isScreenChangeInProgress() hadn't flipped on yet because KWin emits the per-window outputChanged before the virtualScreenGeometryChanged that the screen-change debounce listens for — the orphan reached the autotile-delegation guard with both legs of the check false. screenAdded and screenRemoved are now also wired into the screen-change handler, latching the pending-change flag at the earliest point KWin tells us the output set is changing. The settle path that runs once virtualScreenGeometryChanged catches up is unchanged.

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-3.0.14-*-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.0.14-*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (COPR):

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

Fedora (manual RPM):

# Fedora 43
sudo dnf install plasmazones-3.0.14-*.fc43.x86_64.rpm
# Fedora 44
sudo dnf install plasmazones-3.0.14-*.fc44.x86_64.rpm

openSUSE Tumbleweed (manual RPM):

sudo zypper install plasmazones-3.0.14-*.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:

tar xzf plasmazones-3.0.14-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.sh

NixOS (flake):

# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";

# configuration.nix
programs.plasmazones.enable = true;

NixOS (standalone):
Download plasmazones.nix from the release assets, then:

# configuration.nix
environment.systemPackages = [
  (pkgs.callPackage ./plasmazones.nix {})
];

Post-Installation

systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones

PlasmaZones v3.0.13

26 May 14:51
Immutable release. Only release title and notes can be modified.
1c7ea5d

Choose a tag to compare

PlasmaZones v3.0.13

Fixed

  • Windows from disabled monitors got pulled into the active autotile zone after DPMS sleep (#527, #528): with one monitor autotile-disabled, waiting for that monitor to power off and then moving the mouse to wake the active monitor would cause windows from the disabled monitor to be tiled into the active zone. KWin reassigns orphaned windows from a dropped-out monitor to a remaining output and fires outputChanged for each, indistinguishable from a deliberate cross-screen move. The snapping D-Bus path already guarded for this with oldScreenStillConnected && !isScreenChangeInProgress(), but the autotile delegation immediately above ran unconditionally — so the orphan reassignment was mistaken for the window genuinely entering autotile. The disconnect check now feeds both paths via a shared involuntaryMove flag; recovery is owned by the daemon's virtualScreensReconfigured handler once the screen change has stopped chattering.

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-3.0.13-*-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.0.13-*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (COPR):

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

Fedora (manual RPM):

# Fedora 43
sudo dnf install plasmazones-3.0.13-*.fc43.x86_64.rpm
# Fedora 44
sudo dnf install plasmazones-3.0.13-*.fc44.x86_64.rpm

openSUSE Tumbleweed (manual RPM):

sudo zypper install plasmazones-3.0.13-*.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:

tar xzf plasmazones-3.0.13-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.sh

NixOS (flake):

# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";

# configuration.nix
programs.plasmazones.enable = true;

NixOS (standalone):
Download plasmazones.nix from the release assets, then:

# configuration.nix
environment.systemPackages = [
  (pkgs.callPackage ./plasmazones.nix {})
];

Post-Installation

systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones

PlasmaZones v3.0.12

25 May 15:34
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

PlasmaZones v3.0.12

Fixed

  • Focus-follows-mouse stole focus from active floating and overflow windows (#461, #525): the 3.0.11 FFM pause fixed the case where an excluded window (emoji picker, notification popup, krunner) was active, but the symmetric case for floating windows still regressed. A manually-floated window, or an overflow window the daemon auto-floats when window count exceeds the maxWindows cap, sits on top of the tiled stack while the user works in it; moving the cursor across an underlying tiled window's visible edge still activated that tiled window and sent the floating one to the background. handleCursorMoved's active-window guard now also bails when isWindowFloating() returns true for the focused window. FloatingCache covers both code paths (user-toggled float and overflow auto-float via applyFloatCleanup), so one predicate handles both scenarios. Resumes naturally on the next cursor move once a tiled window becomes active.

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-3.0.12-*-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.0.12-*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (COPR):

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

Fedora (manual RPM):

# Fedora 43
sudo dnf install plasmazones-3.0.12-*.fc43.x86_64.rpm
# Fedora 44
sudo dnf install plasmazones-3.0.12-*.fc44.x86_64.rpm

openSUSE Tumbleweed (manual RPM):

sudo zypper install plasmazones-3.0.12-*.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:

tar xzf plasmazones-3.0.12-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.sh

NixOS (flake):

# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";

# configuration.nix
programs.plasmazones.enable = true;

NixOS (standalone):
Download plasmazones.nix from the release assets, then:

# configuration.nix
environment.systemPackages = [
  (pkgs.callPackage ./plasmazones.nix {})
];

Post-Installation

systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones

PlasmaZones v3.0.11

24 May 20:08
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

PlasmaZones v3.0.11

Changed

  • Layer-shell state setters skip unchanged values across configure events (#522): KWin re-emits zwlr_layer_surface_v1 configure events on every virtual-desktop switch, and applyProperties was unconditionally re-sending the full layer-shell state (anchor, layer, exclusive zone, keyboard interactivity, margin, size, exclusive edge) — six to seven protocol messages per surface per configure. The applied state is now cached per surface and each setter only fires when its source property has actually changed.

Fixed

  • Focus-follows-mouse activated tiled windows underneath an active popup (#461, #521): the 3.0.10 FFM fix made auto-focus-follow-mouse consistent for the common case but missed the case where an excluded or untracked window (emoji picker, notification popup, krunner) was active inside a zone. Moving the cursor across the underlying tiled window's visible area still activated that tiled window, sending the just-opened popup straight to the background. handleCursorMoved now also checks the currently active window — if it is an excluded app, dialog, popup, keep-above overlay, or below the min-size threshold, FFM pauses on the cursor's screen until a tileable window becomes active.
  • Stale pending-restore entries for excluded apps grew session.json and logged on every daemon start (#461, #521): runtime gates already refused to honor pending restores for excluded apps, but the dead entries persisted on disk in PendingRestoreQueues and AutotilePendingRestores and reappeared on every restart. Both engines now prune their on-disk queues against the current exclusion lists at startup and whenever the lists change.
  • Drag artifacts, post-snap flicker, and a gray decoration ring during snap drags (#516, #523): the zone-preview PassiveShell mapped on the Overlay layer fullscreen during a drag, masking KWin's Translucency-while-moving effect. On hybrid Intel+NVIDIA setups (CachyOS, Plasma 6.6.5, NVIDIA 595) this also forced a slower compositional path that produced the visible drag artifacts and post-snap flicker. The PassiveShell role is now downgraded to the Top layer — the same layer KDE's own panels live on — which coexists with the translucency effect. Fullscreen apps on Overlay still draw above the zone preview correctly.

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-3.0.11-*-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.0.11-*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (COPR):

sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazones

Fedora (manual RPM):

# Fedora 43
sudo dnf install plasmazones-3.0.11-*.fc43.x86_64.rpm
# Fedora 44
sudo dnf install plasmazones-3.0.11-*.fc44.x86_64.rpm

openSUSE Tumbleweed (manual RPM):

sudo zypper install plasmazones-3.0.11-*.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:

tar xzf plasmazones-3.0.11-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.sh

NixOS (flake):

# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";

# configuration.nix
programs.plasmazones.enable = true;

NixOS (standalone):
Download plasmazones.nix from the release assets, then:

# configuration.nix
environment.systemPackages = [
  (pkgs.callPackage ./plasmazones.nix {})
];

Post-Installation

systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones