all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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 12:45:28 +0000	[thread overview]
Message-ID: <7c859b8a-6699-2c19-43be-517516908424@posteo.de> (raw)
In-Reply-To: <20230417135651.7cd4b2aa.koszko@koszko.org>


[-- Attachment #1.1.1: Type: text/plain, Size: 12328 bytes --]

Hi,

thanks for help.

> ou don't add it to `.bashrc`. Instead, you need to configure your
>> *terminal emulator*. It is the graphical application that you use to
>> access the command line. Since you mentioned you're using Mate desktop,
>> I suspect the terminal emulator you are using is "mate-terminal" and
>> I'll give you instructions for that. If you happen to be using
>> a different one (like xfce4-terminal, konsole, sakura, xterm, etc.),
>> the steps are going to be slightly different.
>> 
>> So, right-click somewhene in your mate-terminal window and choose
>> "Profiles->Profile Preferences" as in the attached screenshot. Then, in
>> the "Editing Profile" windows that shows, switch to the "Title and
>> Command" tab and tick the "Run command as a login shell" option (as
>> shown in the second attached screenshot). Finally, close the "Editing
>> Profile" window.

1.
I already had this option enabled in the MATE terminal

2.
> shopt -q login_shell; echo $?
>> 
>> If the bash instance you're interacting with is a login shell, it shall
>> print "0". Otherwise, it'll print "1".

gfp@Tuxedo ~$ shopt -q login_shell; echo $?
0

3.
How do you create this screenshot with the red arrow?
I know how to create a screenshot,
but I don’t know how to add something remarks with red colour.
Which package do you use for this?

4.
> your profiles get enabled when you "log in" in a terminal.
>> And here we're just causing the execution of mate-terminal application
>> to be treated as such login.

So how can I now enable all e.g. 10 profiles at once in the terminal?
which commands do I have to use?

I enabled always one profile by one:

guix shell -p ~/Projekte/Libreoffice/guix-profil
to open libreoffice

guix shell -p ~/Projekte/Musik/guix-profil
to open the music profil with several packages

and so on...

5.
is there also a possibility to enable all my profiles when I log in to 
my MATE desktop?
so that I can save time and don’t need to open one profile after another 
in the terminal?

(Except the case, if there is a possibility, question 4, to open all 
profiles at once by one command in the MATE terminal, so that I have all 
packages in all profiles enabled at once)


Kind regards

Gottfried



Am 17.04.23 um 13:56 schrieb Wojtek Kosior:
>> 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:
>>
>> [...]
> 
> Looks good :)
> 
>> Where do I have to add "-l" in /.bashrc?
> 
> You don't add it to `.bashrc`. Instead, you need to configure your
> *terminal emulator*. It is the graphical application that you use to
> access the command line. Since you mentioned you're using Mate desktop,
> I suspect the terminal emulator you are using is "mate-terminal" and
> I'll give you instructions for that. If you happen to be using
> a different one (like xfce4-terminal, konsole, sakura, xterm, etc.),
> the steps are going to be slightly different.
> 
> So, right-click somewhene in your mate-terminal window and choose
> "Profiles->Profile Preferences" as in the attached screenshot. Then, in
> the "Editing Profile" windows that shows, switch to the "Title and
> Command" tab and tick the "Run command as a login shell" option (as
> shown in the second attached screenshot). Finally, close the "Editing
> Profile" window.
> 
> Once you restart mate-terminal, it should run bash as a login shell.
> You can verify this by running the following command (well, 2 commands)
> 
>      shopt -q login_shell; echo $?
> 
> If the bash instance you're interacting with is a login shell, it shall
> print "0". Otherwise, it'll print "1".
> 
> 
> Now, it might be good to clarify some things. What we're doing here
> does *not* enable your profiles when you start the Mate desktop. It
> instead enables them when you start mate-terminal with bash in it. In
> other words, your profiles get enabled when you "log in" in a terminal.
> And here we're just causing the execution of mate-terminal application
> to be treated as such login.
> 
> But don't worry about these details — this is what you want. The lines
> you now have in your `.bash_profile` will also enable your Guix
> profiles when you log in through a TTY or through SSH. This is the
> correct behavior :)
> 
> 
> Best luck ;)
> 
> 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 Mon, 17 Apr 2023 07:37:40 +0000
> Gottfried <gottfried@posteo.de> wrote:
> 
>> 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 --]

  reply	other threads:[~2023-04-17 12:46 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
2023-04-17 11:56     ` Wojtek Kosior via
2023-04-17 12:45       ` Gottfried [this message]
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=7c859b8a-6699-2c19-43be-517516908424@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.