{ inputs, ... }:
{
  flake.overlays.default = final: prev: {
    webnsupdate = prev.callPackage ../default.nix {
      inherit (inputs) crane;
      pkgSrc = inputs.self;
    };
  };

  perSystem =
    { pkgs, lib, ... }:
    let
      craneLib = inputs.crane.mkLib pkgs;
      src = craneLib.cleanCargoSource inputs.self;

      commonArgs = {
        inherit src;
        strictDeps = true;

        doCheck = false; # tests will be run in the `checks` derivation
        NEXTEST_HIDE_PROGRESS_BAR = 1;
        NEXTEST_FAILURE_OUTPUT = "immediate-final";

        nativeBuildInputs = [ pkgs.mold ];

        meta = {
          license = lib.licenses.mit;
          homepage = "https://github.com/jalil-salame/webnsupdate";
          mainProgram = "webnsupdate";
        };
      };

      cargoArtifacts = craneLib.buildDepsOnly commonArgs;
      withArtifacts = lib.mergeAttrsList [
        commonArgs
        { inherit cargoArtifacts; }
      ];
      webnsupdate = pkgs.callPackage ../default.nix {
        inherit (inputs) crane;
        pkgSrc = inputs.self;
      };
    in
    {
      checks = {
        nextest = craneLib.cargoNextest withArtifacts;
        clippy = craneLib.cargoClippy (
          lib.mergeAttrsList [
            withArtifacts
            { cargoClippyExtraArgs = "--all-targets -- --deny warnings"; }
          ]
        );
      };

      packages = {
        inherit webnsupdate;
        inherit (pkgs) git-cliff;
        default = webnsupdate;
      };
    };
}