sig
  module Conf :
    sig
      type link = string
      type path = Dtools.Conf.link list
      type ut =
          < comments : string list; descr : string; kind : string option;
            path : Dtools.Conf.path -> Dtools.Conf.ut;
            plug : Dtools.Conf.link -> Dtools.Conf.ut -> unit;
            routes : Dtools.Conf.ut -> Dtools.Conf.path list;
            subs : Dtools.Conf.link list; ut : Dtools.Conf.ut >
      type 'a t =
          < alias : ?comments:string list ->
                    ?descr:string ->
                    (Dtools.Conf.ut -> unit) -> 'Dtools.Conf.t;
            comments : string list; descr : string; get : 'a;
            get_d : 'a option; kind : string option;
            on_change : ('-> unit) -> unit;
            path : Dtools.Conf.path -> Dtools.Conf.ut;
            plug : Dtools.Conf.link -> Dtools.Conf.ut -> unit;
            routes : Dtools.Conf.ut -> Dtools.Conf.path list;
            set : '-> unit; set_d : 'a option -> unit;
            subs : Dtools.Conf.link list; ut : Dtools.Conf.ut >
      type links = (Dtools.Conf.link * Dtools.Conf.ut) list
      exception Undefined of Dtools.Conf.ut
      exception Invalid of string
      exception Unbound of Dtools.Conf.ut * string
      exception Bound of Dtools.Conf.ut * string
      exception Mismatch of Dtools.Conf.ut
      exception Cyclic of Dtools.Conf.ut * Dtools.Conf.ut
      exception Wrong_Conf of string * string
      exception File_Wrong_Conf of string * int * string
      type 'a builder =
          ?d:'->
          ?p:(Dtools.Conf.ut -> unit) ->
          ?l:Dtools.Conf.links ->
          ?comments:string list -> string -> 'Dtools.Conf.t
      val unit : unit Dtools.Conf.builder
      val int : int Dtools.Conf.builder
      val float : float Dtools.Conf.builder
      val bool : bool Dtools.Conf.builder
      val string : string Dtools.Conf.builder
      val list : string list Dtools.Conf.builder
      val void :
        ?p:(Dtools.Conf.ut -> unit) ->
        ?l:Dtools.Conf.links ->
        ?comments:string list -> string -> Dtools.Conf.ut
      val as_unit : Dtools.Conf.ut -> unit Dtools.Conf.t
      val as_int : Dtools.Conf.ut -> int Dtools.Conf.t
      val as_float : Dtools.Conf.ut -> float Dtools.Conf.t
      val as_bool : Dtools.Conf.ut -> bool Dtools.Conf.t
      val as_string : Dtools.Conf.ut -> string Dtools.Conf.t
      val as_list : Dtools.Conf.ut -> string list Dtools.Conf.t
      val path_of_string : string -> Dtools.Conf.path
      val string_of_path : Dtools.Conf.path -> string
      val descr : ?prefix:Dtools.Conf.path -> Dtools.Conf.ut -> string
      val dump : ?prefix:Dtools.Conf.path -> Dtools.Conf.ut -> string
      val conf_set : Dtools.Conf.ut -> string -> unit
      val conf_file : Dtools.Conf.ut -> string -> unit
      val args :
        Dtools.Conf.ut -> (string list * Stdlib.Arg.spec * string) list
    end
  module Init :
    sig
      type t
      val start : Dtools.Init.t
      val stop : Dtools.Init.t
      val make :
        ?name:string ->
        ?depends:Dtools.Init.t list ->
        ?triggers:Dtools.Init.t list ->
        ?after:Dtools.Init.t list ->
        ?before:Dtools.Init.t list -> (unit -> unit) -> Dtools.Init.t
      val at_start :
        ?name:string ->
        ?depends:Dtools.Init.t list ->
        ?triggers:Dtools.Init.t list ->
        ?after:Dtools.Init.t list ->
        ?before:Dtools.Init.t list -> (unit -> unit) -> Dtools.Init.t
      val at_stop :
        ?name:string ->
        ?depends:Dtools.Init.t list ->
        ?triggers:Dtools.Init.t list ->
        ?after:Dtools.Init.t list ->
        ?before:Dtools.Init.t list -> (unit -> unit) -> Dtools.Init.t
      val exec : Dtools.Init.t -> unit
      exception Root_prohibited of [ `Both | `Group | `User ]
      val init : ?prohibit_root:bool -> (unit -> unit) -> unit
      exception StartError of exn
      exception StopError of exn
      val conf : Dtools.Conf.ut
      val conf_daemon : bool Dtools.Conf.t
      val conf_daemon_pidfile : bool Dtools.Conf.t
      val conf_daemon_pidfile_path : string Dtools.Conf.t
      val conf_concurrent : bool Dtools.Conf.t
      val conf_trace : bool Dtools.Conf.t
      val conf_catch_exn : bool Dtools.Conf.t
      val args : (string list * Stdlib.Arg.spec * string) list
    end
  module Log :
    sig
      type t =
          < active : int -> bool;
            f : 'a. int -> ('a, unit, string, unit) Stdlib.format4 -> 'a >
      type custom_log = { timestamp : bool; exec : string -> unit; }
      val add_custom_log : string -> Dtools.Log.custom_log -> unit
      val rm_custom_log : string -> unit
      val make : Dtools.Conf.path -> Dtools.Log.t
      val start : Dtools.Init.t
      val stop : Dtools.Init.t
      val conf : Dtools.Conf.ut
      val conf_level : int Dtools.Conf.t
      val conf_unix_timestamps : bool Dtools.Conf.t
      val conf_stdout : bool Dtools.Conf.t
      val conf_file : bool Dtools.Conf.t
      val conf_file_path : string Dtools.Conf.t
      val conf_file_append : bool Dtools.Conf.t
      val conf_file_perms : int Dtools.Conf.t
      val args : (string list * Stdlib.Arg.spec * string) list
    end
end