File plasmazones.spec of Package plasmazones

# PlasmaZones RPM Spec File for openSUSE Tumbleweed
# FancyZones-style window tiling for KDE Plasma
# SPDX-License-Identifier: GPL-3.0-or-later
#
# Build: rpmbuild -ba plasmazones.spec
# Clean build: osc build openSUSE_Tumbleweed x86_64 plasmazones.spec

Name:           plasmazones
Version:        2.3.16
Release:        0
Summary:        FancyZones-style window tiling for KDE Plasma
License:        GPL-3.0-or-later
URL:            https://github.com/fuddlesworth/PlasmaZones
# Source code tarball
Source0:        https://github.com/fuddlesworth/PlasmaZones/archive/refs/tags/v%{version}.tar.gz#/PlasmaZones-%{version}.tar.gz
Source1:        plasmazones-rpmlintrc

# Plasma 6 / Wayland only
ExclusiveArch:  x86_64

# Build tools
BuildRequires:  cmake >= 3.16
BuildRequires:  ninja
BuildRequires:  extra-cmake-modules >= 6.0.0
BuildRequires:  gcc-c++
BuildRequires:  gettext-tools

# Qt6
BuildRequires:  cmake(Qt6Core) >= 6.6.0
BuildRequires:  cmake(Qt6DBus)
BuildRequires:  cmake(Qt6Gui)
BuildRequires:  cmake(Qt6Qml)
BuildRequires:  cmake(Qt6Quick)
BuildRequires:  cmake(Qt6Widgets)
BuildRequires:  cmake(Qt6Concurrent)
BuildRequires:  cmake(Qt6QuickControls2)
BuildRequires:  cmake(Qt6ShaderTools)
BuildRequires:  cmake(Qt6Test)
BuildRequires:  qt6-gui-private-devel
BuildRequires:  qt6-shadertools-private-devel

# KDE Frameworks 6
BuildRequires:  cmake(KF6Config) >= 6.0.0
BuildRequires:  cmake(KF6ConfigWidgets)
BuildRequires:  cmake(KF6CoreAddons)
BuildRequires:  cmake(KF6DBusAddons)
BuildRequires:  cmake(KF6I18n)
BuildRequires:  cmake(KF6KCMUtils)
BuildRequires:  cmake(KF6WindowSystem)
BuildRequires:  cmake(KF6GlobalAccel)
BuildRequires:  cmake(KF6Notifications)
BuildRequires:  cmake(KF6ColorScheme)

# Plasma/KWin
BuildRequires:  kwin6-devel
BuildRequires:  cmake(LayerShellQt) >= 6.0.0

# Optional
BuildRequires:  cmake(PlasmaActivities)

# Systemd
BuildRequires:  pkgconfig(systemd)

# Runtime dependencies
# Most dependencies are auto-detected by RPM from shared library dependencies
Requires:       kwin6
Requires:       hicolor-icon-theme >= 0.10

%description
PlasmaZones brings FancyZones-style window tiling to KDE Plasma 6.

Features:
- Drag windows to predefined zones
- Custom zone layouts with visual editor
- Modifier key activation (Shift, Ctrl, etc.)
- Multi-monitor support
- Keyboard navigation between zones
- Activity-based layout switching
- Wayland-native using Layer Shell

%prep
%autosetup -n PlasmaZones-%{version}

%build
%cmake_kf6 \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DBUILD_TESTING=OFF
%cmake_build

%install
%kf6_install

%post
# Refresh KDE service cache
%{_bindir}/kbuildsycoca6 --noincremental 2>/dev/null || :
# Update icon cache
%{_bindir}/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%service_add_post plasmazones.service
echo ""
echo "PlasmaZones: the KWin effect is enabled by default, but KWin must"
echo "be restarted to load it. Log out and back in, or run:"
echo "  kwin_wayland --replace &"
echo ""

%preun
%service_del_preun plasmazones.service

%postun
%{_bindir}/kbuildsycoca6 --noincremental 2>/dev/null || :
%{_bindir}/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%service_del_postun plasmazones.service

%files
%license LICENSE
%doc README.md
# Directories that must be declared (prevent "directories not owned" rpmlint errors)
%dir %{_libdir}/environment.d
%dir %{_libdir}/qt6/plugins/kwin
%dir %{_libdir}/qt6/plugins/kwin/effects
%dir %{_libdir}/qt6/plugins/kwin/effects/plugins
%dir %{_datadir}/icons/hicolor-light
%dir %{_datadir}/icons/hicolor-light/scalable
%dir %{_datadir}/icons/hicolor-light/scalable/apps
%dir %{_datadir}/systemsettings
%dir %{_datadir}/systemsettings/categories

# Executables
%{_bindir}/plasmazonesd
%{_bindir}/plasmazones-editor

# Libraries
%{_libdir}/libplasmazones_core.so
%{_libdir}/libplasmazones_core.so.*
%{_libdir}/libplasmazones_rendering.so

# KWin effect plugin
%{_libdir}/qt6/plugins/kwin/effects/plugins/kwin_effect_plasmazones.so

# D-Bus interfaces
%{_datadir}/dbus-1/interfaces/org.plasmazones.*.xml

# Desktop files - daemon and editor
%{_datadir}/applications/org.plasmazones.editor.desktop
%{_datadir}/applications/org.plasmazones.daemon.desktop

# KCM plugins (System Settings modules)
%{_libdir}/qt6/plugins/plasma/kcms/systemsettings/kcm_plasmazones_*.so

# KCM desktop files
%{_datadir}/applications/kcm_plasmazones_*.desktop

# Data files
%{_datadir}/plasmazones/

# Icons
%{_datadir}/icons/hicolor/*/apps/plasmazones*.svg
%{_datadir}/icons/hicolor-light/scalable/apps/plasmazones*.svg

# KConfig
%{_datadir}/config.kcfg/plasmazones.kcfg

# System Settings category
%{_datadir}/systemsettings/categories/settings-windowmanagement-plasmazones.desktop

# Systemd user service
%{_userunitdir}/plasmazones.service

# Snap Assist: env.d config for KWin screenshot auth
%{_libdir}/environment.d/99-plasmazones-screenshot.conf

# Translations
%{_datadir}/locale/*/LC_MESSAGES/plasmazones*.mo
%{_datadir}/locale/*/LC_MESSAGES/kcm_plasmazones*.mo

%changelog
# Generated from CHANGELOG.md by packaging/generate-changelog.sh during CI.
# Do not edit manually — entries below are overwritten on release.
openSUSE Build Service is sponsored by