{ description = "name of your package"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; crane.url = "github:ipetkov/crane"; treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, flake-utils, crane, fenix, treefmt-nix, ... }: flake-utils.lib.eachDefaultSystem ( system: let pkg_name = "name"; pkgs = nixpkgs.legacyPackages.${system}; lib = pkgs.lib; rustToolchain = fenix.packages.${system}.fromToolchainFile { file = ./rust-toolchain.toml; sha256 = "sha256-p8h3Sl/YRByZfZTAKXdsvF6xEenXKrXSVvpphmZENH4="; }; craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain; src = (craneLib.cleanCargoSource ./.); commonArgs = { inherit src; strictDeps = true; cargoToml = ./Cargo.toml; nativeBuildInputs = [ pkgs.pkg-config ]; }; cargoArtifacts = craneLib.buildDepsOnly commonArgs; _package = craneLib.buildPackage ( commonArgs // { inherit cargoArtifacts; } ); tree-fmt-eval = treefmt-nix.lib.evalModule pkgs ( { ... }: { # Used to find the project root projectRootFile = "flake.nix"; programs.nixfmt.enable = true; programs.deadnix.enable = true; programs.rustfmt = { enable = true; package = rustToolchain; }; } ); in { checks = { inherit _package; # Compile to test str-clippy = craneLib.cargoClippy ( commonArgs // { inherit cargoArtifacts; cargoClippyExtraArgs = "--all-targets -- --deny warnings"; } ); formatting = tree-fmt-eval.config.build.check self; }; formatter = tree-fmt-eval.config.build.wrapper; apps.default = flake-utils.lib.mkApp { drv = _package; }; packages.${pkg_name} = _package; packages.default = _package; devShells.default = craneLib.devShell { checks = self.checks.${system}; packages = with pkgs; [ # Put your packages for dev here libllvm cargo-nextest ]; env = { "LD_LIBRARY_PATH" = lib.makeLibraryPath ( with pkgs; [ stdenv.cc.cc.lib ] ); }; }; } ); }