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 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. >> > > --