aboutsummaryrefslogtreecommitdiff
path: root/scripts/install-multi-user.sh
diff options
context:
space:
mode:
authorThéophane Hufschmitt <theophane.hufschmitt@tweag.io>2023-01-27 09:46:46 +0100
committerThéophane Hufschmitt <theophane.hufschmitt@tweag.io>2023-01-27 09:46:46 +0100
commitab424a39a966e2e3bfb2a34ba5cf4f1c49f86d2d (patch)
tree30209c669865c452207b780f328daa0b26731ed6 /scripts/install-multi-user.sh
parent6da4cc92d8c546939818b65ba4f1b4ce65d88d6e (diff)
parented479aafdc03f2e7428f182549cedab947824300 (diff)
Merge remote-tracking branch 'nixos/master' into pr-flake-show-foreign
Diffstat (limited to 'scripts/install-multi-user.sh')
-rw-r--r--scripts/install-multi-user.sh64
1 files changed, 54 insertions, 10 deletions
diff --git a/scripts/install-multi-user.sh b/scripts/install-multi-user.sh
index 01dbf0c0e..f149ea0d7 100644
--- a/scripts/install-multi-user.sh
+++ b/scripts/install-multi-user.sh
@@ -37,6 +37,19 @@ readonly PROFILE_TARGETS=("/etc/bashrc" "/etc/profile.d/nix.sh" "/etc/zshrc" "/e
readonly PROFILE_BACKUP_SUFFIX=".backup-before-nix"
readonly PROFILE_NIX_FILE="$NIX_ROOT/var/nix/profiles/default/etc/profile.d/nix-daemon.sh"
+# Fish has different syntax than zsh/bash, treat it separate
+readonly PROFILE_FISH_SUFFIX="conf.d/nix.fish"
+readonly PROFILE_FISH_PREFIXES=(
+ # each of these are common values of $__fish_sysconf_dir,
+ # under which Fish will look for a file named
+ # $PROFILE_FISH_SUFFIX.
+ "/etc/fish" # standard
+ "/usr/local/etc/fish" # their installer .pkg for macOS
+ "/opt/homebrew/etc/fish" # homebrew
+ "/opt/local/etc/fish" # macports
+)
+readonly PROFILE_NIX_FILE_FISH="$NIX_ROOT/var/nix/profiles/default/etc/profile.d/nix-daemon.fish"
+
readonly NIX_INSTALLED_NIX="@nix@"
readonly NIX_INSTALLED_CACERT="@cacert@"
#readonly NIX_INSTALLED_NIX="/nix/store/j8dbv5w6jl34caywh2ygdy88knx1mdf7-nix-2.3.6"
@@ -45,7 +58,7 @@ readonly EXTRACTED_NIX_PATH="$(dirname "$0")"
readonly ROOT_HOME=~root
-if [ -t 0 ]; then
+if [ -t 0 ] && [ -z "${NIX_INSTALLER_YES:-}" ]; then
readonly IS_HEADLESS='no'
else
readonly IS_HEADLESS='yes'
@@ -84,13 +97,10 @@ is_os_darwin() {
}
contact_us() {
- echo "You can open an issue at https://github.com/nixos/nix/issues"
+ echo "You can open an issue at"
+ echo "https://github.com/NixOS/nix/issues/new?labels=installer&template=installer.md"
echo ""
- echo "Or feel free to contact the team:"
- echo " - Matrix: #nix:nixos.org"
- echo " - IRC: in #nixos on irc.libera.chat"
- echo " - twitter: @nixos_org"
- echo " - forum: https://discourse.nixos.org"
+ echo "Or get in touch with the community: https://nixos.org/community"
}
get_help() {
echo "We'd love to help if you need it."
@@ -362,7 +372,7 @@ finish_fail() {
finish_cleanup
failure <<EOF
-Jeeze, something went wrong. If you can take all the output and open
+Oh no, something went wrong. If you can take all the output and open
an issue, we'd love to fix the problem so nobody else has this issue.
:(
@@ -565,7 +575,7 @@ EOF
# to extract _just_ the user's note, instead it is prefixed with
# some plist junk. This was causing the user note to always be set,
# even if there was no reason for it.
- if ! poly_user_note_get "$username" | grep -q "Nix build user $coreid"; then
+ if poly_user_note_get "$username" | grep -q "Nix build user $coreid"; then
row " Note" "Nix build user $coreid"
else
poly_user_note_set "$username" "Nix build user $coreid"
@@ -810,7 +820,7 @@ EOF
fi
_sudo "to load data for the first time in to the Nix Database" \
- "$NIX_INSTALLED_NIX/bin/nix-store" --load-db < ./.reginfo
+ HOME="$ROOT_HOME" "$NIX_INSTALLED_NIX/bin/nix-store" --load-db < ./.reginfo
echo " Just finished getting the nix database ready."
)
@@ -828,6 +838,19 @@ fi
EOF
}
+# Fish has differing syntax
+fish_source_lines() {
+ cat <<EOF
+
+# Nix
+if test -e '$PROFILE_NIX_FILE_FISH'
+ . '$PROFILE_NIX_FILE_FISH'
+end
+# End Nix
+
+EOF
+}
+
configure_shell_profile() {
task "Setting up shell profiles: ${PROFILE_TARGETS[*]}"
for profile_target in "${PROFILE_TARGETS[@]}"; do
@@ -849,6 +872,27 @@ configure_shell_profile() {
tee -a "$profile_target"
fi
done
+
+ task "Setting up shell profiles for Fish with with ${PROFILE_FISH_SUFFIX} inside ${PROFILE_FISH_PREFIXES[*]}"
+ for fish_prefix in "${PROFILE_FISH_PREFIXES[@]}"; do
+ if [ ! -d "$fish_prefix" ]; then
+ # this specific prefix (ie: /etc/fish) is very likely to exist
+ # if Fish is installed with this sysconfdir.
+ continue
+ fi
+
+ profile_target="${fish_prefix}/${PROFILE_FISH_SUFFIX}"
+ conf_dir=$(dirname "$profile_target")
+ if [ ! -d "$conf_dir" ]; then
+ _sudo "create $conf_dir for our Fish hook" \
+ mkdir "$conf_dir"
+ fi
+
+ fish_source_lines \
+ | _sudo "write nix-daemon settings to $profile_target" \
+ tee "$profile_target"
+ done
+
# TODO: should we suggest '. $PROFILE_NIX_FILE'? It would get them on
# their way less disruptively, but a counter-argument is that they won't
# immediately notice if something didn't get set up right?