package xdg
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file xdg.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94type t = { env : string -> string option ; win32 : bool ; home_dir : string ; mutable cache_dir : string ; mutable config_dir : string ; mutable data_dir : string ; mutable state_dir : string ; mutable runtime_dir : string option } let ( / ) = Filename.concat type known_folder = | InternetCache | LocalAppData external get_known_folder_path : known_folder -> string option = "dune_xdg__get_known_folder_path" let make t env_var unix_default win32_folder = let default = if t.win32 then ( match get_known_folder_path win32_folder with | None -> "" | Some s -> s) else unix_default in match t.env env_var with | None -> default | Some s when Filename.is_relative s -> default | Some s -> s ;; let cache_dir t = let home = t.home_dir in make t "XDG_CACHE_HOME" (home / ".cache") InternetCache ;; let config_dir t = let home = t.home_dir in make t "XDG_CONFIG_HOME" (home / ".config") LocalAppData ;; let data_dir t = let home = t.home_dir in make t "XDG_DATA_HOME" (home / ".local" / "share") LocalAppData ;; let state_dir t = let home = t.home_dir in make t "XDG_STATE_HOME" (home / ".local" / "state") LocalAppData ;; let create ?win32 ~env () = let win32 = match win32 with | None -> Sys.win32 | Some s -> s in let home_dir = let var = if win32 then "USERPROFILE" else "HOME" in match env var with | None -> "" | Some s -> s in let t = { env ; win32 ; home_dir ; cache_dir = "" ; config_dir = "" ; data_dir = "" ; state_dir = "" ; runtime_dir = None } in t.cache_dir <- cache_dir t; t.config_dir <- config_dir t; t.data_dir <- data_dir t; t.state_dir <- state_dir t; t.runtime_dir <- env "XDG_RUNTIME_DIR"; t ;; let home_dir t = t.home_dir let config_dir t = t.config_dir let data_dir t = t.data_dir let cache_dir t = t.cache_dir let state_dir t = t.state_dir let runtime_dir t = t.runtime_dir