Guides

Updating and selecting Pins

Full updates, selective updates, failure preservation, and cancellation.

Update all Pins

nix-pins update

Without names or --filter, the command processes every configured Pin. A full update also removes Pins and failure records that are no longer in the configuration from the Pins File.

Select Pins to update

nix-pins update patchelf ripgrep
nix-pins update --filter '^python-'
nix-pins update patchelf --filter '^python-'

Names and regular expression matches are combined as a union. Every explicit name must exist. A filter with no matches and no explicit names is an error. Selective updates leave locked entries outside the selection unchanged, including entries removed from the configuration.

Sources and Packages cannot be selected individually. A Pin updates only after all of its Sources succeed.

Inspect without updating

nix-pins
nix-pins status
nix-pins status patchelf

With no subcommand, the CLI runs status. It reads existing locked results and the last recorded failures. There is currently no status --refresh command.

Failures and cancellation

Configuration errors fail the entire operation before any Checker runs. A runtime failure in one Pin does not stop other Pins from updating. Failed Pins retain their previous usable contents. If the first attempt to lock a Pin fails, only a failure record is saved; no Pin entry with a fake hash is created.

Successful results are written together atomically to the Pins File at the end. Cancellation does not write results. A write lock prevents multiple processes from writing the same Pins File concurrently.

Interactive terminals show Pin, Source, and Package progress. Redirected output and CI use text output. A completed indicator means computation succeeded; persistence happens during the final write.