@jaspermayone's dotfiles
1#!/usr/bin/env bash
2set -euo pipefail
3
4FLAKE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
6usage() {
7 echo "Usage: deploy <hostname> [options]"
8 echo ""
9 echo "Deploy NixOS configuration to a machine"
10 echo ""
11 echo "Options:"
12 echo " -l, --local Use local flake instead of GitHub"
13 echo " -b, --boot Only build and set as boot config (don't switch)"
14 echo " -t, --test Test config without adding to boot menu"
15 echo " -h, --help Show this help"
16 echo ""
17 echo "Examples:"
18 echo " deploy alastor # Deploy to alastor from GitHub"
19 echo " deploy alastor -l # Deploy to alastor from local flake"
20 echo " deploy remus --boot # Build for remus, activate on next boot"
21 exit 1
22}
23
24[[ $# -lt 1 ]] && usage
25
26HOST="$1"
27shift
28
29FLAKE="github:jaspermayone/dots"
30ACTION="switch"
31
32while [[ $# -gt 0 ]]; do
33 case "$1" in
34 -l|--local)
35 FLAKE="$FLAKE_ROOT"
36 shift
37 ;;
38 -b|--boot)
39 ACTION="boot"
40 shift
41 ;;
42 -t|--test)
43 ACTION="test"
44 shift
45 ;;
46 -h|--help)
47 usage
48 ;;
49 *)
50 echo "Unknown option: $1"
51 usage
52 ;;
53 esac
54done
55
56CURRENT_HOST=$(hostname)
57
58echo "Deploying $HOST ($ACTION) from $FLAKE"
59
60if [[ "$HOST" == "$CURRENT_HOST" ]]; then
61 # Local deploy
62 sudo nixos-rebuild "$ACTION" --flake "$FLAKE#$HOST"
63else
64 # Remote deploy
65 nixos-rebuild "$ACTION" \
66 --flake "$FLAKE#$HOST" \
67 --target-host "$HOST" \
68 --use-remote-sudo
69fi