Skip to content

v0.2.4

Choose a tag to compare

@rizukirr rizukirr released this 27 Jun 14:21
675e7be

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=simple service; the muslimtify.timer unit is removed entirely.
  • Upgrades from earlier (timer-based) versions are healed automatically — a leftover muslimtify.timer is 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 run runs 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=simple service with Restart=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 / status now 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 install disables and removes a leftover timer. The check is guarded, so a clean first-time install does nothing here. Because the Debian postinst and Fedora %post both call daemon install, PPA and COPR upgrades self-heal with no manual steps.
  • install.sh disables the stale timer and removes any previously shipped unit before enabling the service.
  • muslimtify daemon uninstall now 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_file template (systemd/muslimtify.service.in) with the install prefix substituted at build time, so there is no hardcoded executable path.
  • muslimtify.timer is removed from the CMake install list, the Fedora spec %files, the Debian packaging, and install.sh.
  • install.sh renders 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.

Full changelog

v0.2.3...v0.2.4