diff --git a/flake.nix b/flake.nix index c15cf1a..548a959 100644 --- a/flake.nix +++ b/flake.nix @@ -3,31 +3,53 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - crane.url = "github:ipetkov/crane"; - fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; - inputs.rust-analyzer-src.follows = ""; }; - flake-utils.url = "github:numtide/flake-utils"; - advisory-db = { url = "github:rustsec/advisory-db"; flake = false; }; }; - outputs = { self, nixpkgs, crane, fenix, flake-utils, advisory-db, ... }: - flake-utils.lib.eachDefaultSystem (system: + outputs = + { + self, + nixpkgs, + crane, + fenix, + flake-utils, + advisory-db, + ... + }: + flake-utils.lib.eachDefaultSystem ( + system: let pkgs = nixpkgs.legacyPackages.${system}; inherit (pkgs) lib; - craneLib = crane.mkLib pkgs; + craneLib = (crane.mkLib pkgs).overrideToolchain ( + p: + ( + let + fp = fenix.packages.${system}; + fpc = fp.complete; + in + (fp.combine [ + fpc.cargo + fpc.rustc + fpc.clippy + fpc.rust-src + fpc.rustc + fpc.rustfmt + fpc.rustc-codegen-cranelift-preview + ]) + ) + ); src = craneLib.cleanCargoSource ./.; # Common arguments can be set here to avoid repeating them later @@ -35,23 +57,26 @@ inherit src; strictDeps = true; - buildInputs = [ - # Add additional build inputs here - ] ++ lib.optionals pkgs.stdenv.isDarwin [ - # Additional darwin specific inputs can be set here - pkgs.libiconv - ]; + buildInputs = + [ + # Add additional build inputs here + ] + ++ lib.optionals pkgs.stdenv.isDarwin [ + # Additional darwin specific inputs can be set here + pkgs.libiconv + ]; # Additional environment variables can be set directly # MY_CUSTOM_VAR = "some value"; }; - craneLibLLvmTools = craneLib.overrideToolchain - (fenix.packages.${system}.complete.withComponents [ + craneLibLLvmTools = craneLib.overrideToolchain ( + fenix.packages.${system}.complete.withComponents [ "cargo" "llvm-tools" "rustc" - ]); + ] + ); # Build *just* the cargo dependencies, so we can reuse # all of that work (e.g. via cachix) when running in CI @@ -59,10 +84,13 @@ # Build the actual crate itself, reusing the dependency # artifacts from above. - my-crate = craneLib.buildPackage (commonArgs // { - doCheck = false; - inherit cargoArtifacts; - }); + my-crate = craneLib.buildPackage ( + commonArgs + // { + doCheck = false; + inherit cargoArtifacts; + } + ); # Define the Docker image build dockerImage = pkgs.dockerTools.buildImage { @@ -87,10 +115,13 @@ # Note that this is done as a separate derivation so that # we can block the CI if there are issues here, but not # prevent downstream consumers from building our crate by itself. - my-crate-clippy = craneLib.cargoClippy (commonArgs // { - inherit cargoArtifacts; - cargoClippyExtraArgs = "--all-targets -- --deny warnings"; - }); + my-crate-clippy = craneLib.cargoClippy ( + commonArgs + // { + inherit cargoArtifacts; + cargoClippyExtraArgs = "--all-targets -- --deny warnings"; + } + ); # my-crate-doc = craneLib.cargoDoc (commonArgs // { # inherit cargoArtifacts; @@ -114,17 +145,22 @@ # Run tests with cargo-nextest # Consider setting `doCheck = false` on `my-crate` if you do not want # the tests to run twice - my-crate-nextest = craneLib.cargoNextest (commonArgs // { - inherit cargoArtifacts; - partitions = 1; - partitionType = "count"; - }); + my-crate-nextest = craneLib.cargoNextest ( + commonArgs + // { + inherit cargoArtifacts; + partitions = 1; + partitionType = "count"; + } + ); }; packages = { default = my-crate; - inherit my-crate - dockerImage; + inherit + my-crate + dockerImage + ; }; apps.default = flake-utils.lib.mkApp { @@ -143,5 +179,6 @@ # pkgs.ripgrep ]; }; - }); + } + ); }