Next: Reproducible profiles, Previous: Default profile, Up: Guix Profiles in Practice [Contents][Index]
Manifests let you declare the set of packages you’d like to have in a profile (see Writing Manifests in GNU Guix Reference Manual). They are a convenient way to keep your package lists around and, say, to synchronize them across multiple machines using a version control system.
A common complaint about manifests is that they can be slow to install when they contain large number of packages. This is especially cumbersome when you just want get an upgrade for one package within a big manifest.
This is one more reason to use multiple profiles, which happen to be just perfect to break down manifests into multiple sets of semantically connected packages. Using multiple, small profiles provides more flexibility and usability.
Manifests come with multiple benefits. In particular, they ease maintenance:
guix package --upgrade
always tries to update the packages that have
propagated inputs, even if there is nothing to do. Guix manifests remove
this problem.
guix install
, guix upgrade
, etc. do not, since they
produce different profiles every time even when they hold the same
packages. See the related
discussion on the matter.
guix weather -m manifest.scm
to see how many
substitutes are available, which can help you decide whether you want to try
upgrading today or wait a while. Another example: you can run guix
pack -m manifest.scm
to create a pack containing all the packages in the
manifest (and their transitive references).
It’s important to understand that while manifests can be used to declare
profiles, they are not strictly equivalent: profiles have the side effect
that they “pin” packages in the store, which prevents them from being
garbage-collected (see Invoking guix gc in GNU Guix Reference
Manual) and ensures that they will still be available at any point in the
future. The guix shell
command also protects recently-used
profiles from garbage collection; profiles that have not been used for a
while may be garbage-collected though, along with the packages they refer
to.
To be 100% sure that a given profile will never be collected, install the
manifest to a profile and use GUIX_PROFILE=/the/profile;
. "$GUIX_PROFILE"/etc/profile
as explained above: this guarantees that our
hacking environment will be available at all times.
Security warning: While keeping old profiles around can be convenient, keep in mind that outdated packages may not have received the latest security fixes.
Next: Reproducible profiles, Previous: Default profile, Up: Guix Profiles in Practice [Contents][Index]