Summary
v0.3.2 keeps your saved location fresh on its own. If you move between cities, the daemon now re-detects your coordinates once the stored ones age past a configurable interval, on Linux and Windows through one shared code path, instead of leaving you to re-run detection by hand.
The rest of the release is groundwork and repair: the non-Windows platform layer is split so a future macOS or BSD target can reuse the portable half, and the distro changelogs are corrected after three released versions turned out to be missing from them.
There are no breaking changes and no prayer time calculation changes in this release.
What changes
Location auto-refresh
Saved coordinates now carry a timestamp, and the daemon re-detects your location once they age past a set interval.
- Location config gains
updated_atandrefresh_interval. Both are written toconfig.jsonand parsed back on load. - The default interval is 12 hours, with a hard floor of 1 hour. The floor is clamped on load, so a hand-edited
config.jsoncannot set a value that would hammer the ipinfo endpoint. updated_atis stamped on every successful ipinfo fetch, and staleness is decided by a purelocation_is_stale()helper, which keeps the policy testable in isolation.- Linux and Windows share one code path rather than each carrying their own copy.
This fixes stale coordinates for anyone who travels or otherwise moves without re-running detection manually. Prayer times are still calculated fully offline; only the location lookup touches the network.
Platform layer split into posix/ and linux/
The non-Windows platform layer is now two folders instead of one, creating a seam for future targets.
src/platform/posix/holds the portable code: XDG config, cache and home directory resolution, recursive mkdir, file open, exists and delete, atomic rename,localtime_r,isatty,realpathbased file validation, and owner-only chmod, plus tzdb offset lookup and/etc/localtimeresolution.src/platform/linux/is reduced to the single genuinely Linux-specific primitive,platform_native_exe_path(), which resolves the running executable throughreadlink("/proc/self/exe").
This only creates the seam. No second target is added, and there is no behavior change on Linux.
ARRAY_LEN helper
Array lengths that previously had to be kept in sync with their arrays by hand are now derived.
- Adds
include/util.hwithARRAY_LEN(arr). - Applied to the location display
rows[]loop (previouslyi < 6) and the systemdunits[]loop (previouslyi < 2), so adding or removing an entry no longer means editing a separate count.DISPATCH_Nnow routes through it instead of duplicating thesizeofformula. - Deliberately left alone: the fixed 7 prayer loops and their comma separators, the 4 hex digits in
json.h(\uXXXX), and the display border column widths.prayertimes.his untouched.
Packaging and maintenance
Distro changelogs repaired
Three released versions had no changelog entry at all, and the entries that did exist were mislabelled.
bump-version.sh rewrote the top changelog stanza's version header in place on every run rather than adding a stanza. That produced the right result only when a new stanza had already been hand-written above it. Run in any other order, it relabelled the previous release's body with the new version number, silently consuming the entry underneath.
The result was that 0.2.4, 0.2.5 and 0.3.0 never received an entry, and the two files disagreed about what 0.3.1 contained: the debian stanza labelled 0.3.1 actually described v0.3.0, while the fedora entry labelled 0.3.1 actually described v0.2.4. Both bodies were accurate, both carried the wrong version number, and each file had drifted a different distance.
- The mislabelled entries are relabelled to the versions they actually describe and retimestamped to the real release dates.
- The missing entries are reconstructed from the published release notes, with timestamps taken from each release's publish time.
bump-version.shno longer touches either changelog. It still sets the fields it can genuinely derive: the specVersionandRelease, the PKGBUILDpkgverandpkgrel, and the regenerated.SRCINFO. It now prints both changelog headers preformatted, including the RFC-2822 date, so the timestamp format can be copied rather than typed.check-versions.shno longer gives advice that cannot work fordebian/changelog. Because debian has noVersionfield, its changelog is the version source, so a bump now fails the check until the stanza is written. That failure is intentional: a reminder in place of a silent overwrite.- Two changelog dates named a weekday that did not match the date itself and are corrected:
25 Feb 2026is a Wednesday, not a Tuesday, andApr 03 2026is a Friday, not a Thursday. This is the same class of defect that once failed a Launchpad build atdh_installchangelogs.
Other
- Fedora package description rewritten; it previously described a Linux-only tool.
- Discord webhook notifications for issues, pull requests and discussions.
- README support statement revised, and documentation formatting fixes for readability.
Installation
Linux. The tarballs are dynamically linked, so install libnotify and libcurl from your distro first, then extract:
- x86_64:
muslimtify-0.3.2-linux-x86_64.tar.gz - aarch64:
muslimtify-0.3.2-linux-aarch64.tar.gz
Windows. Run the installer for your architecture:
- x64:
muslimtify-0.3.2-setup-x64.exe - arm64:
muslimtify-0.3.2-setup-arm64.exe
For distro-native installs (Fedora COPR, Debian PPA, AUR) see the README.
Verifying downloads
sha256sum -c SHA256SUMS
Upgrading
No manual steps. There are no breaking changes from 0.3.1, and config.json gains its new location fields automatically on next load, with defaults applied.
What's Changed
- create discord webhook and update aur by @rizukirr in #39
- fix: discord webhook by @rizukirr in #41
- refactor: split platform layer into posix/ and linux/ by @rizukirr in #42
- Revise project support statement for Mac users by @rizukirr in #43
- docs: fix formatting by @rizukirr in #44
- feat: cross-platform location auto-refresh with configurable interval by @rizukirr in #45
- refactor: add ARRAY_LEN helper and replace hardcoded array lengths by @rizukirr in #46
- chore: prepare v0.3.2 and repair the packaging changelogs by @rizukirr in #47
Full Changelog: v0.3.1...v0.3.2