{ pkgs, craneLib }:
let
  src = craneLib.cleanCargoSource ./.;

  rustDeps = with pkgs; {
    inherit src;
    nativeBuildInputs = [
      gtk4
      pkg-config
      pkgs.clang
      wrapGAppsHook4
    ];
    buildInputs = [
      libadwaita
      openssl
      pipewire
    ];
    LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
  };

  cargoArtifacts = craneLib.buildDepsOnly rustDeps;

  rustArgs = rustDeps // {
    inherit cargoArtifacts;
    doCheck = false;
  };

  fileSetForCrate =
    crate:
    pkgs.lib.fileset.toSource {
      root = ./.;
      fileset = pkgs.lib.fileset.unions [
        ./Cargo.toml
        ./Cargo.lock
        (craneLib.fileset.commonCargoSources crate)
      ];
    };
in
{
  l10n-db = craneLib.buildPackage (
    rustArgs
    // {
      inherit (craneLib.crateNameFromCargoToml { src = ./l10n-db; }) version;
      pname = "l10n-db";
      cargoExtraArgs = "-p l10n-db";
      src = fileSetForCrate ./l10n-db;
    }
  );
}