El uso de specialArgs en NixOS y nix-darwin se ha convertido en una práctica problemática debido a su falta de portabilidad y su impacto negativo en la reutilización de módulos. Este artículo técnico, publicado por un desarrollador tras su experiencia en NixCon 2026, argumenta que la inyección de argumentos en specialArgs impide que los módulos funcionen correctamente en entornos de evaluación distintos, generando errores de atributos cuando se intenta compartir configuraciones entre múltiples máquinas o hosts compartidos.
El problema radica en que los módulos que dependen de inputs inyectados en specialArgs no son compartibles ni fáciles de copiar y pegar. El autor propone una alternativa basada en la currying de módulos: aplicar los argumentos especiales antes de que lib.evalModules consuma la implementación del módulo. Esta técnica permite que los módulos mantengan su estructura estándar, evitando la dependencia de variables externas no proporcionadas.
El texto detalla cómo la función applyModuleArgs en nixpkgs maneja estos argumentos, mostrando que la solución actual es frágil y propensa a errores de trazado. Se presenta un ejemplo de código que demuestra cómo reestructurar los módulos para que consuman los inputs de forma explícita, eliminando la necesidad de specialArgs. Aunque el autor reconoce que esta solución es más compleja de leer, concluye que es la única vía viable para garantizar la portabilidad y la robustez en configuraciones de Nix a gran escala, superando las limitaciones del sistema de flake actual.
