A GNU diffutils-compatible suite of file comparison tools written in Rust

feat(platform/nix/workspace): Publish the framework and its modules as nix-workspace master

Renames nix-project to nix-workspace and moves the eleven integration flakes inside it, so one published repo carries both and a consumer selects one with nix-workspace?dir=modules/darwin. The josh filter stays a single term because the modules live under the framework rather than beside it. formerPaths gains platform/nix/project, without which the published history would have begun at this move. "Integration" is gone as a concept. Those eleven were always workspace modules; what made them separate flakes is that a pin can only belong to a flake, which is a constraint of nix rather than a kind of module. Generated files leave the tree. The flake, its lock and the CI workflow were 115 inert files sitting in the directory they were generated for, where nothing read them and all they did was look editable. They now live under publish/generated/ and josh maps them into place with ::destination=source, which also collapses 39 byte-identical workflows to one file mapped 39 times. Each artifact is mapped from every home it has had, generated/ last, because the last term wins where two write the same destination. Each project without sibling dependencies also gets a real flake.nix in its own directory, differing from the published one only in where nix-workspace comes from: a path in tree, a URL in the clone. Twenty-two are taken as root inputs and built by checks.project-flake-*, which holds each published build against the tree's own build of the same source. They do not share a builder and should not - converging them would push a 7.3 MB registry index into every published repo - so the second build is kept as a differential instead. It compares binaries by containment, since the tree adds the aliases these tools replace, and skips output that is not reproducible after asking each program twice. Those aliases now reach the published repos too, through an aliases option, so a clone of oxidized-binutils ships all fourteen tool names rather than one binary with none of the names it dispatches on. Two bugs that only an outside consumer could hit, found by filtering this tree into a repo and consuming it as one. Modules exported as bare functions have no identity, so the same module reaching evalModules twice declares its options twice; every exported module now carries a key. And nix-workspace exported its own crate-build module, which the workspace then imported and which demanded project.name - the framework is no longer a candidate for its own auto-detection. nixDirPathAttrs is derived from the option's type rather than listed by hand. The list had two of the three module collections and missed nixosModules, which has exactly the type darwinModules has; 32 module entries now keep the path they came from. What remains of the option means only that an output's value is a path, which is what users, hardware and desktops need. Also: ingest derives its filter instead of reading a field removed when filters became derived, and reverses through today's paths only, so a contribution lands in the project's directory rather than the one it occupied two renames ago. input-usage no longer dies on the first input that is followed rather than read. The unused systems input is dropped. Signed-off-by: Niclas Overby <niclas@overby.me>


+15 -7
1 changed file