Aprendiendo NixOS

Tips

Aprendiendo NixOS: Creando una derivación

Este es un ejemplo de como añadir una derivación propia de un paquete Python no presente en NixOS

Codigo de la derivación

Esta seria la derivación para el paquete Python regionmask, que hemos guardado en un archivo regionmask.nix

{ lib, buildPythonPackage, fetchFromGitHub
, numpy, matplotlib, shapely, six, rasterio, cartopy
, geopandas, affine, xarray
}:

 buildPythonPackage rec {
  pname = "regionmask";
  version = "0.5.0";

  src = fetchFromGitHub {
    owner = "mathause";
    repo = "regionmask";
    url =  "https://github.com/mathause/regionmask/archive/v0.5.0.zip";
    rev =  "v${version}";
    sha256 =  "14gxlb2w94pqrlvvxgczmknrncc5w2h8bdyli9lxd9ni93ag2ra3";
    #fetchSubmodules = false;
  };

  doCheck = false;
  propagatedBuildInputs = [ numpy affine matplotlib shapely six rasterio cartopy geopandas xarray ];

  meta = with lib; {
    description = "Python package to create regionmasks";
    license = licenses.bsd3;
    homepage = "https://regionmask.readthedocs.io/en/latest/";
    # maintainers = with maintainers; [ rchg ];
  };
}

Añadir a configuration.nix

En mi caso tengo un archivo con los paquetes python llamado *python.nix, que ahora será: pkgs: with pkgs;

let     
  regionmask      = pkgs.callPackage ./regionmask.nix {
    buildPythonPackage = python3Packages.buildPythonPackage;
    numpy      = python37Packages.numpy;
    matplotlib = python37Packages.matplotlib;
    shapely    = python37Packages.shapely;
    six        = python37Packages.six;
    rasterio   = python37Packages.rasterio;
    cartopy    = python37Packages.cartopy;
    geopandas  = python37Packages.geopandas;
    affine     = python37Packages.affine;
    xarray     = python37Packages.xarray;
                    };

in
[ 
    ...
    pyyaml
    regionmask
    reportlab
    ...
]

Mientras que configuration.nix tiene:

{ config, pkgs, lib, ... }:


let 
    mypython       = import ./python.nix pkgs;

in

{
environment.systemPackages =  ... ++ mypthon + ...

}