Menu

Tree [687e92] main /
 History

HTTPS access


File Date Author Commit
 config 3 days ago Reaper Reaper [302c6f] mystify: fold private simulation core into hack
 debian 3 days ago Reaper Reaper [484d84] debian: prepare standalone Mystify 0.2.0
 docs 2 days ago Reaper Reaper [687e92] docs: add Mystify screenshot
 .gitignore 3 days ago Reaper Reaper [f3d081] debian: simplify standalone binary package
 LICENSE 2026-06-06 Reaper Reaper [3c134c] Initial Mystify XScreenSaver implementation
 Makefile 3 days ago Reaper Reaper [484d84] debian: prepare standalone Mystify 0.2.0
 README.md 2 days ago Reaper Reaper [687e92] docs: add Mystify screenshot
 colors-standalone.c 3 days ago Reaper Reaper [aa1bd6] mystify: allocate colors through XScreenSaver u...
 colors.h 3 days ago Reaper Reaper [aa1bd6] mystify: allocate colors through XScreenSaver u...
 mystify.6x 3 days ago Reaper Reaper [302c6f] mystify: fold private simulation core into hack
 mystify.c 3 days ago Reaper Reaper [aa1bd6] mystify: allocate colors through XScreenSaver u...
 screenhack-standalone.c 3 days ago Reaper Reaper [484d84] debian: prepare standalone Mystify 0.2.0
 screenhack.h 3 days ago Reaper Reaper [484d84] debian: prepare standalone Mystify 0.2.0
 xscreensaver-mystify.spec 3 days ago Reaper Reaper [323856] rpm: add Fedora and Enterprise Linux packaging

Read Me

Mystify for XScreenSaver

This repository packages the Mystify display hack independently from the full
XScreenSaver source package.

It is intended for users who want Mystify on an existing XScreenSaver
installation without replacing their distribution's complete XScreenSaver
package or waiting for the next upstream release.

Current standalone release: 0.2.0

Mystify animating colorful deforming wire polygons on a black background

Source synchronization

mystify.c, config/mystify.xml, and mystify.6x are copied from the
authoritative XScreenSaver implementation.

Current synchronized source commit:

f1a60a3ab34d70e76749e24ff48fadd4598d03bd
mystify: allocate colors through XScreenSaver utilities

The standalone-only files screenhack.h, screenhack-standalone.c,
colors.h, and colors-standalone.c provide the small parts of the
XScreenSaver module lifecycle, resource handling, and color allocation needed
to compile the unmodified hack as an independent executable.

The display-hack source should remain byte-for-byte identical to
hacks/mystify.c at the recorded XScreenSaver commit.

Building and installing without a package

This generic build path can be used on any Unix-like distribution with the
required development tools and X11 libraries.

Build requirements:

  • a C17 compiler;
  • make;
  • pkg-config;
  • Xlib development headers and libraries;
  • an existing XScreenSaver installation if Mystify will be used as a display
    hack.

On Debian or Ubuntu:

sudo apt update
sudo apt install build-essential pkgconf libx11-dev xscreensaver

On Fedora, RHEL, Rocky Linux, or AlmaLinux with EPEL enabled:

sudo dnf install gcc make pkgconf-pkg-config libX11-devel xscreensaver-base

On another distribution, install the equivalent compiler, make,
pkg-config, Xlib development package, and XScreenSaver runtime package.

Compile and test Mystify from the top-level source directory:

make
make check

Run the compiled program directly without installing it:

./mystify -window

Install the executable and XML configuration directly, without creating a
distribution package:

sudo make install

The default manual installation paths are:

/usr/libexec/xscreensaver/mystify
/usr/share/xscreensaver/config/mystify.xml

Distributions with a different XScreenSaver filesystem layout can override
PREFIX, LIBEXECDIR, and SYSCONFDIR when running make install.

Building distribution packages

Debian or Ubuntu

Install the Debian packaging dependencies:

sudo apt update
sudo apt install build-essential debhelper pkgconf libx11-dev

Build an unsigned binary package from the top-level source directory:

dpkg-buildpackage -b -us -uc

The generated .deb package and related build artifacts are written to the
parent directory.

Fedora, RHEL, Rocky Linux, or AlmaLinux

On Enterprise Linux, enable EPEL first so the resulting package can use the
EPEL xscreensaver-base runtime dependency.

Install the RPM build tools and build dependencies:

sudo dnf install gcc make pkgconf-pkg-config libX11-devel \
  desktop-file-utils rpm-build rpmdevtools xscreensaver-base

Create the standard RPM build tree, download the tagged source archive declared
by the spec, and build both the source and binary RPMs:

rpmdev-setuptree
spectool -g -R xscreensaver-mystify.spec
rpmbuild -ba xscreensaver-mystify.spec

The generated packages are written beneath:

~/rpmbuild/SRPMS/
~/rpmbuild/RPMS/<architecture>/

The RPM spec follows Fedora and EPEL's non-OpenGL XScreenSaver hack layout.
It installs a modular hacks.conf.d fragment and refreshes XScreenSaver's
generated hack list when the package is installed or removed.

The RPM package also installs a GNOME-only desktop entry under
/usr/share/applications/screensavers. The entry is marked with
OnlyShowIn=GNOME;, allowing GNOME-compatible desktop tools to discover
Mystify without exposing it as an ordinary application in KDE Plasma, Xfce,
or other desktop environments. XScreenSaver itself registers Mystify
separately through the installed hacks.conf.d fragment.

Package contents

Both the Debian and RPM packages install the Mystify executable, XML
configuration, manual page, and screensaver desktop entry.

The RPM package additionally installs Fedora and EPEL's modular
hacks.conf.d registration fragment and refreshes XScreenSaver's generated
hack list when the package is installed or removed.

Registering Mystify with XScreenSaver

The Fedora and Enterprise Linux RPM registers Mystify automatically. Debian
package and package-less installations currently require a per-user entry in
~/.xscreensaver before Mystify appears in xscreensaver-settings and can be
selected by the XScreenSaver daemon.

Run xscreensaver-settings once if ~/.xscreensaver does not yet exist. Then
back up the configuration and add Mystify to the programs resource:

test -e ~/.xscreensaver.before-mystify ||
  cp -a ~/.xscreensaver ~/.xscreensaver.before-mystify

grep -Eq \
  '^[[:space:]]*-?[[:space:]]*mystify[[:space:]]+--?root([[:space:]]|$)' \
  ~/.xscreensaver ||
  sed -i \
    '/^programs:/a\                                mystify --root                              \\n\\' \
    ~/.xscreensaver

XScreenSaver normally reloads ~/.xscreensaver automatically. To reload it
immediately and verify that Mystify appears in the settings dialog:

xscreensaver-command --restart
xscreensaver-settings

When Mystify has been installed under a nonstandard LIBEXECDIR, replace
mystify in the inserted entry with the full path to the executable.

License

Mystify and its standalone compatibility host are distributed under the X11
License. See LICENSE.