From a1dbf21ec75a7120c430d77c2850099018d6e22d Mon Sep 17 00:00:00 2001 From: Charlotte Date: Sun, 5 Jan 2025 13:13:59 +1100 Subject: [PATCH] rebuild/ZZ: support remote builds --- modules/fish/ZZZ.fish | 67 ---------------------------------------- modules/fish/default.nix | 1 - rebuild | 14 +++++++-- 3 files changed, 11 insertions(+), 71 deletions(-) delete mode 100644 modules/fish/ZZZ.fish diff --git a/modules/fish/ZZZ.fish b/modules/fish/ZZZ.fish deleted file mode 100644 index 0d783d1..0000000 --- a/modules/fish/ZZZ.fish +++ /dev/null @@ -1,67 +0,0 @@ -function ZZZ -d "multi-host rebuilder" - # Multi-host Nix rebuilder. - - # Force a rebuild on targets even if a new version wasn't pulled. - set -f force 0 - if test "$argv[1]" = -f - set -f force 1 - set -e argv[1] - end - - # The hosts we're connecting to. These should be acceptable for ssh. - set -f hosts $argv - - # Spawn a tmux session, create panes for each target host. - set -f state init - for host in $hosts - set -l CMD \ - -e HOST="$host" ' - echo starting - echo target: $HOST - source $VYXOS/modules/fish/ZZZ.fish - begin - functions ZZZe - echo ZZZe '"$force"' - end | ssh -T $HOST' - - switch "$state" - case init - tmux -L ZZZ new-session -d -x - -y - $CMD - tmux -L ZZZ set-option -g remain-on-exit failed - set state next - case next - tmux -L ZZZ split-window $CMD 2>/dev/null - if test "$status" -ne 0 - # Probably "no space for new pane". - tmux -L ZZZ select-layout tiled - tmux -L ZZZ new-window $CMD - end - end - end - - tmux -L ZZZ select-layout tiled - tmux -L ZZZ bind-key -n Escape kill-window - - tmux -L ZZZ attach-session -end - -function ZZZe - set -f force "$argv[1]" - - function ZZZe_fail - echo "exiting: "(hostname) 1>&2 - exit "$argv[1]" - end - - cd $VYXOS || ZZZe_fail 10 - git config remote.origin.url git@github.com:kivikakk/vyxos || ZZZe_fail 11 - set before (git rev-parse HEAD) - git pull || ZZZe_fail 12 - set after (git rev-parse HEAD) - echo "before:" "$before" "after:" "$after" - if test "$force" -eq 0 -a "$before" = "$after" - exit 0 - end - - ./rebuild switch || ZZZe_fail 13 -end diff --git a/modules/fish/default.nix b/modules/fish/default.nix index a725d3a..468a4b7 100644 --- a/modules/fish/default.nix +++ b/modules/fish/default.nix @@ -28,7 +28,6 @@ in { ".config/fish/functions/fish_jj_prompt.fish".source = ./fish_jj_prompt.fish; ".config/fish/functions/fish_vcs_prompt.fish".source = ./fish_vcs_prompt.fish; ".config/fish/functions/nix_shell_info.fish".source = ./nix_shell_info.fish; - ".config/fish/functions/ZZZ.fish".source = ./ZZZ.fish; }; programs.fish = { diff --git a/rebuild b/rebuild index e780f7e..9279a3b 100755 --- a/rebuild +++ b/rebuild @@ -1,18 +1,26 @@ #!/usr/bin/env fish if [ (count $argv) -lt 1 ] - echo "usage: "(status -f)" verb [args ...]" + echo "usage: "(status -f)" verb [@HOST] [args ...]" exit 1 end +if string match -qr '\A@(?.+)\z' -- "$argv[2]" + # Assuming target is NixOS. + set -e argv[2] + set verb $argv[1] + set -e argv[1] + exec nixos-rebuild --target-host $host $verb --use-remote-sudo --flake git+file://(readlink -f (dirname (status -f)))\?submodules=1 $argv +end + set verb $argv[1] set -e argv[1] switch (uname) case Linux - nixos-rebuild $verb --use-remote-sudo --flake git+file://(readlink -f (dirname (status -f)))\?submodules=1 --impure $argv + exec nixos-rebuild $verb --use-remote-sudo --flake git+file://(readlink -f (dirname (status -f)))\?submodules=1 $argv case Darwin - darwin-rebuild $verb --flake git+file://(readlink -f (dirname (status -f)))\?submodules=1 --impure $argv + exec darwin-rebuild $verb --flake git+file://(readlink -f (dirname (status -f)))\?submodules=1 $argv case '*' echo "unknown uname: "(uname) exit 1