Files
community-plugins/arch-updater/README.md
T
YuutoandGitHub 4fcd5f1686 fix(arch-updater): tighten package list UI and fix Dismiss/Update panel behavior (#289)
* fix(arch-updater): tighten package list spacing and icon size

* fix(arch-updater): make Dismiss actually clear the pending list

* fix(arch-updater): make hitting update close the panel

* feat(arch-updater): add per-source icons to the package list header

* feat(arch-updater): add an activity graph to the panel

Tracks the pending-update count across recent checks and when the last
update ran, persisted to disk so it survives restarts. Off also stops
recording history, not just hiding it.

* feat(arch-updater): show per-point detail on activity graph hover

ui.graph has no pointer props of its own, so a row of ghost buttons
sits under the line as per-point hit targets, each with a native
tooltip. History entries now carry a timestamp and whether the check
followed an update run, so hovering a point says when it happened and
either its pending count or "Updated".

* fix(arch-updater): load activity history at startup, not on first check

loadHistoryState() only ran lazily inside recordCheck/recordUpdateRun,
so a freshly started service published an empty history until a check
completed, hiding the graph even when prior sessions had data on disk.

* fix(arch-updater): render activity graph with sharp points, not curves
2026-08-07 22:27:08 -04:00

147 lines
7.6 KiB
Markdown

# Arch Updater
Check pacman, AUR and Flatpak for updates from the bar, with an estimated
download size and an Arch news heads-up before you upgrade. Runs the update
in a terminal window.
## Plugin
| Field | Value |
| --- | --- |
| ID | `yuuto/arch-updater` |
| Entries | Bar widget: `widget`; panel: `panel`; service: `service`; launcher: `launcher` |
| Launcher Prefix | `/arch` |
## Requirements
- `pacman-contrib` on `PATH` (for `checkupdates`), required.
- `pacman`, `sh`, `sudo`, `awk`, `sed`, `test` and `uname`, required — base
tools from any standard Arch install, used to run and parse the pacman
check, build the download size estimate, check the running kernel, and
run the plain-pacman upgrade.
- `yay` or `paru` on `PATH`, optional, for the AUR check and update.
Auto-detected by default, see the **AUR helper** setting.
- `flatpak`, optional, for the Flatpak check and update.
- `xdg-open`, optional, to open a package page or the Arch news page.
- A terminal emulator for the update run: Noctalia's own detection
(`$TERMINAL`, then `ghostty`, `kitty`, `alacritty`, `wezterm`, `foot`,
`konsole`, `gnome-terminal`, `ptyxis`, `xterm`), or the one named in the
**Terminal** setting.
Everything except `pacman-contrib`, `pacman`, `sh`, `sudo`, `awk`, `sed`,
`test` and `uname` is optional. A missing optional tool is skipped, not
treated as an error.
## Usage
Add the `widget` bar widget from Noctalia's widget picker. Left click opens
the panel, right click checks for updates now, middle click opens the
widget's own settings. You can also open the panel directly or bind it in
your compositor:
```sh
noctalia msg panel-toggle yuuto/arch-updater:panel
```
The panel groups pending packages by source (Pacman, AUR, Flatpak). Click a
source row to expand it into its packages. Each package row has a copy
button (name and versions) and an open button (its page on archlinux.org,
the AUR, or Flathub). **Check Updates** queries all sources, **Update** opens
a terminal running the upgrade, **Dismiss** clears the pending list and
closes the panel, returning the bar glyph to its resting colour.
Type `/arch` in the launcher for quick actions (check, update, open news), or
`/arch <text>` to fuzzy-search the packages from the last check. Activating a
result opens that package's page.
## Extras
Not in the v4 plugin:
- **Arch Linux news.** The news feed is checked periodically. An unread post
is flagged in the panel and the bar tooltip, with a button that opens the
news page and marks it read. Arch news is where manual-intervention steps
get announced, so it's worth seeing before a big upgrade.
- **Reboot recommendation.** Detected from whether the running kernel's
`/usr/lib/modules/<version>` directory still exists, so it works for any
kernel flavour (`linux`, `linux-lts`, `linux-zen`, `linux-cachyos`, ...)
without naming one. Shown in the panel and the bar tooltip, and colours the
bar glyph independently of the pending count.
- **Estimated download size** for the pending pacman packages (`pacman -Si`),
shown before you commit to **Update**.
- **An ignore list that's actually enforced.** v4 only let you rewrite the
raw check/update commands. Here, packages in **Ignore packages** are
filtered out of both the count and the update run (`--ignore`), on top of
`pacman.conf`'s own `IgnorePkg`.
- **Auto-detected AUR helper**, with `yay`/`paru`/a custom command/off as
explicit overrides.
- **A generic package-page link** (`archlinux.org/packages`,
`aur.archlinux.org`, `flathub.org`) instead of hardcoded per-repo mirror
URLs, so it stays correct across Arch-based distros.
- **An activity graph.** A small trend line of the pending-update count
across the most recent checks, plus when you last ran an update. Persisted
to disk so it survives restarts. On by default, and turning it off also
stops recording the history, not just hiding it.
## Settings
| Setting | Type | Default | Description |
| --- | --- | --- | --- |
| `aur_helper` | `select` | `auto` | Which AUR helper to use: auto-detect (yay, then paru), `yay`, `paru`, a custom command, or off. |
| `aur_check_cmd` | `string` | *(empty)* | Custom AUR check command, only used when `aur_helper` is `custom`. Must print `name oldver -> newver` per line. |
| `flatpak_enabled` | `bool` | `true` | Also check and update Flatpak. Skipped automatically when `flatpak` isn't installed. |
| `ignore_packages` | `string_list` | *(empty)* | Package names excluded from the count and passed as `--ignore` on update. |
| `auto_check_hours` | `int` | `0` | Check automatically every N hours. `0` never checks on its own. |
| `notify_on_updates` | `bool` | `true` | Send a desktop notification when a check finds packages to upgrade. |
| `show_download_size` | `bool` | `true` | Show the estimated pacman download size (`pacman -Si`) in the panel. |
| `check_arch_news` | `bool` | `true` | Check the Arch Linux news feed and flag unread posts. |
| `check_reboot_needed` | `bool` | `true` | Flag when the running kernel is no longer installed on disk. |
| `show_activity_graph` | `bool` | `true` | Track and show the pending-update trend and last-update time in the panel. Off also stops recording history. |
| `activity_history_length` | `int` | `10` | How many of the most recent checks to keep for the activity graph. |
| `terminal` | `string` | *(empty)* | Terminal command for the update run, e.g. `kitty`. Empty uses Noctalia's detection. |
| `assume_yes` | `bool` | `false` | Pass `--noconfirm` / `-y` so package managers do not ask for confirmation. |
| `update_cmd` | `string` | *(empty)* | Full override for the update command. Empty builds it from the settings above. |
| `glyph` | `glyph` | `package` | The glyph shown for the widget on the bar. |
| `show_count` | `bool` | `true` | Show the pending-update count next to the bar glyph. |
| `hide_on_empty` | `bool` | `false` | Hide the widget entirely when there is nothing to show. |
## IPC
```sh
noctalia msg plugin yuuto/arch-updater:service all check
noctalia msg plugin yuuto/arch-updater:service all update
noctalia msg plugin yuuto/arch-updater:service all dismiss
```
## Notes
- **Commands spawned.** `checkupdates`; the configured AUR helper's `-Qua`
(or your custom command); `flatpak list` / `flatpak remote-ls --updates`;
`pacman -Si` for the download size (piped through `awk` to sum it); a local
`test -d` against `uname -r` for the reboot check; and, for the update,
your terminal running `sh` to launch `sudo pacman`/the AUR helper,
optionally `flatpak update` (filtered through `awk` when packages are
ignored, using `sed` to combine the Flatpak listings during the check). No
upgrade command runs outside the terminal.
- **Network.** `checkupdates`, the AUR helper and the Flatpak check contact
mirrors, the AUR RPC, or a Flatpak remote, same as the corresponding
upgrade would. The Arch news check fetches `archlinux.org/feeds/news/` on
its own schedule, independent of a manual check.
- **Privileges.** The plugin never elevates anything itself. Plain pacman
updates run via `sudo pacman -Syu` in the terminal, where `sudo` prompts
normally. An AUR helper handles its own privilege escalation as usual.
- **Files.** One small file in the plugin's data directory tracks the last
Arch news post you've read, so unread counts survive a restart. Nothing
else is written; `pacman.conf` is never modified.
- **Sizes are pacman-only.** AUR and Flatpak downloads aren't sized. Most AUR
packages build from source, where a download size wouldn't mean much.
## Credits
Ported from the v4 QML "Arch Updater" plugin (MIT), rebuilt for v5's Luau
plugin API with a different feature set. See **Extras** above.
## License
MIT.