{ pkgs, lib, cl-sasl, buildLisp, ... }:

let
  cl-xmpp-path = lib.fetchgit {
    url = "https://github.com/j4yk/cl-xmpp.git";
    rev = "a0f206e583c72d80523bdf108e7d507597555c6d";
    sha256 = "16qwm7yvwi73q07rsg0i5wrxbv44wm75m3710ph0vf1lzdkrsizk";
    fetchSubmodules = false;
  };

in {

  cl-xmpp = buildLisp.library {
    name = "cl-xmpp";
    srcs = [
      "${cl-xmpp-path}/package.lisp"
      "${cl-xmpp-path}/variable.lisp"
      "${cl-xmpp-path}/utility.lisp"
      "${cl-xmpp-path}/result.lisp"
      "${cl-xmpp-path}/cl-xmpp.lisp"
      "${cl-xmpp-path}/multi-user-chat.lisp"
      "${cl-xmpp-path}/administration.lisp"
    ];
    deps = with pkgs.lispPackages; [
      cxml
      ironclad
      usocket
    ];
  };

  cl-xmpp-sasl = buildLisp.library {
    name = "cl-xmpp-sasl";
    src = [
      "${cl-xmpp-path}/cl-xmpp-sasl.lisp"
    ];
    deps = with pkgs.lispPackages; [
      cl-base64
      cl-sasl
      cl-xmpp
    ];
  };

  cl-xmpp-tls = buildLisp.library {
    name = "cl-xmpp-tls";
    src = [
      "${cl-xmpp-path}/cl-xmpp-tls.lisp"
    ];
    deps = with pkgs.lispPackages; [
      cl_plus_ssl
      cl-xmpp-sasl
    ];
  };
}