Nix and nixos

Fri 07 August 2015

In tech.

Nix Pills

Lethalman wrote a serie of articles to introduce Nix. That's very interesting and didactic. It introduce the tools used in Nixpkgs to efficiently build packages. It's a great reference if you can find the right pill, but so far I have not seen a table of content, so here it is:

Opérations courantes

Mettre à jour

On met à jour le channel utilisé:

sudo nix-channel --update

Puis on upgrade

sudo nixos-rebuild switch --upgrade

Nettoyer

Voir http://nixos.org/nix/manual/#sec-garbage-collection

Python

Dans le fichier de configuration du system j'ajoute:

environment.systemPackages = with pkgs; [
 python3 python34Packages.requests
];

Après avec reconstruit le system je lance python3 et là:

florian@nixos:~$ python3
Python 3.4.2 (default, Jan 01 1970, 00:00:01) 
[GCC 4.8.3] on linux
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'requests'

Impossible de charger le module requests, qui est pourtant installé. La variable PYTHONPATH ne référence pas le chmein du module requests.

Pour pouvoir l'utiliser, on peut (il faut?) créer un environnement de développement indiquant quels paquets sont nécessaires.

On commence par indiquer ce que l'on veut dans l'environnement en créant un fichier default.nix contenant:

let
  pkgs = import <nixpkgs> {};
in
{ stdenv ? pkgs.stdenv, python3 ? pkgs.python3, python34Packages ? pkgs.python34Packages }:

stdenv.mkDerivation {
  name = "python-nix";
  version = "0.1.0.0";
  src = ./.;
  buildInputs = [ python3 python34Packages.requests ];
}

Ensuite on lance tout simplement nix-shell:

florian@nixos:~/repos/nix/env$ nix-shell

[nix-shell:~/repos/nix/env]$ python3
Python 3.4.2 (default, Jan 01 1970, 00:00:01) 
[GCC 4.8.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests

[nix-shell:~/repos/nix/env]$ echo $PYTHONPATH
/nix/store/2rzakmbjrwwfpcz5iaqgrfdmmfvj1bwk-python3-3.4.2/lib/python3.4/site-packages:/nix/store/ip5fwapw0gz0mj6l9q21yf4jayvfja3k-python3.4-requests-1.2.3/lib/python3.4/site-packages:/nix/store/r0hgivgbd5gzhhkiyal8r4nkqn35wxhd-python-recursive-pth-loader-1.0/lib/python3.4/site-packages

Et là c'est bon, on a notre python avec les bons modules

Construite un nouveau paquet