From 9bedfd6fdf38bc79a880387082d04e6acafe4404 Mon Sep 17 00:00:00 2001 From: Alexander Bantyev Date: Wed, 1 Mar 2023 14:36:43 +0400 Subject: [PATCH] Handle use-xdg-base-directories for profile link --- scripts/nix-profile-daemon.sh.in | 27 +++------------------------ scripts/nix-profile.sh.in | 26 ++------------------------ 2 files changed, 5 insertions(+), 48 deletions(-) diff --git a/scripts/nix-profile-daemon.sh.in b/scripts/nix-profile-daemon.sh.in index 80774f1f213..f2e75cff45e 100644 --- a/scripts/nix-profile-daemon.sh.in +++ b/scripts/nix-profile-daemon.sh.in @@ -2,30 +2,9 @@ if [ -n "${__ETC_PROFILE_NIX_SOURCED:-}" ]; then return; fi __ETC_PROFILE_NIX_SOURCED=1 -NIX_LINK=$HOME/.nix-profile -if [ -n "${XDG_STATE_HOME-}" ]; then - NIX_LINK_NEW="$XDG_STATE_HOME/nix/profile" -else - NIX_LINK_NEW=$HOME/.local/state/nix/profile -fi -if ! [ -e "$NIX_LINK" ]; then - NIX_LINK="$NIX_LINK_NEW" -else - if [ -t 2 ] && [ -e "$NIX_LINK_NEW" ]; then - warning="\033[1;35mwarning:\033[0m" - printf "$warning Both %s and legacy %s exist; using the latter.\n" "$NIX_LINK_NEW" "$NIX_LINK" 1>&2 - if [ "$(realpath "$NIX_LINK")" = "$(realpath "$NIX_LINK_NEW")" ]; then - printf " Since the profiles match, you can safely delete either of them.\n" 1>&2 - else - # This should be an exceptionally rare occasion: the only way to get it would be to - # 1. Update to newer Nix; - # 2. Remove .nix-profile; - # 3. Set the $NIX_LINK_NEW to something other than the default user profile; - # 4. Roll back to older Nix. - # If someone did all that, they can probably figure out how to migrate the profile. - printf "$warning Profiles do not match. You should manually migrate from %s to %s.\n" "$NIX_LINK" "$NIX_LINK_NEW" 1>&2 - fi - fi +NIX_LINK="$HOME/.nix-profile" +if [[ $(PATH="$PATH:@localstatedir@/nix/profiles/default/bin" nix show-config use-xdg-base-directories) == true ]]; then + NIX_LINK="${XDG_STATE_HOME-$HOME/.local/state}/nix/profile" fi export NIX_PROFILES="@localstatedir@/nix/profiles/default $NIX_LINK" diff --git a/scripts/nix-profile.sh.in b/scripts/nix-profile.sh.in index e8af9121173..0bfbd922cff 100644 --- a/scripts/nix-profile.sh.in +++ b/scripts/nix-profile.sh.in @@ -1,31 +1,9 @@ if [ -n "$HOME" ] && [ -n "$USER" ]; then # Set up the per-user profile. - NIX_LINK="$HOME/.nix-profile" - if [ -n "${XDG_STATE_HOME-}" ]; then - NIX_LINK_NEW="$XDG_STATE_HOME/nix/profile" - else - NIX_LINK_NEW="$HOME/.local/state/nix/profile" - fi - if ! [ -e "$NIX_LINK" ]; then - NIX_LINK="$NIX_LINK_NEW" - else - if [ -t 2 ] && [ -e "$NIX_LINK_NEW" ]; then - warning="\033[1;35mwarning:\033[0m" - printf "$warning Both %s and legacy %s exist; using the latter.\n" "$NIX_LINK_NEW" "$NIX_LINK" 1>&2 - if [ "$(realpath "$NIX_LINK")" = "$(realpath "$NIX_LINK_NEW")" ]; then - printf " Since the profiles match, you can safely delete either of them.\n" 1>&2 - else - # This should be an exceptionally rare occasion: the only way to get it would be to - # 1. Update to newer Nix; - # 2. Remove .nix-profile; - # 3. Set the $NIX_LINK_NEW to something other than the default user profile; - # 4. Roll back to older Nix. - # If someone did all that, they can probably figure out how to migrate the profile. - printf "$warning Profiles do not match. You should manually migrate from %s to %s.\n" "$NIX_LINK" "$NIX_LINK_NEW" 1>&2 - fi - fi + if [[ $(PATH="$PATH:@localstatedir@/nix/profiles/default/bin" nix show-config use-xdg-base-directories) == true ]]; then + NIX_LINK="${XDG_STATE_HOME-$HOME/.local/state}/nix/profile" fi # Set up environment.