HeadlinesBriefing favicon HeadlinesBriefing.com

Un Nix Flake pour les Régner Tous - Omniflake

Hacker News •
×

Les flakes sont sans aucun doute là pour rester, et j'ai clairement exprimé mon avis à leur sujet : ils sont "meh". Malgré leur omniprésence, ajouter une entrée de flake reste une petite gêne qui ne disparaît jamais. On vante comme une fonctionnalité positive le fait que les flakes soient fédérés, mais la réalité est que je veux la simplicité d'un flake centralisé. C'était la beauté et la puissance de nixpkgs. Le processus est : vous voulez disko, donc vous ajoutez une URL, puis un follows pour qu'il cesse d'entraîner son propre nixpkgs, puis vous le répétez pour le suivant. Cela est devenu un mème dans la communauté Nix concernant la façon dont chaque flake entraîne son propre flake-utils. Je refuse d'accepter cette expérience utilisateur.

Alors je me suis demandé : un seul flake pourrait-il contenir tous les autres flakes, et vous n'auriez qu'à puiser ce dont vous avez besoin ? Présentation de Omniflake : presque tous les flakes Nix derrière une seule entrée de flake. `inputs.omniflake.url = "github:fzakaria/omniflake";` `inputs.omniflake.inputs.nixpkgs.follows = "nixpkgs";` Une fois que vous avez omniflake, vous pouvez l'utiliser comme n'importe quelle autre entrée. Un paquet, dans un shell ou sur un système : `environment.systemPackages = [omniflake.flakes.nh.packages.${system}.default];` Une superposition : `nixpkgs.overlays = [ omniflake.flakes.rust-overlay.overlays.default ];` Un module NixOS : `imports = [ omniflake.flakes.disko.nixosModules.disko ];` Ou rien du tout dans un flake, directement depuis la ligne de commande : `$ nix run 'github:fzakaria/omniflake#flakes.nh.packages.x86_64-linux.default' -- --version`

Il dispose d'un site web accessible à https://omniflake.com/ où vous pouvez voir la liste des flakes qu'il contient et certaines documentations utiles. Une fois ajouté, vous avez accès à près de douze mille flakes que vous pouvez utiliser selon vos besoins de manière paresseuse. Vous ne payez que ce que vous utilisez. Cela semble absurde mais ça fonctionne. Un flake avec des milliers d'entrées devrait être inutilisable, mais grâce à la paresse du langage Nix et au mécanisme de verrouillage des flakes, cela fonctionne parfaitement.

Comment est-il possible de contenir presque tous les flakes dans celui-ci ? Une très courte introduction aux flakes : un flake est un répertoire contenant un flake.nix qui déclare deux choses : les entrées (autres flakes dont il dépend) et les sorties (une fonction de ces entrées). Le fichier flake.lock à côté indique exactement à quel commit cela a été résolu, rendant la construction reproductible. Un fichier de verrouillage ne fixe pas seulement vos propres entrées. Il fixe tout le graphe transitif pour chaque flake. Cela signifie que si deux flakes enfants dépendent tous deux de nixpkgs, ils auront chacun leur propre copie de nixpkgs dans le fichier de verrouillage, et ils peuvent être des commits différents. C'est cette duplication dont tout le monde se plaint, et c'est pourquoi exists follows : follows réécrit une dépendance pour qu'elle pointe vers un nœud que vous avez déjà, au lieu d'en récupérer une autre copie.

Entités clés : Entreprises : Hacker News | Personnes : Tim Cook

FAQ : Qu'est-ce qu'Omniflake et comment résout-il la gestion des entrées de flake Nix ?

Omniflake est un seul flake Nix qui regroupe près de douze mille autres flakes Nix derrière une entrée. Au lieu d'ajouter et de configurer manuellement chaque flake avec des directives follows, les utilisateurs ajoutent simplement l'entrée omniflake et accèdent à tout flake contenu de manière paresseuse selon les besoins. Cela fonctionne grâce à l'évaluation paresseuse de Nix et au mécanisme de verrouillage des flakes, malgré le grand nombre d'entrées.

FAQ Q : Qu'est-ce qu'Omniflake et comment résout-il la gestion des entrées de flake Nix ?

FAQ A : Omniflake est un seul flake Nix qui regroupe près de douze mille autres flakes Nix derrière une entrée. Au lieu d'ajouter et de configurer manuellement chaque flake avec des directives follows, les utilisateurs ajoutent simplement l'entrée omniflake et accèdent à tout flake contenu de manière paresseuse selon les besoins. Cela fonctionne grâce à l'évaluation paresseuse de Nix et au mécanisme de verrouillage des flakes, malgré le grand nombre d'entrées.