{
  stdenv,
  lib,
  darwin,
  rustPlatform,
  cargo,
  libiconv,
  pkg-config,
  rustc,
  openssl,
  libsodium,
  ...
}:
let
  cargoMeta = builtins.fromTOML (builtins.readFile ../pijul/Cargo.toml);
  inherit (rustPlatform) cargoBuildHook cargoInstallHook cargoSetupHook;
in
stdenv.mkDerivation {
  pname = cargoMeta.package.name;
  version = cargoMeta.package.version;

  src =
    let
      fs = lib.fileset;
    in
    fs.toSource {
      root = ../.;
      fileset = fs.unions [
        ../Cargo.toml
        ../Cargo.lock
        ../pijul-macros
        ../pijul
        ../libpijul
        ../pijul-interaction
        ../pijul-config
        ../pijul-repository
        ../pijul-identity
        ../pijul-remote
      ];
    };
  buildAndTestSubdir = "pijul";

  doCheck = true;
  cargoBuildType = "release";

  cargoDeps = rustPlatform.importCargoLock { lockFile = ../Cargo.lock; };

  nativeBuildInputs = [
    cargo
    libiconv
    pkg-config
    rustc
  ];

  buildInputs = [
    libsodium
    openssl.dev

    cargoBuildHook
    cargoInstallHook
    cargoSetupHook
  ] ++ lib.optionals (stdenv.isDarwin) [ darwin.apple_sdk.frameworks.SystemConfiguration ];
}