Suivant: , Monter: Services du dossier personnel   [Table des matières][Index]


13.3.1 Services personnels essentiels

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.

Variable :home-environment-variables-service-type

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é avec use-modules ou d’une autre façon ; cet espace de nom contient la définition du paquet zsh, 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.

Variable :home-profile-service-type

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.

Variable :home-service-type

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.

Variable :home-run-on-first-login-service-type

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

Variable :home-files-service-type

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
Variable :home-dotfiles-service-type

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.

Data Type :home-dotfiles-configuration

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.

Variable :home-xdg-configuration-files-service-type

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")))
Variable :home-activation-service-type

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 :

  1. Lire le contenu du répertoire files/ des environnements personnels actuels et en attente.
  2. Nettoyer tous les liens symboliques créés par symlink-manager à l’activation précédente. En plus, les sous-répertoires qui deviennent vides seront aussi nettoyés.
  3. Créer de nouveaux liens symboliques de cette façon : il cherche dans le répertoire files/ (normalement défini avec 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.
  4. Si certains sous-répertoires sont absents, ils seront créés.
  5. Si des fichiers sont en conflit, ils seront sauvegardés.

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]