| 2 Dec 2025 |
| chair changed their profile picture. | 17:59:52 |
522 it/its ⛯ΘΔ | (presumably not lix specific but im using lix so) is there a way to always build (as opposed to just look up in the nix store) a derivation (dependencies can be substituted, that doesn't matter), without needing to just go "try --rebuild, if that fails it doesn't exist in the store, so try and build it, then use --rebuild again if that didn't actually build it)
basically, use case is for reproducible build checking, i'm considering writing a tool that just takes a .drv then builds it, then hashes the output directory and you can store the mapping from .drv to hash in a repo
| 19:51:18 |
piegames | I fear not but it should exist really | 19:55:09 |
llakala | i assume you already know about --check? | 19:55:57 |
522 it/its ⛯ΘΔ | yeah afaik that's just the same as --rebuild
you need it to be in your nix store before you can --check something | 19:56:29 |
llakala | damn | 19:56:37 |
aloisw | Only simplification I'm aware of is that you can omit the first step, because building should be idempotent. | 20:07:16 |
aloisw | Arguably it would be nice if --rebuild/--check could do both build and rebuild instead of fail on nonexistent paths. | 20:08:57 |
522 it/its ⛯ΘΔ | what, so build (and ignore the hash) then --rebuild?
yeah that works, but it's double the work if it didn't exist | 20:09:13 |
aloisw | Ah, so you want more a targeted --option substitute false than more convenient --rebuild? | 20:11:05 |
522 it/its ⛯ΘΔ | i basically want "give me an output directory that was built on this device right now", yeah | 20:12:03 |
522 it/its ⛯ΘΔ | so "don't give me what's in the nix store if it's in there already, don't fetch it from caches" | 20:12:20 |
K900 | I feel like --check should even build twice by default | 20:12:27 |
K900 | And --rebuild should build or rebuild, yeah | 20:12:34 |
522 it/its ⛯ΘΔ | there's a cppnix flag to let you specify a number of times to build + rebuild iirc | 20:12:48 |
522 it/its ⛯ΘΔ | not in lix tho | 20:12:51 |
aloisw | In reply to @k900:0upti.me And --rebuild should build or rebuild, yeah IIRC they are the same, just inconsistently named. | 20:13:37 |
522 it/its ⛯ΘΔ | yeah | 20:13:43 |
522 it/its ⛯ΘΔ | one's nix build and one's nix-build | 20:13:50 |
K900 | Yes but they should be consistently named and also do different things | 20:14:02 |
522 it/its ⛯ΘΔ | https://nix.dev/manual/nix/2.28/release-notes/rl-1.11.html?highlight=--option%20build-repeat | 20:15:02 |
522 it/its ⛯ΘΔ | okay so build-repeat N is moreso for hydra | 20:15:41 |
aloisw | In reply to @k900:0upti.me Yes but they should be consistently named and also do different things What different things? Basically I see 3 possibilities: rebuild or fail (current behaviour, probably garbage), always do a local build (522's suggestion, makes sense but both names are shit for that), and ensure a rebuild (potentially substituting or building before if it didn't exist). | 20:20:41 |
K900 | --rebuild - ignore existing paths and substitutes, do a clean build, even if not currently in the store
--check - do two clean builds, diff them, keep both outpaths if different | 20:23:30 |
K900 | * | 20:24:27 |
aloisw | Yeah I think --rebuild is a garbage name for that. | 20:25:21 |
K900 | I think it's suboptimal but overall whatever it's fine | 20:26:00 |
aloisw | I guess there would also be a fourth option of ensuring it has been built locally at least once, but not sure how useful that is. | 20:29:14 |
522 it/its ⛯ΘΔ | another way to look at it is have flags for "don't look in the nix store for the direct derivation being built" and "which substitutors should we use for the direct derivation?"
(which would also let you easily ask if 2 caches agree on the output of a given .drv without needing to implement fetching code yourself, if that's useful) | 20:29:52 |
raitobezarius | i didn't see it but | 22:09:56 |