edolstra / import-cargo

A function for fetching the crates listed in a Cargo lock file

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

import-cargo

Simple flake to import all dependencies from a Cargo.lock as fixed-output derivation using the checksum and URL from the lockfile.

Usage

This example demonstrates how to build a local Cargo project with a flake.nix:

{
  description = "My Rust project";

  inputs = {
    nixpkgs.url = github:NixOS/nixpkgs/nixos-20.03;
    import-cargo.url = github:edolstra/import-cargo;
  };

  outputs = { self, nixpkgs, import-cargo }: let

    inherit (import-cargo.builders) importCargo;

  in {

    defaultPackage.x86_64-linux =
      with import nixpkgs { system = "x86_64-linux"; };
      stdenv.mkDerivation {
        name = "testrust";
        src = self;

        nativeBuildInputs = [
          # setupHook which makes sure that a CARGO_HOME with vendored dependencies
          # exists
          (importCargo { lockFile = ./Cargo.lock; inherit pkgs; }).cargoHome

          # Build-time dependencies
          rustc cargo
        ];

        buildPhase = ''
          cargo build --release --offline
        '';

        installPhase = ''
          install -Dm775 ./target/release/testrust $out/bin/testrust
        '';

      };

  };
}

About

A function for fetching the crates listed in a Cargo lock file


Languages

Language:Nix 100.0%