HeadlinesBriefing favicon HeadlinesBriefing.com

Un Nix Flake para Gobernarlos a Todos - Omniflake

Hacker News •
×

Los flakes sin duda están aquí para quedarse, y he dejado claro mi opinión sobre ellos: son "meh". A pesar de su omnipresencia, agregar una entrada de flake sigue siendo una pequeña molestia que nunca desaparece. Se promociona como una característica positiva que los flakes sean federados, pero la realidad es que quiero la simplicidad de un flake centralizado. Esa fue la belleza y el poder de nixpkgs. El proceso es: quieres disko, así que añades una URL, luego un follows para que deje de arrastrar su propio nixpkgs, y luego lo repites para el siguiente. Esto se ha convertido en un meme en la comunidad de Nix sobre cómo cada flake arrastra su propio flake-utils. Me niego a aceptar esta experiencia de usuario.

Entonces me pregunté: ¿podría un flake llevar todos los demás flakes, y solo tendrías que alcanzar lo que necesitas? Presentando Omniflake: casi todos los flakes Nix detrás de una entrada de flake. `inputs.omniflake.url = "github:fzakaria/omniflake";` `inputs.omniflake.inputs.nixpkgs.follows = "nixpkgs";` Una vez que tienes omniflake, puedes usarlo como cualquier otra entrada. Un paquete, en un shell o en un sistema: `environment.systemPackages = [omniflake.flakes.nh.packages.${system}.default];` Una superposición: `nixpkgs.overlays = [ omniflake.flakes.rust-overlay.overlays.default ];` Un módulo de NixOS: `imports = [ omniflake.flakes.disko.nixosModules.disko ];` O nada en un flake en absoluto, directamente desde la línea de comandos: `$ nix run 'github:fzakaria/omniflake#flakes.nh.packages.x86_64-linux.default' -- --version`

Tiene un sitio web accesible en https://omniflake.com/ donde puedes ver la lista de flakes que contiene y algunas documentaciones útiles. Una vez agregado, tienes acceso a casi doce mil flakes que puedes acceder según sea necesario de forma perezosa. Solo pagas por lo que usas. Esto suena absurdo pero funciona. Un flake con miles de entradas debería ser inutilizable, pero gracias a la pereza del lenguaje Nix y el mecanismo de bloqueo de flakes, funciona perfectamente.

¿Cómo es posible contener casi todos los flakes dentro de este uno? Un breve introducción sobre flakes: un flake es un directorio con un flake.nix que declara dos cosas: entradas (otros flakes de los que depende) y salidas (una función de esas entradas). El archivo flake.lock junto a él indica exactamente a qué commit se resolvió, por lo que la construcción es reproducible. Un archivo de bloqueo no solo fija tus propias entradas. Fija todo el grafo transitivo para cada flake. Eso significa que si dos flakes hijos dependen ambos de nixpkgs, cada uno tendrá su propia copia de nixpkgs en el archivo de bloqueo, y pueden ser commits diferentes. Esta es la duplicación sobre la que todos se quejan, y es por eso que existe follows: follows reescribe una dependencia para que apunte a un nodo que ya tienes, en lugar de obtener otra copia.

Entidades clave: Empresas: Hacker News | Personas: Tim Cook

Preguntas frecuentes: ¿Qué es Omniflake y cómo resuelve la gestión de entradas de flakes Nix?

Omniflake es un único flake Nix que agrupa casi doce mil otros flakes Nix detrás de una entrada. En lugar de agregar y configurar manualmente cada flake con directivas follows, los usuarios agregan simplemente la entrada omniflake y acceden a cualquier flake contenido de forma perezosa según sea necesario. Esto funciona debido a la evaluación perezosa de Nix y el mecanismo de bloqueo de flakes, pese al gran número de entradas.

Pregunta frecuente: ¿Qué es Omniflake y cómo resuelve la gestión de entradas de flakes Nix?

Respuesta frecuente: Omniflake es un único flake Nix que agrupa casi doce mil otros flakes Nix detrás de una entrada. En lugar de agregar y configurar manualmente cada flake con directivas follows, los usuarios agregan simplemente la entrada omniflake y acceden a cualquier flake contenido de forma perezosa según sea necesario. Esto funciona debido a la evaluación perezosa de Nix y el mecanismo de bloqueo de flakes, pese al gran número de entradas.