{"id":43449109,"url":"https://github.com/fuddlesworth/plasmazones","last_synced_at":"2026-05-17T06:05:43.530Z","repository":{"id":334611923,"uuid":"1134639044","full_name":"fuddlesworth/PlasmaZones","owner":"fuddlesworth","description":"FancyZones-style window tiling for KDE Plasma","archived":false,"fork":false,"pushed_at":"2026-04-02T01:03:16.000Z","size":196297,"stargazers_count":205,"open_issues_count":5,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-02T02:43:38.479Z","etag":null,"topics":["fancyzones","kde","kde-plasma-6","kwin","kwin-effect","powertoys","qt6","tiling","tiling-window-manager","zones"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fuddlesworth.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"fuddlesworth","ko_fi":"fuddlesworth"}},"created_at":"2026-01-15T01:50:21.000Z","updated_at":"2026-04-02T00:43:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"88e69240-99ae-4f7c-8819-b980c2fc08a8","html_url":"https://github.com/fuddlesworth/PlasmaZones","commit_stats":null,"previous_names":["fuddlesworth/plasmazones"],"tags_count":105,"template":false,"template_full_name":null,"purl":"pkg:github/fuddlesworth/PlasmaZones","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuddlesworth%2FPlasmaZones","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuddlesworth%2FPlasmaZones/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuddlesworth%2FPlasmaZones/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuddlesworth%2FPlasmaZones/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fuddlesworth","download_url":"https://codeload.github.com/fuddlesworth/PlasmaZones/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuddlesworth%2FPlasmaZones/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31530647,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fancyzones","kde","kde-plasma-6","kwin","kwin-effect","powertoys","qt6","tiling","tiling-window-manager","zones"],"created_at":"2026-02-03T01:23:55.703Z","updated_at":"2026-04-07T22:01:24.544Z","avatar_url":"https://github.com/fuddlesworth.png","language":"C++","funding_links":["https://github.com/sponsors/fuddlesworth","https://ko-fi.com/fuddlesworth"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# PlasmaZones\n\n\u003cimg src=\"icons/hicolor/scalable/apps/plasmazones.svg\" alt=\"PlasmaZones\" width=\"96\"\u003e\n\n**Window zone management for Wayland compositors**\n\nDefine zones on your screen. Drag windows into them. Done.\n\n[![CI](https://github.com/fuddlesworth/PlasmaZones/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/fuddlesworth/PlasmaZones/actions/workflows/ci.yml)\n[![GitHub release](https://img.shields.io/github/v/release/fuddlesworth/PlasmaZones)](https://github.com/fuddlesworth/PlasmaZones/releases/latest)\n[![AUR](https://img.shields.io/aur/version/plasmazones-bin)](https://aur.archlinux.org/packages/plasmazones-bin)\n[![COPR](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fcopr.fedorainfracloud.org%2Fapi_3%2Fpackage%3Fownername%3Dfuddlesworth%26projectname%3DPlasmaZones%26packagename%3Dplasmazones%26with_latest_succeeded_build%3Dtrue\u0026query=%24.builds.latest_succeeded.source_package.version\u0026label=COPR\u0026color=blue)](https://copr.fedorainfracloud.org/coprs/fuddlesworth/PlasmaZones/package/plasmazones/)\n\u003cbr\u003e\n[![License: GPL-3.0](https://img.shields.io/badge/License-GPL%203.0-blue.svg)](LICENSE)\n[![Wayland](https://img.shields.io/badge/Wayland-native-blue.svg)](https://wayland.freedesktop.org/)\n\n\u003c/div\u003e\n\n---\n\n## Table of Contents\n\n- [How It Works](#how-it-works)\n- [Features](#features)\n  - [Window Snapping](#window-snapping)\n  - [Layout Editor](#layout-editor)\n  - [Autotiling](#autotiling)\n  - [Shader Effects](#shader-effects)\n  - [Snap Assist](#snap-assist)\n  - [Zone Selector](#zone-selector)\n  - [Layout Picker](#layout-picker)\n  - [Multi-Monitor \u0026 Virtual Desktops](#multi-monitor--virtual-desktops)\n  - [Settings App](#settings-app)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Keyboard Shortcuts](#keyboard-shortcuts)\n- [Configuration](#configuration)\n- [Troubleshooting](#troubleshooting)\n- [D-Bus API](#d-bus-api)\n- [Project Structure](#project-structure)\n- [Contributing](#contributing)\n- [Support](#support)\n\n---\n\n## How It Works\n\nHold **Alt** (or your configured modifier) while dragging a window. Zones light up. Drop the window into one and it resizes to fill that zone.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/drag-snap.gif\" alt=\"Drag and Snap\" /\u003e\n\u003c/p\u003e\n\n---\n\n## Features\n\n### Window Snapping\n\n**Snapping**\n- Drag with modifier key or mouse button to snap windows to zones\n- Always-active mode: zones activate on every drag without a modifier\n- Enable/disable snapping globally\n- Snap all visible windows to zones at once\n- Auto-assign windows to first empty zone per layout\n- Snap to multiple zones at once\n- App-to-zone rules: auto-snap apps to specific zones on launch\n\n**Movement**\n- Move windows between zones with keyboard shortcuts\n- Swap windows between zones directionally\n- Rotate windows clockwise/counterclockwise through zones\n- Push window to first empty zone\n- Restore original size on unsnap\n- Per-window floating toggle\n- Staggered animations with elastic and bounce easing curves\n\n**Focus \u0026 Cycling**\n- Focus adjacent zones without mouse\n- Cycle through windows stacked in the same zone\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/keyboard-nav.gif\" alt=\"Keyboard Navigation\" /\u003e\n\u003c/p\u003e\n\n### Layout Editor\n\n- Visual canvas for drawing and resizing zones\n- 26 built-in templates (columns, grids, fibonacci, master-stack, focus+stack, and more)\n- Undo/redo, copy/paste, cut, duplicate\n- Split zones horizontally or vertically\n- Grid and edge snapping\n- Fill available space / auto-expand\n- Fullscreen editing mode\n- Per-zone colors and styling\n- Restrict layouts to specific screens, desktops, or activities\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/editor.gif\" alt=\"Layout Editor\" /\u003e\n\u003c/p\u003e\n\n### Autotiling\n\n24 built-in JavaScript tiling algorithms including master+stack, dwindle, BSP, spiral, grid, monocle, and more. All algorithms run in a sandboxed engine and support hot-reload. You can create your own custom algorithms — see the full list and authoring guide on the [Tiling Algorithms](https://github.com/fuddlesworth/PlasmaZones/wiki/Tiling-Algorithms) wiki page.\n\n- Per-screen algorithm selection with independent settings\n- Configurable master ratio and master count (separate settings for Centered Master vs Master+Stack)\n- Inner and outer gaps with per-side control (top/bottom/left/right)\n- Smart gaps — no gaps when only one window is tiled\n- Max windows cap — overflow windows float automatically\n- Hide title bars on tiled windows, with colored borders\n- Window insertion position: end, after focused, or as master\n- Focus follows mouse and focus new windows\n- Minimized windows float, unminimized windows rejoin tiling\n- Per-window floating toggle\n- Staggered tiling animations\n- Respect window minimum sizes (toggleable) — tiles expand to honor size hints reported by the application\n\n\u003e **Tip:** Some apps enforce a minimum size that prevents tiles from reaching their intended geometry. To fix this, create a KWin Window Rule:\n\u003e **System Settings → Window Management → Window Rules** → add a rule matching the window class, set **Minimum Size** to **Force** `0×0` under the **Size \u0026 Position** tab. This removes the constraint so PlasmaZones can tile the window at any size.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/autotiling.gif\" alt=\"PlasmaZones Autotiling\" width=\"800\"\u003e\n\u003c/p\u003e\n\n### Shader Effects\n\n23 built-in GLSL shader effects for zone overlays, including audio-reactive visuals, distro-themed drifts, and procedural effects. Supports up to 4 custom image textures per shader plus desktop wallpaper sampling.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/shaders.gif\" alt=\"Shader effects showcase\" /\u003e\n\u003c/p\u003e\n\nCustom shaders supported — see the full effect list and authoring guide in the [Shader Guide](https://github.com/fuddlesworth/PlasmaZones/wiki/Shaders) on the wiki.\n\n### Snap Assist\n\nAfter snapping a window, an overlay shows the remaining empty zones with thumbnails of other windows. Click a thumbnail to snap it into a zone.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/snap-assist.gif\" alt=\"PlasmaZones Snap Assist\" width=\"800\"\u003e\n\u003c/p\u003e\n\n### Zone Selector\n\nDrag to screen edge to reveal a layout picker. Jump straight to any layout and zone.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/zone-selector.gif\" alt=\"Zone Selector\" /\u003e\n\u003c/p\u003e\n\n### Layout Picker\n\nPress `Meta+Alt+Space` to open a fullscreen layout picker. Click any layout to switch.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/screenshots/layout-popup.png\" alt=\"Layout Picker\" /\u003e\n\u003c/p\u003e\n\n### Visual Layout OSD\n\nSee a preview of the layout when switching, not just text.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/layout-switch.gif\" alt=\"Cycling layouts with OSD\" /\u003e\n\u003c/p\u003e\n\n### Navigation OSD\n\nMove, focus, swap, rotate, and push actions show a brief overlay with the affected zone numbers.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/navigation-osd.gif\" alt=\"PlasmaZones Navigation OSD\" width=\"800\"\u003e\n\u003c/p\u003e\n\n### Multi-Monitor \u0026 Virtual Desktops\n\n- Per-monitor layouts (same or different)\n- Per-virtual-desktop layouts\n- Per-activity layouts (optional, requires PlasmaActivities)\n- Per-monitor zone selector settings\n- Per-screen shader selection\n- Screen-targeted app-to-zone rules\n\n### Settings App\n\nStandalone settings app (`plasmazones-settings`) with sidebar navigation:\n\n- **Overview** — Per-screen mode (snapping/tiling) with live context display\n- **Layouts** — Create, duplicate, import/export zone layouts with 26 templates\n- **Snapping** — Activation, zone appearance (colors, opacity, borders, blur, shaders), animations, zone selector, per-monitor/desktop/activity assignments\n- **Tiling** — Per-screen algorithm selection, master ratio/count, gaps, title bar hiding, insertion order, focus behavior, per-monitor/desktop/activity assignments\n- **App Rules** — Per-app zone assignment rules with interactive window picker\n- **Exclusions** — Window class exclusion lists with interactive picker, minimum size thresholds\n- **Editor** — Layout editor preferences and shortcut configuration\n- **General** — OSD style, layout switch notifications, global behavior\n- **About** — Version info, update checker, daemon status\n\nOn KDE Plasma, a System Settings entry provides version info and a launcher to the settings app.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/media/videos/settings.gif\" alt=\"PlasmaZones Settings\" width=\"800\"\u003e\n\u003c/p\u003e\n\n---\n\n## Installation\n\n### Requirements\n\n- Any Wayland compositor with layer-shell support\n- Qt 6.6+\n- qt6-wayland / Wayland::Client\n- CMake 3.16+\n- C++20 compiler\n- wayland-scanner (build-time only)\n\nOptional (for full KDE integration):\n- KDE Frameworks 6.6+ (KWin effect, System Settings, KGlobalAccel shortcuts)\n- PlasmaActivities (activity-based layouts)\n\n### Arch Linux (AUR)\n\n```bash\n# Binary package (prebuilt)\nyay -S plasmazones-bin\n\n# Source package (builds locally)\nyay -S plasmazones\n```\n\n### Fedora (COPR)\n\n```bash\nsudo dnf copr enable fuddlesworth/PlasmaZones\nsudo dnf install plasmazones\n```\n\n### openSUSE Tumbleweed (OBS)\n\nCommunity-maintained package by [ilFrance](https://build.opensuse.org/package/show/home:ilFrance/plasmazones):\n\n```bash\nsudo zypper addrepo https://download.opensuse.org/repositories/home:ilFrance/openSUSE_Tumbleweed/home:ilFrance.repo\nsudo zypper refresh\nsudo zypper install plasmazones\n```\n\n\u003e **Note:** Do not use the Fedora RPM on openSUSE — it has incompatible Qt private API dependencies.\n\n### Nix\n\n```bash\nnix profile install github:fuddlesworth/PlasmaZones\n```\n\nOr add to your flake inputs. A `flake.nix` is included in the repository.\n\n### Building from Source\n\n```bash\ngit clone https://github.com/fuddlesworth/PlasmaZones.git\ncd PlasmaZones\ncmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr\ncmake --build build -j$(nproc)\nsudo cmake --install build\n```\n\n**Portable build (no KDE dependencies):**\n\n```bash\ncmake -B build -DUSE_KDE_FRAMEWORKS=OFF \\\n    -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr\ncmake --build build -j$(nproc)\nsudo cmake --install build\n```\n\nThis builds only the daemon and editor — no KWin effect or KCM.\nSee [Compositor Integration](https://github.com/fuddlesworth/PlasmaZones/wiki/Compositor-Integration) for\nshortcut and config setup on non-KDE compositors.\n\nAfter installation, enable the daemon:\n\n```bash\nsystemctl --user enable --now plasmazones.service\n```\n\nOn KDE Plasma, also refresh the service cache for KCM:\n\n```bash\nkbuildsycoca6 --noincremental\n```\n\nOpen the settings app:\n\n```bash\nplasmazones-settings\n```\n\nOn KDE Plasma, PlasmaZones also appears in **System Settings → Window Management → PlasmaZones** with a launcher to the settings app.\n\n\u003cdetails\u003e\n\u003csummary\u003eLocal install (no root)\u003c/summary\u003e\n\n```bash\ncmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/.local\ncmake --build . -j$(nproc)\ncmake --install .\n```\n\nAdd these to your `~/.bashrc` or `~/.zshrc`:\n\n```bash\nexport QT_PLUGIN_PATH=$HOME/.local/lib/qt6/plugins:$QT_PLUGIN_PATH\nexport QML2_IMPORT_PATH=$HOME/.local/lib/qt6/qml:$QML2_IMPORT_PATH\nexport XDG_DATA_DIRS=$HOME/.local/share:$XDG_DATA_DIRS\n```\n\nThen reload your shell and refresh the cache:\n\n```bash\nsource ~/.bashrc  # or ~/.zshrc\nkbuildsycoca6 --noincremental\nsystemctl --user enable --now plasmazones.service\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eRPM-based distros (Fedora/openSUSE)\u003c/summary\u003e\n\nAn RPM spec is included in `packaging/rpm/plasmazones.spec` for building packages on Fedora, openSUSE, and other RPM-based distributions.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eUniversal Linux / Fedora Atomic (Portable Tarball)\u003c/summary\u003e\n\nFor distributions where installing system packages is difficult (Fedora Atomic/Silverblue) or if you lack root privileges:\n\n1. Download `plasmazones-linux-x86_64.tar.gz` from the [Latest Release](https://github.com/fuddlesworth/PlasmaZones/releases/latest).\n2. Extract the archive.\n3. Run the installer script:\n\n```bash\ntar xzf plasmazones-linux-x86_64.tar.gz\ncd plasmazones-linux-x86_64\n./install.sh\n```\n\nThe script installs PlasmaZones to `~/.local` and sets up your environment variables.\n\n**Or use the one-liner:**\n\n```bash\nbash \u003c(curl -s https://raw.githubusercontent.com/fuddlesworth/PlasmaZones/main/packaging/local-install/web-install.sh)\n```\n\n**Upgrading:**\n\nRun the installer again with a newer tarball. It will detect the existing installation and upgrade in place.\n\n**Uninstalling:**\n\n```bash\n~/.local/share/plasmazones/uninstall.sh\n```\n\n\u003c/details\u003e\n\n---\n\n## Quick Start\n\n1. Enable the daemon: `systemctl --user enable --now plasmazones.service`\n2. Open settings: `plasmazones-settings` (or **System Settings → PlasmaZones** on KDE)\n3. Click **Open Editor** to create a layout\n4. Draw zones or pick a template\n5. Save with **Ctrl+S**\n6. **Drag any window while holding Alt** — zones appear, drop to snap\n\n\u003e **Tip:** The settings app works on any compositor. On KDE, it also appears in System Settings.\n\n---\n\n## Keyboard Shortcuts\n\n### Global Shortcuts\n\nAll configurable in **System Settings → Shortcuts → PlasmaZones** (KDE) or in the PlasmaZones settings app.\n\n\u003cdetails\u003e\n\u003csummary\u003eLayout switching\u003c/summary\u003e\n\n| Action | Default Shortcut |\n|--------|------------------|\n| Previous layout | `Meta+Alt+[` |\n| Next layout | `Meta+Alt+]` |\n| Quick layout 1–9 | `Meta+Alt+1` through `Meta+Alt+9` |\n| Open layout picker | `Meta+Alt+Space` |\n| Resnap windows to new layout | `Meta+Ctrl+Z` |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eWindow movement \u0026 snapping\u003c/summary\u003e\n\n| Action | Default Shortcut |\n|--------|------------------|\n| Snap to zone 1–9 | `Meta+Ctrl+1` through `Meta+Ctrl+9` |\n| Move window left/right/up/down | `Meta+Alt+Shift+Arrow` |\n| Swap window left/right/up/down | `Meta+Ctrl+Alt+Arrow` |\n| Push to empty zone | `Meta+Alt+Return` |\n| Snap all windows to zones | `Meta+Ctrl+S` |\n| Restore window size | `Meta+Alt+Escape` |\n| Toggle float | `Meta+F` |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eFocus \u0026 cycling\u003c/summary\u003e\n\n| Action | Default Shortcut |\n|--------|------------------|\n| Focus zone left/right/up/down | `Alt+Shift+Arrow` |\n| Cycle window forward | `Meta+Alt+.` |\n| Cycle window backward | `Meta+Alt+,` |\n| Rotate windows clockwise | `Meta+Ctrl+]` |\n| Rotate windows counterclockwise | `Meta+Ctrl+[` |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eAutotiling\u003c/summary\u003e\n\n| Action | Default Shortcut |\n|--------|------------------|\n| Toggle autotile | `Meta+Shift+T` |\n| Toggle float | `Meta+F` |\n| Focus master window | `Meta+Shift+M` |\n| Swap with master | `Meta+Shift+Return` |\n| Increase master ratio | `Meta+Shift+L` |\n| Decrease master ratio | `Meta+Shift+H` |\n| Increase master count | `Meta+Shift+]` |\n| Decrease master count | `Meta+Shift+[` |\n| Retile windows | `Meta+Shift+R` |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eOther\u003c/summary\u003e\n\n| Action | Default Shortcut |\n|--------|------------------|\n| Open editor | `Meta+Shift+E` |\n| Open settings | `Meta+Shift+P` |\n| Toggle layout lock | `Meta+Ctrl+L` |\n\n\u003c/details\u003e\n\n**Shortcut pattern** (avoids conflicts with KDE defaults):\n- `Meta+Alt+{key}` — Layout operations and actions\n- `Meta+Alt+Shift+Arrow` — Zone movement (avoids KDE's `Meta+Shift+Arrow` screen movement)\n- `Meta+Ctrl+Alt+Arrow` — Swap windows (avoids KDE's `Meta+Ctrl+Arrow` desktop switching)\n- `Alt+Shift+Arrow` — Focus navigation (avoids KDE's `Meta+Arrow` quick tile)\n\n### Editor Shortcuts\n\n| Action | Shortcut |\n|--------|----------|\n| Save | `Ctrl+S` |\n| Undo / Redo | `Ctrl+Z` / `Ctrl+Shift+Z` |\n| Select all | `Ctrl+A` |\n| Copy / Cut / Paste | `Ctrl+C` / `Ctrl+X` / `Ctrl+V` |\n| Paste with offset | `Ctrl+Shift+V` |\n| Delete zone | `Delete` |\n| Duplicate zone | `Ctrl+D` |\n| Split horizontal | `Ctrl+Shift+H` |\n| Split vertical | `Ctrl+Alt+V` |\n| Fill available space | `Ctrl+Shift+F` |\n| Toggle fullscreen | `F11` |\n| Move zone | `Arrow keys` |\n| Resize zone | `Shift+Arrow keys` |\n| Next / previous zone | `Ctrl+Tab` / `Ctrl+Shift+Tab` |\n\n---\n\n## Configuration\n\nOpen the settings app:\n\n```bash\nplasmazones-settings                    # opens on overview page\nplasmazones-settings -p layouts         # opens directly to layouts page\nplasmazones-settings --page tiling-behavior  # opens to tiling behavior page\n```\n\nThe app is single-instance — launching it again while running raises the existing window and switches to the requested page.\n\nSettings stored in `~/.config/plasmazones/config.json`. Layouts stored as JSON in `~/.local/share/plasmazones/layouts/`.\n\n---\n\n## Troubleshooting\n\n### PlasmaZones not appearing in System Settings (KDE only)\n\nRefresh the KDE service cache after installing from source:\n\n```bash\nkbuildsycoca6 --noincremental\n```\n\nOr log out and back in. The standalone settings app is always available:\n\n```bash\nplasmazones-settings\n```\n\n### Daemon not starting\n\n```bash\n# Check status\nsystemctl --user status plasmazones.service\n\n# View logs\njournalctl --user -u plasmazones.service -f\n\n# Restart\nsystemctl --user restart plasmazones.service\n```\n\n### Zones not appearing when dragging\n\n1. Ensure daemon is running: `systemctl --user status plasmazones.service`\n2. Check drag modifier in settings (default: Alt)\n3. Verify you have at least one layout with zones\n4. Check if the application is excluded in settings\n\n### Generating a support report\n\nWhen filing a bug report, attach a support report archive. It collects your config, layouts, screen topology, and recent daemon logs with home paths redacted:\n\n```bash\nplasmazones-report\n```\n\nThe archive is saved to `/tmp` by default. Options:\n\n```bash\nplasmazones-report --since 60       # Last 60 minutes of logs (default: 30, max: 120)\nplasmazones-report --output ~/Desktop  # Save to a specific directory\n```\n\nYou can also call the D-Bus method directly:\n\n```bash\nqdbus6 org.plasmazones /PlasmaZones org.plasmazones.Control.generateSupportReport 0\n```\n\n---\n\n## D-Bus API\n\nPlasmaZones exposes 10 D-Bus interfaces on `org.plasmazones` for scripting and integration — Autotile, Control, LayoutManager, Overlay, Screen, Settings, Shader, and more.\n\n```bash\n# Quick examples\nqdbus6 org.plasmazones /PlasmaZones org.plasmazones.LayoutManager.getLayoutList\nqdbus6 org.plasmazones /PlasmaZones org.plasmazones.Overlay.showOverlay\n```\n\nFull API reference, scripting examples, and per-interface documentation: [D-Bus API](https://github.com/fuddlesworth/PlasmaZones/wiki/D-Bus-API) on the wiki.\n\n---\n\n## Project Structure\n\nSee the full directory tree and data locations on the [Project Structure](https://github.com/fuddlesworth/PlasmaZones/wiki/Project-Structure) wiki page.\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on code style, license headers, testing, and translations.\n\n---\n\n## Support\n\nIf PlasmaZones is useful to you, consider supporting development:\n\n- [Ko-fi](https://ko-fi.com/fuddlesworth)\n- [GitHub Sponsors](https://github.com/sponsors/fuddlesworth)\n\nBug reports and feature requests: [GitHub Issues](https://github.com/fuddlesworth/PlasmaZones/issues)\n\n---\n\n## License\n\nGPL-3.0-or-later\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nInspired by [FancyZones](https://learn.microsoft.com/en-us/windows/powertoys/fancyzones) from PowerToys.\n\n**Works on KDE Plasma, Hyprland, Sway, GNOME, and any Wayland compositor with layer-shell support.**\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffuddlesworth%2Fplasmazones","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffuddlesworth%2Fplasmazones","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffuddlesworth%2Fplasmazones/lists"}