# NixOS: Una maravillosa distribución de Linux
Tabla de contenidos
NixOS es una distribución Linux basada en el gestor de paquetes Nix. Su diferencia principal con otras distros: toda la configuración del sistema se define en código, los cambios son reversibles, y puedes recrear el mismo entorno en cualquier máquina.
¿Qué es NixOS?
En lugar del enfoque tradicional de instalar paquetes, modificar archivos de configuración y esperar que todo funcione, NixOS usa un modelo declarativo y funcional. Defines cómo quieres que sea tu sistema en archivos de configuración, y Nix se encarga de que el estado real del sistema coincida con lo que declaraste.
El paradigma declarativo: Una nueva forma de pensar
Configuración como código
En NixOS, tu sistema completo se define en archivos de configuración escritos en el lenguaje Nix. Desde el kernel hasta las aplicaciones, desde los servicios hasta los usuarios, todo está declarado en código:
{ config, pkgs, ... }:
{ # Configuración del sistema networking.hostName = "mi-servidor";
# Servicios services.nginx.enable = true; services.postgresql.enable = true;
# Paquetes del sistema environment.systemPackages = with pkgs; [ neovim git docker nodejs #... más paquetes ];
# Usuarios users.users.jamerrq = { isNormalUser = true; extraGroups = [ "wheel" "docker" ]; };}Reproducibilidad garantizada
En la práctica esto significa que puedes llevar tu archivo configuration.nix a otra máquina, ejecutar nixos-rebuild switch, y tendrás el mismo sistema configurado. Se acabó el “funciona en mi máquina”.
Shells aisladas: El paraíso del desarrollador
Otra característica muy útil de NixOS son las shells aisladas (nix-shell). Permiten crear entornos de desarrollo aislados para cada proyecto sin afectar el sistema base:
# Shell temporal con Python y dependencias específicasnix-shell -p python311 python311Packages.django python311Packages.requests
# Shell para desarrollo Gonix-shell -p go gopls delve
# Shell con versión específica de Node.jsnix-shell -p nodejs-18_x yarnCada shell es completamente independiente. Puedes tener 5 proyectos Python con versiones diferentes de Django, y nunca habrá conflictos. Cuando sales de la shell, todo desaparece sin dejar rastro.
Shells declarativas con shell.nix
Puedes definir el entorno de desarrollo de tu proyecto en un archivo shell.nix:
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell { buildInputs = with pkgs; [ python311 python311Packages.fastapi python311Packages.uvicorn python311Packages.sqlalchemy postgresql redis ];
shellHook = '' echo "Entorno FastAPI listo!" export DATABASE_URL="postgresql://localhost/miapp" '';}Simplemente ejecutas nix-shell en el directorio del proyecto y tienes todo listo.
Flakes: La evolución de la reproducibilidad
Los Flakes son una adición relativamente reciente a NixOS que mejora la forma de definir y compartir configuraciones:
{ description = "Mi configuración de NixOS";
inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; home-manager.url = "github:nix-community/home-manager"; };
outputs = { self, nixpkgs, home-manager }: { nixosConfigurations.mi-laptop = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ./configuration.nix home-manager.nixosModules.home-manager ]; }; };}Los flakes bloquean las dependencias, lo que garantiza reproducibilidad. La misma configuración debería producir el mismo resultado independientemente de cuándo la ejecutes.
Gestión de paquetes sin conflictos
Múltiples versiones coexistiendo
En NixOS puedes tener múltiples versiones del mismo paquete instaladas simultáneamente sin conflictos:
# Instalar específicamente Python 3.11nix-env -iA nixpkgs.python311
# También Python 3.9 para un proyecto legacynix-env -iA nixpkgs.python39
# Ambos coexisten perfectamenteRollbacks instantáneos
¿Instalaste algo que rompió el sistema? No hay problema:
# Ver generaciones disponiblesnixos-rebuild list-generations
# Volver a la generación anteriornixos-rebuild switch --rollback
# O a una generación específicanixos-rebuild switch --switch-generation 42En segundos estás de vuelta a un estado funcional conocido.
La potencia de la comunidad open source
Nixpkgs: El repositorio más grande
NixOS cuenta con nixpkgs, uno de los repositorios de paquetes más grandes que existen, con más de 100,000 paquetes. La comunidad es bastante activa.
Home Manager: Configuración personal declarativa
Con Home Manager puedes aplicar el mismo paradigma declarativo a tu configuración personal:
{ programs.git = { enable = true; userName = "Jamer José"; userEmail = "jamerrq@gmail.com"; };
programs.neovim = { enable = true; plugins = with pkgs.vimPlugins; [ nvim-lspconfig telescope-nvim nvim-treesitter ]; };}Cachix: Compilación distribuida
La comunidad también mantiene Cachix, un sistema de caché binario que significa que casi nunca tienes que compilar desde código fuente. Los paquetes se descargan precompilados, ahorrando tiempo y recursos.
DevOps y automatización: El sueño hecho realidad
Infraestructura como código nativo
NixOS es perfecto para DevOps porque toda la configuración del servidor es código:
{ # Configuración del servidor web services.nginx = { enable = true; virtualHosts."miapp.com" = { enableACME = true; forceSSL = true; locations."/" = { proxyPass = "http://127.0.0.1:8000"; }; }; };
# Certificados automáticos security.acme = { acceptTerms = true; defaults.email = "admin@miapp.com"; };}Deployment atómico
Los deployments en NixOS son atómicos: o funcionan completamente o no se aplican. No hay estados intermedios rotos.
¿Por qué elegir NixOS?
Para desarrolladores
- Entornos aislados para cada proyecto
- Reproducibilidad absoluta entre máquinas
- Rollbacks instantáneos si algo falla
- Experimentación sin miedo a romper el sistema
Para administradores de sistemas
- Configuración declarativa versionable en Git
- Deployments atómicos y seguros
- Rollbacks de todo el sistema
- Auditabilidad completa de cambios
Para equipos
- Configuraciones compartibles entre desarrolladores
- Entornos idénticos en desarrollo y producción
- Onboarding instantáneo de nuevos miembros
- Documentación implícita en el código
Los desafíos (porque no todo es perfecto)
NixOS no es para todos. Tiene una curva de aprendizaje pronunciada:
- Lenguaje Nix: Necesitas aprender un lenguaje funcional específico
- Conceptos nuevos: Requiere cambiar la mentalidad sobre gestión de sistemas
- Documentación: A veces puede ser fragmentaria o compleja
- Compatibilidad: Algunos software propietario puede requerir workarounds
¿Deberías usar NixOS?
NixOS es ideal para ti si:
- Valoras la reproducibilidad por encima de todo
- Te gusta tener control total sobre tu entorno
- Trabajas en múltiples proyectos con dependencias diferentes
- Quieres experimenter sin miedo a romper nada
- Disfrutas aprendiendo paradigmas nuevos
Primeros pasos con NixOS
Si te has convencido, puedes empezar:
- Prueba Nix en tu distribución actual:
curl -L https://nixos.org/nix/install | sh - Experimenta con nix-shell en algunos proyectos
- Descarga la ISO de NixOS y pruébala en una VM
- Lee la documentación oficial y tutoriales de la comunidad
- Únete a la comunidad en Discord, Reddit o Matrix
Conclusión
NixOS no es para todos, pero si valoras la reproducibilidad y no te molesta invertir tiempo aprendiendo un paradigma diferente, merece la pena probarlo. El enfoque declarativo, las shells aisladas, los flakes y los rollbacks instantáneos resuelven problemas reales que otras distros simplemente no abordan.
Si te interesa, la mejor forma de empezar es instalar Nix en tu distro actual y experimentar con nix-shell antes de hacer el salto completo.