Sommaire
- Présentation de home-manager
- Installation
- Premier exemple de configuration utilisateur
- Séparer les fichiers de configuration
- Configurer des logiciels utilisateurs
- Configurer l'environnement de bureau
- Gérer des "dot files"
- Utiliser les overlays et cachix
- Conclusion
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.
code source - vidéo youtube - vidéo peertube
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 :
xsession.enable = true;
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
:
services.dbus.packages = [ pkgs.gnome3.dconf ];
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) :
home.file.".i3status.conf".source = ./i3status.conf;
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.
# Nix ta distrib' !
Posté par zurvan . Évalué à 4. Dernière modification le 12 novembre 2019 à 09:28.
C'est vraiment intéressant ces derniers journaux présentant les outils liés à Nix. Utilisant plusieurs PC, ça pourrait me permettre de déployer plusieurs logiciels et environnements que j'utilise, du coup je vais regarder avec intérêt comment utiliser tout ça (je vais commencer par le gestionnaire de paquets).
À l'époque j'avais apprécié d'utiliser les recettes de AUR dans archlinux, ça me semble un peu similaire. J'avais aussi essayé pkgsrc, l'outil de NetBSD, mais à cette lointaine époque ça fonctionnait moyen avec Linux…
« Le pouvoir des Tripodes dépendait de la résignation des hommes à l'esclavage. » -- John Christopher
# Fais une dépêche
Posté par ZeroHeure . Évalué à 5.
très peu retravaillés, tes 3 derniers journaux feraient une belle dépêche
"La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay
[^] # Re: Fais une dépêche
Posté par nokomprendo (site web personnel) . Évalué à 3.
Ok, pourquoi pas. J'essaie de soumettre quelque chose dans la semaine; s'il y a des relecteurs ou des contributeurs motivés, vous êtes les bienvenus.
# DLL-Hell-o-world
Posté par T_T_T . Évalué à 1.
Je travaille dans une entreprise où tout est sclérosé, où les environnements sont vieux, etc.
J’avais regardé avec interêt nix pour me construire un système moderne sans avoir à me palucher toutes les recherches des dépendances à la main, ni tous les
./configure --prefix=… && make && make install
.Malgré mes efforts (c’était au moment de nix 2.0.x), je n’avais pas réussi à faire marcher les installations ailleurs que dans
/nix
.Comme je n’étais pas root et que bien sûr un tel répertoire était impossible à obtenir, j’avais dû abandonner.
Sais-tu si ça marche de ce côté-là ?
Deuxième question, tu présentes pas mal de personnalisations des paquets nix, ce qui m’intéresse beaucoup.
Je travaille dans la simulation numérique et j’ai jeté un œil à spack qui permet d’installer des paquets en personnalisant les dépendances par de simples arguments depuis la ligne de commande. Détail très utile dans mon cas, le compilateur utilisé pour la construction fait lui-même partie des dépendances (configurables) et peut coexister avec le même paquet compilé avec un autre compilateur !
Quand on travaille avec 3 versions de 4 compilateurs différents, c’est vraiment pratique.
Que penses-tu de l’utilisation de nix (et de toutes les variations que tu présentes en ce moment : je te remercie) dans ce contexte ?
[^] # Re: DLL-Hell-o-world
Posté par Firwen (site web personnel) . Évalué à 3.
C'est trés fortement déconseillé de ne pas utiliser /nix. Si tu n'as pas les droits roots, tu peux par contre simuler un "/nix" en utilisant un mount bind et les linux namespaces.
Spack est trés bon mais il ne supporte pas le deploiement de binaires de manière fiable… car justement il n'a pas de prefix absolu comme "/nix". Donc tu dois souvent tout recompiler dés que tu changes de machine.
Tu peux avoir 50 compilateurs en parallèle avec Nix, ce n'est pas un problème. Configurer un nouveau compilateur n'est pas la chose la plus accessible à faire par contre.
[^] # Re: DLL-Hell-o-world
Posté par barmic 🦦 . Évalué à 2.
sans les droits root c'est possible ?
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: DLL-Hell-o-world
Posté par Firwen (site web personnel) . Évalué à 2.
Oui mais ça dépend de la config Kernel de ton installation.
[^] # Re: DLL-Hell-o-world
Posté par claudex . Évalué à 10.
Donc, si tu n'as pas les droits, il suffit de modifier la config du kernel.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: DLL-Hell-o-world
Posté par T_T_T . Évalué à 2.
Ca ne me dérange pas trop, tant que tout le processus est fluide et les dépendances sont propres, ce n'est "que" du temps machine.
Donc un même paquet (disons une bibliothèque), avec les mêmes options et tout et tout, mais compilé avec un compilateur GNU et un autre Intel (par ex) vont pouvoir vivre leur vie proprement dans l'écosystème nix sans conlits vicieux ? Bonne nouvelle, je vais essayer!
[^] # Re: DLL-Hell-o-world
Posté par Firwen (site web personnel) . Évalué à 3.
Nix installe chaque package dans son propre prefix isolé de tout le reste du système. Chauqe paquet est compilé dans une sandbox où il n'y a que ses dépendances de visible. Donc avoir plusieurs version de compilateur, où même du même paquet n'est pas un problème.
[^] # Re: DLL-Hell-o-world
Posté par nokomprendo (site web personnel) . Évalué à 3.
Nix est fait pour créer des environnements isolés, reproductibles et personnalisables. Perso, j'utilise ces fonctionnalités au quotidien (comme résumé ici : https://nokomprendo.gitlab.io/posts/tuto_fonctionnel_20/2018-04-28-README.html) et ça fonctionne plutôt bien. De temps en temps, j'utilise des infra de HPC, qui malheureusement ne sont pas sous Nix, et généralement je finis par pleurer des larmes de sang.
Mais Nix et GNU Guix sont clairement intéressants pour ce genre d'application et il y a des initiatives à ce sujet :
https://archive.fosdem.org/2018/schedule/event/installing_software_for_scientists/
https://hpc.guix.info/
http://ciment.ujf-grenoble.fr/wiki/index.php/NIX_usage
[^] # Re: DLL-Hell-o-world
Posté par Yann Hodique (site web personnel) . Évalué à 2.
J'avais écrit un article sur le sujet il y a un moment (https://yann.hodique.info/blog/nix-in-custom-location/). Utiliser un overlay pour ça est relativement élégant (note que je n'ai plus le problème actuellement, il est possible que les instructions nécessitent une mise à jour).
Cachix n'existait pas à l'époque, j'aurais probablement utilisé ça comme moyen de distribuer ma propre version de Nix utilisant ${HOME}/nix
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.