Since I switched to GNOME and Wayland on my desktop I have been missing XScreenSaver.
JWZ is rightly not planning to add support for this unless there are some significant changes in GNOME.
I felt left out whenever I saw a new version with new hacks being released.
Recently I stumbled over retrosaver by c-premus. It is basically a workaround to run the hacks on GNOME Wayland. It doesn’t lock the screen and leaves that to GNOME, so it isn’t really a replacement for XScreenSaver. At home, this is probably good enough.
Since I am a Fedora fan-boy and upstream only provides Debian packages at the moment,
I decided to build RPMs for this for easier installation.
I used to be a mainline Fedora packager, but this was clearly better suited to COPR.
I haven’t packaged Go RPMs before; this was also fiddly a bit of a learning experience.
The upstream maintainer has been great, incorporating some text changes to enable me to remove a patch that was originally required.
I originally used a hack using systemd to span both of my screens (see photo). Now I have switched to the upstream version which runs the same module on every screen.
Install
sudo dnf copr enable cdamian/retrosaver
sudo dnf install retrosaver
retrosaver setup # once per user, inside the GNOME Wayland session
The COPR builds for recent Fedoras.
How the package is built
The spec lives in christof/retrosaver-rpm on my Forgejo. COPR clones it and builds with the make_srpm method, which runs .copr/Makefile in a chroot that has network access:
spectooldownloads the tagged upstream tarball.go_vendor_archivefrom go-vendor-tools vendors the Go dependencies into a second tarball, and checks their licences.rpmautospecturns%autoreleaseand%autochangeloginto a release number and changelog from the packaging repo’s git history.
Neither tarball is committed, so a version bump is one line in the spec. Renovate watches upstream’s git tags and opens that PR. Merging it triggers the COPR rebuild. A Forgejo Actions job runs the same build on every push, without mock, so a broken spec shows up before COPR sees it.