From: Gottfried <gottfried@posteo.de>
To: Wojtek Kosior <koszko@koszko.org>
Cc: help-guix@gnu.org
Subject: Re: to enable all profiles at login time
Date: Mon, 17 Apr 2023 07:37:40 +0000 [thread overview]
Message-ID: <8748c256-fe84-5980-f890-6be4ea631ad9@posteo.de> (raw)
In-Reply-To: <20230416221839.00454cad.koszko@koszko.org>
[-- Attachment #1.1.1: Type: text/plain, Size: 6695 bytes --]
Hi,
thanks for helping me.
------------------------------------------------------------------
1.
I added:
"GUIX_EXTRA_PROFILES=/home/gfp/Projekte"
to my /.bash_profile
2.
I changed the sentence
"profile=$i/$(basename "$i")"
to:
"profile=$i"
3.
my /.bash_profile looks now, after changing like this:
# Honor per-interactive-shell startup file
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
GUIX_EXTRA_PROFILES=/home/gfp/Projekte
for i in $GUIX_EXTRA_PROFILES/*; do
profile=$i
if [ -f "$profile"/etc/profile ]; then
GUIX_PROFILE="$profile"
. "$GUIX_PROFILE"/etc/profile
fi
unset profile
done
----------------------------------------------------------------------
4.
my /.bashrc looks like this
# Bash initialization for interactive non-login shells and
# for remote shells (info "(bash) Bash Startup Files").
# Export 'SHELL' to child processes. Programs such as 'screen'
# honor it and otherwise use /bin/sh.
export SHELL
if [[ $- != *i* ]]
then
# We are being invoked from a non-interactive shell. If this
# is an SSH session (as in "ssh host command"), source
# /etc/profile so we get PATH and other essential variables.
[[ -n "$SSH_CLIENT" ]] && source /etc/profile
# Don't do anything else.
return
fi
# Source the system-wide file.
source /etc/bashrc
# Adjust the prompt depending on whether we're in 'guix environment'.
if [ -n "$GUIX_ENVIRONMENT" ]
then
PS1='\u@\h \w [env]\$ '
else
PS1='\u@\h \w\$ '
fi
alias ls='ls -p --color=auto'
alias ll='ls -l'
alias grep='grep --color=auto'
---------------------------------------------------------------------
> change the configuration of one's terminal emulator to start bash
>> with `-l`
5.
Where do I have to add "-l" in /.bashrc?
Kind regards
Gottfried
Am 16.04.23 um 22:18 schrieb Wojtek Kosior:
> Hi Gottfried,
>
> I see 3 potential problems.
>
> 1.
> The snippet you addet to .bashrc refers to a variable named
> "GUIX_EXTRA_PROFILES". Is this variable defined somewhere? Is seems it
> isn't. It should be assigned the path to the directory holding your
> profiles so you could for example add a
>
> GUIX_EXTRA_PROFILES=/path/to/directory/with/my/guix/profiles
>
> line before the `for` loop. Of course, replacing the
> "/path/to/directory/with/my/guix/profiles" with the appropriate path
> for your system.
>
> 2.
> Why is `basename` being used here? Consider the following example:
>
> - "GUIX_EXTRA_PROFILES" is set to /home/user/my-extra-guix-stuff
> - you have 1 extra Guix profile under
> "/home/user/my-extra-guix-stuff/music"
> - the profile mentioned above has its `profile` script under
> "/home/user/my-extra-guix-stuff/music/etc/profile"
>
> Now, let's look at what the
>
> profile=$i/$(basename "$i")
>
> line does. This line is inside a `for` loop, in each iteration the
> variable "i" holds the path to one of the profiles under
> "/home/user/my-extra-guix-stuff". In one iteration "i" is going to hold
> the string "/home/user/my-extra-guix-stuff/music". The `basename "$i"`
> command therefore outputs just "music". So the line we're analyzing
> assigns the string "/home/user/my-extra-guix-stuff/music/music" to
> variable called "profile". Is this what we wanted? The next line is
> going to check for the existence of file
> "/home/user/my-extra-guix-stuff/music/music/etc/profile" but it should
> instead check for the existence of
> "/home/user/my-extra-guix-stuff/music/etc/profile". So you might want
> to e.g. replace the line
>
> profile=$i/$(basename "$i")
>
> with just
>
> profile=$i
>
> 3.
> You edited "~/.bash_profile" which is indeed known to be read by bash.
>
> However, this is not that simple. Bash has 3 possible modes of running:
> non-interactive shell, interactive shell and (interactive) login shell.
> The "login shell" mode is meant to be used when, well, bash is spawned
> in a terminal upon user login. "~/.bash_profile" is *only* read by bash
> in this mode and not in the other 2. In interactive shell mode, bash
> reads "~/.bashrc" *instead*.
>
> When you, for example, execute a `bash` command inside an
> already-running shell, the child bash shell that spawns is not going to
> consider itself a login shell but rather a mere interactive shell. To
> make bash think is is a login shell, you can e.g. start it with a `-l`
> flag, like `bash -l`.
>
> The problem is, most terminal emulators by default don't start bash
> this way. The 2 solutions I've been using are to either
> - change the configuration of one's terminal emulator to start bash
> with `-l`
> - or make the ".bashrc" script check if current interactive shell was
> spawned by a teminal emulator process and if yes, have it activate the
> Guix profiles.
>
> The 1st solution is the proper one, the 2nd one is just a workaround
> for terminal emulators that are not configurable enough :)
>
>
> Wojtek
>
>
> -- (sig_start)
> website: https://koszko.org/koszko.html
> PGP: https://koszko.org/key.gpg
> fingerprint: E972 7060 E3C5 637C 8A4F 4B42 4BC5 221C 5A79 FD1A
>
> ♥ R29kIGlzIHRoZXJlIGFuZCBsb3ZlcyBtZQ== | ÷ c2luIHNlcGFyYXRlZCBtZSBmcm9tIEhpbQ==
> ✝ YnV0IEplc3VzIGRpZWQgdG8gc2F2ZSBtZQ== | ? U2hhbGwgSSBiZWNvbWUgSGlzIGZyaWVuZD8=
> -- (sig_end)
>
>
> On Sun, 16 Apr 2023 13:09:00 +0000
> Gottfried <gottfried@posteo.de> wrote:
>
>> Hi,
>>
>> according to the cookbook
>> I added
>> --------------------------------------------
>> for i in $GUIX_EXTRA_PROFILES/*; do
>> profile=$i/$(basename "$i")
>> if [ -f "$profile"/etc/profile ]; then
>> GUIX_PROFILE="$profile"
>> . "$GUIX_PROFILE"/etc/profile
>> fi
>> unset profile
>> done
>> -----------------------------------------------
>> into my .bash_profile file
>> in order to enable all profiles at login time:
>> ------------------------------------------------
>> My .bash_profile file looks now like that:
>>
>> # Honor per-interactive-shell startup file
>> if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
>>
>> for i in $GUIX_EXTRA_PROFILES/*; do
>> profile=$i/$(basename "$i")
>> if [ -f "$profile"/etc/profile ]; then
>> GUIX_PROFILE="$profile"
>> . "$GUIX_PROFILE"/etc/profile
>> fi
>> unset profile
>> done
>> -----------------------------------------------
>>
>> but when starting MATE Desktop all my profiles are not enabled.
>>
>> Could somebody help because probably the two entries in my .bash_profile
>> got a mistake.
>>
>
>
--
[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3191 bytes --]
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
next prev parent reply other threads:[~2023-04-17 8:35 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-16 13:09 to enable all profiles at login time Gottfried
2023-04-16 20:18 ` Wojtek Kosior via
2023-04-17 7:37 ` Gottfried [this message]
2023-04-17 11:56 ` Wojtek Kosior via
2023-04-17 12:45 ` Gottfried
2023-04-17 12:55 ` Wojtek Kosior via
2023-04-17 14:30 ` Martin Castillo
2023-04-17 14:55 ` Gottfried
2023-04-17 20:15 ` Wojtek Kosior via
2023-04-18 15:19 ` Gottfried
2023-04-17 18:32 ` Sergiu Ivanov
2023-04-20 10:11 ` Gottfried
2023-04-20 10:20 ` Sergiu Ivanov
2023-04-20 11:28 ` Gottfried
2023-04-20 13:51 ` Sergiu Ivanov
2023-04-17 17:25 ` Giovanni Biscuolo
-- strict thread matches above, loose matches on Subject: below --
2023-04-19 16:10 Gottfried
2023-04-19 18:19 ` Martin Castillo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8748c256-fe84-5980-f890-6be4ea631ad9@posteo.de \
--to=gottfried@posteo.de \
--cc=help-guix@gnu.org \
--cc=koszko@koszko.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.