Créer et partager des paquets Nix

Voir aussi : vidéo peertube - vidéo youtube - dépôt git - journal linuxfr.org

Comment créer un paquet nix pour gérer une dépendance dans un projet. Comment gérer des paquets nix via un dépôt git.

Créer un paquet localement

On développe un projet et on a besoin d’une bibliothèque (par exemple, myhellolib).

{ stdenv, fetchurl, cmake }:

stdenv.mkDerivation rec {
  name = "myhellolib";
  version = "0.1";
  src = fetchurl {
    url = "https://gitlab.com/nokomprendo/${name}/-/archive/v${version}/${name}-v${version}.tar.gz";
    sha256 = "1zyvvf3px69wlzvxrgcgnrkkqwyphpqlqrwxk72cs2vdfd6sh9gn";
  };
  buildInputs = [ cmake ];
}
with import <nixpkgs> {};

let
  _myhellolib = import ./myhellolib.nix { inherit stdenv fetchurl cmake; };
in

stdenv.mkDerivation {
  name = "test_myhellolib1";
  src = ./.;
  buildInputs = [ _myhellolib ];
  buildPhase = "g++ -o test_myhellolib1 test_myhellolib.cpp -l myhellolib";
  installPhase = ''
      mkdir -p $out/bin
      cp test_myhellolib $out/bin/
  '';
}

Créer un paquet via un dépôt nixpkgs

On veut mettre nos paquets de dépendances dans un dépot fork de nixpkgs (par exemple, pour éviter de dupliquer les paquets dans plusieurs projets ou pour soumettre les paquets à la communauté nixpkgs).

cd /path/to/my/nixpkgs/
git checkout -b myhellolib
mkdir pkgs/development/libraries/myhellolib
myhellolib = callPackage ../pkgs/development/libraries/myhellolib { };
nix-build -A myhellolib
nix-env -f . -iA myhellolib
cd test_myhellolib2
nix-build -I nixpkgs=/path/to/my/nixpkgs/

Tester un paquet d’un Pull Request

On veut tester un paquet proposé par quelqu’un dans un Pull Request.

cd /path/to/my/nixpkgs/
git remote add upstream https://github.com/nixos/nixpkgs
git fetch upstream pull/<id>/head:<branch>
git checkout <branch>
cd helloeigen
nix-build -I nixpkgs=/path/to/my/nixpkgs/
./result/bin/helloeigen

Conclusion

nix permet facilement de : - créer des paquets localement - regrouper des paquets dans un dépôt - soumettre des paquets à la communauté - tester des paquets soumis

manuel nixpkgs