# NixOS: Una maravillosa distribución de Linux

Tabla de contenidos
NixOS

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:

Terminal window
# Shell temporal con Python y dependencias específicas
nix-shell -p python311 python311Packages.django python311Packages.requests
# Shell para desarrollo Go
nix-shell -p go gopls delve
# Shell con versión específica de Node.js
nix-shell -p nodejs-18_x yarn

Cada 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:

Terminal window
# Instalar específicamente Python 3.11
nix-env -iA nixpkgs.python311
# También Python 3.9 para un proyecto legacy
nix-env -iA nixpkgs.python39
# Ambos coexisten perfectamente

Rollbacks instantáneos

¿Instalaste algo que rompió el sistema? No hay problema:

Terminal window
# Ver generaciones disponibles
nixos-rebuild list-generations
# Volver a la generación anterior
nixos-rebuild switch --rollback
# O a una generación específica
nixos-rebuild switch --switch-generation 42

En 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:

  1. Prueba Nix en tu distribución actual: curl -L https://nixos.org/nix/install | sh
  2. Experimenta con nix-shell en algunos proyectos
  3. Descarga la ISO de NixOS y pruébala en una VM
  4. Lee la documentación oficial y tutoriales de la comunidad
  5. Ú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.


Referencias

Nix Packages collection & NixOS
23.9K18.3KMITNix
Manage a user environment using Nix [maintainer=@khaneliman, @rycee]
9.5K2.3KMITNix
😎 A curated list of the best resources in the Nix community [maintainer=@cyntheticfox]
5K191CC0-1.0
My avatar

¡Gracias por leer!


More Posts