diff --git a/dms-greeter.spec b/dms-greeter.spec index 0da63d1e..19add328 100644 --- a/dms-greeter.spec +++ b/dms-greeter.spec @@ -54,7 +54,7 @@ install -Dm755 Modules/Greetd/assets/dms-greeter %{buildroot}%{_bindir}/dms-gree install -Dm644 Modules/Greetd/README.md %{buildroot}%{_docdir}/dms-greeter/README.md # Create cache directory for greeter data -install -dm750 %{buildroot}%{_sharedstatedir}/cache/dms-greeter +install -dm750 %{buildroot}%{_localstatedir}/cache/dms-greeter # Remove build and development files rm -rf %{buildroot}%{_sysconfdir}/xdg/quickshell/dms-greeter/.git* @@ -69,7 +69,7 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/quickshell/dms-greeter/dms-greeter.spec %doc %{_docdir}/dms-greeter/README.md %{_bindir}/dms-greeter %{_sysconfdir}/xdg/quickshell/dms-greeter/ -%dir %attr(0750,greeter,greeter) %{_sharedstatedir}/cache/dms-greeter +%dir %attr(0750,greeter,greeter) %{_localstatedir}/cache/dms-greeter %pre # Create greeter user/group if they don't exist (greetd expects this) @@ -79,5 +79,74 @@ getent passwd greeter >/dev/null || \ -c "System Greeter" greeter exit 0 +%post +# Set SELinux context for the wrapper script on Fedora systems +if [ -x /usr/sbin/semanage ]; then + semanage fcontext -a -t bin_t %{_bindir}/dms-greeter 2>/dev/null || true + restorecon -v %{_bindir}/dms-greeter 2>/dev/null || true +fi + +# Auto-configure greetd if config file exists and contains no dms-greeter command +GREETD_CONFIG="/etc/greetd/config.toml" +if [ -f "$GREETD_CONFIG" ] && ! grep -q "dms-greeter" "$GREETD_CONFIG"; then + # Backup existing config + BACKUP_FILE="${GREETD_CONFIG}.backup-$(date +%%Y%%m%%d-%%H%%M%%S)" + cp "$GREETD_CONFIG" "$BACKUP_FILE" 2>/dev/null || true + + # Check if niri or hyprland exists + COMPOSITOR="niri" + if ! command -v niri >/dev/null 2>&1; then + if command -v Hyprland >/dev/null 2>&1; then + COMPOSITOR="hyprland" + fi + fi + + # Update command in default_session section + sed -i "/^\[default_session\]/,/^\[/ s|^command =.*|command = \"/usr/bin/dms-greeter --command $COMPOSITOR\"|" "$GREETD_CONFIG" + sed -i '/^\[default_session\]/,/^\[/ s|^user =.*|user = "greeter"|' "$GREETD_CONFIG" +fi + +cat << EOF + +=============================================================================== + DMS Greeter Installation Complete! +=============================================================================== + +Configuration status: + - Greeter cache directory: /var/cache/dms-greeter (created with proper permissions) + - SELinux contexts: Applied (if semanage available) + - Greetd config: $([ -f "$GREETD_CONFIG" ] && grep -q "dms-greeter" "$GREETD_CONFIG" && echo "Auto-configured ✓" || echo "Needs manual setup") + +Next steps to enable the greeter: + +1. IMPORTANT: Disable any existing display managers: + sudo systemctl disable gdm sddm lightdm + (Only greetd should run as the display manager) + +2. Verify greetd configuration: + Check /etc/greetd/config.toml contains: + + [default_session] + user = "greeter" + command = "/usr/bin/dms-greeter --command niri" + + (Also supported: hyprland, sway) + Note: Existing config backed up to config.toml.backup-* if modified + +3. Enable greetd service: + sudo systemctl enable greetd + +4. (Optional) Sync your user's theme with the greeter: + sudo usermod -aG greeter YOUR_USERNAME + # Then LOGOUT and LOGIN to apply group membership + ln -sf ~/.config/DankMaterialShell/settings.json /var/cache/dms-greeter/settings.json + ln -sf ~/.local/state/DankMaterialShell/session.json /var/cache/dms-greeter/session.json + ln -sf ~/.cache/quickshell/dankshell/dms-colors.json /var/cache/dms-greeter/colors.json + +Documentation: /usr/share/doc/dms-greeter/README.md +=============================================================================== + +EOF + %changelog {{{ git_dir_changelog }}}