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é.
Le service de ce type permet de spécifier une liste de fichiers, qui iront dans ~/.guix-home/files. Ce répertoire contient généralement des fichiers de configuration (pour être plus précis, il contient des liens symboliques vers des fichiers de /gnu/store) qui devraient être placés dans $XDG_CONFIG_DIR ou dans de rares cas dans $HOME. Il accepte des valeurs d’extension de cette forme :
`((".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). 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 similiar 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
.
Le service est très semblable au service home-files-service-type
(et
l’étend en fait), mais il est utilisé pour définir des fichiers qui iront
dans ~/.guix-home/files/.config, et qui seront liés symboliquement
dans $XDG_CONFIG_DIR par home-symlink-manager-service-type
(par exemple) à l’activation. Il accepte des valeurs d’extension dans ce
format :
`(("sway/config" ,sway-file-like-object) ;; -> ~/.guix-home/files/.config/sway/config ;; -> $XDG_CONFIG_DIR/sway/config (par 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
et éventuellement
d’autres), prend les fichiers du sous-répertoire files/.config/ et
place des liens symboliques correspondant dans XDG_CONFIG_DIR
. Par
exemple le lien symbolique pour files/.config/sway/config se
retrouvera dans $XDG_CONFIG_DIR/sway/config. Le reste des fichiers de
files/ en dehors du sous-répertoire files/.config/ seront
traités un peu différemment : un lien symbolique sera créé dans
$HOME. files/.un-programme/config se retrouvera dans
$HOME/.un-programme/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]