Hi, Pierre Neidhardt <m...@ambrevar.xyz> skribis:
> Ludovic Courtès <l...@gnu.org> writes: [...] >> • The generated files might use APIs that, in the meantime, got >> deprecated or changed somehow. This is in contrast with >> ‘--export-profile’, which interprets ‘manifest’ (a versioned file >> format) and produces code that can use the API du jour. > > /run/current-system/configuration.scm suffers from the same problem. Not really because it’s precisely the file that you gave to build the system. So you know you can run: cd /run/current-system guix time-machine -C channels.scm -- system reconfigure configuration.scm and it’ll work (modulo the documented caveats). > But with the manifest we could do better, we could include a version > number one way or another. > Besides, since it comes together with channels.scm, we know which Guix > was used, so we always have access to the Guix with the right API to > install the manifest. Right. >> • One would still have to learn about these two files, and pick the >> right “manifest” file. > > I think it would be easier than a command. See below. > >> • For users of ‘-m my-manifest.scm’, we would need to store >> ‘my-manifest.scm’ as is instead of generating an approximation >> thereof. > > Which seems easy to do, isn't it? I take it that you’re volunteering? :-) Nothing’s difficult, but in this case we’d need to pass the original manifest down to ‘profile-generation’. Requires some redesign. > Another use-case which I find useful and comes close to this feature is > that of channel/manifest versioning, in the sense of keeping these files > under version control for instance in a Git repository. This can be > useful to keep the history of everything, even deleted generations, or > even in case of hardware failure. > > To that end, it'd be nice if we could export these files automatically > to a designated location. > > Example: I update ~/my-profile and it automatically produces / overwrite > ~/repos/guix-profile-metadata.git/my-profile/channels.scm and > ~/repos/guix-profile-metadata.git/my-profile/manifest.scm. > > This way I can commit these 2 files in my guix-profile-metadata.git > repository. I guess you could do that either with ‘cp ~/.guix-profile/{channels,manifest.scm …’ or with ‘guix package --export-manifest … > …’. But again, that’s not really the goal here. The goal is to help users willing to migrate from the “imperative” mode to the declarative mode. Once you’re using a manifest, probably you’ll want to put that under version control, but that’s already the case. Thanks, Ludo’.