Nixpkgs: data/{fonts,misc}: make the derivations fixed-output?

Created on 29 Jul 2017  路  9Comments  路  Source: NixOS/nixpkgs

Currently, only google-fonts is a fixed-output derivation.

All the other fonts are not, they depends on stdenv and

  • "depends" on platform, fonts are "different" for i686 and x64.
  • are rebuild/redownloaded each time when stdenv is changed (e.g. on bash version bump). This results in significant slowness especially with big unicode fonts.
/home/user$ find /nix/store -mindepth 1 -maxdepth 1 -type d -regex '.+pragmata.+' -exec bash -c "echo \$(nix hash-path --type sha256 --base32 {}) {}" \; | sort
0sza3jc8c5krgydkk3s4rgbqb2xpwxz8nw82vxff4dbd0ib4niv9 /nix/store/2wbim0msiivp9lvcva7650shi07knhd9-pragmatapro-2015.07.08                                           
0sza3jc8c5krgydkk3s4rgbqb2xpwxz8nw82vxff4dbd0ib4niv9 /nix/store/c9b3kmwfjd75kv0x3nx5fqkr8b3kchrr-pragmatapro-2015.07.08                                           
0sza3jc8c5krgydkk3s4rgbqb2xpwxz8nw82vxff4dbd0ib4niv9 /nix/store/g724cd3g82qj8f1400bhxhwd6izxigqm-pragmatapro-2015.07.08                                           
0sza3jc8c5krgydkk3s4rgbqb2xpwxz8nw82vxff4dbd0ib4niv9 /nix/store/gsdi6a1d7s8c90gvkqd1d28gbr31fj53-pragmatapro-2015.07.08                                           
0sza3jc8c5krgydkk3s4rgbqb2xpwxz8nw82vxff4dbd0ib4niv9 /nix/store/hfgn36m2nib36as6fd8jqz9cpw6wwib9-pragmatapro-2015.07.08                                           
0sza3jc8c5krgydkk3s4rgbqb2xpwxz8nw82vxff4dbd0ib4niv9 /nix/store/iwrkvipkv8dkvrl37a28njd9l7kixzsj-pragmatapro-2015.07.08                                           
0sza3jc8c5krgydkk3s4rgbqb2xpwxz8nw82vxff4dbd0ib4niv9 /nix/store/p23ny6sl7jh4k2c4pdyiq9gqiabpab9k-pragmatapro-2015.07.08                                           
0sza3jc8c5krgydkk3s4rgbqb2xpwxz8nw82vxff4dbd0ib4niv9 /nix/store/z76ramjc0qvz3i2iv5wz3yh6f579kzvy-pragmatapro-2015.07.08                                           
1i2h52356h8fkq4kp8wmjshjyz2fhsf97n3s80cczj41d4akyhz8 /nix/store/5w5zih0bbfzx05agg43qlsq4i1c2bdkn-pragmatapro-2017.05.05                                           
1i2h52356h8fkq4kp8wmjshjyz2fhsf97n3s80cczj41d4akyhz8 /nix/store/a8b7j593sh11rr8x6r9cd699cmcsnmfz-pragmatapro-2017.05.05                                           
1i2h52356h8fkq4kp8wmjshjyz2fhsf97n3s80cczj41d4akyhz8 /nix/store/wlki4rifwrnyaamy0zp8g48034y3dvkw-pragmatapro-2017.05.05                                           
1qsialfrjbry21cwqizfx2yvgm05p4lb6pa274yyliirjam3yiyr /nix/store/kdxx5720d2c4cx3ganc118vwhqf04016-pragmatapro-2016.09.19   
hygiene

All 9 comments

With recent postFetch addition to fetch* builders, fixed-output derivations have even less code: https://github.com/NixOS/nixpkgs/pull/28108/files

@volth Please open one PR for all updates.

@volth Please stop. :crying_cat_face:

Please open one PR for all updates.

@fpletz

There is ~2000 lines diff and the are bugs (for example just discovered https://github.com/NixOS/nixpkgs/pull/28150)
I expect that some PR would be reverted.

What does #28150 have to do with the cleanups here? Please group the cleanups into one PR. Opening one PR per font is ridiculous and just clutters everyones' notifications.

What does #28150 have to do with the cleanups here?

Because some fonts are built using fontforge from the sources.
dejavu, monoid, ...

Please group the cleanups into one PR. Opening one PR per font is ridiculous and just clutters everyones' notifications.

You see it as similar cleanups because I submit starting from the most simple cases.
About big PR:

  1. no one will review 2000 lines diff. Such PRs simply receive no comments and be forgotten.
  2. it would have much more than cleanup. And it will fail because of different cases of non-determinism (we already hit one with proggyfonts)
  3. Someone might argue against, for example using Wayback Machine (archive.org) as upstream. This would stop the whole big PR.

So I see one-PR-per-font as the only way which would work.

Okay, I understand the problem with fontforge.

I don't agree that such a big PR won't be reviewed because the changes are mostly trivial and one would have to review every package anyway. You could at least group the trivial changes into one PR and the controversial changes into separate PRs.

You can batch something like 10 fonts per pr. They are quite easy to review. We have a similar approach for cleanup python packages.

If meta.hydraPlatforms = []; this is also often an indication that fixed-output derivation can be used.
Example: https://github.com/NixOS/nixpkgs/pull/29024

Was this page helpful?
0 / 5 - 0 ratings

Related issues

copumpkin picture copumpkin  路  3Comments

grahamc picture grahamc  路  3Comments

vaibhavsagar picture vaibhavsagar  路  3Comments

tomberek picture tomberek  路  3Comments

ayyess picture ayyess  路  3Comments