github fuddlesworth/PlasmaZones v3.5.4
PlasmaZones v3.5.4

4 hours ago

PlasmaZones v3.5.4

Added

  • Keep a window floating while "Always re-insert on drag" is on: with always re-insert turned on for scrolling or tiling, every drag put the window back into the strip or stack, so a floating window could not be moved without being taken in again. The re-insert trigger now works the other way round while always re-insert is on. Hold it, or tap it in toggle mode, and the dragged window floats instead. If you move windows with the same key as the trigger, such as Alt, pick a different trigger. (#1162)
  • Pick a zone for a Zone condition: a rule's Zone condition now offers every zone of every layout, grouped by layout and named as in the editor, where it used to need the zone's ID typed in by hand. That makes a rule for one zone easy to write, for example keeping a window above the others while it sits in a zone that overlaps a panel. The rule list shows the same names. (#1163)
  • Rules can tell a monitor's resolutions apart: rules gain Screen width, Screen height and Screen aspect ratio conditions, so one monitor can get a different layout or tiling algorithm at a different resolution. A super-ultrawide whose split mode halves its width can keep one layout for each mode. The width and height are the monitor's own pixels before display scaling, and the rule editor shows each pinned monitor's current size under the condition. (#1145, #1165)
  • Fedora 45 packages: each release now carries Fedora 45 RPMs for x86_64 and aarch64 next to the Fedora 44 ones. An RPM only loads against the KWin it was built with, so every Fedora release needs a build of its own. Thanks @jtbrough. (#1177)

Fixed

  • PlasmaZones no longer keeps fullscreen games and videos from skipping compositing: PlasmaZones kept an invisible overlay over every screen for as long as it ran, which stopped KWin from handing a fullscreen window straight to the display (direct scanout), so such windows were always composited and paid for it in latency. The overlay is now taken down once nothing is showing on it, including when a window drag ends. Overlays such as the layout OSD also show only their own fade-in now, without a second fade over the whole screen on top of it. Showing an overlay while Show Desktop is active now ends Show Desktop, the way opening a window does. (#1169, #1170)
  • Windows without a window class show up in the window picker: an app that names no window class, as Gamescope can, was left out of the rule editor's window picker even though PlasmaZones places it. It is now listed by its title and can be picked for a Title condition. The modes that need a window class show it greyed out with a hint to match it by title. (#1163)
  • A window class picked from the window picker matches the window: the picker offered only the last part of a window's class, such as "org.kde.konsole", while a Window Class condition compares the whole class KWin reports, such as "konsole org.kde.konsole", so a picked class set to equal never matched. The picker now offers the whole class. (#1163)
  • The Echo pointer trail no longer leaves a black box over some apps: moving the pointer over an app that supplies its own cursor image, as Steam and VLC do, turned the whole area around the Echo trail black with the echoes drawn inside it. The trail now draws over those apps the same way it does everywhere else. (#1164)
  • Layout rules follow a monitor that rotates or changes resolution: a layout chosen by a rule about the monitor's orientation stayed on the old layout after the monitor was rotated, until something unrelated changed. It now switches as soon as the monitor does, and the same goes for the new screen size and aspect ratio conditions and for resizing or splitting virtual screens. (#1165)
  • Gap rules reach windows that are already snapped: a rule that sets a snapping screen's gaps only applied to windows snapped after it changed, so editing it, switching colour scheme, or a monitor changing to a size the rule tests left the snapped windows on the old gaps until each was snapped again. They now move to the new gaps straight away, the way they do when you change the gap settings. (#1165)
  • The rules page's monitor tiles show what applies right now: a tile showed the first rule naming its monitor even when that rule also asked for an orientation, colour scheme or window count the monitor did not have, and it ignored a rule that set only a layout. Each tile now works out the layout, lock and rule count the way the daemon does, against the monitor's current state and the rules as you are editing them. (#1165)
  • The editor shows fixed zones that don't fit the screen where they really land: a layout of fixed-size zones bigger than the screen was shrunk in the editor to fit its canvas, so it looked as if it fit while PlasmaZones placed its zones past the screen edge. The editor now draws every fixed zone at its true size and position, pixel for pixel when you edit in fullscreen and scaled to the window otherwise, so a zone that runs off the screen runs off the canvas too. (#1167, #1171)
  • COPR rebuilds reach dnf: when a KWin update made PlasmaZones republish a release, the COPR package kept the version and revision of the one before it, so dnf never offered the rebuilt package and the KWin effect stayed unloaded on the new KWin. From 3.5.4 on, a rebuild carries its revision in the package and dnf upgrades to it. (#1178, #1180)
  • A tiling algorithm or shader pack can no longer stall PlasmaZones: reading back what a tiling algorithm returned had no time or size limit, so an algorithm that returned a table holding itself, or one long piece of text referenced many times over, could hang the daemon or run it out of memory. Such a result is now refused as an error, the same as an algorithm that fails. A shader pack could also include any readable file on the system by giving its full path, or a file large enough to stall KWin while the pack loaded. An include by full path is now refused, and so is an included file over 1 MiB or a shader that grows too large once its includes are filled in. (#1175, #1176, #1181)

Installation

Arch Linux (AUR):

yay -S plasmazones  # or plasmazones-bin

Arch Linux (manual):

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

Debian testing/unstable (apt repository):
Tracks KDE as it lands in Debian and rebuilds when KWin moves.

sudo curl -fsSL https://download.opensuse.org/repositories/home:fuddlesworth/Debian_Unstable/Release.key -o /etc/apt/keyrings/plasmazones.asc
echo 'deb [signed-by=/etc/apt/keyrings/plasmazones.asc] https://download.opensuse.org/repositories/home:/fuddlesworth/Debian_Unstable/ /' | sudo tee /etc/apt/sources.list.d/plasmazones.list
sudo apt update
sudo apt install plasmazones

On Debian testing, swap Debian_Unstable for Debian_Testing in both lines. Packages are built for x86_64 only.

Debian (manual .deb):
Built on Debian unstable. Prefer the apt repository above, which rebuilds when KWin moves.

sudo dpkg -i plasmazones_3.5.4-*_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.5.4-*.fc44.x86_64.rpm
# Fedora 45
sudo dnf install plasmazones-3.5.4-*.fc45.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

Fedora Atomic (Kinoite):
Layer the COPR package. Replace 44 with your Fedora release.

sudo curl -fsSL -o /etc/yum.repos.d/plasmazones.repo https://copr.fedorainfracloud.org/coprs/fuddlesworth/PlasmaZones/repo/fedora-44/fuddlesworth-PlasmaZones-fedora-44.repo
rpm-ostree install plasmazones
systemctl reboot

Arch-based tarball (no root):
Built on Arch Linux, so it only runs where KWin is exactly the version Arch shipped at release time and Qt is the same or newer. It does not work on Fedora, Debian or SteamOS. The installer checks both versions and stops before copying anything if they do not match.

tar xzf plasmazones-3.5.4-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.5.4.tar.gz"}/packaging/nix/package.nix"
    { version = "3.5.4"; })
];

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.