Package for Nix, NixOS, and Guix, and document installing from them - #8
Merged
Conversation
None of the three packaging definitions could build. Each fetches a v0.1.0 git tag that does not exist, with placeholder hashes, so Vacuum could not be installed from a package on any system. There was no flake, and the README offered only `cargo install --path`. packaging/default.nix now takes optional src and version arguments and reads its dependencies from the committed Cargo.lock. The flake passes src = self, so a checkout builds today without waiting for a release tag, and there is no vendor hash to regenerate on every dependency bump. One definition serves both the flake and a release build rather than the two drifting apart. The flake exposes the package, an app, a check, development shells, and a NixOS module offering programs.vacuum.enable. The default shell supplies rustc, cargo, clippy, rustfmt, rust-analyzer, mold, reuse, and texinfo from nixpkgs rather than rustup, which would download a second complete toolchain for a pin this workspace does not need; a docs shell adds TeX Live for `make pdf` only. manifest.scm gives Guix users the same environment. It names packages by specification so it does not have to track which module each currently lives in. packaging/guix.scm grows the Texinfo manual build and install-info step that Standard section 8.6 requires, but it still cannot build: cargo-build-system resolves dependencies through #:cargo-inputs and this workspace locks 191 crates, a list generated with `guix import crate -r vacuum` at release time. That limitation is stated in the file, the README, and the manual rather than left for someone to discover, and the Guix instructions lead with the route that works today. The README and the manual gain installation sections for Nix, NixOS, Guix, Arch, and source, including a warning that `cargo install vacuum` fetches an unrelated crate of the same name. CI gains a job running `nix flake check` and smoke-testing the built binary. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FCJbPm4FWS99y9utbUe13z
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
None of the three packaging definitions could build. Each fetches a
v0.1.0git tag that does not exist, withlib.fakeHash/ all-zero base32 placeholders — so Vacuum could not be installed from a package on any system. There was no flake, and the README offered onlycargo install --path.One package definition, two entry points
packaging/default.nixnow takes optionalsrcandversionarguments and reads its dependencies from the committedCargo.lock. The flake passessrc = self, so a checkout builds today without waiting for a release tag, and there is nocargoHashto regenerate on every dependency bump. One definition serves both the flake and a release build, rather than the two drifting apart.The flake exposes
packages,apps,checks,devShells(default + docs), andnixosModules.defaultwithprograms.vacuum.enable. The default shell supplies the toolchain from nixpkgs rather than rustup — rustup would download a second complete toolchain (~1.5 GB) for a pin this workspace does not need. This is not hypothetical: on the maintainer's NixOS host every rustup toolchain fails withcannot execute: required file not found, so the devShell is the only working way to build here.Guix
manifest.scmgives Guix users the same environment, naming packages by specification so it need not track which module each currently lives in.packaging/guix.scmgrows the Texinfo build andinstall-infostep that Standard §8.6 requires.It still cannot build, and says so plainly in the file, the README, and the manual rather than leaving someone to discover it:
cargo-build-systemresolves dependencies through#:cargo-inputs, and this workspace locks 191 crates — a list generated withguix import crate -r vacuumat release time. The Guix instructions therefore lead with the route that works today,guix shell -m manifest.scm -- cargo install --path crates/vacuum-cli.Docs and CI
README and manual gain installation sections for Nix, NixOS, Guix System, Arch, and source — including a warning that
cargo install vacuumfetches an unrelated crate of the same name (a spaceflight CLI). CI gains anix flake checkjob that also smoke-tests the built binary.Verification
nix buildproduces a working binary plus the Info manual;nix flake checkpasses;nix developcarries the full toolchain; the NixOS module was verified by evaluating it in a realnixosSystem, not by inspection.Guix is not installed on this host, so
manifest.scmandpackaging/guix.scmare syntax-checked only — parsed with guile with the gexp reader extensions registered, matching a known-good sibling file structurally. Their package and module names have not been exercised against a real Guix.Note the release path remains blocked until a
v0.1.0tag is cut and the real hashes filled in; that is deliberate and markedTODO(release).🤖 Generated with Claude Code
https://claude.ai/code/session_01FCJbPm4FWS99y9utbUe13z