Skip to content

Austreelis/nix-cargo-integration

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nix-cargo-integration

Easily and effortlessly integrate Cargo projects with Nix.

  • Uses dream2nix to build Cargo packages and provide a development shell.
  • Has sensible defaults, and strives to be compatible with Cargo.
  • Aims to offload work from the user; comes with useful configuration options.
  • It's a flake-parts module, so you can easily include it in existing Nix code that also use flake-parts.

Documentation

Documentation for master branch is on https://flake.parts/options/nix-cargo-integration.html (alternatively, read options directly in src/interface.nix and src/modules)

Important (mostly breaking) changes can be found in CHANGELOG.md.

Installation

Run nix flake init -t github:yusdacra/nix-cargo-integration to initialize a simple flake.nix.

You can also run nix flake init -t github:yusdacra/nix-cargo-integration#simple-crate to initialize a Cargo crate alongside the flake.nix, or nix flake init -t github:yusdacra/nix-cargo-integration#simple-workspace for a Cargo workspace with a flake.nix.

If you already have a flake.nix with flake-parts setup, just add NCI to inputs:

{
  # ...
  inputs.nci.url = "github:yusdacra/nix-cargo-integration";
  # ...
}

and then inside the mkFlake:

{
  imports = [
    inputs.nci.flakeModule
  ];
}

Tips and tricks

Ignoring Cargo.lock in Rust libraries

The official recommendation for Rust libraries is to add Cargo.lock to the .gitignore. This conflicts with the way paths are evaluated when using a flake.nix. Only files tracked by the version control system (i.e. git) can be accessed during evaluation. This will manifest in the following warning:

$ nix build
trace: Cargo.lock not found for project at path path/to/project.
Please ensure the lockfile exists for your project.
If you are using a VCS, ensure the lockfile is added to the VCS and not ignored (eg. run `git add path/to/project/Cargo.lock` for git).

This project will be skipped and won't have any outputs generated.
Run `nix run .#generate-lockfiles` to generate lockfiles for projects that don't have one.

A neat fix for that is to track the path to Cargo.lock without staging it (thanks to @bew).

$ git add --intent-to-add Cargo.lock

Add --force if your Cargo.lock is listed in .gitignore.

About

Utility to integrate Cargo projects with Nix.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Nix 99.8%
  • Rust 0.2%