Subject: Re: [bug#77523] [PATCH v4 1/6] system: /etc/profile: Group profile sourcing.

From: 宋文武 <[email-masked]>
Date: Sat, 19 Apr 2025 09:37:54 +0800

Hi,

Hilton Chain <[email-masked]> writes:
> * gnu/system.scm (operating-system-etc-service)[profile]: Group sourcing of
> all default profiles.
> Order Guix Home search paths before the default user profile.

Seems reversed, maybe "Prefer search paths of the default user profile
over the home profile.

> Rename iteration variable to GUIX_PROFILE.
>
> Change-Id: I18eac738a5dfade84da2effdd6211119c6fdd96f
> ---
>  gnu/system.scm | 24 +++++++++---------------
>  1 file changed, 9 insertions(+), 15 deletions(-)
>
> diff --git a/gnu/system.scm b/gnu/system.scm
> index 0d98e5a036..c166222854 100644
> --- a/gnu/system.scm
> +++ b/gnu/system.scm
> @@ -1074,10 +1074,6 @@ (define* (operating-system-etc-service os)
>  # Ignore the default value of 'PATH'.
>  unset PATH
>  
> -# Load the system profile's settings.
> -GUIX_PROFILE=/run/current-system/profile ; \\
> -. /run/current-system/profile/etc/profile
> -
>  # Since 'lshd' does not use pam_env, /etc/environment must be explicitly
>  # loaded when someone logs in via SSH.  See <http://bugs.gnu.org/22175>.
>  # We need 'PATH' to be defined here, for 'cat' and 'cut'.  Do this before
This "We need ... to allow variables to be overridden." comment should
be removed, since it's for the previous "Load the system profile's settings.".

> [...]
> -# Arrange so that ~/.config/guix/current comes first,
> -# and guix-home comes before guix-profile.
> -for profile in \"$HOME/.guix-profile\"        \\
> -               \"$HOME/.guix-home/profile\"   \\
> -               \"$HOME/.config/guix/current\"
> +# Set up environment for all default profiles.
> +for GUIX_PROFILE in \"/run/current-system/profile\" \\
> +                    \"$HOME/.guix-home/profile\"   \\
> +                    \"$HOME/.guix-profile\"        \\
> +                    \"$HOME/.config/guix/current\"
>  do
> -  if [ -f \"$profile/etc/profile\" ]
> +  if [ -f \"$GUIX_PROFILE/etc/profile\" ]
>    then
> -    # Load the user profile's settings.
> -    GUIX_PROFILE=\"$profile\" ; \\
> -    . \"$profile/etc/profile\"
> +    . \"$GUIX_PROFILE/etc/profile\"
>    else
>      # At least define this one so that basic things just work
>      # when the user installs their first package.
> -    export PATH=\"$profile/bin:$PATH\"
> +    export PATH=\"$GUIX_PROFILE/bin:$PATH\"
>    fi
>  done

Since we are here, I think we can append "unset GUIX_PROFILE" after the
for loop to show it no longer needed, and avoid possibly wrong usages.