NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
18.32k stars 14.29k forks source link

Support embedding recipe of MELPA packages when generating the index (`recipes-archive-melpa.json`) #334888

Open jian-lin opened 3 months ago

jian-lin commented 3 months ago

Describe the bug

This is a potential improvement of Nixpkgs Emacs infra.

Currently, when generating index for MELPA packages, their recipes are downloaded and then hashed. The url (actually, the git commit to construct the url is stored) and hash of a recipe are stored in the index (recipes-archive-melpa.json). When building one of these packages, its recipe is downloaded again using the stored url and hash.

If we embed the recipe itself into the generated index, then there is no need to download it again at build-time.

Note that this may even decrease the index file size because the git commit and content hash of a recipe are replaced with its content and usually the content is smaller. To further decrease the index size, we can store the smaller one. But I am afraid it only brings marginal improvement.

Additional context


Add a :+1: reaction to issues you find important.

AndersonTorres commented 3 months ago

It would be a good idea to create a pkgs.formats.melpa-recipe generator?

jian-lin commented 3 months ago

It would be a good idea to create a pkgs.formats.melpa-recipe generator?

What is the motivation?

When this issue is resolved, for generated packages, recipe content strings are used. For manual packages, probably only setting :files is enough.

In addition, one goal of this issue is to avoid using a derivation for recipe. However, the protocol of pkgs.formats must use a derivation.

AndersonTorres commented 2 months ago

The motivation is that the recipe format is structured, and can be generated by using a template. However I erroneously thought that formats was a string.