36 lines
1 KiB
Bash
Executable file
36 lines
1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -eo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
if ! command -v nix-build &> /dev/null
|
|
then
|
|
echo "Nix installation could not be found. Please follow the instructions linked below."
|
|
echo "https://nixos.org/manual/nix/unstable/installation/installing-binary.html#multi-user-installation"
|
|
exit
|
|
fi
|
|
|
|
mode="${1:-switch}"
|
|
host="${2:-nuc}"
|
|
target="${3:-c3h@$host.c3h}"
|
|
|
|
if ! [ -d "hosts/$host" ]
|
|
then
|
|
echo "Host $host does not exist. Choose from:"
|
|
ls hosts
|
|
exit
|
|
fi
|
|
|
|
echo "deploying $host to $target"
|
|
sleep 1
|
|
|
|
tmp=$(mktemp -d)
|
|
trap 'rm -rf "$tmp"' EXIT
|
|
sources="$tmp/sources"
|
|
cp -r $(nix-build nix/sources-dir.nix --no-out-link) $tmp/sources
|
|
|
|
set -x
|
|
system_drv=$(nix-instantiate "<nixpkgs/nixos>" -A config.system.build.toplevel -I $sources -I "nixos-config=$PWD/hosts/$host/configuration.nix")
|
|
nix-copy-closure --to $target $system_drv
|
|
system=$(ssh $target "nix-store --realise $system_drv")
|
|
ssh $target "sudo nix-env -p /nix/var/nix/profiles/system -i $system && sudo /nix/var/nix/profiles/system/bin/switch-to-configuration $mode"
|