Compare commits

...
4 Commits
Author SHA1 Message Date
Daniele Fucini 10b84b771e Remove the pacman hook
Status bars already drop installed entries, and the path unit covers repo
builds, so the hook only ran checkupdates on every transaction.
2026-10-18 15:47:33 +02:00
Daniele Fucini 69450e4a3c Update PKGBUILD 2026-10-18 15:32:11 +02:00
Daniele Fucini 41f94d719b Refresh quietly from the path unit and pacman hook
Add a --quiet mode that updates the pending file without notifying, run by
the new update-notify-quiet.service, so aur sync doesn't notify per package.
2026-10-18 15:31:46 +02:00
Daniele Fucini bd34dd7bf1 Update PKGBUILD 2026-10-17 11:07:14 +02:00
7 changed files with 26 additions and 31 deletions
+3 -4
View File
@@ -3,7 +3,7 @@
# Maintainer: Daniele Fucini <dfucini [at] gmail [dot] com> # Maintainer: Daniele Fucini <dfucini [at] gmail [dot] com>
pkgname=update-notify pkgname=update-notify
pkgver=3.8 pkgver=3.10
pkgrel=1 pkgrel=1
pkgdesc='Notify when updates are available' pkgdesc='Notify when updates are available'
arch=('any') arch=('any')
@@ -18,17 +18,16 @@ optdepends=('aurutils: to check AUR packages in the local repo for updates'
'trustsight: to vet AUR updates before building them') 'trustsight: to vet AUR updates before building them')
source=("git+$url?signed#tag=$pkgver") source=("git+$url?signed#tag=$pkgver")
validpgpkeys=('7E12BC1FF3B6EDB2CD8053EB981A2B2A3BBF5514') validpgpkeys=('7E12BC1FF3B6EDB2CD8053EB981A2B2A3BBF5514')
sha256sums=('947b6b33a9dd8fe69e87252d8a3591e99123d334f0e7660dcf13177ea8ba7746') sha256sums=('b3949ce23148d981eb2dd9f3eda4cb2ef8be3f28ee08da63ae14e75c8e18d176')
package() package()
{ {
cd "$srcdir"/"$pkgname" cd "$srcdir"/"$pkgname"
install -Dm755 "$pkgname" "$pkgdir"/usr/bin/"$pkgname" install -Dm755 "$pkgname" "$pkgdir"/usr/bin/"$pkgname"
install -Dm644 "$pkgname".service "$pkgdir"/usr/lib/systemd/user/"$pkgname".service install -Dm644 "$pkgname".service "$pkgdir"/usr/lib/systemd/user/"$pkgname".service
install -Dm644 "$pkgname"-quiet.service "$pkgdir"/usr/lib/systemd/user/"$pkgname"-quiet.service
install -Dm644 "$pkgname".timer "$pkgdir"/usr/lib/systemd/user/"$pkgname".timer install -Dm644 "$pkgname".timer "$pkgdir"/usr/lib/systemd/user/"$pkgname".timer
install -Dm644 "$pkgname".path "$pkgdir"/usr/lib/systemd/user/"$pkgname".path install -Dm644 "$pkgname".path "$pkgdir"/usr/lib/systemd/user/"$pkgname".path
install -Dm755 "$pkgname"-refresh "$pkgdir"/usr/lib/"$pkgname"/refresh
install -Dm644 "$pkgname".hook "$pkgdir"/usr/share/libalpm/hooks/"$pkgname".hook
install -Dm644 README.md "$pkgdir"/usr/share/doc/"$pkgname"/README.md install -Dm644 README.md "$pkgdir"/usr/share/doc/"$pkgname"/README.md
install -Dm644 config.example "$pkgdir"/usr/share/doc/"$pkgname"/config.example install -Dm644 config.example "$pkgdir"/usr/share/doc/"$pkgname"/config.example
} }
+5 -5
View File
@@ -43,11 +43,9 @@ systemctl --user enable --now update-notify.timer
The timer runs 5 minutes after boot, then every 6 hours. The timer runs 5 minutes after boot, then every 6 hours.
A pacman hook also runs update-notify after every pacman transaction, for each logged-in user whose timer is active, so the notification and the status bar file are current right after an upgrade.
### Refresh after building packages ### Refresh after building packages
Building into a local repository (`aur build`, `aur sync`) doesn't run pacman, so the hook can't catch it. To run update-notify whenever a repository changes, add the repository files to watch to `update-notify.path`: To run `update-notify --quiet` whenever a repository changes, add the repository files to watch to `update-notify.path`:
``` ```
systemctl --user edit update-notify.path systemctl --user edit update-notify.path
@@ -68,11 +66,13 @@ systemctl --user enable --now update-notify.path
## Usage ## Usage
``` ```
update-notify [threshold] update-notify [-q|--quiet] [threshold]
``` ```
`threshold` is the minimum number of updates (repo + AUR) before update counts are shown. It overrides the `THRESHOLD` setting below for that run's notification only; the pending file keeps the configured value. `threshold` is the minimum number of updates (repo + AUR) before update counts are shown. It overrides the `THRESHOLD` setting below for that run's notification only; the pending file keeps the configured value.
`--quiet` updates the pending file without notifying. Changes to a notification already shown are recorded, so the next timer run doesn't repeat them; a new notification is left for the timer. `update-notify.path` uses it (through `update-notify-quiet.service`), so building many packages doesn't notify after each one.
## Configuration ## Configuration
Settings are read from `$XDG_CONFIG_HOME/update-notify/config` (default `~/.config/update-notify/config`), a bash file that is sourced by the script. All settings are optional: Settings are read from `$XDG_CONFIG_HOME/update-notify/config` (default `~/.config/update-notify/config`), a bash file that is sourced by the script. All settings are optional:
@@ -103,7 +103,7 @@ aur <pkg> <newver>
kernel <custom-pkg> <stock-ver> kernel <custom-pkg> <stock-ver>
``` ```
The file reflects the last run, which the pacman hook and `update-notify.path` keep close to current. To keep a bar current in between, drop entries whose installed version (`pacman -Q`) is no longer older than `newver`, or, for `kernel` lines, whose custom build has caught up with `stock-ver` (ignoring `pkgrel`). This only reads local data, so it's cheap to run often. The file reflects the last timer or `update-notify.path` run. To keep a bar current in between, e.g. right after an upgrade, drop entries whose installed version (`pacman -Q`) is no longer older than `newver`, or, for `kernel` lines, whose custom build has caught up with `stock-ver` (ignoring `pkgrel`). This only reads local data, so it's cheap to run often.
## License ## License
+11
View File
@@ -19,6 +19,11 @@ if [[ -r $config_file ]]; then
# shellcheck source=/dev/null # shellcheck source=/dev/null
source "$config_file" source "$config_file"
fi fi
quiet=0 # refresh the pending file without notifying (path unit)
if [[ ${1:-} == -q || ${1:-} == --quiet ]]; then
quiet=1
shift
fi
config_threshold=$THRESHOLD # written to the pending file, so a one-off argument doesn't change status bars config_threshold=$THRESHOLD # written to the pending file, so a one-off argument doesn't change status bars
THRESHOLD=${1:-$THRESHOLD} THRESHOLD=${1:-$THRESHOLD}
@@ -44,6 +49,12 @@ notify_once() {
if [[ -f $file && $(<"$file") == "$body" ]]; then if [[ -f $file && $(<"$file") == "$body" ]]; then
return 0 return 0
fi fi
if (( quiet )); then
# Track changes to a shown notification, so the timer doesn't re-notify them;
# leave a new one for the timer to show
[[ -f $file ]] && printf '%s' "$body" > "$file"
return 0
fi
notify-send "$title" "$body" && printf '%s' "$body" > "$file" notify-send "$title" "$body" && printf '%s' "$body" > "$file"
} }
+6
View File
@@ -0,0 +1,6 @@
[Unit]
Description=Refresh the update-notify pending file without notifying
[Service]
ExecStart=/usr/bin/update-notify --quiet
Type=oneshot
-10
View File
@@ -1,10 +0,0 @@
#!/bin/bash
# Run update-notify for every logged-in user whose timer is active (called by the pacman hook as root)
systemctl list-units --plain --no-legend --state=running 'user@*.service' |
while read -r unit _; do
uid=${unit#user@}
uid=${uid%.service}
user=$(id -nu "$uid") || continue
systemctl --user -M "$user@" is-active --quiet update-notify.timer || continue
systemctl --user -M "$user@" start --no-block update-notify.service
done
-11
View File
@@ -1,11 +0,0 @@
[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Package
Target = *
[Action]
Description = Refreshing update-notify...
When = PostTransaction
Exec = /usr/lib/update-notify/refresh
+1 -1
View File
@@ -4,7 +4,7 @@ Description=Run update-notify when a local repository changes
# Add the repository files to watch with: systemctl --user edit update-notify.path # Add the repository files to watch with: systemctl --user edit update-notify.path
# e.g. PathChanged=/home/aur-local/aur-local.db.tar.gz.sig # e.g. PathChanged=/home/aur-local/aur-local.db.tar.gz.sig
[Path] [Path]
Unit=update-notify.service Unit=update-notify-quiet.service
[Install] [Install]
WantedBy=default.target WantedBy=default.target