54 lines
1.7 KiB
Bash
Executable File
54 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Change into script dir.
|
|
cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null || exit
|
|
nixosDir=$(pwd)
|
|
|
|
remoteAddr=""
|
|
echo -n "Install on [local machine]: "
|
|
read -r CHOICE
|
|
if [[ -n $CHOICE ]]; then
|
|
remoteAddr="$CHOICE"
|
|
fi
|
|
sshCmd=""
|
|
if [[ -n $remoteAddr ]]; then
|
|
if ssh "$remoteAddr" /usr/bin/env true; then
|
|
sshCmd="ssh $remoteAddr"
|
|
else
|
|
echo "Unable to confirm connection to remote $remoteAddr"
|
|
fi
|
|
fi
|
|
|
|
# Get short hostname to work with host specific configurations.
|
|
host=""
|
|
if [[ "$(grep hostName settings.nix)" =~ \"(.*)\" ]]; then
|
|
host=${BASH_REMATCH[1]}
|
|
fi
|
|
|
|
# If hostname wasn't found, try using the hostname command.
|
|
if [[ -z $host ]]; then
|
|
host=$($sshCmd hostname -s)
|
|
fi
|
|
|
|
# Confirm host configuration is available; If not, we should not continue.
|
|
if ! grep -q "nixosConfigurations.$host " flake.nix; then
|
|
host="default"
|
|
fi
|
|
|
|
# If remote address provided, use nixos-anywhere.
|
|
if [[ -n $remoteAddr ]]; then
|
|
localArch=$(uname -m)
|
|
remoteArch=$($sshCmd uname -m)
|
|
if [[ "$localArch" != "$remoteArch" ]]; then
|
|
# shellcheck disable=SC2068
|
|
nix --extra-experimental-features 'nix-command flakes' run 'github:nix-community/nixos-anywhere' -- --build-on-remote --flake "path:$nixosDir/#$host" "$remoteAddr" $@
|
|
else
|
|
# shellcheck disable=SC2068
|
|
nix --extra-experimental-features 'nix-command flakes' run 'github:nix-community/nixos-anywhere' -- --flake "path:$nixosDir/#$host" "$remoteAddr" $@
|
|
fi
|
|
else
|
|
# Otherwise install with disko-install.
|
|
# shellcheck disable=SC2068
|
|
nix --extra-experimental-features 'nix-command flakes' run 'github:nix-community/disko#disko-install' -- --flake "path:$nixosDir/#$host" $@
|
|
fi
|