#!/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