{ stdenv, fetchurl, fetchgit,  znc }:

let

  zncDerivation = a@{
    name, src, module_name,
    buildPhase ? "${znc}/bin/znc-buildmod ${module_name}.cpp",
    installPhase ? "install -D ${module_name}.so $out/lib/znc/${module_name}.so", ...
  } : stdenv.mkDerivation (a // {
    inherit buildPhase;
    inherit installPhase;

    meta = a.meta // { platforms = stdenv.lib.platforms.unix; };
    passthru.module_name = module_name;
  });

in rec {

  push = zncDerivation rec {
    name = "znc-push-${version}";
    version = "1.0.0";
    module_name = "push";

    src = fetchurl {
        url = "https://github.com/jreese/znc-push/archive/v${version}.tar.gz";
        sha256 = "1v9a16b1d8mfzhddf4drh6rbxa0szr842g7614r8ninmc0gi7a2v";
    };

    meta = {
      description = "Push notification service module for ZNC";
      homepage = https://github.com/jreese/znc-push;
      repositories.git = https://github.com/jreese/znc-push.git;
      license = stdenv.lib.licenses.mit;
      maintainers = [ stdenv.lib.maintainers.offline ];
    };
  };

  fish = zncDerivation rec {
    name = "znc-fish-8e1f150fda";
    module_name = "fish";

    src = fetchgit {
        url = meta.repositories.git;
        rev = "8e1f150fdaf18dc33e023795584dec8255e6614e";
        sha256 = "0vpk4336c191irl3g7wibblnbqf3903hjrci4gs0qgg1wvj7fw66";
    };

    meta = {
      description = "ZNC FiSH module";
      homepage = https://github.com/dctrwatson/znc-fish;
      repositories.git = https://github.com/dctrwatson/znc-fish.git;
      maintainers = [ stdenv.lib.maintainers.offline ];
    };
  };

}
