depot/ops/nixos/assimilate.sh

39 lines
827 B
Bash
Executable file

#!/bin/sh
set -eu
if [ $EUID -ne 0 ]; then
exec sudo "$0" "$@"
fi
if [ $# -lt 1 ]; then
echo "Usage: $0 hostname" >&2
exit 1
fi
depot_parent() {
pd="$(readlink -f "$1")/"
if [ "${pd#*/depot/}" = "$pd" ]; then
return
fi
pd="$(readlink -f "${pd%/depot/*}/depot")"
echo "$pd"
}
depot_path() {
pd="$(depot_parent "$PWD")"
if [ "$pd" = "" ]; then
pd="$(depot_parent "$(readlink -f "$0")")"
fi
echo "$pd"
}
readonly targethostname="$1"
readonly depot="$(depot_path)"
if [ "$depot" = "" ]; then
echo "This script needs to be executed in-depot (or the script itself should be in-depot)."
exit 1
fi
readonly system="$(nix-build -E '(import "'"$(depot_path)"'" {}).ops.nixos.'"${targethostname}" --no-out-link)"
nix-env -p /nix/var/nix/profiles/system --set "$system"
"$system/bin/switch-to-configuration" switch