From 5cc656fffc1b8837088d9ef76931c2fc9169c9aa Mon Sep 17 00:00:00 2001 From: Tobias Happ Date: Sun, 24 Nov 2019 00:37:28 +0100 Subject: [PATCH] Add nix-on-droid script --- default.nix | 40 +------------ nix-on-droid/default.nix | 19 ++++++ nix-on-droid/nix-on-droid.sh | 111 +++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+), 37 deletions(-) create mode 100644 nix-on-droid/default.nix create mode 100644 nix-on-droid/nix-on-droid.sh diff --git a/default.nix b/default.nix index a342fd7..73b3960 100644 --- a/default.nix +++ b/default.nix @@ -1,39 +1,5 @@ -# Licensed under GNU Lesser General Public License v3 or later, see COPYING. -# Copyright (c) 2019 Alexander Sosedkin and other contributors, see AUTHORS. - -{ }: - -let - nixpkgs = import { }; - - pkgs = import ./src { - arch = if nixpkgs.stdenv.hostPlatform.isArm then "aarch64" else "i686"; - initialBuild = false; - }; -in +{ pkgs ? import { } }: { - # inherit (pkgs) proot-termux; - - basic-environment = nixpkgs.buildEnv { - name = "basic-environment"; - - paths = [ - nixpkgs.bashInteractive - nixpkgs.cacert - nixpkgs.coreutils - nixpkgs.less # since nix tools really want a pager available, #27 - nixpkgs.nix - # pkgs.proot-termux - pkgs.files.etc-group - pkgs.files.etc-passwd - pkgs.files.hm-install - pkgs.files.home-nix-default - pkgs.files.login - pkgs.files.login-inner - pkgs.files.nix-conf - pkgs.files.nix-on-droid-linker - pkgs.files.resolv-conf - ]; - }; -} // pkgs.files + nix-on-droid = pkgs.callPackage ./nix-on-droid { }; +} diff --git a/nix-on-droid/default.nix b/nix-on-droid/default.nix new file mode 100644 index 0000000..55d006d --- /dev/null +++ b/nix-on-droid/default.nix @@ -0,0 +1,19 @@ +# Licensed under GNU Lesser General Public License v3 or later, see COPYING. +# Copyright (c) 2019 Alexander Sosedkin and other contributors, see AUTHORS. + +{ bash, coreutils, nix, runCommand }: + +runCommand + "nix-on-droid" + { + preferLocalBuild = true; + allowSubstitutes = false; + } + '' + install -D -m755 ${./nix-on-droid.sh} $out/bin/nix-on-droid + + substituteInPlace $out/bin/nix-on-droid \ + --subst-var-by bash "${bash}" \ + --subst-var-by coreutils "${coreutils}" \ + --subst-var-by nix "${nix}" + '' diff --git a/nix-on-droid/nix-on-droid.sh b/nix-on-droid/nix-on-droid.sh new file mode 100644 index 0000000..c8d3cfa --- /dev/null +++ b/nix-on-droid/nix-on-droid.sh @@ -0,0 +1,111 @@ +#!@bash@/bin/bash + +PATH=@coreutils@/bin:@nix@/bin:${PATH:+:}$PATH + +set -eu +set -o pipefail + +function errorEcho() { + >&2 echo $@ +} + +function doHelp() { + echo "Usage: $0 [OPTION] COMMAND" + echo + echo "Options" + echo + echo " -v|--verbose Verbose output" + echo " -n|--dry-run Do a dry run, only prints what actions would be taken" + echo " -h|--help Print this help" + echo + echo "Options passed on to nix build" + echo + echo " --cores NUM" + echo " --keep-failed" + echo " --keep-going" + echo " --max-jobs NUM" + echo " --option NAME VALUE" + echo " --show-trace" + echo + echo "Commands" + echo + echo " help Print this help" + echo " switch Build and activate configuration" +} + +function doSwitch() { + local profileDirectory="/nix/var/nix/profiles/nix-on-droid" + + echo "Building activation package.." + nix build \ + --no-link \ + --file "" \ + ${PASSTHROUGH_OPTS[*]} \ + activationPackage + + echo "Save profile activation package.." + generationDir="$(nix path-info --file "" activationPackage)" + nix-env --profile "${profileDirectory}" --set "${generationDir}" + + echo "Run activation script.." + "${generationDir}/activate" +} + + +COMMAND= +PASSTHROUGH_OPTS=() + +while [[ $# -gt 0 ]]; do + opt="$1" + shift + case $opt in + help|switch) + COMMAND="$opt" + ;; + -h|--help) + doHelp + exit 0 + ;; + -n|--dry-run) + export DRY_RUN=1 + ;; + --option) + PASSTHROUGH_OPTS+=("$opt" "$1" "$2") + shift 2 + ;; + --max-jobs|--cores) + PASSTHROUGH_OPTS+=("$opt" "$1") + shift + ;; + --keep-failed|--keep-going|--show-trace) + PASSTHROUGH_OPTS+=("$opt") + ;; + -v|--verbose) + export VERBOSE=1 + ;; + *) + errorEcho "$0: unknown option '$opt'" + errorEcho "Run '$0 --help' for usage help" + exit 1 + ;; + esac +done + +if [[ -z $COMMAND ]]; then + doHelp >&2 + exit 1 +fi + +case $COMMAND in + switch) + doSwitch + ;; + help) + doHelp + ;; + *) + errorEcho "Unknown command: $COMMAND" + doHelp >&2 + exit 1 + ;; +esac