Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8c94be5a08
|
||
|
|
aca5a0213e
|
||
|
|
3ebded0476
|
||
|
|
6b26b358d7
|
||
|
|
4a9eebcad2
|
||
|
|
f32d2a0c87
|
||
|
|
255cb6350f
|
@@ -0,0 +1 @@
|
||||
CLAUDE.md
|
||||
@@ -3,7 +3,7 @@
|
||||
# Maintainer: Daniele Fucini <dfucini [at] gmail [dot] com>
|
||||
|
||||
pkgname=update-notify
|
||||
pkgver=3.2
|
||||
pkgver=3.4
|
||||
pkgrel=1
|
||||
pkgdesc='Notify when updates are available'
|
||||
arch=('any')
|
||||
@@ -15,9 +15,9 @@ makedepends=('git')
|
||||
optdepends=('aurutils: to check AUR packages in the local repo for updates'
|
||||
'fwupd: to check for firmware updates'
|
||||
'git-monitor: to check git repos for updates')
|
||||
source=(git+${url}?signed#tag=${pkgver})
|
||||
source=("git+${url}?signed#tag=${pkgver}")
|
||||
validpgpkeys=('7E12BC1FF3B6EDB2CD8053EB981A2B2A3BBF5514')
|
||||
sha256sums=('a81613c3098c9af6dabe1da67f26efeee4d0753352e38ba4c0ee1d7e86f7d2d7')
|
||||
sha256sums=('12a68498d50871264f4a0ed082ff29a361676cf134c43520f98ee3f287e45509')
|
||||
|
||||
package()
|
||||
{
|
||||
@@ -25,4 +25,5 @@ package()
|
||||
install -Dm755 "${pkgname}" "${pkgdir}/usr/bin/${pkgname}"
|
||||
install -Dm644 "${pkgname}.service" "${pkgdir}/usr/lib/systemd/user/${pkgname}.service"
|
||||
install -Dm644 "${pkgname}.timer" "${pkgdir}/usr/lib/systemd/user/${pkgname}.timer"
|
||||
install -Dm644 README.md "${pkgdir}/usr/share/doc/${pkgname}/README.md"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
# update-notify
|
||||
|
||||
Desktop notifications for pending updates on Arch Linux.
|
||||
|
||||
update-notify runs on a systemd user timer and checks:
|
||||
|
||||
- **Repo updates**, using `checkupdates` from pacman-contrib.
|
||||
- **AUR updates** for packages in a local aurutils repository (`aur repo -u`).
|
||||
- **Custom kernel rebuilds**: when a stock kernel (e.g. `linux-lts`) has a newer version than your custom build of it (e.g. `linux-lts-custom`).
|
||||
|
||||
It sends one notification, and only when its content changes since the last one:
|
||||
|
||||
- Update counts are shown once the total number of updates reaches a threshold (default 30). Reminders for `git-monitor` and pending firmware updates (`fwupdmgr`) are added when those tools are installed.
|
||||
- Kernel rebuild reminders are always shown, even below the threshold.
|
||||
|
||||
## Requirements
|
||||
|
||||
- `pacman-contrib`
|
||||
- `libnotify` and a running notification daemon
|
||||
|
||||
Optional:
|
||||
|
||||
- `aurutils`: check AUR packages in the local repository
|
||||
- `fwupd`: check for firmware updates
|
||||
- `git-monitor`: remind to check git packages
|
||||
|
||||
## Installation
|
||||
|
||||
Build and install the package with the included PKGBUILD:
|
||||
|
||||
```
|
||||
makepkg -si
|
||||
```
|
||||
|
||||
Or, with aurutils, build it into your local repository with `aur build` and install it with pacman.
|
||||
|
||||
Then enable the timer:
|
||||
|
||||
```
|
||||
systemctl --user enable --now update-notify.timer
|
||||
```
|
||||
|
||||
The timer runs 5 minutes after boot, then every 6 hours.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
update-notify [threshold]
|
||||
```
|
||||
|
||||
`threshold` is the minimum number of updates (repo + AUR) before update counts are shown. It overrides the `THRESHOLD` setting below.
|
||||
|
||||
## 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:
|
||||
|
||||
- `THRESHOLD`: minimum number of updates before update counts are shown (default 30).
|
||||
- `AUR_REPO`: name of the local aurutils repository (default `aur-local`).
|
||||
- `KERNELS`: maps each stock kernel package to its custom build (default: `linux`, `linux-lts` and `linux-zen` to `<name>-custom`). Kernels where either package isn't installed are skipped. Set `KERNELS=()` to disable the kernel check.
|
||||
|
||||
A commented sample config is installed with the package. To start from it:
|
||||
|
||||
```
|
||||
mkdir -p ~/.config/update-notify
|
||||
cp /usr/share/doc/update-notify/config.example ~/.config/update-notify/config
|
||||
```
|
||||
|
||||
Kernel versions are compared without `pkgrel`, so a stock packaging-only update doesn't trigger a rebuild reminder. A custom build already in the local repository but not installed yet counts as up to date.
|
||||
|
||||
The content of the last notification is stored in `$XDG_STATE_HOME/update-notify` (default `~/.local/state/update-notify`). Delete it to get the current notification again.
|
||||
|
||||
## License
|
||||
|
||||
GPL-3.0-or-later. See [LICENSE](LICENSE).
|
||||
@@ -0,0 +1,19 @@
|
||||
# update-notify configuration, sourced as bash.
|
||||
# Copy to ~/.config/update-notify/config and uncomment what you want to change.
|
||||
# The values shown are the defaults.
|
||||
|
||||
# Minimum number of updates (repo + AUR) before update counts are shown.
|
||||
# The command-line argument takes precedence.
|
||||
#THRESHOLD=30
|
||||
|
||||
# Name of the local aurutils repository.
|
||||
#AUR_REPO="aur-local"
|
||||
|
||||
# Stock kernel package -> your custom build of it. Replaces the whole list;
|
||||
# kernels where either package isn't installed are skipped.
|
||||
# Set KERNELS=() to disable the kernel check.
|
||||
#KERNELS=(
|
||||
# [linux]="linux-custom"
|
||||
# [linux-lts]="linux-lts-custom"
|
||||
# [linux-zen]="linux-zen-custom"
|
||||
#)
|
||||
+18
-7
@@ -2,20 +2,27 @@
|
||||
set -u
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Config
|
||||
# Config: defaults, overridden by the config file, then by the argument
|
||||
# ---------------------------------------------------------------------------
|
||||
threshold=${1:-30}
|
||||
THRESHOLD=30
|
||||
AUR_REPO="aur-local"
|
||||
# stock kernel package -> your custom build of it. Add or remove entries freely.
|
||||
# stock kernel package -> your custom build of it
|
||||
declare -A KERNELS=(
|
||||
[linux]="linux-custom"
|
||||
[linux-lts]="linux-lts-custom"
|
||||
[linux-zen]="linux-zen-custom"
|
||||
)
|
||||
config_file="${XDG_CONFIG_HOME:-$HOME/.config}/update-notify/config"
|
||||
state_dir="${XDG_STATE_HOME:-$HOME/.local/state}/update-notify"
|
||||
|
||||
[[ $threshold =~ ^[0-9]+$ ]] || { echo "Threshold must be a number" >&2; exit 1; }
|
||||
threshold=$((10#$threshold)) # force base 10, so e.g. "08" isn't read as octal
|
||||
if [[ -r $config_file ]]; then
|
||||
# shellcheck source=/dev/null
|
||||
source "$config_file"
|
||||
fi
|
||||
THRESHOLD=${1:-$THRESHOLD}
|
||||
|
||||
[[ $THRESHOLD =~ ^[0-9]+$ ]] || { echo "Threshold must be a number" >&2; exit 1; }
|
||||
THRESHOLD=$((10#$THRESHOLD)) # force base 10, so e.g. "08" isn't read as octal
|
||||
mkdir -p "$state_dir"
|
||||
|
||||
# notify-send from cron/systemd needs the session bus address
|
||||
@@ -88,7 +95,11 @@ arch_updates=${#arch_list[@]}
|
||||
|
||||
aur_updates=0
|
||||
if command -v aur >/dev/null 2>&1; then
|
||||
aur_updates=$(aur repo -u -d "$AUR_REPO" 2>/dev/null | wc -l)
|
||||
if aur_out=$(aur repo -u -d "$AUR_REPO"); then
|
||||
[[ -n $aur_out ]] && aur_updates=$(wc -l <<< "$aur_out")
|
||||
else
|
||||
echo "aur repo -u failed, AUR updates not counted" >&2
|
||||
fi
|
||||
fi
|
||||
updates=$((arch_updates + aur_updates))
|
||||
|
||||
@@ -118,7 +129,7 @@ done
|
||||
# - update counts and reminders only when the threshold is reached
|
||||
# ---------------------------------------------------------------------------
|
||||
over_threshold=0
|
||||
(( updates >= threshold )) && over_threshold=1
|
||||
(( updates >= THRESHOLD )) && over_threshold=1
|
||||
|
||||
parts=()
|
||||
if (( over_threshold )); then
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
Description=Notify if updates are available
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/update-notify 30
|
||||
ExecStart=/usr/bin/update-notify
|
||||
Type=oneshot
|
||||
|
||||
Reference in New Issue
Block a user