GNU Guix provides state-of-the-art package management features such as transactional
upgrades and roll-backs, reproducible build environments, unprivileged package
management, and per-user profiles. It uses low-level mechanisms from the Nix package
manager, but packages are defined as native Guile modules, using extensions to the
Scheme language—which makes it nicely hackable.

Guix may be run in single or multi-user mode (which requires the guix-daemon). To
have the guix daemon start and stop with your host, add to /etc/rc.d/rc.local:

if [ -x /etc/rc.d/rc.guix ]; then
/etc/rc.d/rc.guix start
fi

and to /etc/rc.d/rc.local_shutdown (creating it if needed):

if [ -x /etc/rc.d/rc.guix ]; then
/etc/rc.d/rc.guix stop
fi

The daemon requires users for building the guix packages, which should be added
under the 'guixbuild' group.

groupadd -g 316 guixbuild
for i in `seq -w 1 10`; do
          useradd -G guixbuild \
          -d /var/empty -s `which nologin` \
          -c "Guix build user $i" -u 316 -g 316 \
          guixbuilder$i;
done

Restricting access to the daemon to only users in the guixbuild group is acheived
by setting file permissions for the daemon's socket's folder.

chgrp guixbuild /var/guix/daemon-socket
chmod ug=rwx,o= /var/guix/daemon-socket

Correct permissions must also be set for /var/guix/profiles to give users access.

By default guix will compile in /tmp, this can be changed by exporting $TMPDIR.
Guix will also by default store its packages in /gnu/store, to save space in the
root partition /gnu can be mounted on another partition.

Guix can either be built with the nix-daemon instead of the default guix-daemon or along
side nix sharing the same store, both require nix as an optional dependency. To build with
the nix-daemon use NIX="yes" and to share the store with nix use SHARE="yes".

guile-json is an optional dependency and will allow you to use the 'guix import pypi' command.
It is of interest primarily for developers and not for casual users.
