@jaspermayone's dotfiles
at main 1.6 kB view raw
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