#! /bin/sh nix-instantiate --find-file nixpkgs >/dev/null || { echo "Could not find nixpkgs, please set up your NIX_PATH" exit 1 } NIX_DO_STASH="${NIX_DO_STASH:-$HOME/.local/share/nix-do}" NIX_DO_PROFILE="${NIX_DO_PROFILE:-$(readlink $HOME/.nix-profile)}" mkdir -p "$NIX_DO_STASH" op="$1"; shift case "$op" in pull) cd "$(nix-instantiate --find-file nixpkgs)"; git remote update git pull -v ;; expression) echo "let pkgs = import {}; fullEnv = packages: pkgs.buildEnv { name = ''$USER-profile-env''; paths = packages; ignoreCollisions = true; pathsToLink = [''/'']; }; in fullEnv [ $(for p in "$NIX_DO_STASH"/*/output*; do test -e "$p" && readlink -f "$p" done) ] " ;; rebuild) nix-env --set -p "$NIX_DO_PROFILE" "$(nix-instantiate -E "$("$0" expression)")" ;; install) for p in "$@"; do nix-build "" -A "$p.all" -o "$NIX_DO_STASH/$p/output" done "$0" rebuild ;; upgrade) "$0" install $("$0" list) ;; remove) ( cd "$NIX_DO_STASH"; for p in "$@"; do rm -rf "$p"; done); "$0" rebuild ;; clean) nix-collect-garbage -d ;; list) ( cd "$NIX_DO_STASH"; ls ) ;; esac