v0.2.4
Muslimtify 0.2.4 replaces the systemd timer that woke the app once a minute with a single long-running, self-scheduling daemon. The prayer-time and notification logic is unchanged, what changed is how it is driven and supervised, making the daemon portable, free of a per-minute systemd timer, and lighter on process churn.
Highlights
- New
muslimtify daemon run: a long-running foreground loop that schedules itself and fires prayer notifications, replacing the timer + one-shot model. - The systemd user unit is now a long-running
Type=simpleservice; themuslimtify.timerunit is removed entirely. - Upgrades from earlier (timer-based) versions are healed automatically — a leftover
muslimtify.timeris disabled and removed during install/uninstall, with clean installs unaffected. - New unit tests plus a Windows-safe build; CI is green across gcc, clang, and MSVC.
Daemon: from a timer to a long-running loop
daemon runruns the existing check cycle once per wall-clock minute, sleeping in bounded, interruptible naps aligned to the top of each minute. Bounding each sleep means a laptop suspend/resume or a clock change cannot overshoot or skip a prayer.- Graceful shutdown on
SIGTERM/SIGINT: the service stops immediately and cleanly instead of being killed mid-sleep. - Supervised by systemd as a
Type=simpleservice withRestart=on-failure; it starts at login and is restarted if it ever crashes. Typical footprint is a few megabytes resident with near-zero idle CPU. daemon install/uninstall/statusnow manage the long-running service instead of the timer. The systemd unit text is produced by a single, unit-tested builder.muslimtify check(the one-shot cycle) is unchanged and still works for manual runs or custom scheduling.
Upgrading from 0.2.x (timer-based)
Existing installs may have left a muslimtify.timer enabled (it shows up as a TriggeredBy: line on the service). 0.2.4 cleans this up for you:
muslimtify daemon installdisables and removes a leftover timer. The check is guarded, so a clean first-time install does nothing here. Because the Debianpostinstand Fedora%postboth calldaemon install, PPA and COPR upgrades self-heal with no manual steps.install.shdisables the stale timer and removes any previously shipped unit before enabling the service.muslimtify daemon uninstallnow fully disables the timer; previously it only deleted the file and left the enablement behind.
If you upgrade in place and still see a TriggeredBy: muslimtify.timer line, run:
muslimtify daemon install
or, for a source install:
sudo ./install.sh
Packaging
- The systemd unit is now a single
configure_filetemplate (systemd/muslimtify.service.in) with the install prefix substituted at build time, so there is no hardcoded executable path. muslimtify.timeris removed from the CMake install list, the Fedora spec%files, the Debian packaging, andinstall.sh.install.shrenders the unit from the shared template instead of a duplicated heredoc.
Quality and CI
- Added unit tests for the service-unit builder and for the next-minute sleep math.
- The POSIX daemon loop is excluded from the Windows build; Windows continues to use its Task Scheduler path unchanged.
clang-format, the gcc/clang/MSVC build matrix, and the packaging version-consistency check all pass.
Platform support
Linux only for the loop daemon. Windows behavior is unchanged in this release (still Task Scheduler). Flatpak distribution remains on the roadmap.
Downloads
Prebuilt binaries are attached to this release.
Linux (dynamically linked — install libnotify and libcurl from your distro first):
- x86_64 —
muslimtify-0.2.4-linux-x86_64.tar.gz - aarch64 —
muslimtify-0.2.4-linux-aarch64.tar.gz
Windows — run the installer for your architecture:
- x64 —
muslimtify-0.2.4-setup-x64.exe - arm64 —
muslimtify-0.2.4-setup-arm64.exe
Verify downloads with sha256sum -c SHA256SUMS. For distro-native installs (Fedora COPR, Debian .deb, winget) see the README.