#!/usr/bin/env bash # Runs the command given in a Nix environment, and create it if it doesn't exist. # Useful for environments where nix isn't installed / you do not have root access # If you need a fresh slate: # chmod +w .nix -R # rm -rf .nix .nix-defexpr .nix-profile .config/nix .local/state/nix .local/share/nix .cache/nix set -euo pipefail SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) if [ ! -d /nix ] then # Doesn't support architectures other than x86_64 NIX_USER_CHROOT_URL=https://github.com/nix-community/nix-user-chroot/releases/download/1.2.2/nix-user-chroot-bin-1.2.2-x86_64-unknown-linux-musl NIX_USER_CHROOT_SHA256SUM=e11aff604bb8d3ffd1d9c0c68cd636816d7eb8da540de18ee3a41ccad7ac0972 nix_user_chroot="$HOME/.local/bin/nix-user-chroot" mkdir -p "$(dirname "$nix_user_chroot")" nix_directory="$HOME/.nix" mkdir -p "$nix_directory" if [ ! -x "$nix_user_chroot" ] || ! echo "$NIX_USER_CHROOT_SHA256SUM $nix_user_chroot" | sha256sum --check --status then wget "$NIX_USER_CHROOT_URL" -O "$nix_user_chroot" echo "$NIX_USER_CHROOT_SHA256SUM $nix_user_chroot" | sha256sum --check --status chmod +x "$nix_user_chroot" fi exec "$nix_user_chroot" "$nix_directory" "$0" "$@" exit 1 fi nix_profile_path="$HOME/.nix-profile/etc/profile.d/nix.sh" if [ ! -f "$nix_profile_path" ] then NIX_INSTALLER_URL=https://releases.nixos.org/nix/nix-2.19.2/install NIX_INSTALLER_SHA256SUM=435f0d7e11f7c7dffeeab0ec9cc55723f6d3c03352379d785633cf4ddb5caf90 nix_installer="$(mktemp)" wget "$NIX_INSTALLER_URL" -O "$nix_installer" echo "$NIX_INSTALLER_SHA256SUM $nix_installer" | sha256sum --check --status chmod +x "$nix_installer" "$nix_installer" --no-daemon --yes --no-channel-add --no-modify-profile fi # TODO This installs nix in nix-env, which conflicts with home-manager activation. # Workaround is temporarily set /nix/store-xxx-nix/bin in PATH . "$nix_profile_path" # TODO Useful the first time, but it becomes a bit long after a while # "${SCRIPT_DIR}/add_channels.sh" exec "$@"