Add nix-on-droid script

This commit is contained in:
Tobias Happ 2019-11-24 00:37:28 +01:00 committed by Alexander Sosedkin
parent b7ad1d5d08
commit 5cc656fffc
3 changed files with 133 additions and 37 deletions

View file

@ -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 <nixpkgs> { };
pkgs = import ./src {
arch = if nixpkgs.stdenv.hostPlatform.isArm then "aarch64" else "i686";
initialBuild = false;
};
in
{ pkgs ? import <nixpkgs> { } }:
{
# 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 { };
}

19
nix-on-droid/default.nix Normal file
View file

@ -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}"
''

View file

@ -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 "<nix-on-droid/modules>" \
${PASSTHROUGH_OPTS[*]} \
activationPackage
echo "Save profile activation package.."
generationDir="$(nix path-info --file "<nix-on-droid/modules>" 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