Next: Scheduled User’s Job Execution, Previous: Essential Home Services, Up: Home Services [Contents][Index]
Shells play a quite important role in the environment initialization process, you can configure them manually as described in section Configuring the Shell, but the recommended way is to use home services listed below. It’s both easier and more reliable.
Each home environment instantiates
home-shell-profile-service-type
, which creates a
~/.profile startup file for all POSIX-compatible shells. This
file contains all the necessary steps to properly initialize the
environment, but many modern shells like Bash or Zsh prefer their own
startup files, that’s why the respective home services
(home-bash-service-type
and home-zsh-service-type
) ensure
that ~/.profile is sourced by ~/.bash_profile and
~/.zprofile, respectively.
Available home-shell-profile-configuration
fields are:
profile
(default: ()
) (type: text-config)home-shell-profile
is instantiated automatically by
home-environment
, DO NOT create this service manually, it can
only be extended. profile
is a list of file-like objects, which
will go to ~/.profile. By default ~/.profile contains the
initialization code which must be evaluated by the login shell to make
home-environment’s profile available to the user, but other commands can
be added to the file if it is really necessary. In most cases shell’s
configuration files are preferred places for user’s customizations.
Extend home-shell-profile service only if you really know what you do.
Available home-bash-configuration
fields are:
package
(default: bash
) (type: package)The Bash package to use.
guix-defaults?
(default: #t
) (type: boolean)Add sane defaults like reading /etc/bashrc and coloring the output of
ls
to the top of the .bashrc file.
environment-variables
(default: ()
) (type: alist)Association list of environment variables to set for the Bash session. The
rules for the home-environment-variables-service-type
apply
here (see Essential Home Services). The contents of this field will be
added after the contents of the bash-profile
field.
aliases
(default: ()
) (type: alist)Association list of aliases to set for the Bash session. The aliases
will be defined after the contents of the bashrc
field has been
put in the .bashrc file. The alias will automatically be quoted,
so something like this:
'(("ls" . "ls -alF"))
turns into
alias ls="ls -alF"
bash-profile
(default: ()
) (type: text-config)List of file-like objects, which will be added to .bash_profile. Used for executing user’s commands at start of login shell (In most cases the shell started on tty just after login). .bash_login won’t be ever read, because .bash_profile always present.
bashrc
(default: ()
) (type: text-config)List of file-like objects, which will be added to .bashrc. Used
for executing user’s commands at start of interactive shell (The shell
for interactive usage started by typing bash
or by terminal app
or any other program).
bash-logout
(default: ()
) (type: text-config)List of file-like objects, which will be added to .bash_logout. Used for executing user’s commands at the exit of login shell. It won’t be read in some cases (if the shell terminates by exec’ing another process for example).
You can extend the Bash service by using the home-bash-extension
configuration record, whose fields must mirror that of
home-bash-configuration
(see home-bash-configuration). The
contents of the extensions will be added to the end of the corresponding
Bash configuration files (see Bash Startup Files in The GNU
Bash Reference Manual.
For example, here is how you would define a service that extends the
Bash service such that ~/.bash_profile defines an additional
environment variable, PS1
:
(define bash-fancy-prompt-service
(simple-service 'bash-fancy-prompt
home-bash-service-type
(home-bash-extension
(environment-variables
'(("PS1" . "\\u \\wλ "))))))
You would then add bash-fancy-prompt-service
to the list in the
services
field of your home-environment
. The reference of
home-bash-extension
follows.
Available home-bash-extension
fields are:
environment-variables
(default: ()
) (type: alist)Additional environment variables to set. These will be combined with the environment variables from other extensions and the base service to form one coherent block of environment variables.
aliases
(default: ()
) (type: alist)Additional aliases to set. These will be combined with the aliases from other extensions and the base service.
bash-profile
(default: ()
) (type: text-config)Additional text blocks to add to .bash_profile, which will be combined with text blocks from other extensions and the base service.
bashrc
(default: ()
) (type: text-config)Additional text blocks to add to .bashrc, which will be combined with text blocks from other extensions and the base service.
bash-logout
(default: ()
) (type: text-config)Additional text blocks to add to .bash_logout, which will be combined with text blocks from other extensions and the base service.
Available home-zsh-configuration
fields are:
package
(default: zsh
) (type: package)The Zsh package to use.
xdg-flavor?
(default: #t
) (type: boolean)Place all the configs to $XDG_CONFIG_HOME/zsh. Makes
~/.zshenv to set ZDOTDIR
to $XDG_CONFIG_HOME/zsh.
Shell startup process will continue with
$XDG_CONFIG_HOME/zsh/.zshenv.
environment-variables
(default: ()
) (type: alist)Association list of environment variables to set for the Zsh session.
zshenv
(default: ()
) (type: text-config)List of file-like objects, which will be added to .zshenv. Used
for setting user’s shell environment variables. Must not contain
commands assuming the presence of tty or producing output. Will be read
always. Will be read before any other file in ZDOTDIR
.
zprofile
(default: ()
) (type: text-config)List of file-like objects, which will be added to .zprofile. Used for executing user’s commands at start of login shell (In most cases the shell started on tty just after login). Will be read before .zlogin.
zshrc
(default: ()
) (type: text-config)List of file-like objects, which will be added to .zshrc. Used
for executing user’s commands at start of interactive shell (The shell
for interactive usage started by typing zsh
or by terminal app or
any other program).
zlogin
(default: ()
) (type: text-config)List of file-like objects, which will be added to .zlogin. Used for executing user’s commands at the end of starting process of login shell.
zlogout
(default: ()
) (type: text-config)List of file-like objects, which will be added to .zlogout. Used for executing user’s commands at the exit of login shell. It won’t be read in some cases (if the shell terminates by exec’ing another process for example).
Next: Scheduled User’s Job Execution, Previous: Essential Home Services, Up: Home Services [Contents][Index]