{ stdenv, lib, rustPlatform, fetchFromGitHub, perl, pkg-config, openssl }:

let
  version = "unstable-2022-03-01";
  homepage = "https://github.com/chipsenkbeil/distant";
  license = lib.licenses.mit;

  repo = fetchFromGitHub {
    owner = "chipsenkbeil";
    repo = "distant";
    rev = "f46eeea8d54c6527e590a8da279a6fb4783bfd9f";
    sha256 = "sha256-AVhOs7qqtqz3TOsJiE6mUzMz2zR3qGBYnW9Lwm/JStk=";
  };
in lib.recurseIntoAttrs {
  distant = rustPlatform.buildRustPackage rec {
    inherit version;
    pname = "distant";

    src = repo;
    cargoSha256 = "sha256-KCw0rujcQq3VAWMt54aoa/B61rcSKn2D1gwROAfAckE=";

    # We'll just tell to use the system's openssl to build openssl-sys.
    OPENSSL_NO_VENDOR = 1;
    nativeBuildInputs = [ pkg-config ];
    buildInputs = [ perl openssl ];

    meta = with lib; {
      inherit homepage license;
      description = "Remotely edit files and run programs";
    };
  };

  distant-lua = rustPlatform.buildRustPackage rec {
    inherit version;
    pname = "distant-lua";

    src = repo;
    cargoSha256 = "sha256-Cv2obK4m8eCXxpoX0zb1mb9lOdRJzMKRUNPr4dopeFw=";

    OPENSSL_NO_VENDOR = 1;
    nativeBuildInputs = [ pkg-config ];
    buildInputs = [ perl openssl ];

    preBuild = "cd distant-lua";
    postBuild = "cd ..";

    meta = with lib; {
      inherit homepage license;
      description = "Lua bindings for Distant";
    };
  };
}