summaryrefslogtreecommitdiff
path: root/pkgs
diff options
context:
space:
mode:
authorDaiderd Jordan <daiderd@gmail.com>2016-12-26 23:34:09 +0100
committerDaiderd Jordan <daiderd@gmail.com>2016-12-26 23:34:09 +0100
commitbc5fc1af322d544a1b5c6c337cfb9f20e893d8f2 (patch)
tree3c5f22249ef66da280784ee07c2346e6e6152571 /pkgs
parent4978d9ee6fb405149dfd0e18b0ad93d2b8126e70 (diff)
add nix-script
Diffstat (limited to 'pkgs')
-rwxr-xr-xpkgs/nix-tools/nix.sh181
1 files changed, 181 insertions, 0 deletions
diff --git a/pkgs/nix-tools/nix.sh b/pkgs/nix-tools/nix.sh
new file mode 100755
index 0000000..d0f9643
--- /dev/null
+++ b/pkgs/nix-tools/nix.sh
@@ -0,0 +1,181 @@
+#! @shell@
+set -e
+set -o pipefail
+
+
+showUsage() {
+ echo "usage: nix [--version] [--help]" >&2
+ echo " <action> [<args>] [-- <expr>]" >&2
+ echo "actions: {i | instantiate | e | eval | drv}" >&2
+ echo " {b | build | out}" >&2
+ echo " {s | shell | zsh}" >&2
+ echo " {h | hash}" >&2
+ echo " {store | gc}" >&2
+ echo " {r | repl}" >&2
+ exit ${@:-1}
+}
+
+showVersion() {
+ version=$(nix-env --version | awk '{print $3}')
+ echo "$0 (Nix) $version"
+ exit 0
+}
+
+# Parse the command line.
+origArgs=("$@")
+extraNixFlags=()
+exprArg=
+action=
+src=
+
+while [ "$#" -gt 0 ]; do
+ i="$1"; shift 1
+ case "$i" in
+ --help)
+ showUsage 0
+ ;;
+ --version|v|version)
+ showVersion
+ ;;
+ i|instantiate)
+ action='instantiate'
+ ;;
+ e|eval)
+ action='instantiate'
+ extraNixFlags+=('--eval')
+ ;;
+ drv)
+ action='instantiate'
+ extraNixFlags+=('-Q' '--indirect' '--add-root' "$PWD/result.drv")
+ ;;
+ b|build)
+ action='build'
+ extraNixFlags+=('--no-out-link')
+ ;;
+ out)
+ action='build'
+ extraNixFlags+=('-Q')
+ ;;
+ s|shell)
+ action='shell'
+ ;;
+ zsh)
+ action='shell'
+ extraNixFlags+=('--run' 'zsh')
+ ;;
+ h|hash)
+ action='hash'
+ extraNixFlags+=('--type' 'sha256')
+ ;;
+ store)
+ action='store'
+ ;;
+ gc)
+ action='store'
+ extraNixFlags+=('--gc' '--max-freed' '32G')
+ ;;
+ r|repl)
+ action='repl'
+ ;;
+ --strict|--xml|--json|--indirect)
+ # nix-instantiate
+ extraNixFlags+=("$i")
+ ;;
+ --add-root)
+ # nix-instantiate
+ if [ -z "$1" ]; then
+ echo "$0: \`$i' requires an argument"
+ exit 1
+ fi
+ j="$1"; shift 1
+ extraNixFlags+=("$i" "$j")
+ ;;
+ --verbose|-v|--no-build-output|-Q|--keep-going|-k|--keep-failed|-K|--fallback|--readonly-mode|--show-trace)
+ # nix-build
+ extraNixFlags+=("$i")
+ ;;
+ --max-jobs|-j|--cores|-A|-I|--drv-link|--out-link|-o)
+ # nix-build
+ if [ -z "$1" ]; then
+ echo "$0: \`$i' requires an argument"
+ exit 1
+ fi
+ j="$1"; shift 1
+ extraNixFlags+=("$i" "$j")
+ ;;
+ --option|--arg|--argstr)
+ if [ -z "$1" -o -z "$2" ]; then
+ echo "$0: \`$i' requires two arguments"
+ exit 1
+ fi
+ j="$1"; shift 1
+ k="$1"; shift 1
+ extraNixFlags+=("$i" "$j" "$k")
+ ;;
+ --)
+ break
+ ;;
+ './'*|'<'*'>')
+ src="$i"
+ ;;
+ *)
+ echo "Unknown option: $i" >&2
+ showUsage 129
+ ;;
+ esac
+done
+
+if [ -z "$action" ]; then showUsage; fi
+
+if [ "$action" = version ]; then showVersion; fi
+
+if [ -z "$src" -a -f ./default.nix ]; then
+ src='./.'
+fi
+
+if [ "$#" -gt 0 ]; then
+ extraNixFlags+=('-E')
+ exprArg="$@"
+fi
+
+if [ -n "$src" -a -z "$exprArg" ]; then
+ extraNixFlags+=("$src")
+fi
+
+if [ -n "$exprArg" ]; then
+ if [ -f "$src" -o -f "$src/default.nix" ]; then
+ if [ "$src" = ./. ]; then
+ exprArg="with import ./. {}; $exprArg"
+ else
+ exprArg="with callPackage $src {}; $exprArg"
+ fi
+ fi
+
+ if [ "$src" != ./. ]; then
+ exprArg="with import <nixpkgs> {}; $exprArg"
+ fi
+fi
+
+if [ "$action" = instantiate ]; then
+ exec nix-instantiate ${extraNixFlags[@]} "$exprArg"
+fi
+
+if [ "$action" = build ]; then
+ exec nix-build ${extraNixFlags[@]} "$exprArg"
+fi
+
+if [ "$action" = shell ]; then
+ exec nix-shell ${extraNixFlags[@]} "$exprArg"
+fi
+
+if [ "$action" = hash ]; then
+ exec nix-hash ${extraNixFlags[@]}
+fi
+
+if [ "$action" = store ]; then
+ exec nix-store ${extraNixFlags[@]} "$exprArg"
+fi
+
+if [ "$action" = repl ]; then
+ exec nix-repl '<nixpkgs/lib>' "${src:-<nixpkgs>}"
+fi