| 10 Jul 2022 |
kevincox | So we need to be able to go both ways. Otherwise we still need to construct the full attrs for every eval. | 15:46:02 |
infinisil | It's very easy to go both ways | 15:47:30 |
kevincox | We can also consider a "slow path" or hack for hydra-type build all. But that probably isn't necessary. | 15:47:36 |
K900 | crates.io does a weird thing | 15:49:24 |
K900 | They have 1/a.json, 2/aa.json, 3/aaa.json, and then aa/aa/aaaa.json etc | 15:49:59 |
K900 | So the short names go into the short names corner of shame | 15:50:18 |
K900 | And then it's ab/cd/abcd.json | 15:50:43 |
infinisil | Btw if we're concerned about performance, there's also the option of adding Nix builtins to speed up certain operations | 15:51:20 |
kevincox | Assuming we still have .nix that seems unnecessary. It would be interesting to see their rationale. | 15:51:31 |
infinisil | Maybe even a builtins.prefixedAutocall | 15:51:32 |
kevincox | I think some sort of ProxyAttrs that allowed overriding lookup and iteration would be the generic option. But we could also just hardcode the lookup scheme that we pick. | 15:52:26 |
infinisil | Oh I see, so you mean to allow people to specify some file outside of nixpkgs for a specific attribute for development? | 15:53:27 |
infinisil | I think that's very unproblematic, an overlay can already be used for that | 15:54:31 |
kevincox | I'm thinking something like this. (For a flat solution)
all-packages = builtin.proxyAttrs {
lookup = name: pkgs.callPackage (import "pkgs/${name}.nix");
list-keys = # List all packages and return a list or something here.
};
Then for the common case of nix-build -A foo it just calls lookup "foo" and only that package is loaded.
| 15:56:13 |
infinisil | Ah! Yes that's an interesting idea and could have many other useful applications | 15:57:24 |
kevincox | To all other Nix code it would behave like a regular attrs of all packages except as long as you never do something that requires listing attributes it doesn't have to build the full set. | 15:57:29 |
kevincox | (IDK if we need other primitive operations but they can be added easily. We can also do caching to ensure that it is pure) | 15:58:11 |
kevincox | Yeah, for nixpkgs we can make as complicated of a lookup as we like, include 1 or 2 level and whatnot. We can also fall back to the current all-packages.nix attr for transition. | 15:59:05 |
kevincox | This could also be polyfilled for older NIxes by eagerly computing the real attrs. | 16:07:43 |
kevincox | * This could also be polyfilled for older NIxes by eagerly computing the a attrset. | 16:09:26 |
kevincox | * This could also be polyfilled for older NIxes by eagerly computing the resulting attrset. | 16:17:37 |
| 11 Jul 2022 |
j-k | Slightly related: I just noticed /nix/var/log/nix/drvs/ has a 2 letter prefix sub dir pattern
λ ls /nix/var/log/nix/drvs/
00 0s 1l 2f 38 42 4w 5n 6h 7a # ... etc ...
| 11:01:01 |
| Wanja Hentze joined the room. | 12:39:14 |
| hexa joined the room. | 12:45:26 |
| profpatsch joined the room. | 12:45:49 |
| Andreas Schrägle joined the room. | 12:49:24 |
| toonn joined the room. | 13:31:16 |
| Winter (she/her) joined the room. | 15:18:42 |
| kayla.fire joined the room. | 18:48:48 |
Sandro | In reply to @j-k:matrix.org
Slightly related: I just noticed /nix/var/log/nix/drvs/ has a 2 letter prefix sub dir pattern
λ ls /nix/var/log/nix/drvs/
00 0s 1l 2f 38 42 4w 5n 6h 7a # ... etc ...
Really common for hash based directory structures to keep the amount of things in a directory smaller | 23:54:06 |