Also, please consider contributing to Guix and/or GuixSD. This is only a
recommendation, since Guix tries to be in the middle of "do it yourself"
distributions, and a highly dependency-based distributions.
Besides, Guix empowers the users, by letting them decide if they want to get
the builds/substitutes from the Guix servers, or get only the source from
there and build them (which is done automatically via script, and which is
also done automatically when there's no substitute in the servers), and lets
the user host a Guix build/substitute server/repository; and Guix tries to
separate the execution of different "tasks" on different environments
(although the same packages are used across environments, the user can keep
older versions of them and use these different versions of these with
different tasks running at the same time).
Users are also allowed to set default versions to use for each package. This,
together with some other features that just forgot about, create the ability
to restore the system state/generation or even to manage the existing
generations. That is, I could make a package upgrade (so setting this state
as the current one), dislike the outcome, and revert to any of the existing
recorded generations, and afterwards I can decide whether I want to remove
that "upgraded" generation, or leave it there for later use.