# Spec for DMS stable releases - Generated by GitHub Actions %global debug_package %{nil} %global version 0.3.1 %global pkg_summary DankMaterialShell - Material 3 inspired shell for Wayland compositors Name: dms Version: %{version} Release: 1%{?dist} Summary: %{pkg_summary} License: GPL-3.0-only URL: https://github.com/AvengeMedia/DankMaterialShell Source0: dms-qml.tar.gz BuildRequires: gzip BuildRequires: wget Requires: (quickshell or quickshell-git) Requires: accountsservice Requires: dms-cli Requires: dgop Recommends: brightnessctl Recommends: cava Recommends: cliphist Recommends: hyprpicker Recommends: matugen Recommends: wl-clipboard Recommends: NetworkManager Recommends: qt6-qtmultimedia Suggests: qt6ct %description DankMaterialShell (DMS) is a modern Wayland desktop shell built with Quickshell and optimized for the niri and hyprland compositors. Features notifications, app launcher, wallpaper customization, and fully customizable with plugins. Includes auto-theming for GTK/Qt apps with matugen, 20+ customizable widgets, process monitoring, notification center, clipboard history, dock, control center, lock screen, and comprehensive plugin system. %package -n dms-cli Summary: DankMaterialShell CLI tool License: GPL-3.0-only URL: https://github.com/AvengeMedia/danklinux %description -n dms-cli Command-line interface for DankMaterialShell configuration and management. Provides native DBus bindings, NetworkManager integration, and system utilities. %package -n dgop Summary: Stateless CPU/GPU monitor for DankMaterialShell License: MIT URL: https://github.com/AvengeMedia/dgop Provides: dgop %description -n dgop DGOP is a stateless system monitoring tool that provides CPU, GPU, memory, and network statistics. Designed for integration with DankMaterialShell but can be used standalone. This package always includes the latest stable dgop release. %prep %setup -q -c -n dms-qml # Download architecture-specific binaries during build # This ensures the correct architecture is used for each build target case "%{_arch}" in x86_64) ARCH_SUFFIX="amd64" ;; aarch64) ARCH_SUFFIX="arm64" ;; *) echo "Unsupported architecture: %{_arch}" exit 1 ;; esac # Download dms-cli for target architecture wget -O %{_builddir}/dms-cli.gz "https://github.com/AvengeMedia/danklinux/releases/latest/download/dms-distropkg-${ARCH_SUFFIX}.gz" || { echo "Failed to download dms-cli for architecture %{_arch}" exit 1 } gunzip -c %{_builddir}/dms-cli.gz > %{_builddir}/dms-cli chmod +x %{_builddir}/dms-cli # Download dgop for target architecture wget -O %{_builddir}/dgop.gz "https://github.com/AvengeMedia/dgop/releases/latest/download/dgop-linux-${ARCH_SUFFIX}.gz" || { echo "Failed to download dgop for architecture %{_arch}" exit 1 } gunzip -c %{_builddir}/dgop.gz > %{_builddir}/dgop chmod +x %{_builddir}/dgop %build %install install -Dm755 %{_builddir}/dms-cli %{buildroot}%{_bindir}/dms install -Dm755 %{_builddir}/dgop %{buildroot}%{_bindir}/dgop install -dm755 %{buildroot}%{_datadir}/quickshell/dms cp -r %{_builddir}/dms-qml/* %{buildroot}%{_datadir}/quickshell/dms/ rm -rf %{buildroot}%{_datadir}/quickshell/dms/.git* rm -f %{buildroot}%{_datadir}/quickshell/dms/.gitignore rm -rf %{buildroot}%{_datadir}/quickshell/dms/.github rm -f %{buildroot}%{_datadir}/quickshell/dms/*.spec %posttrans # Clean up old installation path from previous versions (only if empty) if [ -d "%{_sysconfdir}/xdg/quickshell/dms" ]; then # Remove directories only if empty (preserves any user-added files) rmdir "%{_sysconfdir}/xdg/quickshell/dms" 2>/dev/null || true rmdir "%{_sysconfdir}/xdg/quickshell" 2>/dev/null || true rmdir "%{_sysconfdir}/xdg" 2>/dev/null || true fi # Restart DMS for active users after upgrade if [ "$1" -ge 2 ]; then # Find all quickshell DMS processes (PID and username) while read pid cmd; do username=$(ps -o user= -p "$pid" 2>/dev/null) [ "$username" = "root" ] && continue [ -z "$username" ] && continue # Get user's UID and validate session user_uid=$(id -u "$username" 2>/dev/null) [ -z "$user_uid" ] && continue [ ! -d "/run/user/$user_uid" ] && continue wayland_display=$(tr '\0' '\n' < /proc/$pid/environ 2>/dev/null | grep '^WAYLAND_DISPLAY=' | cut -d= -f2) [ -z "$wayland_display" ] && continue echo "Restarting DMS for user: $username" # Run as user with full Wayland session environment runuser -u "$username" -- /bin/sh -c " export XDG_RUNTIME_DIR=/run/user/$user_uid export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$user_uid/bus export WAYLAND_DISPLAY=$wayland_display export PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:\$PATH dms restart >/dev/null 2>&1 " 2>/dev/null || true break done < <(pgrep -a -f 'quickshell.*dms' 2>/dev/null) fi %files %license LICENSE %doc README.md CONTRIBUTING.md %{_datadir}/quickshell/dms/ %files -n dms-cli %{_bindir}/dms %files -n dgop %{_bindir}/dgop %changelog * Fri Oct 31 2025 AvengeMedia - 0.3.1-1 - Stable release 0.3.1 - Built from GitHub release - Includes latest dms-cli and dgop binaries