Manifests 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 --upgradealways tries to update the packages that have propagated inputs, even if there is nothing to do. Guix manifests remove this problem.
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.scmto 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.scmto 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.
Let’s take an example:
guix environment -m manifest.scm. So far so good.
guix pullin the mean time. Maybe a dependency from our manifest has been updated; or we may have run
guix gcand some packages needed by our manifest have been garbage-collected.
guix shell -m manifest.scm. But now we have to wait for Guix to build and install stuff!
Ideally, we could spare the rebuild time. And indeed we can, all we need is
to 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
Security warning: While keeping old profiles around can be convenient, keep in mind that outdated packages may not have received the latest security fixes.