GNU Guix System, for the following reasons:
-
User-level management of packages, i.e. each user has their own profile which contains their own installed packages, which is separate from the set of system packages. i.e. no need to be root to un/install packages
-
Commitment to GNU Free System Distribution Guidelines, meaning no proprietary software, proprietary kernel bits, or promotion of such - which I'm aware some see as a negative but I specifically purchased Linux-libre compatible hardware for this reason.
-
Source-based package manager with an option for retrieving pre-built packages ("substitutes") from build servers. Any Guix machine can become a build server.
-
Packages can be built from a specified git revision, or with a specified patch, etc.
-
A package is just a variable defined in Guile Scheme. A package repository ("channel") is just a git repo containing a collection of packages.
-
Declarative configuration of system i.e. kernel, packages, services, users, etc.
-
Un/installs are atomic transactions, they create new generations of profiles that can be rolled back. Same goes for system configurations. Each system "reconfiguration" actually creates a new entry in the bootloader so if it breaks you can boot into the previous system generation and manage it.