Nix sin dolor: que va donde y por que


20 de febrero de 2026

La confusion es normal

Llegas a Nix y te encuentras con: nixpkgs, NixOS, flakes, home-manager, configuration.nix, flake.nix, nix run, nix shell, nix develop, overlays, derivations, comma... Y nadie te explica como encajan las piezas.

Este post es el que me hubiera gustado leer cuando empece. Sin jerga innecesaria, con ejemplos reales.

Las capas de Nix (de abajo a arriba)

Piensa en Nix como una torre de capas. Cada capa resuelve un problema distinto. No necesitas usar todas.

Capa 1: Nix (el gestor de paquetes)

Esto es la base. Nix es un gestor de paquetes como apt o pacman, pero con un superpoder: no rompe nada. Cada paquete se instala en su propia ruta unica (/nix/store/abc123-htop-3.2/) y nunca pisa a otro paquete.

Se instala en cualquier Linux o macOS. No necesitas NixOS.

# Instalar Nix en Ubuntu/Fedora/macOS
curl -L https://nixos.org/nix/install | sh

Con Nix instalado ya puedes usar:

Esto es suficiente para empezar. No necesitas nada mas.

Capa 2: nixpkgs (el repositorio)

nixpkgs es un repositorio de GitHub con mas de 100.000 paquetes definidos en Nix. Cuando escribes nixpkgs#htop, estas diciendo "del repo nixpkgs, dame htop".

Tiene varias ramas:

No tienes que preocuparte de esto al principio. Solo saber que existe.

Capa 3: NixOS (el sistema operativo)

Opcional. NixOS es un Linux donde TODO el sistema se define en un archivo de configuracion. No hay apt install. No hay editar archivos sueltos en /etc/. Todo esta en un solo sitio.

El archivo magico: /etc/nixos/configuration.nix

# Quieres instalar firefox, git y htop?
environment.systemPackages = with pkgs; [
  firefox
  git
  htop
];

# Quieres habilitar SSH?
services.openssh.enable = true;

# Quieres un usuario?
users.users.pascual = {
  isNormalUser = true;
  extraGroups = [ "wheel" ];
};

Aplicas los cambios con:

sudo nixos-rebuild switch

Y el sistema entero se reconstruye. Si algo falla, reinicias y eliges la generacion anterior en el boot. Imposible dejar el sistema roto.

Si usas Ubuntu con Nix, no tienes configuration.nix. No pasa nada. Las capas 1 y 2 ya te dan mucho.

Capa 4: Flakes (el formato moderno)

Flakes es una forma de organizar la configuracion de Nix con dependencias fijadas. En vez de un configuration.nix suelto, tienes un flake.nix que declara:

# flake.nix basico
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  };

  outputs = { self, nixpkgs }: {
    nixosConfigurations.mi-maquina = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [ ./configuration.nix ];
    };
  };
}

La ventaja: un flake.lock fija las versiones exactas de todo. Dos personas con el mismo flake.lock obtienen exactamente el mismo sistema. Reproducible al 100%.

Puedes tener multiples fuentes de paquetes (esto es clave):

inputs = {
  nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";       # La mayoria de paquetes
  nixpkgs-master.url = "github:NixOS/nixpkgs/master";         # Los mas nuevos
  home-manager.url = "github:nix-community/home-manager";     # Config de usuario
};

Asi puedes tener la mayoria del sistema en "unstable" (estable en la practica) y traer paquetes puntuales de "master" cuando necesitas la ultima version.

Capa 5: home-manager (configuracion de usuario)

home-manager gestiona tu configuracion personal: programas de usuario, dotfiles, shell, editor, etc. La diferencia con NixOS:

# home.nix
programs.git = {
  enable = true;
  userName = "Pascual";
  userEmail = "[email protected]";
};

programs.fish.enable = true;

home.packages = with pkgs; [
  ripgrep
  fd
  jq
];

home-manager funciona con o sin NixOS. Si estas en Ubuntu con Nix instalado, puedes usar home-manager standalone para gestionar tu entorno de usuario sin tocar el sistema.

Capa 6: nix develop (entornos de desarrollo)

Para proyectos. Cada proyecto puede tener su propio flake.nix que define exactamente que herramientas necesita:

# flake.nix de un proyecto PHP
devShells.default = pkgs.mkShell {
  packages = [ pkgs.php83 pkgs.composer pkgs.mariadb ];
};

Entras con nix develop y tienes PHP 8.3, Composer y MariaDB disponibles. Sales y desaparecen. Cada proyecto tiene su entorno aislado, sin conflictos.

Entonces, que va donde?

Quiero...Va en...Comando
Probar un programa rapidoNada, no se instalanix run nixpkgs#programa o , programa
Un programa siempre disponible (sistema)configuration.nixenvironment.systemPackages
Un programa para mi usuariohome.nixhome.packages
Un servicio del sistema (ssh, docker...)configuration.nixservices.openssh.enable
Config de un programa (git, fish, vim...)home.nixprograms.git.enable
Herramientas para un proyectoflake.nix del proyectonix develop
Fijar versiones de nixpkgsflake.nix + flake.locknix flake update
Un paquete que no esta en unstablenixpkgs-master como inputpkgsMaster.programa

Errores tipicos de novato

La ruta recomendada

  1. Instala Nix en tu sistema actual (Ubuntu, Fedora, lo que sea)
  2. Prueba nix run y , para ejecutar programas sin instalar
  3. Monta home-manager standalone para gestionar tus configs
  4. Si te convence, considera NixOS como sistema principal
  5. Cuando tengas NixOS, migra a flakes para tener todo fijado

No hace falta saltar a NixOS desde el dia uno. Nix es util desde la primera capa.

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario