summaryrefslogtreecommitdiff
path: root/lib/config.ml
diff options
context:
space:
mode:
authorMarius Peter <marius.peter@tutanota.com>2025-05-27 23:25:39 +0200
committerMarius Peter <marius.peter@tutanota.com>2025-05-27 23:25:39 +0200
commite85fa4da3ace9a8f77adddf28609fa943273e641 (patch)
tree814c5f60a331404d408ef74deb57033bb3e655b3 /lib/config.ml
parentb05013516d858af43f3429683e52adfc4447e896 (diff)
Search configuration file in alternative directories.
Diffstat (limited to 'lib/config.ml')
-rw-r--r--lib/config.ml35
1 files changed, 16 insertions, 19 deletions
diff --git a/lib/config.ml b/lib/config.ml
index ee0129c..540a5d0 100644
--- a/lib/config.ml
+++ b/lib/config.ml
@@ -5,7 +5,7 @@ open Toml
type t = {
user : string;
default_branch : string;
- repositories_root_path : string;
+ git_project_root : string;
commits_max_displayed : int;
}
@@ -13,11 +13,16 @@ let default =
{
user = Unix.getlogin ();
default_branch = "master";
- repositories_root_path = Filename.concat (Sys.getenv "HOME") "git.test";
+ git_project_root = Filename.concat (Sys.getenv "HOME") "git.test";
commits_max_displayed = 10;
}
-let config_file = Filename.(concat current_dir_name "config.toml")
+let locate_config_file () =
+ match List.find_map Sys.getenv_opt [ "OGIT_CONFIG"; "XDG_CONFIG_HOME" ] with
+ | Some file -> file
+ | None -> "/etc/ogit/config.toml"
+
+let config_file = locate_config_file ()
let to_table t =
let open Types in
@@ -26,8 +31,8 @@ let to_table t =
[
("user", TString t.user);
("default_branch", TString t.default_branch);
- ("repositories.root_path", TString t.repositories_root_path);
- ("commits.max_displayed", TInt t.commits_max_displayed);
+ ("git_project_root", TString t.git_project_root);
+ ("commits_max_displayed", TInt t.commits_max_displayed);
]
|> Min.of_key_values
@@ -42,35 +47,27 @@ let read_file ?(file = config_file) () =
| `Error (e, l) ->
Error (Printf.sprintf "%s: %s at line %d" l.source e l.line)
| `Ok table ->
- let ( let* ) = Result.bind in
let find_string key =
- match Toml.Types.Table.find_opt (Toml.Min.key key) table with
+ match Types.Table.find_opt (Min.key key) table with
| Some (TString s) -> Ok s
| Some _ -> Error ("Expected string for key: " ^ key)
| None -> Error ("Missing key: " ^ key)
in
let find_int key =
- match Toml.Types.Table.find_opt (Toml.Min.key key) table with
+ match Types.Table.find_opt (Min.key key) table with
| Some (TInt i) -> Ok i
| Some _ -> Error ("Expected int for key: " ^ key)
| None -> Error ("Missing key: " ^ key)
in
- let* repositories_root_path = find_string "repositories_root" in
+ let ( let* ) = Result.bind in
+ let* git_project_root = find_string "git_project_root" in
let* user = find_string "user" in
let* default_branch = find_string "default_branch" in
let* commits_max_displayed = find_int "max_commits_displayed" in
- Ok
- {
- repositories_root_path;
- user;
- default_branch;
- commits_max_displayed;
- }
+ Ok { git_project_root; user; default_branch; commits_max_displayed }
with _ ->
prerr_endline "[config.ml] Falling back to default config.";
Ok default
let config =
- match read_file ~file:config_file () with
- | Ok cfg -> cfg
- | Error err -> failwith err
+ match read_file ~file:config_file () with Ok cfg -> cfg | Error _ -> default
Copyright 2019--2025 Marius PETER