PlasmaZones v2.5.0
Added
- Scripted tiling algorithms ([#256], [#259]): All 24 tiling algorithms are now JavaScript, running in a sandboxed QJSEngine with hot-reload. The 15 former C++ algorithms have been converted to JS with identical behavior. Six new algorithms added: Cascade, Corner Master, Floating Center, Horizontal Deck, Paper, and Stair. Custom user algorithms are loaded from
~/.local/share/plasmazones/algorithms/. - Dwindle (Memory) algorithm: Dwindle variant with a persistent split tree — resizing one tile does not affect others. Split positions survive window close/reopen.
- Multi-compositor support ([#261]): Custom
pz-layer-shellQPA plugin replaces theLayerShellQtdependency. PlasmaZones now works on any Wayland compositor withzwlr_layer_shell_v1support (Hyprland, Sway, Wayfire, niri, COSMIC, river, labwc). - Vulkan rendering backend ([#264]): Optional Vulkan backend for zone overlay rendering with automatic fallback to OpenGL on unsupported hardware or driver crash. User-selectable in Settings → General.
- New Layout / New Algorithm wizards ([#263]): Guided dialogs for creating zone layouts from templates and tiling algorithms from a starter script, accessible from the settings app.
- Layout filter bar ([#265]): Replace hardcoded layout groups with configurable group-by, sort-by, and filter controls in the layout list.
- Disable per virtual desktop / activity ([#260]): Disable PlasmaZones on specific virtual desktops or activities per screen. Overlay hides automatically on disabled contexts.
- Settings UX polish ([#268], [#269]): Two-line description rows, collapsible card sections, consolidated footer bar with Apply/Reset/Defaults, sidebar page badges, inline toggle switches replacing disable checkboxes.
- Single-instance settings app ([#270]):
plasmazones-settingsis now single-instance via D-Bus. Launching it again raises the existing window and navigates to the requested page (--page <name>/-p <name>). - Unsaved changes confirmation: Settings app prompts before closing with unsaved changes; Reset and Defaults buttons require confirmation.
- Master indicator dots: Algorithm grid cards show dots indicating which zones are master positions.
- Memory indicator icon: Stateful algorithms (Dwindle Memory) show a persistence icon in the algorithm selector.
- Per-algorithm settings storage: Split ratio, master count, and other parameters are saved per-algorithm rather than globally.
- Algorithm import and open folder: Import
.jsalgorithm files and open the user algorithm directory from the tiling settings page. - Algorithm capability grouping: Tiling algorithms grouped by capability (Built-in / Extras / Custom) in the settings UI.
- D-Bus
zoneIdsarray: Window state responses now include the full list of zone IDs a window occupies.
Changed
- LayerShellQt replaced: Custom
pz-layer-shellQPA plugin is now the sole layer-shell backend. Packagers: droplayer-shell-qtbuild dependency, addqt6-waylandandwayland-scanner. - Config keys centralized ([#266]): All config group names and key strings extracted to
ConfigDefaultsaccessors — no more inline string literals in settings code. - Settings page IDs renamed:
snap-*/tile-*page IDs renamed tosnapping-*/tiling-*for consistency. - Algorithm registry: Hardcoded algorithm ID constants replaced with a data-driven registry. Algorithm metadata (name, capabilities, flags) comes from JS
@tagannotations. - README streamlined: Detailed algorithm table, shader table, D-Bus API reference, and project structure moved to the wiki. README reduced from 742 to 593 lines with summary + wiki links.
Removed
- LayerShellQt dependency: No longer required — replaced by
pz-layer-shellQPA plugin. - C++ tiling algorithm implementations: All algorithms are now JavaScript. The C++ implementations have been removed.
- Legacy migration code: Removed all config key migration and backward-compatibility shims from settings save/load paths.
- kcfg/kcfgc schema files: Unused KConfig schema files removed.
- Accent stripe feature: Removed from
SettingsCardcomponent.
Fixed
- Window restore on daemon restart: Bypass QSettings cache in
loadStateso window-to-zone mappings are read fresh from disk after daemon restart ([#268]). - Multipass shader rendering: Fix ping-pong buffer handling in overlay renderer for multi-pass shaders.
- Editor shader menu crash: Rewrite shader submenu to prevent Qt 6
finalizeExitTransitionuse-after-free when selecting a shader while the menu is animating closed. - Editor context menu crash: Use shared context menu instance to prevent
QQmlDatause-after-free when zones update while the popup is open. - NVIDIA Vulkan crash: Suppress spurious shutdown crash on NVIDIA drivers and auto-fallback to OpenGL.
- NVIDIA EGL crash in editor: Guard shader preview reload against EGL context loss on NVIDIA.
- Layout picker dimmed backdrop: Remove unintended dimmed background overlay from the fullscreen layout picker.
- CAVA crash suppression: Suppress misleading "CAVA Crashed" error message caused by process-group SIGTERM during daemon shutdown.
- Shader preview bindings: Restore reactive label and wallpaper texture bindings in the editor shader preview.
- Settings dirty flag on navigation: Prevent spurious unsaved-changes prompts when switching between settings pages.
- Slider snap-back bug: Fix master count control snapping back to previous value; replace SpinBox with SettingsSlider.
- Aspect ratio menu: Replace flat menu items with nested submenu for aspect ratio presets.
- Layer-shell window recovery: Recover shader preview when the Wayland
LayerSurfaceis unexpectedly destroyed.
Migration Notes (Packagers)
- Drop
layer-shell-qt/liblayershellqtinterface-devbuild dependency - Add
qt6-wayland/qt6-wayland-devbuild dependency - Add
wayland-scannerbuild dependency (usually inwayland-devel) - Add
vulkan-headersandvulkan-loaderbuild dependencies (optional, for Vulkan backend)
Installation
Arch Linux (AUR):
yay -S plasmazones # or plasmazones-binArch Linux (manual):
sudo pacman -U plasmazones-2.5.0-1-x86_64.pkg.tar.zstKDE Neon / Debian-based:
sudo dpkg -i plasmazones_2.5.0-1_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (COPR):
sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazonesFedora (manual RPM):
sudo dnf install plasmazones-2.5.0-1.fc43.x86_64.rpmopenSUSE Tumbleweed (manual RPM):
sudo zypper install plasmazones-2.5.0-1.x86_64.rpmopenSUSE Tumbleweed (OBS):
sudo zypper addrepo https://download.opensuse.org/repositories/home:ilFrance/openSUSE_Tumbleweed/home:ilFrance.repo
sudo zypper refresh
sudo zypper install plasmazonesCommunity-maintained package by ilFrance
Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:
tar xzf plasmazones-2.5.0-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