Semi-automated package updating mechanism via pacman for dependencies which want or need bleeding edge updates from repo/source.
  • Rust 99.7%
  • Shell 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Austin Schaefer 3e1a881ccc
All checks were successful
CI / ci (push) Successful in 2m1s
Release / release (push) Successful in 2m29s
CI / audit (push) Successful in 8s
Merge pull request 'Release: v0.8.0' (#46) from release/v0.8.0 into master
Reviewed-on: #46
2026-10-26 13:47:05 +00:00
.forgejo docs: map blast radius and add proof-carrying PR template 2026-10-12 15:15:31 +02:00
.githooks Set up project tooling to match the rest of ~/dev's Rust fleet 2026-09-11 10:13:29 +02:00
docs Encode the JetBrains query, strip ?/# from asset names, test validate() 2026-10-20 09:46:45 +02:00
src fix: empty a symlinked work dir in place; resolve missing kept dirs 2026-10-26 13:58:31 +01:00
systemd Run the packaged pkgwatch from the timer; bootstrap from a release 2026-09-28 10:12:47 +02:00
.gitignore Rename the repo to [pkgwatch], untrack package declarations, terser notifications 2026-09-24 14:44:30 +02:00
Cargo.lock Release: v0.8.0 2026-10-26 14:29:37 +01:00
Cargo.toml Release: v0.8.0 2026-10-26 14:29:37 +01:00
CHANGELOG.md Release: v0.8.0 2026-10-26 14:29:37 +01:00
CLAUDE.md docs: map blast radius and add proof-carrying PR template 2026-10-12 15:15:31 +02:00
clippy.toml Move clippy lint levels into Cargo.toml and merge the clippy CI steps 2026-09-23 10:59:10 +02:00
Makefile.toml Split pipeline into a directory with a shared Context 2026-09-25 12:06:13 +02:00
README.md feat: add pkgwatch cache clear 2026-10-26 13:54:41 +01:00

pkgwatch

Watches upstream releases of tools the Arch/Manjaro repos lag on, verifies them, and rebuilds them into a local pacman repo that pacman -Syu installs from. Design: docs/SPEC.md. Code layout: docs/ARCHITECTURE.md. Changes per release: CHANGELOG.md.

Install

Needs Arch or Manjaro. pkgwatch packages itself: a downloaded release binary bootstraps it once, then updates arrive via pacman -Syu.

  1. From a clone of this repo, fetch and verify a release binary (newest tag on the releases page):

    base=https://code.austinschaefer.com/schaefera/pkgwatch/releases/download/v0.5.0
    curl -fLO "$base/pkgwatch-linux-amd64" -fLO "$base/SHA256SUMS" &&
      sha256sum -c SHA256SUMS && chmod +x pkgwatch-linux-amd64
    
  2. Set up the machine once (safe to re-run; asks for sudo): ./pkgwatch-linux-amd64 setup. It checks prerequisites, creates the config dir and the local repo ~/.local/share/pkgwatch/repo, and registers that repo first in pacman.conf: a drop-in /etc/pacman.d/pkgwatch.conf plus one Include line, shown as a diff before anything changes. Then sudo pacman -Syu.

  3. Declare packages as ~/.config/pkgwatch/packages.d/*.toml (see example.toml.sample there, and SPEC.md > Config schema), including pkgwatch itself as pkgwatch.toml:

    [package.pkgwatch]
    repo = "schaefera/pkgwatch"
    source = "forgejo-release"
    base_url = "https://code.austinschaefer.com"
    asset_pattern = "pkgwatch-linux-amd64"
    
    [package.pkgwatch.verification]
    method = "same-origin-sha256"
    checksum_asset_pattern = "SHA256SUMS"
    
  4. Install the packaged binary, then drop the bootstrap one:

    ./pkgwatch-linux-amd64 check && ./pkgwatch-linux-amd64 review pkgwatch --approve &&
      sudo pacman -Syu pkgwatch && rm pkgwatch-linux-amd64 SHA256SUMS
    
  5. Enable the timer (at login, then hourly), which runs /usr/bin/pkgwatch:

    mkdir -p ~/.config/systemd/user && cp systemd/* ~/.config/systemd/user/ &&
      systemctl --user daemon-reload && systemctl --user enable --now pkgwatch.timer
    

Hacking on pkgwatch itself: cargo build --release and run target/release/pkgwatch directly; the timer keeps using the packaged one.

Use

  • pkgwatch (or pkgwatch check): one pass over all packages — what the timer runs.
  • pkgwatch review: step through releases whose verification needs a human (tiers 4–6), answering y/n to approve each. --list only lists them; review <name> [--approve] inspects or approves one.
  • pkgwatch cache clear: delete downloads and build trees (~/.cache/pkgwatch); the next run re-fetches what it needs.
  • Published builds install with sudo pacman -Syu.

Uninstall

systemctl --user disable --now pkgwatch.timer; then, as root, delete /etc/pacman.d/pkgwatch.conf and its Include line in /etc/pacman.conf (setup kept the original as /etc/pacman.conf.pkgwatch-backup). Packages already installed from the repo stay installed.