If I query for available packages for Go:
nix-env -qa go -b --put-path --json
I get:
{
"nixpkgs.go_1_16": {
"name": "go-1.16.15",
"pname": "go",
"version": "1.16.15",
"system": "x86_64-linux",
"outputs": {
"out": "/nix/store/nqi39ksavkfrxkrz3d0797n5wmzi9r30-go-1.16.15"
}
},
"nixpkgs.go": {
"name": "go-1.17.7",
"pname": "go",
"version": "1.17.7",
"system": "x86_64-linux",
"outputs": {
"out": "/nix/store/3v2l94h7pllq6za9km3388cyd5agrln7-go-1.17.7"
}
},
"nixpkgs.go_1_18": {
"name": "go-1.18",
"pname": "go",
"version": "1.18",
"system": "x86_64-linux",
"outputs": {
"out": "/nix/store/7jyfpb96xv3hr8dpfhnbb0f7zscwm7sr-go-1.18"
}
}
}
I'm curios, how does nix-env knows the store path in advance? As far as I'm aware, the store path is generated by nix on build time, but nix-env already knows it without building(i see nothing gets downloaded from network for example).