sig
  module Env :
    sig
      val find : empty_to_none:bool -> string -> string option
      val find_value :
        (string -> ('a, string) Stdlib.result) ->
        empty_to_none:bool -> string -> ('a, string) Stdlib.result option
      type t = string B0_std.String.Map.t
      val empty : B0_std.Os.Env.t
      val override : B0_std.Os.Env.t -> by:B0_std.Os.Env.t -> B0_std.Os.Env.t
      val current : unit -> (B0_std.Os.Env.t, string) Stdlib.result
      type assignments = string list
      val current_assignments :
        unit -> (B0_std.Os.Env.assignments, string) Stdlib.result
      val of_assignments :
        ?init:B0_std.Os.Env.t ->
        string list -> (B0_std.Os.Env.t, string) Stdlib.result
      val to_assignments : B0_std.Os.Env.t -> B0_std.Os.Env.assignments
    end
  module Path :
    sig
      val exists : B0_std.Fpath.t -> (bool, string) Stdlib.result
      val must_exist : B0_std.Fpath.t -> (unit, string) Stdlib.result
      val delete :
        recurse:bool -> B0_std.Fpath.t -> (bool, string) Stdlib.result
      val rename :
        force:bool ->
        make_path:bool ->
        src:B0_std.Fpath.t -> B0_std.Fpath.t -> (unit, string) Stdlib.result
      val copy :
        ?rel:bool ->
        ?atomic:bool ->
        ?allow_hardlinks:bool ->
        ?follow_symlinks:bool ->
        ?prune:(Unix.stats -> string -> B0_std.Fpath.t -> bool) ->
        make_path:bool ->
        recurse:bool ->
        src:B0_std.Fpath.t -> B0_std.Fpath.t -> (unit, string) Stdlib.result
      val get_mode : B0_std.Fpath.t -> (int, string) Stdlib.result
      val set_mode : B0_std.Fpath.t -> int -> (unit, string) Stdlib.result
      val stat : B0_std.Fpath.t -> (Unix.stats, string) Stdlib.result
      val symlink :
        force:bool ->
        make_path:bool ->
        src:B0_std.Fpath.t -> B0_std.Fpath.t -> (unit, string) Stdlib.result
      val symlink_link :
        B0_std.Fpath.t -> (B0_std.Fpath.t, string) Stdlib.result
      val symlink_stat : B0_std.Fpath.t -> (Unix.stats, string) Stdlib.result
      type tmp_name = (string -> string, unit, string) Stdlib.format
      val tmp :
        ?make_path:bool ->
        ?dir:B0_std.Fpath.t ->
        ?name:B0_std.Os.Path.tmp_name ->
        unit -> (B0_std.Fpath.t, string) Stdlib.result
    end
  module File :
    sig
      val null : B0_std.Fpath.t
      val dash : B0_std.Fpath.t
      val exists : B0_std.Fpath.t -> (bool, string) Stdlib.result
      val must_exist : B0_std.Fpath.t -> (unit, string) Stdlib.result
      val is_executable : B0_std.Fpath.t -> bool
      val delete : B0_std.Fpath.t -> (bool, string) Stdlib.result
      val truncate : B0_std.Fpath.t -> int -> (unit, string) Stdlib.result
      val link :
        force:bool ->
        make_path:bool ->
        src:B0_std.Fpath.t -> B0_std.Fpath.t -> (unit, string) Stdlib.result
      val read_with_fd :
        B0_std.Fpath.t ->
        (Unix.file_descr -> 'b) -> ('b, string) Stdlib.result
      val read_with_ic :
        B0_std.Fpath.t ->
        (Stdlib.in_channel -> 'b) -> ('b, string) Stdlib.result
      val read : B0_std.Fpath.t -> (string, string) Stdlib.result
      val write_with_fd :
        ?atomic:bool ->
        ?mode:int ->
        force:bool ->
        make_path:bool ->
        B0_std.Fpath.t ->
        (Unix.file_descr -> ('a, 'b) Stdlib.Pervasives.result) ->
        (('a, 'b) Stdlib.Pervasives.result, string) Stdlib.result
      val write_with_oc :
        ?atomic:bool ->
        ?mode:int ->
        force:bool ->
        make_path:bool ->
        B0_std.Fpath.t ->
        (Stdlib.out_channel -> ('a, 'b) Stdlib.Pervasives.result) ->
        (('a, 'b) Stdlib.Pervasives.result, string) Stdlib.result
      val write :
        ?atomic:bool ->
        ?mode:int ->
        force:bool ->
        make_path:bool ->
        B0_std.Fpath.t -> string -> (unit, string) Stdlib.result
      val copy :
        ?atomic:bool ->
        ?mode:int ->
        force:bool ->
        make_path:bool ->
        src:B0_std.Fpath.t -> B0_std.Fpath.t -> (unit, string) Stdlib.result
      val with_tmp_fd :
        ?flags:Unix.open_flag list ->
        ?mode:int ->
        ?make_path:bool ->
        ?dir:B0_std.Fpath.t ->
        ?name:B0_std.Os.Path.tmp_name ->
        (B0_std.Fpath.t -> Unix.file_descr -> 'b) ->
        ('b, string) Stdlib.result
      val open_tmp_fd :
        ?flags:Unix.open_flag list ->
        ?mode:int ->
        ?make_path:bool ->
        ?dir:B0_std.Fpath.t ->
        ?name:B0_std.Os.Path.tmp_name ->
        unit -> (B0_std.Fpath.t * Unix.file_descr, string) Stdlib.result
      val with_tmp_oc :
        ?flags:Unix.open_flag list ->
        ?mode:int ->
        ?make_path:bool ->
        ?dir:B0_std.Fpath.t ->
        ?name:B0_std.Os.Path.tmp_name ->
        (B0_std.Fpath.t -> Stdlib.out_channel -> 'b) ->
        ('b, string) Stdlib.result
    end
  module Dir :
    sig
      val exists : B0_std.Fpath.t -> (bool, string) Stdlib.result
      val must_exist : B0_std.Fpath.t -> (unit, string) Stdlib.result
      val create :
        ?mode:int ->
        make_path:bool -> B0_std.Fpath.t -> (bool, string) Stdlib.result
      val fold :
        ?rel:bool ->
        ?dotfiles:bool ->
        ?follow_symlinks:bool ->
        ?prune:(Unix.stats -> string -> B0_std.Fpath.t -> bool) ->
        recurse:bool ->
        (Unix.stats -> string -> B0_std.Fpath.t -> '-> 'a) ->
        B0_std.Fpath.t -> '-> ('a, string) Stdlib.result
      val fold_files :
        ?rel:bool ->
        ?dotfiles:bool ->
        ?follow_symlinks:bool ->
        ?prune:(Unix.stats -> string -> B0_std.Fpath.t -> bool) ->
        recurse:bool ->
        (Unix.stats -> string -> B0_std.Fpath.t -> '-> 'a) ->
        B0_std.Fpath.t -> '-> ('a, string) Stdlib.result
      val fold_dirs :
        ?rel:bool ->
        ?dotfiles:bool ->
        ?follow_symlinks:bool ->
        ?prune:(Unix.stats -> string -> B0_std.Fpath.t -> bool) ->
        recurse:bool ->
        (Unix.stats -> string -> B0_std.Fpath.t -> '-> 'a) ->
        B0_std.Fpath.t -> '-> ('a, string) Stdlib.result
      val path_list :
        Unix.stats ->
        string ->
        B0_std.Fpath.t -> B0_std.Fpath.t list -> B0_std.Fpath.t list
      val copy :
        ?rel:bool ->
        ?atomic:bool ->
        ?allow_hardlinks:bool ->
        ?follow_symlinks:bool ->
        ?prune:(Unix.stats -> string -> B0_std.Fpath.t -> bool) ->
        make_path:bool ->
        recurse:bool ->
        src:B0_std.Fpath.t -> B0_std.Fpath.t -> (unit, string) Stdlib.result
      val cwd : unit -> (B0_std.Fpath.t, string) Stdlib.result
      val set_cwd : B0_std.Fpath.t -> (unit, string) Stdlib.result
      val with_cwd :
        B0_std.Fpath.t -> (unit -> 'a) -> ('a, string) Stdlib.result
      val default_tmp : unit -> B0_std.Fpath.t
      val set_default_tmp : B0_std.Fpath.t -> unit
      val with_tmp :
        ?mode:int ->
        ?make_path:bool ->
        ?dir:B0_std.Fpath.t ->
        ?name:B0_std.Os.Path.tmp_name ->
        (B0_std.Fpath.t -> 'a) -> ('a, string) Stdlib.result
      val tmp :
        ?mode:int ->
        ?make_path:bool ->
        ?dir:B0_std.Fpath.t ->
        ?name:B0_std.Os.Path.tmp_name ->
        unit -> (B0_std.Fpath.t, string) Stdlib.result
      val user : unit -> (B0_std.Fpath.t, string) Stdlib.result
      val config : unit -> (B0_std.Fpath.t, string) Stdlib.result
      val data : unit -> (B0_std.Fpath.t, string) Stdlib.result
      val cache : unit -> (B0_std.Fpath.t, string) Stdlib.result
      val runtime : unit -> (B0_std.Fpath.t, string) Stdlib.result
    end
  module Fd :
    sig
      val unix_buffer_size : int
      val apply :
        close:(Unix.file_descr -> unit) ->
        Unix.file_descr -> (Unix.file_descr -> 'a) -> 'a
      val copy :
        ?buf:Stdlib.Bytes.t -> src:Unix.file_descr -> Unix.file_descr -> unit
      val to_string : Unix.file_descr -> string
      val read_file : string -> Unix.file_descr -> string
    end
  module Cmd :
    sig
      val find_tool :
        ?search:B0_std.Fpath.t list ->
        B0_std.Cmd.tool -> (B0_std.Fpath.t option, string) Stdlib.result
      val must_find_tool :
        ?search:B0_std.Fpath.t list ->
        B0_std.Cmd.tool -> (B0_std.Fpath.t, string) Stdlib.result
      val find_first_tool :
        ?search:B0_std.Fpath.t list ->
        B0_std.Cmd.tool list -> (B0_std.Fpath.t option, string) Stdlib.result
      val find :
        ?search:B0_std.Fpath.t list ->
        B0_std.Cmd.t -> (B0_std.Cmd.t option, string) Stdlib.result
      val must_find :
        ?search:B0_std.Fpath.t list ->
        B0_std.Cmd.t -> (B0_std.Cmd.t, string) Stdlib.result
      val find_first :
        ?search:B0_std.Fpath.t list ->
        B0_std.Cmd.t list -> (B0_std.Cmd.t option, string) Stdlib.result
      type status = [ `Exited of int | `Signaled of int ]
      val pp_status : B0_std.Os.Cmd.status B0_std.Fmt.t
      val pp_cmd_status : (B0_std.Cmd.t * B0_std.Os.Cmd.status) B0_std.Fmt.t
      type stdi
      val in_string : string -> B0_std.Os.Cmd.stdi
      val in_file : B0_std.Fpath.t -> B0_std.Os.Cmd.stdi
      val in_fd : close:bool -> Unix.file_descr -> B0_std.Os.Cmd.stdi
      val in_stdin : B0_std.Os.Cmd.stdi
      val in_null : B0_std.Os.Cmd.stdi
      type stdo
      val out_file : B0_std.Fpath.t -> B0_std.Os.Cmd.stdo
      val out_fd : close:bool -> Unix.file_descr -> B0_std.Os.Cmd.stdo
      val out_stdout : B0_std.Os.Cmd.stdo
      val out_stderr : B0_std.Os.Cmd.stdo
      val out_null : B0_std.Os.Cmd.stdo
      val run_status :
        ?env:B0_std.Os.Env.assignments ->
        ?cwd:B0_std.Fpath.t ->
        ?stdin:B0_std.Os.Cmd.stdi ->
        ?stdout:B0_std.Os.Cmd.stdo ->
        ?stderr:B0_std.Os.Cmd.stdo ->
        B0_std.Cmd.t -> (B0_std.Os.Cmd.status, string) Stdlib.result
      val run_status_out :
        ?env:B0_std.Os.Env.assignments ->
        ?cwd:B0_std.Fpath.t ->
        ?stdin:B0_std.Os.Cmd.stdi ->
        ?stderr:[ `Out | `Stdo of B0_std.Os.Cmd.stdo ] ->
        ?trim:bool ->
        B0_std.Cmd.t -> (B0_std.Os.Cmd.status * string, string) Stdlib.result
      val run :
        ?env:B0_std.Os.Env.assignments ->
        ?cwd:B0_std.Fpath.t ->
        ?stdin:B0_std.Os.Cmd.stdi ->
        ?stdout:B0_std.Os.Cmd.stdo ->
        ?stderr:B0_std.Os.Cmd.stdo ->
        B0_std.Cmd.t -> (unit, string) Stdlib.result
      val run_out :
        ?env:B0_std.Os.Env.assignments ->
        ?cwd:B0_std.Fpath.t ->
        ?stdin:B0_std.Os.Cmd.stdi ->
        ?stderr:[ `Out | `Stdo of B0_std.Os.Cmd.stdo ] ->
        ?trim:bool -> B0_std.Cmd.t -> (string, string) Stdlib.result
      type pid
      val pid_to_int : B0_std.Os.Cmd.pid -> int
      val spawn :
        ?env:B0_std.Os.Env.assignments ->
        ?cwd:B0_std.Fpath.t ->
        ?stdin:B0_std.Os.Cmd.stdi ->
        ?stdout:B0_std.Os.Cmd.stdo ->
        ?stderr:B0_std.Os.Cmd.stdo ->
        B0_std.Cmd.t -> (B0_std.Os.Cmd.pid, string) Stdlib.result
      val spawn_poll_status :
        B0_std.Os.Cmd.pid ->
        (B0_std.Os.Cmd.status option, string) Stdlib.result
      val spawn_wait_status :
        B0_std.Os.Cmd.pid -> (B0_std.Os.Cmd.status, string) Stdlib.result
      type spawn_tracer =
          B0_std.Os.Cmd.pid ->
          B0_std.Os.Env.assignments option ->
          cwd:B0_std.Fpath.t option -> B0_std.Cmd.t -> unit
      val spawn_tracer_nop : B0_std.Os.Cmd.spawn_tracer
      val spawn_tracer : unit -> B0_std.Os.Cmd.spawn_tracer
      val set_spawn_tracer : B0_std.Os.Cmd.spawn_tracer -> unit
      val execv :
        ?env:B0_std.Os.Env.assignments ->
        ?cwd:B0_std.Fpath.t ->
        B0_std.Fpath.t -> B0_std.Cmd.t -> (unit, string) Stdlib.result
    end
end