guix-install.sh: Create an init profile for better out-of-the-box experience on foreign distros

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Prafulla Giri
Owner
unassigned
Submitted by
Prafulla Giri
Severity
normal
P
P
Prafulla Giri wrote on 9 Jan 2020 08:23
(address . guix-patches@gnu.org)
CAFw+=j2HrBvUKp0WVeQMwxHyFih-azaK1zywKq9krxrN7h3bJw@mail.gmail.com
Esteemed maintainers,

Attached is a patch that I think improves the guix user experience on a
foreign distro. It creates a guix.sh init profile at /etc/profile.d (in the
same vein as flatpak with it's /etc/profile.d/flatpak.sh). I have been
using the init file on few of my friends computers with no regressions.

I have tried my best to emulate the commit-logs as seen from `git log
etc/guix-install.sh`. Please do let me know if I am doing anything wrong.
This is my first real contribution to a GNU project, ever. I am still a
n00b, and only have had experiences with GitHub based PRs so far, and still
have a lot to learn. Please forgive my klutzes.
Attachment: file
From 527d82c66a1e80779f75a16cfdd65634d55f32c1 Mon Sep 17 00:00:00 2001
From: Prafulla Giri <pratheblackdiamond@gmail.com>
Date: Sat, 28 Dec 2019 12:48:52 +0545
Subject: [PATCH] guix-install.sh: Create an init profile during installation

Create an init profile (/etc/profile.d/guix.sh) during installation for
better integration with foreign distros. This file, read by login-shells
sets a few environment variables (PATH, GUIX_PROFILE, GUIX_LOCALE, along
with XDG_DATA_DIRS) and makes guix-installed packages readily available
for the users. Other environment variables, as listed by `guix package
--search-paths=prefix`, are also exported.

Checks are in place to prevent the init profile from needlessly polluting
the user's environment.

* etc/guix-install.sh (sys_create_init_profile): New function to create
/etc/profile.d/guix.sh init profile.
---
etc/guix-install.sh | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)

Toggle diff (41 lines)
diff --git a/etc/guix-install.sh b/etc/guix-install.sh
index 111e25fbcb..b57d71981f 100755
--- a/etc/guix-install.sh
+++ b/etc/guix-install.sh
@@ -393,6 +393,26 @@ sys_authorize_build_farms()
done
}
+sys_create_init_profile()
+{ # Create /etc/profile.d/guix.sh for better desktop integration
+ cat <<"EOF" > /etc/profile.d/guix.sh
+# _GUIX_PROFILE: `guix pull` profile
+_GUIX_PROFILE="$HOME/.config/guix/current"
+[ -L $_GUIX_PROFILE ] && export PATH="$_GUIX_PROFILE/bin${PATH:+:}$PATH"
+
+# GUIX_PROFILE: User's default profile
+GUIX_PROFILE="$HOME/.guix-profile"
+[ -L $GUIX_PROFILE ] || return
+GUIX_LOCPATH="$GUIX_PROFILE/lib/locale"
+export GUIX_PROFILE GUIX_LOCPATH
+
+eval `guix package --search-paths=prefix 2> /dev/null`
+
+# set XDG_DATA_DIRS to include Guix installations
+export XDG_DATA_DIRS="$GUIX_PROFILE/share${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS"
+EOF
+}
+
welcome()
{
cat<<"EOF"
@@ -449,6 +469,7 @@ main()
sys_create_build_user
sys_enable_guix_daemon
sys_authorize_build_farms
+ sys_create_init_profile
_msg "${INF}cleaning up ${tmp_path}"
rm -r "${tmp_path}"
--
2.24.1
L
L
Ludovic Courtès wrote on 17 Jan 2020 17:29
(name . Prafulla Giri)(address . pratheblackdiamond@gmail.com)(address . 39049@debbugs.gnu.org)
878sm611yh.fsf@gnu.org
Hello Prafulla,

Prafulla Giri <pratheblackdiamond@gmail.com> skribis:

Toggle quote (5 lines)
> Attached is a patch that I think improves the guix user experience on a
> foreign distro. It creates a guix.sh init profile at /etc/profile.d (in the
> same vein as flatpak with it's /etc/profile.d/flatpak.sh). I have been
> using the init file on few of my friends computers with no regressions.

That’s a great idea! Do you know how common the /etc/profile.d/*.sh
convention is?

Toggle quote (6 lines)
> I have tried my best to emulate the commit-logs as seen from `git log
> etc/guix-install.sh`. Please do let me know if I am doing anything wrong.
> This is my first real contribution to a GNU project, ever. I am still a
> n00b, and only have had experiences with GitHub based PRs so far, and still
> have a lot to learn. Please forgive my klutzes.

You did very well, no worries! (And it’s normal to need some time to
discover a project’s conventions when one joins it.)

Toggle quote (18 lines)
> From 527d82c66a1e80779f75a16cfdd65634d55f32c1 Mon Sep 17 00:00:00 2001
> From: Prafulla Giri <pratheblackdiamond@gmail.com>
> Date: Sat, 28 Dec 2019 12:48:52 +0545
> Subject: [PATCH] guix-install.sh: Create an init profile during installation
>
> Create an init profile (/etc/profile.d/guix.sh) during installation for
> better integration with foreign distros. This file, read by login-shells
> sets a few environment variables (PATH, GUIX_PROFILE, GUIX_LOCALE, along
> with XDG_DATA_DIRS) and makes guix-installed packages readily available
> for the users. Other environment variables, as listed by `guix package
> --search-paths=prefix`, are also exported.
>
> Checks are in place to prevent the init profile from needlessly polluting
> the user's environment.
>
> * etc/guix-install.sh (sys_create_init_profile): New function to create
> /etc/profile.d/guix.sh init profile.

Applied, thanks!

Ludo’.
L
L
Ludovic Courtès wrote on 17 Jan 2020 17:29
control message for bug #39049
(address . control@debbugs.gnu.org)
877e1q11y5.fsf@gnu.org
tags 39049 fixed
close 39049
quit
P
P
Prafulla Giri wrote on 19 Jan 2020 17:54
Re: [bug#39049] guix-install.sh: Create an init profile for better out-of-the-box experience on foreign distros
(name . Ludovic Courtès)(address . ludo@gnu.org)
CAFw+=j1GvNd0Mi1q5cB9W11gsgZ42HTMD=r_Y=_ZW7wYThfA_Q@mail.gmail.com
Wow. Mr. Courtes, it is an honour, sir. Thank you very much.

/etc/profile.d/*.sh seems to be the norm these days. All the debian-based
distros that I have used seem to have it (Mint, Elementary, Ubuntu, etc.)
and even Alpine Linux's docker containers support them.

I didn't really think this patch will get merged in one go. I did find
another thing that I could add to this patch the other day but had not
gotten around to updating this. It is regarding the infopath: setting it to
contain _GUIX_PROFILE/share/info seems to be a good default to have, esp.
because it isn't exported by `guix package --search-paths`. I ran into this
issue just the other day, myself. I wish I had made haste to send in an
update.

Should I send in a patch, sir? And do I send it in this thread or should I
do it in another one, please?



On Fri, Jan 17, 2020 at 10:14 PM Ludovic Courtès <ludo@gnu.org> wrote:

Toggle quote (46 lines)
> Hello Prafulla,
>
> Prafulla Giri <pratheblackdiamond@gmail.com> skribis:
>
> > Attached is a patch that I think improves the guix user experience on a
> > foreign distro. It creates a guix.sh init profile at /etc/profile.d (in
> the
> > same vein as flatpak with it's /etc/profile.d/flatpak.sh). I have been
> > using the init file on few of my friends computers with no regressions.
>
> That’s a great idea! Do you know how common the /etc/profile.d/*.sh
> convention is?
>
> > I have tried my best to emulate the commit-logs as seen from `git log
> > etc/guix-install.sh`. Please do let me know if I am doing anything wrong.
> > This is my first real contribution to a GNU project, ever. I am still a
> > n00b, and only have had experiences with GitHub based PRs so far, and
> still
> > have a lot to learn. Please forgive my klutzes.
>
> You did very well, no worries! (And it’s normal to need some time to
> discover a project’s conventions when one joins it.)
>
> > From 527d82c66a1e80779f75a16cfdd65634d55f32c1 Mon Sep 17 00:00:00 2001
> > From: Prafulla Giri <pratheblackdiamond@gmail.com>
> > Date: Sat, 28 Dec 2019 12:48:52 +0545
> > Subject: [PATCH] guix-install.sh: Create an init profile during
> installation
> >
> > Create an init profile (/etc/profile.d/guix.sh) during installation for
> > better integration with foreign distros. This file, read by login-shells
> > sets a few environment variables (PATH, GUIX_PROFILE, GUIX_LOCALE, along
> > with XDG_DATA_DIRS) and makes guix-installed packages readily available
> > for the users. Other environment variables, as listed by `guix package
> > --search-paths=prefix`, are also exported.
> >
> > Checks are in place to prevent the init profile from needlessly polluting
> > the user's environment.
> >
> > * etc/guix-install.sh (sys_create_init_profile): New function to create
> > /etc/profile.d/guix.sh init profile.
>
> Applied, thanks!
>
> Ludo’.
>
Attachment: file
L
L
Ludovic Courtès wrote on 20 Jan 2020 09:38
(name . Prafulla Giri)(address . pratheblackdiamond@gmail.com)(address . 39049@debbugs.gnu.org)
874kwqjzef.fsf@gnu.org
Hello,

Prafulla Giri <pratheblackdiamond@gmail.com> skribis:

Toggle quote (4 lines)
> /etc/profile.d/*.sh seems to be the norm these days. All the debian-based
> distros that I have used seem to have it (Mint, Elementary, Ubuntu, etc.)
> and even Alpine Linux's docker containers support them.

OK, great.

Toggle quote (8 lines)
> I didn't really think this patch will get merged in one go. I did find
> another thing that I could add to this patch the other day but had not
> gotten around to updating this. It is regarding the infopath: setting it to
> contain _GUIX_PROFILE/share/info seems to be a good default to have, esp.
> because it isn't exported by `guix package --search-paths`. I ran into this
> issue just the other day, myself. I wish I had made haste to send in an
> update.

I agree that it’d be nice!

Toggle quote (3 lines)
> Should I send in a patch, sir? And do I send it in this thread or should I
> do it in another one, please?

Could you send another patch to guix-patches@gnu.org?

Thank you,
Ludo’.
?
Your comment

This issue is archived.

To comment on this conversation send an email to 39049@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 39049
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch