#!/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