135 lines
3.2 KiB
Bash
Executable File
135 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# my nixos rebuild script
|
|
|
|
|
|
set -e
|
|
|
|
|
|
build_from_github(){
|
|
export NIXPKGS_ALLOW_UNFREE=1
|
|
export out_path=$(nix build --refresh "github:c2vi/nixos#nixosConfigurations.$host.config.system.build.toplevel" --impure --no-link --print-out-paths "${args_to_pass[@]}")
|
|
|
|
if [[ "$out_path" == "" ]]
|
|
then
|
|
build_exit_code=1
|
|
else
|
|
build_exit_code=0
|
|
fi
|
|
|
|
echo out_path: $out_path
|
|
echo build_exit_code: $build_exit_code
|
|
|
|
return $build_exit_code
|
|
}
|
|
|
|
build_from_local(){
|
|
export NIXPKGS_ALLOW_UNFREE=1
|
|
export out_path=$(nix build "$HOME/work/config#nixosConfigurations.$host.config.system.build.toplevel" --impure --no-link --print-out-paths "${args_to_pass[@]}")
|
|
|
|
if [[ "$out_path" == "" ]]
|
|
then
|
|
build_exit_code=1
|
|
else
|
|
build_exit_code=0
|
|
fi
|
|
|
|
echo out_path: $out_path
|
|
echo build_exit_code: $build_exit_code
|
|
|
|
return $build_exit_code
|
|
}
|
|
|
|
build_remote () {
|
|
|
|
rsync -r -v $HOME/work/config/* $host:my-nixos-config --exclude=.git --exclude=gitignore
|
|
|
|
out_path=$(ssh $host nix build "\$HOME/my-nixos-config#nixosConfigurations.$host.config.system.build.toplevel" --impure --no-link --print-out-paths -v -L "${args_to_pass[@]}")
|
|
|
|
if [[ "$out_path" == "" ]]
|
|
then
|
|
build_exit_code=1
|
|
else
|
|
build_exit_code=0
|
|
fi
|
|
|
|
echo out_path: $out_path
|
|
echo build_exit_code: $build_exit_code
|
|
|
|
return $build_exit_code
|
|
|
|
}
|
|
|
|
|
|
do_switch(){
|
|
if [[ "$host" == "$(hostname)" ]]
|
|
then
|
|
[[ "$boot" == "false" ]] && sudo $out_path/bin/switch-to-configuration switch
|
|
[[ "$boot" == "true" ]] && sudo $out_path/bin/switch-to-configuration boot
|
|
elif [[ "$build_remote" == "true" ]]
|
|
then
|
|
[[ "$boot" == "false" ]] && ssh $host "sudo nixos-rebuild switch --flake \$HOME/my-nixos-config --impure"
|
|
[[ "$boot" == "true" ]] && ssh $host "sudo nixos-rebuild boot --flake \$HOME/my-nixos-config --impure"
|
|
else
|
|
nix path-info $out_path -r | xargs sudo nix store sign -k ~/work/here/secrets/nix-private
|
|
nix copy --no-check-sigs --no-require-sigs --to ssh-ng://$host $out_path
|
|
[[ "$boot" == "false" ]] && ssh $host "sudo $out_path/bin/switch-to-configuration switch"
|
|
[[ "$boot" == "true" ]] && ssh $host "sudo $out_path/bin/switch-to-configuration boot"
|
|
fi
|
|
}
|
|
|
|
function test(){
|
|
for arg in "$@";
|
|
do
|
|
echo got: $arg
|
|
done
|
|
}
|
|
|
|
|
|
# main
|
|
|
|
host=$(hostname)
|
|
export host
|
|
boot=false
|
|
use_github=""
|
|
flag=""
|
|
|
|
while getopts ':rgbh:' flag; do
|
|
case "${flag}" in
|
|
h) host="${OPTARG}";;
|
|
b) boot=true;;
|
|
g) use_github=true;;
|
|
r) build_remote=true;;
|
|
*) export args_to_pass=( "${@:OPTIND}" ); break;; # makes it so, that at the first unknown option we start passing the rest of the arguments to the nix build command....
|
|
esac
|
|
done
|
|
|
|
# mahem with correctly passing args to the nix build command
|
|
#args_to_pass=$(for arg in "${args_to_pass[@]}"; do echo -en " \\\"$arg\\\""; done)
|
|
#for arg in "${args_to_pass[@]}"; do echo loop: "$arg"; done
|
|
#echo hiii: $args_to_pass
|
|
#test "${args_to_pass[@]}"
|
|
#exit
|
|
|
|
|
|
if [[ "$host" == "acern" ]] || [[ "$host" == "mosatop" ]]
|
|
then
|
|
build_remote=true
|
|
fi
|
|
|
|
|
|
if [[ "$use_github" == "true" ]]
|
|
then
|
|
echo rebuild from github
|
|
build_from_github && do_switch
|
|
elif [[ "$build_remote" == "true" ]]
|
|
then
|
|
build_remote && do_switch
|
|
else
|
|
echo "rebuild from local (~/work/config/)"
|
|
build_from_local && do_switch
|
|
fi
|
|
|
|
|
|
|