github fuddlesworth/PlasmaZones v3.0.5
PlasmaZones v3.0.5

2 hours ago

PlasmaZones v3.0.5

Fixed

  • Shader picker dropdown disabled in the layout editor (#494): checking "Enable shader effect" left the dropdown disabled and unable to select a shader because the editor's shader list arrived empty. The availableShaders D-Bus call returns the list as an av (array of variant); unlike a{sv}, QtDBus does not auto-demarshal a bare av into a QVariantList — it hands the reply back wrapped in a QDBusArgument, so .toList() silently produced an empty list and every shader was dropped. The reply is now routed through DBusVariantUtils::convertDbusArgument first, exactly as the sibling shaderInfo and translateShaderParams queries already did.
  • Auto-snap-on-open ignored the global snapping toggle (#461, #492): with Snapping.Enabled=false, newly-opened windows still got auto-snapped to empty or last zones. SnapEngine::resolveWindowRestore gated its empty-zone and last-zone fallbacks only on modeForScreen() == Snapping, but modeForScreen returns the screen's assigned layout mode — independent of the global Snapping toggle. The snapTo*, restoreToPersistedZone, and resolveWindowRestore D-Bus slots and the shared applySnapResult gate never checked the global toggle either; only dragStarted did. Both chokepoints now consult snappingEnabled().
  • Keyboard snap-to-zone shortcuts fired with snapping globally off (#461, #492): IPlacementEngine::isEnabled() defaulted to false and SnapEngine never overrode it, so the shared keyboard-shortcut dispatcher had no usable gate for snap-mode shortcuts (autotile shortcuts were already gated on AutotileEngine::isEnabled()). SnapEngine::isEnabled() now mirrors AutotileEngine and reports snappingEnabled(), and the navigator dispatcher skips any shortcut whose resolved engine is disabled. Together with the auto-snap fix, Snapping.Enabled=false is now a total kill-switch at parity with autotiling.
  • Transient child surfaces snapped to zones (#461, #492): the effect's shouldHandleWindow() filtered dialogs, utilities, splashes, notifications, OSDs, modals, and popups, but never consulted w->transientFor() — despite the comment claiming it skipped transient windows. Sibling filters in the same file (shouldAnimateWindow, isTileableWindow) already had the transient-parent check. Electron/CEF apps (Steam image previews, Discord popups, VS Code dialogs) spawn child surfaces that frequently fail to report an accurate KWin window type but always set transientFor, so they passed the filter and got snapped to a zone. Transient children are now excluded.
  • Generic "effect not running" message hid the real cause on bridge timeout (#481, #485): the KWin effect plugin's IID embeds KWin's exact upstream version, and KWin's effect loader silently rejects any plugin whose IID does not match the running compositor — even across patch releases. On bridge watchdog timeout the daemon now reads the installed effect plugin's embedded IID via QPluginLoader::metaData(), asynchronously queries the running KWin's supportInformation(), and names the exact build-vs-running versions and the remediation in the log and desktop notification. The version probe is non-blocking, so the degraded startup path no longer freezes the daemon event loop for the duration of the round-trip.
  • Nix flake hardened to keep PlasmaZones in sync with the host's KWin (#481, #489): expanded module documentation, a new overlays.default output, and explicit guidance steer users toward the NixOS module, Home Manager module, and overlay (which build against the consumer's pkgs) and away from nix profile install / packages.default (which pins to the flake's own nixpkgs and breaks silently when the host's KWin moves past flake.lock). The develop.nix shell adds debugging tools.

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

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

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_3.0.5-*_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.5-*.fc43.x86_64.rpm
# Fedora 44
sudo dnf install plasmazones-3.0.5-*.fc44.x86_64.rpm

openSUSE Tumbleweed (manual RPM):

sudo zypper install plasmazones-3.0.5-*.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.5-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

Don't miss a new PlasmaZones release

NewReleases is sending notifications on new releases.