#!/usr/bin/env bash # Eventually convert to haskell, see: # - https://github.com/awakesecurity/nix-deploy/blob/master/src/Main.hs # - http://www.haskellforall.com/2018/08/nixos-in-production.html prefix=${PWD/$CODEROOT} if [[ "$prefix" == "" ]] then target="$1" else target="$prefix.$1" fi what=$(realpath "${CODEROOT:?}/_/nix/$target") # hack: get the domain from the systemd service. there does not seem to be a way # to get it from nix-instantiate. (or, maybe i should put this in bild --plan?) where=$(rg --only-matching --replace '$2' --regexp '(domainname ")(.*)(")' \ "$what/etc/systemd/system/domainname.service") nix copy --to ssh://"$USER"@"$where" "$what" ssh "$USER"@"$where" sudo nix-env --profile /nix/var/nix/profiles/system --set "$what" switch_cmd=( systemd-run -E LOCALE_ARCHIVE --collect --no-ask-password --pipe --quiet --service-type=exec --unit=push-switch-to-configuration --wait "$what/bin/switch-to-configuration" "switch" ) # shellcheck disable=SC2029 ssh "$USER"@"$where" sudo "${switch_cmd[@]}" echo "${GRN}good: push: $target${NC}"