Add nix flake for reproducible builds#273
Merged
krystophny merged 1 commit intomainfrom Mar 30, 2026
Merged
Conversation
Provides a devShell with all dependencies (gfortran, cmake, ninja, openmpi, openblas, lapack, fftw, gsl, hdf5, netcdf, zlib, curl, python with numpy/scipy) purely from nixpkgs. Includes a workaround for the nixpkgs HDF5 split-output issue where hdf5-config.cmake references paths across lib/dev/bin store outputs. The flake merges outputs via symlinkJoin and patches the cmake config. Non-nix builds are unaffected.
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.
Summary
flake.nixproviding a development shell with all build dependencies from nixpkgspackages.defaultderivation fornix buildflake-utils.lib.eachDefaultSystemHDF5 split-output workaround
Nixpkgs splits HDF5 into separate lib/dev/bin store outputs. The bundled
hdf5-config.cmakehardcodes store paths viaPACKAGE_PREFIX_DIRthat break across these splits. The flake merges all outputs viasymlinkJoinand patches the cmake config files to use the merged prefix.Non-nix builds
Completely unaffected. No changes to CMakeLists.txt or any build scripts.
Verification
Pure nix shell (no system paths)
Full build succeeds (580/580 targets)
No homebrew/system path leakage
Test plan
nix flake checkpassesnix developthencmake -S . -B build -G Ninja && cmake --build buildsucceedsmakestill works without nix (non-nix builds unaffected)