Suivant: Shells, Monter: Services du dossier personnel [Table des matières][Index]
There are a few essential home services defined in (gnu home
services)
, they are mostly for internal use and are required to build a
home environment, but some of them will be useful for the end user.
Le service de ce type sera instancié par chaque environnement personnel automatiquement par défaut, il n’y a pas besoin de le définir, mais vous voudrez peut-être l’étendre avec une liste de paires pour initialiser certaines variables d’environnement.
(list ("ENV_VAR1" . "valeur1")
("ENV_VAR2" . "valeur2"))
Le plus simple pour étendre un type de service, sans définir un nouveau type
de service est d’utiliser la fonction simple-service
de (gnu
services)
.
(simple-service 'un-service-de-variables-utiles
home-environment-variables-service-type
`(("LESSHISTFILE" . "$XDG_CACHE_HOME/.lesshst")
("SHELL" . ,(file-append zsh "/bin/zsh"))
("USELESS_VAR" . #f)
("_JAVA_AWT_WM_NONREPARENTING" . #t)
("LITERAL_VALUE" . ,(literal-string "${abc}"))))
Si vous incluez un tel service dans votre définition d’environnement personnel, il ajoutera le contenu suivant au script setup-environment (qui doit être sourcé par le shell de connexion) :
export LESSHISTFILE="$XDG_CACHE_HOME/.lesshst" export SHELL="/gnu/store/2hsg15n644f0glrcbkb1kqknmmqdar03-zsh-5.8/bin/zsh" export _JAVA_AWT_WM_NONREPARENTING export LITERAL_VALUE='${abc}'
Remarquez que literal-string
ci-dessus nous permet de déclarer qu’une
valeur doit être interprétée comme une chaine littérale, c’est-à-dire
que les « caractères spéciaux » comme le symbole dollar ne seront pas
interprétés par le shell.
Remarque : Assurez-vous que le module
(gnu packages shells)
est importé avecuse-modules
ou d’une autre façon ; cet espace de nom contient la définition du paquetzsh
, utilisé dans l’exemple précédent.
La liste d’association (voir Association Lists dans le manuel de référence de Guile) est une structure de données
contenant des paires de clé-valeurs. Pour
home-environment-variables-service-type
la clé est toujours une
chaine, la valeur peut être une chaine, une gexp s’évaluant en une chaine
(voir G-Expressions), un objet simili-fichier (voir file-like object) ou un booléen. Pour les gexps, la variable sera
initialisée à la valeur de la gexp ; pour les objets simili-fichiers, elle
sera initialisée au chemin du fichier dans le dépôt (voir Le dépôt) ;
pour #t
, la variable sera exportée sans valeur et pour #f
, la
variable sera omise.
Le service de ce type sera instancié par chaque environnement personnel automatiquement, il n’y a pas besoin de le définir, mais vous pouvez l’étendre avec une liste de paquets si vous voulez installer des paquets supplémentaires dans votre profil. D’autres services, qui ont besoin de rendre certains programmes disponible à l’utilisateur ou l’utilisatrice étendront aussi ce type de service.
La valeur d’extension est simplement une liste de paquets :
(list htop vim emacs)
Vous pouvez utiliser la même approche avec simple-service
(voir simple-service) que pour
home-environment-variables-service-type
. Assurez-vous que les
modules contenant les paquets spécifiés sont importés avec
use-modules
. Pour trouver un paquet ou des informations à propos de
son module utilisez guix search
voir Invoquer guix package
). Autrement, vous pouvez utiliser specification->package
pour récupérer l’enregistrement de paquet à partir d’une chaine sans
importer le module correspondant.
Il y a quelques autres services essentiels, mais vous n’avez pas besoin de les étendre.
La racine du graphe des services personnels, elle génère un dossier qui sera plus tard lié à partir de ~/.guix-home, il contient les configurations, le profil avec les binaires et les bibliothèques et certains scripts nécessaires pour tout faire fonctionner ensemble.
Le service de ce type génère un script Guile qui devrait être lancé par le
shell de connexion. Il n’est exécuté que si le fichier spécial dans
XDG_RUNTIME_DIR
n’a pas été créé, ce qui évite les exécutions
supplémentaires de ce script si plusieurs shells de connexion sont ouverts.
Il peut être étendu avec une gexp. Cependant, pour démarrer une application
automatiquement, vous ne devriez pas utiliser ce service, dans la
plupart des cas il vaut mieux étendre home-shepherd-service-type
avec
un service Shepherd (voir Services Shepherd), ou en étendant le fichier
de démarrage de shell avec la commande requise en utilisant le type de
service approprié.
The service of this type allows to specify a list of files, which will go to ~/.guix-home/files, usually this directory contains configuration files (to be more precise it contains symlinks to files in /gnu/store), which should be placed in $XDG_CONFIG_HOME or in rare cases in $HOME. It accepts extension values in the following format:
`((".sway/config" ,sway-file-like-object) (".tmux.conf" ,(local-file "./tmux.conf")))
Chaque liste imbriquée contient deux valeurs : un sous-répertoire et un
objet simili-fichier. Après la construction d’un environnement personnel
~/.guix-home/files contiendra le contenu approprié et tous les
répertoires imbriqués seront créés en fonction. Cependant, ces fichiers
n’iront nul part ailleurs à moins qu’un autre service s’en occupe. Par
défaut un service home-symlink-manager-service-type
, qui crée les
liens symboliques nécessaires vers les fichiers de ~/.guix-home/files
et sauvegarde les fichiers existants en conflit et d’autres choses, fait
partie des services personnels essentiels (activés par défaut), mais il est
possible d’utiliser des services alternatifs pour implémenter des cas
d’usage plus avancés comme un dossier personnel en
lecture-seule. Expérimentez et partagez vos trouvailles.
It is often the case that Guix Home users already have a setup for versioning their user configuration files (also known as dot files) in a single directory, and some way of automatically deploy changes to their user home.
The home-dotfiles-service-type
from (gnu home services
dotfiles)
is designed to ease the way into using Guix Home for this kind of
users, allowing them to point the service to their dotfiles directory
without migrating them to Guix native configurations.
Please keep in mind that it is advisable to keep your dotfiles directories under version control, for example in the same repository where you’d track your Guix Home configuration.
There are two supported dotfiles directory layouts, for now. The
'plain
layout, which is structured as follows:
~$ tree -a ./dotfiles/ dotfiles/ ├── .gitconfig ├── .gnupg │ ├── gpg-agent.conf │ └── gpg.conf ├── .guile ├── .config │ ├── guix │ │ └── channels.scm │ └── nixpkgs │ └── config.nix ├── .nix-channels ├── .tmux.conf └── .vimrc
This tree structure is installed as is to the home directory upon
guix home reconfigure
.
The 'stow
layout, which must follow the layout suggested by
GNU Stow presents an additional
application specific directory layer, just like:
~$ tree -a ./dotfiles/ dotfiles/ ├── git │ └── .gitconfig ├── gpg │ └── .gnupg │ ├── gpg-agent.conf │ └── gpg.conf ├── guile │ └── .guile ├── guix │ └── .config │ └── guix │ └── channels.scm ├── nix │ ├── .config │ │ └── nixpkgs │ │ └── config.nix │ └── .nix-channels ├── tmux │ └── .tmux.conf └── vim └── .vimrc 13 directories, 10 files
For an informal specification please refer to the Stow manual
(voir Introduction dans The GNU Stow Manual). This tree structure is
installed following GNU Stow’s logic to the home directory upon
guix home reconfigure
.
A suitable configuration with a 'plain
layout could be:
(home-environment
;; …
(services
(service home-dotfiles-service-type
(home-dotfiles-configuration
(directories '("./dotfiles"))))))
The expected home directory state would then be:
. ├── .config │ ├── guix │ │ └── channels.scm │ └── nixpkgs │ └── config.nix ├── .gitconfig ├── .gnupg │ ├── gpg-agent.conf │ └── gpg.conf ├── .guile ├── .nix-channels ├── .tmux.conf └── .vimrc
Return a service which is very similar to home-files-service-type
(and actually extends it), but designed to ease the way into using Guix Home
for users that already track their dotfiles under some kind of version
control. This service allows users to point Guix Home to their dotfiles
directory and have their files automatically provisioned to their home
directory, without migrating all of their dotfiles to Guix native
configurations.
Available home-dotfiles-configuration
fields are:
source-directory
(default: (current-source-directory)
) (type: string)The path where dotfile directories are resolved. By default dotfile
directories are resolved relative the source location where
home-dotfiles-configuration
appears.
layout
(default: 'plain
) (type: symbol)The intended layout of the specified directory
. It can be either
'stow
or 'plain
.
directories
(default: '()
) (type: list-of-strings)The list of dotfiles directories where home-dotfiles-service-type
will look for application dotfiles.
packages
(type: maybe-list-of-strings)The names of a subset of the GNU Stow package layer directories. When
provided the home-dotfiles-service-type
will only provision dotfiles
from this subset of applications. This field will be ignored if
layout
is set to 'plain
.
excluded
(default: '(".*~" ".*\\.swp" "\\.git" "\\.gitignore")
) (type: list-of-strings)The list of file patterns home-dotfiles-service-type
will exclude
while visiting each one of the directories
.
The service is very similar to home-files-service-type
(and actually
extends it), but used for defining files, which will go to
~/.guix-home/files/.config, which will be symlinked to
$XDG_CONFIG_HOME by home-symlink-manager-service-type
(for
example) during activation. It accepts extension values in the following
format:
`(("sway/config" ,sway-file-like-object) ;; -> ~/.guix-home/files/.config/sway/config ;; -> $XDG_CONFIG_HOME/sway/config (by symlink-manager) ("tmux/tmux.conf" ,(local-file "./tmux.conf")))
Le service de ce type génère un script guile qui est lancé à chaque
invocation de guix home reconfigure
ou n’importe quelle autre
action qui active l’environnement personnel.
Le service de ce type génère un script guile qui sera exécuté à l’activation de l’environnement personnel, et effectuera les actions suivantes :
home-files-service-type
,
home-xdg-configuration-files-service-type
and maybe some others),
takes the files from files/.config/ subdirectory and put respective
links in XDG_CONFIG_HOME
. For example symlink for
files/.config/sway/config will end up in
$XDG_CONFIG_HOME/sway/config. The rest files in files/
outside of files/.config/ subdirectory will be treated slightly
different: symlink will just go to $HOME.
files/.some-program/config will end up in
$HOME/.some-program/config.
symlink-manager fait partie des services personnels essentiels et est activé et utilisé par défaut.
Suivant: Shells, Monter: Services du dossier personnel [Table des matières][Index]