Files
community-plugins/mawaqit/README.md
T
ycf-anonandGitHub 65503f2ce1 feat: add mawaqit plugin (#53)
* feat: add mawaqit plugin

* Address review feedback

* Address validator errors
2026-07-20 20:45:30 -04:00

120 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Mawaqit
Prayer times for Noctalia, with a bar widget and panel: live countdown to the next
prayer, notifications, optional azan playback, Hijri date, and per-prayer time
offsets.
## Plugin
| Field | Value |
| ------- | ------------------------------------------------------------ |
| ID | `ycf/mawaqit` |
| Entries | Bar widget: `bar`; panel: `panel`; service: `fetcher` |
## Requirements
Install `paplay` (PipeWire/PulseAudio) **or** `pw-cat` on `PATH` — only one is
required, used for azan playback. If neither is installed, azan is skipped (a
line is logged) and everything else — countdown, panel, notifications — works
normally.
Also requires `pkill` (part of `procps`, present on virtually every distro by
default) — used to stop azan playback, since neither player exposes its own
stop control.
Azan audio is **not bundled**. To enable it:
1. Get your own azan `.mp3` file(s) from wherever you like.
2. Copy them into this plugin's `assets/` folder, named exactly `azan1.mp3`,
`azan2.mp3`, and/or `azan3.mp3` (only the ones you want to use — you don't
need all three).
3. In Settings → Plugins → Mawaqit, turn on **Play Azan** and pick which of
the three slots to play from **Azan audio**.
If the selected file isn't present, azan is silently skipped and a line is
logged — nothing else is affected.
## Usage
- **Left click** the bar widget → open the prayer times panel.
- **Right click** the bar widget → cycle its display mode: live countdown →
static time → prayer name only.
Toggle the panel directly:
```sh
noctalia msg panel-toggle ycf/mawaqit:panel
```
The panel shows all five daily prayers plus Sunrise and, during Ramadan, Imsak,
with a live countdown banner to whichever is next, the Gregorian and Hijri
date, and a refresh button. If azan is playing, a stop button appears next to
it.
## Settings
Plugin-level (Settings → Plugins → Mawaqit):
| Setting | Type | Default | Description |
| -------------------- | -------- | ------- | -------------------------------------------------------------------------- |
| `city` | `string` | `London` | Your city name in English. |
| `country` | `string` | `UK` | Country name or 2-letter code. |
| `method` | `select` | `3` (MWL) | Calculation authority followed in your region. |
| `school` | `select` | `0` (Shafi/Maliki/Hanbali) | Asr convention — Hanafi uses a later shadow factor. |
| `hijriDayOffset` | `select` | `0` | Shift the displayed Hijri day by −1/0/+1 if it doesn't match local moon sighting. |
| `twelveHourFormat` | `bool` | `false` | Show prayer times as 12-hour (e.g. `5:23 AM`) instead of 24-hour. |
| `showNotifications` | `bool` | `true` | Show a system notification when each prayer time begins. |
| `playAzan` | `bool` | `false` | Play an azan audio file when each prayer time begins. |
| `azanFile` | `select` | `azan1.mp3` | Which bundled azan track to play (see Requirements for setup). |
| `tune` | `bool` | `false` | Enable the per-prayer minute offsets below. |
| `tuneFajr` | `int` | `0` | Fajr offset, in minutes (−60 to 60). |
| `tuneDhuhr` | `int` | `0` | Dhuhr offset, in minutes. |
| `tuneAsr` | `int` | `0` | Asr offset, in minutes. |
| `tuneMaghrib` | `int` | `0` | Maghrib offset, in minutes. |
| `tuneIsha` | `int` | `0` | Isha offset, in minutes. |
Bar widget settings (from the widget's own settings menu):
| Setting | Type | Default | Description |
| ------------------- | -------- | ------------------- | ------------------------------------------------------------------ |
| `showCountdown` | `bool` | `true` | Show a live countdown to the next prayer instead of the static time. |
| `showElapsed` | `bool` | `false` | After a prayer begins, count up (`+`) for up to 1 hour. |
| `hidePrayerName` | `bool` | `false` | Show only the time or countdown, without the prayer name. |
| `widgetIcon` | `glyph` | `building-mosque` | Bar icon. |
| `dynamicIcon` | `bool` | `false` | Show a sun/moon icon matching the current prayer instead of the fixed icon. |
| `textColor` | `color` | `on_surface` | Bar text color. |
| `iconColor` | `color` | `on_surface` | Bar icon color. |
| `activeColor` | `color` | `primary` | Color used when a prayer is happening now or during elapsed mode. |
## IPC
Force an immediate refetch (both the service and the bar widget respond):
```sh
noctalia msg plugin ycf/mawaqit:fetcher all refresh
```
Set the bar widget's display mode directly:
```sh
noctalia msg plugin ycf/mawaqit:bar all mode countdown|static|name
```
## Notes
- The background service fetches prayer times once daily from
`api.aladhan.com`, sending the configured city/country/method/school as
query parameters, plus a second request for the next day's Fajr time (used
for the countdown after Isha).
- Azan playback runs `paplay` or `pw-cat` against a file **you supply** (see
Requirements) — no audio is bundled with this plugin. Playback is stopped
by matching the exact file path being played (via `pkill -f`), not a
generic pattern — this is the only termination method available since the
plugin API doesn't currently expose a PID or stop handle for spawned
processes. Stopping happens when the plugin exits or is disabled, or
manually from the panel while azan is playing.
- The Arabic Hijri date and prayer-time banner are rendered with the bundled
Reem Kufi font (`ReemKufi.ttf`), licensed under the SIL Open Font License —
see `OFL.txt`.
- No compositor-specific behavior — works anywhere Noctalia's bar and panels do.