Proyecto
Mi sistema como código (NixOS)
Todo mi portátil descrito en un repositorio. Reinstalarlo desde cero es clonar y aplicar un comando, con secretos cifrados y CI que revisa cada cambio.
El problema
Configurar un equipo a mano es lento y no se puede repetir: a los meses nadie recuerda qué se cambió ni por qué. En una empresa eso se resuelve con imágenes, GPOs o Intune. En mi portátil lo resolví con NixOS: todo el sistema está descrito en código.
Lo que hice
- Flake reproducible: las versiones quedan fijadas en
flake.lock, así que el mismo commit da el mismo sistema. - Módulos propios con opciones
enable: Tailscale, Syncthing, DNS local con caché (dnsmasq), Docker, KVM/QEMU, NVIDIA… se activan desde el fichero del equipo sin tocar el módulo. - Secretos cifrados con sops-nix: las claves viven cifradas en el repo y solo se descifran en el equipo, en
/run/secrets, con permisos0600. - Calidad automática:
nixfmt,statixydeadnixen pre-commit y en CI. - Un script
nix-applyque enseña el diff, hace commit y aplica: ningún cambio sin revisar.
my.services = {
tailscale.enable = true;
dnsmasq = {
enable = true;
upstreamServers = [ "1.1.1.1" "8.8.8.8" ];
};
};
Qué aprendí
- Configuración declarativa = configuración auditable. Es la misma idea que hay detrás de las GPO de Active Directory: describir el estado deseado y que el sistema lo aplique.
- Los secretos nunca van en claro en un repo, ni siquiera en uno privado.
- Revisar el diff antes de aplicar evita la mayoría de los sustos.