{ description = "sr.ht-buildtest"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/21ad1050bf67f6a31acc38d41b7999e1a0bd0ca0"; # 31-07-2023 flake-utils.url = "github:numtide/flake-utils/919d646de7be200f3bf08cb76ae1f09402b6f9b4"; # 11-07-2023 crane = { url = "github:ipetkov/crane"; inputs.nixpkgs.follows = "nixpkgs"; }; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { nixpkgs.follows = "nixpkgs"; flake-utils.follows = "flake-utils"; }; }; }; outputs = { self, nixpkgs, flake-utils, crane, rust-overlay, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ (import rust-overlay) ]; }; inherit (pkgs) lib; rustToolchain = pkgs.rust-bin.stable."1.71.0".default.override { extensions = [ "rust-analyzer" ]; }; craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain; cargoTypos = args: craneLib.mkCargoDerivation (args // { cargoArtifacts = null; cargoVendorDir = null; buildPhaseCargoCommand = "typos"; pnameSuffix = "-typos"; nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ (with pkgs; [ typos ]); preInstallPhases = [ "ensureTargetDir" ] ++ (args.preInstallPhases or [ ]); ensureTargetDir = '' mkdir -p ''${CARGO_TARGET_DIR:-target} ''; }); shouldRunCoverage = system == "x86_64-linux" && ((builtins.getEnv "CI") != ""); src = craneLib.cleanCargoSource (craneLib.path ./.); cargoArtifacts = craneLib.buildDepsOnly { inherit src; }; srht-buildtest = craneLib.buildPackage { inherit src cargoArtifacts; }; in { checks = { inherit srht-buildtest; default = srht-buildtest; srht-buildtest-clippy = craneLib.cargoClippy { inherit src cargoArtifacts; cargoClippyExtraArgs = "--all-targets -- --deny warnings"; }; srht-buildtest-doc = craneLib.cargoDoc { inherit src cargoArtifacts; }; srht-buildtest-fmt = craneLib.cargoFmt { inherit src; }; srht-buildtest-typos = cargoTypos { inherit src; }; } // lib.optionalAttrs shouldRunCoverage { srht-buildtest-coverage = craneLib.cargoTarpaulin { inherit src cargoArtifacts; }; }; packages = rec { inherit srht-buildtest; default = srht-buildtest; }; apps = rec { srht-buildtest = flake-utils.lib.mkApp { drv = srht-buildtest; }; default = srht-buildtest; }; devShells.default = pkgs.mkShell { inputsFrom = builtins.attrValues self.checks.${system}; nativeBuildInputs = with pkgs; [ deadnix nixfmt nodePackages.prettier rustToolchain statix ]; }; }); }