Hi, Here are some patches which, when applied to 1df00601b280db1cdfe0fc8d539ee6c6c726c355, make it possible to switch system generations using two new "guix system" subcommands: "roll-back" and "switch-generation". These commands currently just rebuild the grub.cfg file with a new default entry. As a result, if you want to roll back or switch to another system generation, you don't have to manually select a previous version every single time you boot, which is nice. I believe my patch does NOT yet make the regenerated grub.cfg a GC root, so it is possible that after rolling back or switching generations, invoking GC might clean up some things you'd rather keep around (like the grub background image file). Please be careful not to try this patch on a machine you care about; please use a VM instead. I've verified that it works in a VM. I'm hoping for some constructive feedback. I've had a rough time getting this to work on my own because this is the first real work I've tried doing with Guile or a free software project, and because a lot of the machinery that already exists (e.g., in (guix scripts system)) assumes that we are going to get the info we need for building the grub config from an operating system configuration file, which is not true for this use case. I've also had quite a hard time understanding the relationship between monadic values in the store monad, gexps, derivations, and how to use them effectively. If you notice I am doing something strange or outright incorrect, please let me know so I can fix it and do better. Unfortunately, these patches do not apply cleanly to the current master branch because of commit 0f65f54ebd76324653fd5506a7dab42ee44d9255. This commit has thrown a wrench in my plans. When I try to rebase onto master, there are multiple conflicts, and I am not sure yet what the best way to resolve them will be. In any case, I think it will be more productive to ask for feedback now, rather than to continue on my own down uncertain paths. I look forward to your feedback. -- Chris