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
availableShadersD-Bus call returns the list as anav(array of variant); unlikea{sv}, QtDBus does not auto-demarshal a bareavinto aQVariantList— it hands the reply back wrapped in aQDBusArgument, so.toList()silently produced an empty list and every shader was dropped. The reply is now routed throughDBusVariantUtils::convertDbusArgumentfirst, exactly as the siblingshaderInfoandtranslateShaderParamsqueries 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::resolveWindowRestoregated its empty-zone and last-zone fallbacks only onmodeForScreen() == Snapping, butmodeForScreenreturns the screen's assigned layout mode — independent of the global Snapping toggle. ThesnapTo*,restoreToPersistedZone, andresolveWindowRestoreD-Bus slots and the sharedapplySnapResultgate never checked the global toggle either; onlydragStarteddid. Both chokepoints now consultsnappingEnabled(). - Keyboard snap-to-zone shortcuts fired with snapping globally off (#461, #492):
IPlacementEngine::isEnabled()defaulted tofalseandSnapEnginenever overrode it, so the shared keyboard-shortcut dispatcher had no usable gate for snap-mode shortcuts (autotile shortcuts were already gated onAutotileEngine::isEnabled()).SnapEngine::isEnabled()now mirrorsAutotileEngineand reportssnappingEnabled(), and the navigator dispatcher skips any shortcut whose resolved engine is disabled. Together with the auto-snap fix,Snapping.Enabled=falseis 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 consultedw->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 settransientFor, 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'ssupportInformation(), 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.defaultoutput, and explicit guidance steer users toward the NixOS module, Home Manager module, and overlay (which build against the consumer's pkgs) and away fromnix profile install/packages.default(which pins to the flake's own nixpkgs and breaks silently when the host's KWin moves pastflake.lock). Thedevelop.nixshell adds debugging tools.
Installation
Arch Linux (AUR):
yay -S plasmazones # or plasmazones-binArch Linux (manual):
sudo pacman -U plasmazones-3.0.5-*-x86_64.pkg.tar.zstKDE Neon / Debian-based:
sudo dpkg -i plasmazones_3.0.5-*_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (COPR):
sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazonesFedora (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.rpmopenSUSE Tumbleweed (manual RPM):
sudo zypper install plasmazones-3.0.5-*.x86_64.rpmopenSUSE Tumbleweed (OBS):
sudo zypper addrepo https://download.opensuse.org/repositories/home:fuddlesworth/openSUSE_Tumbleweed/home:fuddlesworth.repo
sudo zypper refresh
sudo zypper install plasmazonesUniversal 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.shNixOS (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