Skip to content

PM

Runtime recipes for managing OS-level packages declared in home/.chezmoidata/packages.yaml. The install/update verbs dispatch automatically to every package manager available on the current platform (brew, apt, dnf, flatpak); absent managers are silently skipped.

These recipes install declared packages on demand after init — chezmoi apply re-renders the source data but does not install. See the Package Management guide for the full model (init vs runtime, install-side-only, etc.).

Recipes

just sys pm install

Install missing packages declared in packages.yaml on every detected manager. Idempotent — package managers themselves skip already-present packages. Use after editing packages.yaml to bring the running system into sync with the declared state.

just sys pm update

Refresh repos + upgrade installed packages, then install missing declared packages. The "everything fresh" verb — use periodically to keep the system current.

just sys pm edit-package-data

Open packages.yaml in $EDITOR, prompt to apply chezmoi (which re-renders the Brewfile and other generated files), then point at just sys pm install for installing newly-declared packages.

Platform notes

  • brew — Homebrew. Primary user-space manager on macOS and most Linux. Reads the brew and cask sets from packages.yaml via the rendered ~/Brewfile. On Bluefin, brew is a first-class citizen — sys pm update is the right tool for routine refreshes.

  • apt — Debian-derived distros. Requires passwordless sudo. Reads the linux_apt set from packages.yaml.

  • dnf — Fedora-derived distros. On Bluefin/Silverblue the host image is managed by rpm-ostree/bootc, not dnf; but Bluefin's default terminal (Ptyxis) drops you into a Distrobox container by default, where dnf works normally and the recipe installs into the container. For installing onto the Bluefin host image proper, use rpm-ostree install (out of scope for these recipes by design). Reads the linux_dnf set.

  • flatpak — Linux desktop apps. Requires the flathub remote; Bluefin ships with it. On bare distros without it:

    flatpak remote-add --if-not-exists flathub \
        https://flathub.org/repo/flathub.flatpakrepo
    

    Skipped in containers — flatpak GUI apps are categorically inappropriate there. Reads the flatpak set.

Brew-specific notes (replacements for removed recipes)

The previous brew::bundle-check and brew::bundle-list recipes were removed as low-value wrappers. The underlying brew commands remain:

brew bundle check --file ~/Brewfile     # drift report — what's missing?
brew bundle list  --file ~/Brewfile     # what's declared in the Brewfile?

For installing onto the Bluefin host image proper (drivers, VPN daemons, etc.), use rpm-ostree install <pkg> directly.

Examples

just sys pm install              # install missing packages from packages.yaml
just sys pm update               # refresh + upgrade + install missing
just sys pm edit-package-data    # edit packages.yaml then apply