diff --git a/pkgs/os-specific/linux/nixos-rebuild/_nixos-rebuild b/pkgs/os-specific/linux/nixos-rebuild/_nixos-rebuild index 84e8d223bd80..31e23136528d 100644 --- a/pkgs/os-specific/linux/nixos-rebuild/_nixos-rebuild +++ b/pkgs/os-specific/linux/nixos-rebuild/_nixos-rebuild @@ -36,6 +36,7 @@ _nixos-rebuild() { --rollback --specialisation -c # name --use-remote-sudo + --no-ssh-tty --build-host # host --target-host # host # Used with list-generations diff --git a/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.8 b/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.8 index 9ef46b564dda..25ae9efba1c7 100644 --- a/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.8 +++ b/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.8 @@ -37,6 +37,7 @@ .Op Fl -build-host Va host .Op Fl -target-host Va host .Op Fl -use-remote-sudo +.Op Fl -no-ssh-tty .br .Op Fl -verbose | v .Op Fl -quiet @@ -392,6 +393,16 @@ system with .Ic sudo Ns \&. Setting this option allows deploying as a non-root user. . +.It Fl -no-ssh-tty +When set, nixos-rebuild will not request a tty when executing commands on the +.Fl -target-host +system with +.Ic ssh Ns +\&. This may help avoid corrupted terminal output when running multiple +nixos-rebuild commands in parallel, but may also prevent the remote +.Ic sudo +from working properly. +. .It Fl -file Ar path , Fl f Ar path Enable and build the NixOS system from the specified file. The file must evaluate to an attribute set, and it must contain a valid NixOS configuration diff --git a/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh b/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh index 698fb4192252..67f13c8e137c 100755 --- a/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh +++ b/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh @@ -32,6 +32,7 @@ specialisation= buildHost= targetHost= remoteSudo= +noSSHTTY= verboseScript= noFlake= attr= @@ -163,6 +164,9 @@ while [ "$#" -gt 0 ]; do --use-remote-sudo) remoteSudo=1 ;; + --no-ssh-tty) + noSSHTTY=1 + ;; --flake) flake="$1" shift 1 @@ -238,12 +242,18 @@ targetHostCmd() { } targetHostSudoCmd() { + local t= + if [[ ! "${noSSHTTY:-x}" = 1 ]]; then + t="-t" + fi + if [ -n "$remoteSudo" ]; then - useSudo=1 SSHOPTS="$SSHOPTS -t" targetHostCmd "$@" + useSudo=1 SSHOPTS="$SSHOPTS $t" targetHostCmd "$@" else # While a tty might not be necessary, we apply it to be consistent with # sudo usage, and an experience that is more consistent with local deployment. - SSHOPTS="$SSHOPTS -t" targetHostCmd "$@" + # But if the user really doesn't want it, don't do it. + SSHOPTS="$SSHOPTS $t" targetHostCmd "$@" fi }