Nix + WSL2: gestión declarativa de entornos


Nix es un sistema de gestión de paquetes y configuración que permite definir entornos de desarrollo de forma declarativa y reproducible. Al combinar Nix con WSL2, se obtiene lo mejor de ambos mundos: control total sobre las dependencias y entornos aislados, con la eficiencia de Linux corriendo dentro de Windows.

Por qué usar Nix en WSL2

  • Configuración de entornos por proyecto
  • Reproducibilidad exacta entre máquinas y desarrolladores
  • Aislamiento sin necesidad de contenedores
  • Compatibilidad total con herramientas Linux

Esto es especialmente útil en equipos, en proyectos de investigación, o en flujos DevOps que exigen entornos estables.

Instalar Nix en WSL2

Desde una terminal en Ubuntu o Debian:

sh <(curl -L https://nixos.org/nix/install)

Al finalizar, activar el entorno:

. ~/.nix-profile/etc/profile.d/nix.sh

Verificar:

nix-env --version

Crear entorno declarativo con shell.nix

Ejemplo: entorno Python con NumPy y Pandas.

# shell.nix
{ pkgs ? import <nixpkgs> {} }:

pkgs.mkShell {
  buildInputs = [ pkgs.python310 pkgs.python310Packages.numpy pkgs.python310Packages.pandas ];
}

Activar el entorno:

nix-shell

Una vez dentro, las herramientas estarán disponibles sin afectar el sistema.

Caso práctico: entorno para ciencia de datos

# shell.nix
{ pkgs ? import <nixpkgs> {} }:

pkgs.mkShell {
  name = "data-env";
  buildInputs = [
    pkgs.python310
    pkgs.python310Packages.numpy
    pkgs.python310Packages.scipy
    pkgs.python310Packages.matplotlib
    pkgs.python310Packages.jupyter
  ];
}

Iniciar:

nix-shell
jupyter notebook

Esto lanza un entorno Jupyter funcional desde WSL2.

Buenas prácticas

  • Incluir shell.nix en control de versiones
  • Usar direnv para cargar entornos automáticamente
  • Combinar con lorri o nix-direnv para flujos más eficientes
  • Actualizar paquetes vía nix-channel --update

Conclusión

Nix permite declarar entornos portables y estables para desarrollo, ciencia de datos o DevOps. Junto a WSL2, ofrece una solución poderosa para definir, compartir y automatizar configuraciones sin depender de contenedores o configuraciones globales, todo desde un entorno Linux dentro de Windows.


Ver también

comments powered by Disqus