# This file is pretty general, and you can adapt it in your project replacing # only `name` and `description` below. { description = "My awesome Rust project"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; crate2nix = { url = "github:kolloch/crate2nix"; flake = false; }; flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; }; outputs = { self, nixpkgs, utils, rust-overlay, crate2nix, ... }: let # If you change the name here, you must also do it in Cargo.toml name = "rust-nix-template"; # Rust release channel to use. # https://rust-lang.github.io/rustup/concepts/channels.html rustChannel = "stable"; in utils.lib.eachDefaultSystem (system: let # Imports pkgs = import nixpkgs { inherit system; overlays = [ rust-overlay.overlay (self: super: { # Because rust-overlay bundles multiple rust packages into one # derivation, specify that mega-bundle here, so that crate2nix # will use them automatically. rustc = self.rust-bin.${rustChannel}.latest.default; cargo = self.rust-bin.${rustChannel}.latest.default; }) ]; }; # cf. https://github.com/kolloch/crate2nix/issues/110 inherit (import "${crate2nix}/tools.nix" { inherit pkgs; }) generatedCargoNix; # Create the cargo2nix project project = pkgs.callPackage (generatedCargoNix { inherit name; src = ./.; }) { inherit pkgs; buildRustCrate = null; # https://github.com/kolloch/crate2nix/pull/178#issuecomment-820692187 # Individual crate overrides go here # Example: https://github.com/balsoft/simple-osd-daemons/blob/6f85144934c0c1382c7a4d3a2bbb80106776e270/flake.nix#L28-L50 defaultCrateOverrides = pkgs.defaultCrateOverrides // { # The himalaya crate itself is overriden here. Typically we # configure non-Rust dependencies (see below) here. ${name} = oldAttrs: { inherit buildInputs nativeBuildInputs; }; }; }; # Configuration for the non-Rust dependencies buildInputs = with pkgs; [ openssl.dev ]; nativeBuildInputs = with pkgs; [ rustc cargo pkgconfig ]; in rec { packages.${name} = project.rootCrate.build; # `nix build` defaultPackage = packages.${name}; # `nix run` apps.${name} = utils.lib.mkApp { inherit name; drv = packages.${name}; }; defaultApp = apps.${name}; # `nix develop` devShell = pkgs.mkShell { inputsFrom = builtins.attrValues self.packages.${system}; buildInputs = buildInputs ++ (with pkgs; # Tools you need for development go here. [ nixpkgs-fmt cargo-watch pkgs.rust-bin.${rustChannel}.latest.rust-analysis pkgs.rust-bin.${rustChannel}.latest.rls ]); RUST_SRC_PATH = "${pkgs.rust-bin.${rustChannel}.latest.rust-src}/lib/rustlib/src/rust/library"; }; } ); }