sig
  val app_name : string Pervasives.ref
  val desktop_entry : string option Pervasives.ref
  type 'a t
  val result : 'Notification.t -> 'Lwt.t
  val close : 'Notification.t -> unit Lwt.t
  type urgency = [ `Critical | `Low | `Normal ]
  type image = {
    img_width : int;
    img_height : int;
    img_rowstride : int;
    img_has_alpha : bool;
    img_bits_per_sample : int;
    img_channels : int;
    img_data : string;
  }
  val notify :
    ?app_name:string ->
    ?desktop_entry:string ->
    ?replace:'Notification.t ->
    ?icon:string ->
    ?image:Notification.image ->
    summary:string ->
    ?body:string ->
    ?actions:(string * ([> `Closed | `Default ] as 'a)) list ->
    ?urgency:Notification.urgency ->
    ?category:string ->
    ?sound_file:string ->
    ?suppress_sound:bool ->
    ?pos:int * int ->
    ?hints:(string * OBus_value.V.single) list ->
    ?timeout:int -> unit -> 'Notification.t Lwt.t
  type server_info = {
    server_name : string;
    server_vendor : string;
    server_version : string;
    server_spec_version : string;
  }
  val get_server_information : unit -> Notification.server_info Lwt.t
  val get_capabilities : unit -> string list Lwt.t
end