Gérer son environnement utilisateur NixOS, avec Home-manager
Voir aussi : code source - journal linuxfr - vidéo youtube - vidéo peertube
Home-manager est un outil qui permet de gérer son environnement utilisateur : environnement de bureau, thème de fenêtre, thème d’icones, logiciels, paramètres des logiciels, services utilisateur, “dot files”…
Home-manager est prévu pour fonctionner sur la distribution linux NixOS et utilise le gestionnaire de paquets Nix.
Présentation de home-manager
Pour faire simple, le but de home-manager est de fournir l’équivalent du
fichier /etc/nixos/configuration.nix
mais pour l’environnement utilisateur
(au lieu de l’environnement système). Plus précisemment, l’utilisateur décrit
sa configuration via un fichier ~/.config/nixpkgs/home.nix
et lance une
commande home-manager
pour construire et installer la configuration
correspondante.
Home-manager est capable de gérer finement l’environnement logiciel. Il permet
non seulement d’indiquer l’environnement de bureau, les logiciels et les
services à installer mais également de paramètrer tous ces éléments. Par
exemple, home-manager peut configurer le user.name
de git
, les extensions
de firefox
, la police de caractères de vscode
…
Attention, home-manager n’est pas un outil officiel de Nix. Il est encore en développement, et donc incomplet. Enfin, il est prévu pour NixOS; son fonctionnement sur une autre distribution n’est pas garanti.
Voir le site officiel de home-manager et le wiki NixOS.
Installation
Home-manager est fourni dans les dépôts de paquets de Nix. Il est donc très simple à installer :
$ nix-env -iA nixos.home-manager
Premier exemple de configuration utilisateur
Le point d’entrée d’une configuration home-manager est le fichier
~/.config/nixpkgs/home.nix
. Par exemple, le fichier suivant installe les
logiciels geany
, meld
et vlc
, et configure le clavier en français bépo.
{ pkgs, ... }: {
home.packages = with pkgs; [
geany
meld
vlc];
home.keyboard = {
layout = "fr";
variant = "bepo";
};
}
Home-manager est documenté dans les pages man. Pour connaitre les options de configuration disponibles, il suffit de lancer :
$ man home-configuration.nix
Enfin, pour installer ou mettre à jour la configuration, on lance la commande :
$ home-manager switch
Séparer les fichiers de configuration
Pour éviter d’avoir un gros fichier home.nix
difficile à lire, on peut le
découper en plusieurs fichiers. Par exemple, on peut mettre les logiciels à
installer dans un fichier ~/.config/nixpkgs/packages.nix
:
{ pkgs, ... }: {
home.packages = with pkgs; [
geany
meld
vlc];
}
et importer ce fichier dans le ~/.config/nixpkgs/home.nix
:
{ pkgs, ... }: {
imports = [
./packages.nix
];
home.keyboard = {
layout = "fr";
variant = "bepo";
};
}
Configurer des logiciels utilisateurs
Home-manager permet de régler les paramètres de certains programmes. Par
exemple, on peut ajouter le code suivant dans le home.nix
pour installer
firefox
et bash
(avec des alias shell) :
{
programs =
firefox.enable = true;
bash = {
enable = true;
shellAliases = {
ll = "ls -lh";
la = "ls -a";
};
};
};
Autre exemple, on peut configurer git
dans un fichier git.nix
, que l’on
importera dans home.nix
:
{ pkgs, ... }: {
programs.git = {
enable = true;
userName = "nokomprendo";
userEmail = "nokomprendo@example.com";
ignores = [
"*~"
"*.swp"
];
}
Après mise-à-jour, le client git
est configuré :
$ home-manager switch
...
$ git config --get user.name
nokomprendo
Configurer l’environnement de bureau
Home-manager peut configurer le thème de fenêtre et le thème d’icones. Par exemple, pour un thème “dark” :
{
gtk = enable = true;
iconTheme = {
name = "Adwaita";
package = pkgs.gnome3.adwaita-icon-theme;
};
theme = {
name = "Shades-of-gray";
package = pkgs.shades-of-gray-theme;
};
};
{
qt = enable = true;
platformTheme = "gtk";
};
Home-manager peut également configurer finement certains environnements de bureau. Par exemple, avec i3 :
true;
xsession.enable =
{
xsession.windowManager.i3 = enable = true;
config = let mod = "Mod4"; in {
fonts = [ "DejaVu Sans 12" ];
modifier = mod;
keybindings = pkgs.lib.mkOptionDefault {
"${mod}+m" = "exec ${pkgs.i3lock}/bin/i3lock -n -c 000000";
};
};
};
Penser, dans ce cas, à activer le paquet dconf
du service dbus
, dans
/etc/nixos/configuration.nix
:
[ pkgs.gnome3.dconf ]; services.dbus.packages =
Gérer des “dot files”
Home-manager suit le fonctionnement habituel de Nix. Par exemple, quand on
configure bash
dans le home.nix
(cf précédemment), Nix crée un fichier de
configuration .bashrc
dans le /nix/store
et ajoute un lien symbolique dans
le dossier utilisateur :
$ ll ~/.bashrc
lrwxrwxrwx 1 toto users 70 11 nov. 15:48 /home/toto/.bashrc
-> /nix/store/z2arwbwyhvvwhy2caazlxasw5jnscyg3-home-manager-files/.bashrc
Cependant, home-manager peut également gérer des “dot files” classiques. Par
exemple, on peut centraliser des “dot files” dans le dossier
~/.config/nixpkgs/
et demander à home-manager de les gérer, via le home.nix
(il va alors les copier dans le /nix/store
et créer les liens symboliques) :
".i3status.conf".source = ./i3status.conf; home.file.
Utiliser les overlays et cachix
Comme home-manager est basé sur Nix, on peut utiliser les outils Nix classiques, comme les overlays ou cachix.
Par exemple, on peut empaqueter le plugin Vim minibufexpl
en ajoutant un
fichier dans le dossier ~/.config/nixpkgs/overlays/
:
self: super: {
vimPlugins = super.vimPlugins // {
minibufexpl = super.vimUtils.buildVimPluginFrom2Nix {
name = "minibufexpl.vim-2013-06-16";
src = self.fetchgit {
url = "https://github.com/fholgado/minibufexpl.vim";
rev = "ad72976ca3df4585d49aa296799f14f3b34cf953";
sha256 = "1bfq8mnjyw43dzav8v1wcm4rrr2ms38vq8pa290ig06247w7s7ng";
};
dependencies = [];
};
};
}
On peut ensuite utiliser ce plugin dans notre configuration Vim. Si on a déjà empaqueté ce plugin sur une autre machine et envoyé le paquet binaire sur un dépôt cachix, on peut utiliser ce cache et éviter de reconstruire le paquet :
$ cachix use nokomprendo
Configured https://nokomprendo.cachix.org binary cache in /home/toto/.config/nix/nix.conf
$ home-manager switch
...
copying path '/nix/store/2pkqy6nv5vmqq6cw7zhyd44qw7vigg4l-vimplugin-minibufexpl.vim-2013-06-16'
from 'https://nokomprendo.cachix.org'...
...
Conclusion
Home-manager est un outil basé sur Nix et qui permet de configurer son environnement utilisateur. Le projet est encore en développement mais il est déjà très exploitable, s’intègre bien avec l’écosystème Nix et apporte des fonctionnalités intéressantes : spécifier et paramétrer l’environnement de bureau, les thèmes et les logiciels, gérer des “dot files” classiques, utiliser des overlays, utiliser cachix, etc.