From e7ce46034d7c7eaeec63d355396bd9f48a7be6a3 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Mon, 30 Sep 2013 06:05:45 +0200 Subject: [PATCH] nix: provide a working multi-user configuration by default. --- srcpkgs/nix/files/nix.sh | 43 ++++++++++++++++++++++++++++++++++++++++ srcpkgs/nix/template | 5 ++++- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/nix/files/nix.sh diff --git a/srcpkgs/nix/files/nix.sh b/srcpkgs/nix/files/nix.sh new file mode 100644 index 00000000000..6c0e58673fb --- /dev/null +++ b/srcpkgs/nix/files/nix.sh @@ -0,0 +1,43 @@ +export NIX_USER_PROFILE_DIR=/nix/var/nix/profiles/per-user/$USER + +mkdir -m 0755 -p $NIX_USER_PROFILE_DIR +if test "$(stat --printf '%u' $NIX_USER_PROFILE_DIR)" != "$(id -u)"; then + echo "WARNING: bad ownership on $NIX_USER_PROFILE_DIR" >&2 +fi + +if ! test -L $HOME/.nix-profile; then + echo "creating $HOME/.nix-profile" >&2 + if test "$USER" != root; then + ln -s $NIX_USER_PROFILE_DIR/profile $HOME/.nix-profile + else + # Root installs in the system-wide profile by default. + ln -s /nix/var/nix/profiles/default $HOME/.nix-profile + fi +fi + +export NIX_PROFILES="/nix/var/nix/profiles/default $HOME/.nix-profile" + +for i in $NIX_PROFILES; do + export PATH=$i/bin:$PATH +done + +if [ "$USER" = root -a ! -e $HOME/.nix-channels ]; then + echo "http://nixos.org/channels/nixpkgs-unstable nixpkgs" \ + > $HOME/.nix-channels +fi + +NIX_USER_GCROOTS_DIR=/nix/var/nix/gcroots/per-user/$USER +mkdir -m 0755 -p $NIX_USER_GCROOTS_DIR +if test "$(stat --printf '%u' $NIX_USER_GCROOTS_DIR)" != "$(id -u)"; then + echo "WARNING: bad ownership on $NIX_USER_GCROOTS_DIR" >&2 +fi + +if [ ! -e $HOME/.nix-defexpr -o -L $HOME/.nix-defexpr ]; then + echo "creating $HOME/.nix-defexpr" >&2 + rm -f $HOME/.nix-defexpr + mkdir $HOME/.nix-defexpr + if [ "$USER" != root ]; then + ln -s /nix/var/nix/profiles/per-user/root/channels \ + $HOME/.nix-defexpr/channels_root + fi +fi diff --git a/srcpkgs/nix/template b/srcpkgs/nix/template index ca6b50ba647..909714d485d 100644 --- a/srcpkgs/nix/template +++ b/srcpkgs/nix/template @@ -1,7 +1,7 @@ # Template file for 'nix' pkgname=nix version=1.6 -revision=1 +revision=2 build_style=gnu-configure # Use /nix/var as suggested by the official Manual. configure_args="--localstatedir=/nix/var" @@ -24,6 +24,8 @@ post_install() { vinstall ${FILESDIR}/nix-daemon.service 644 usr/lib/systemd/system # Setup build users. echo 'build-users-group = nixbld' > ${DESTDIR}/etc/nix/nix.conf + # Install our profile.d/nix for multi-user by default. + vinstall ${FILESDIR}/nix.sh 644 etc/profile.d } nix_package() { @@ -45,6 +47,7 @@ nix_package() { /nix/var/log/nix/drvs 0755 root root /nix/var/nix/profiles 0755 root root /nix/var/nix/profiles/per-user 1777 root root + /nix/var/nix/gcroots/per-user 1777 root root /nix/var/nix/temproots 0755 root root /nix/var/nix/gcroots 0755 root root /nix/var/nix/manifests 0755 root root