I know genAttrs “generate[s] an attribute set by mapping a function over a list of attribute names”, however for this piece of code I’d have trouble locating the list of attribute names.
You mean packageNamesToModify? You have to provide those. I don’t know which packages could be built with my-proprietary-codec and it’s not feasible to figure that out automatically.
Not really. Looking at genAttrs, it says that it’s genAttrs :: [ String ] -> (String -> Any) -> AttrSet, and the example code is
So I’d expect a list of strings and the mapping function. However, from my first naive glance at the code you posted, there’s no list of strings there, and rather directly a function definition that makes use of overrideAttrs, for which for me the documentation is unclear if it can only set attributes, create attributes or what else; also buildInputs at first naive glance isn’t an attribute of the packages, but rather of stdenv (sorry if all of this is wrong), all of which isn’t exactly intuitive if you’ve only worked with imperative languages.
I’ma let you in on a little secret: We’re not actually a binary distribution. We’re source-based.
I do know that, that’s why I worded it like I did. In fact I have created a single package myself before and as such, did read a bit about FOB and all that, how the cache works (not that I can fully recall everything or claim that I understood it all) with input-hashes etc. I tripped over some stuff back then when I found out that which is not part of the sandbox. The program however is a bit niche and there’s another component it needs that I didn’t write a derivation for so I also never wrote a pull request, plus the build process is somewhat ugly. So I wouldn’t call myself a beginner exactly but I definitely have trouble with advanced usage of the language and the intricacies of the system.
However, while source-based, I think it’s a common understanding that the binary cache is a huge appeal, otherwise the discussion about the cost it wouldn’t be had.