diff --git a/docs/content/docs/notifications.md b/docs/content/docs/notifications.md index 5ff873b..6e9ca87 100644 --- a/docs/content/docs/notifications.md +++ b/docs/content/docs/notifications.md @@ -7,6 +7,9 @@ neomd can fire desktop notifications via `notify-send` (or any compatible CLI) w Notifications fire from the **TUI only**. The headless daemon (`neomd --headless`) screens mail silently so notifications don't end up on a NAS where no one sees them. +How it looks: +![notification](/images/notifictation.png) + ## Quick start 1. Make sure `notify-send` is installed and a notification daemon is running (`mako`, `dunst`, `swaync`, …). On Hyprland with mako: diff --git a/docs/content/docs/screener.md b/docs/content/docs/screener.md index f17f6f4..f1d2e3e 100644 --- a/docs/content/docs/screener.md +++ b/docs/content/docs/screener.md @@ -32,6 +32,7 @@ spammy@ssp.sh # … except this one address, which is blocked Domain entries work in every screener list (`screened_in`, `screened_out`, `feed`, `papertrail`, `spam`, `notify`). The `Di` / `Do` chord (see below) writes them for you from inside neomd. + ## Auto-screen and background sync By default neomd screens your inbox automatically so you never have to press `S`: @@ -96,6 +97,29 @@ Emails are only auto-screened while they are in the **Inbox**. Once moved to ToS If emails end up in ToScreen incorrectly (e.g. screened by another device like [Termux with Android](configuration/android) with incomplete lists), use `:reset-toscreen` to move them back to Inbox where auto-screen will re-classify them. +## Priority Screener: Exact match over `@domain` match + +When an incoming sender could match more than one list, neomd picks a category in two passes: + +1. **First pass — exact email** is looked up in every list, in this priority order: + `spam` → `screened_out` → `feed` → `papertrail` → `screened_in`. + The first list that contains the *exact* address decides the category, and the search stops. +2. **Second pass — `@domain` rules** are consulted only if the first pass found no exact match, again in the same priority order. The first list whose `@domain` entry matches decides the category. +3. If neither pass matches → the sender lands in `ToScreen`. + +This guarantees that a per-address rule **always overrides** the broader domain rule across *any* category. Two real examples: + +| `screened_in.txt` | `screened_out.txt` | Sender | Result | Why | +| ----------------- | ------------------ | --------------------- | ----------- | ------------------------------------------------------------------------------- | +| `neomd.demo@ssp.sh` | `@ssp.sh` | `neomd.demo@ssp.sh` | **Inbox** | Exact match in `screened_in` (pass 1) wins over `@ssp.sh` block (pass 2) | +| (empty) | `@ssp.sh` | `neomd.demo@ssp.sh` | ScreenedOut | No exact match anywhere → `@ssp.sh` in `screened_out` matches in pass 2 | +| `@ssp.sh` | `spammy@ssp.sh` | `spammy@ssp.sh` | ScreenedOut | Exact match in `screened_out` (pass 1) wins over `@ssp.sh` approval (pass 2) | +| `@ssp.sh` | (empty) | `random@ssp.sh` | **Inbox** | No exact match → `@ssp.sh` in `screened_in` matches in pass 2 | + +**The mental model:** *"Add the domain to lift the whole company, then surgically block (or approve) individual addresses without restating the rule."* + +The same two-pass logic runs for [`notify.txt`](/docs/notifications/#domain-entries) too — an exact entry there always wins over an `@domain` entry, but for the notify list this rarely matters since both produce the same outcome (a desktop notification). + ## Colon commands Press `:` to open the command line. Tab cycles through completions; Enter runs the command. diff --git a/docs/static/images/notifictation.png b/docs/static/images/notifictation.png new file mode 100644 index 0000000000000000000000000000000000000000..7491e3c77f7e9228dd40a387bf76e997ec2759ef GIT binary patch literal 20757 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 literal 0 HcmV?d00001