github fuddlesworth/PlasmaZones v2.5.0
PlasmaZones v2.5.0

latest releases: v3.0.1, v3.0.0, v2.8.8...
one month ago

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-shell QPA plugin replaces the LayerShellQt dependency. PlasmaZones now works on any Wayland compositor with zwlr_layer_shell_v1 support (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-settings is 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 .js algorithm 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 zoneIds array: Window state responses now include the full list of zone IDs a window occupies.

Changed

  • LayerShellQt replaced: Custom pz-layer-shell QPA plugin is now the sole layer-shell backend. Packagers: drop layer-shell-qt build dependency, add qt6-wayland and wayland-scanner.
  • Config keys centralized ([#266]): All config group names and key strings extracted to ConfigDefaults accessors — no more inline string literals in settings code.
  • Settings page IDs renamed: snap-* / tile-* page IDs renamed to snapping-* / tiling-* for consistency.
  • Algorithm registry: Hardcoded algorithm ID constants replaced with a data-driven registry. Algorithm metadata (name, capabilities, flags) comes from JS @tag annotations.
  • 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-shell QPA 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 SettingsCard component.

Fixed

  • Window restore on daemon restart: Bypass QSettings cache in loadState so 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 finalizeExitTransition use-after-free when selecting a shader while the menu is animating closed.
  • Editor context menu crash: Use shared context menu instance to prevent QQmlData use-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 LayerSurface is unexpectedly destroyed.

Migration Notes (Packagers)

  • Drop layer-shell-qt / liblayershellqtinterface-dev build dependency
  • Add qt6-wayland / qt6-wayland-dev build dependency
  • Add wayland-scanner build dependency (usually in wayland-devel)
  • Add vulkan-headers and vulkan-loader build dependencies (optional, for Vulkan backend)

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

sudo pacman -U plasmazones-2.5.0-1-x86_64.pkg.tar.zst

KDE Neon / Debian-based:

sudo dpkg -i plasmazones_2.5.0-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):

sudo dnf install plasmazones-2.5.0-1.fc43.x86_64.rpm

openSUSE Tumbleweed (manual RPM):

sudo zypper install plasmazones-2.5.0-1.x86_64.rpm

openSUSE Tumbleweed (OBS):

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

Community-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.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.