diff --git a/doerg/src/net/deertopia/doerg/config.clj b/doerg/src/net/deertopia/doerg/config.clj index 6c0cc07..91263ed 100644 --- a/doerg/src/net/deertopia/doerg/config.clj +++ b/doerg/src/net/deertopia/doerg/config.clj @@ -19,7 +19,7 @@ ::s/invalid))) (s/def ::d/file - (s/conformer #(or (-> % fs/file fs/expand-home fs/absolutize) + (s/conformer #(or (-> % fs/expand-home fs/file) ::s/invalid))) (s/def ::d/executable @@ -44,12 +44,16 @@ (and (fs/exists? x) x)) (fs/split-paths (System/getenv "XDG_DATA_DIRS")))) -(defn read-config [f] - (->> f aero/read-config (s/conform ::d/config))) +(defn read-config [& files] + (->> files + (filter identity) + (map aero/read-config) + (apply merge) + (s/conform ::d/config))) (def default - (let [r (->> "net/deertopia/doerg/config.edn" - io/resource read-config)] + (let [r (-> "net/deertopia/doerg/config.edn" + io/resource (read-config (System/getenv "DOERG_CONFIG")))] (if (s/invalid? r) (throw (IllegalArgumentException. "default config is bad!")) diff --git a/publisher/resources/net/deertopia/publisher/config.edn b/publisher/resources/net/deertopia/publisher/config.edn new file mode 100644 index 0000000..d467e9c --- /dev/null +++ b/publisher/resources/net/deertopia/publisher/config.edn @@ -0,0 +1,5 @@ +#:net.deertopia.publisher +{:state-directory #join [#or [#env XDG_STATE_HOME + #envf ["%s/.local/share" HOME]] + "/doerg-publisher"] + :org-roam-db-path #join [#env HOME "/.cache/emacs/org-roam.db"]} diff --git a/publisher/src/net/deertopia/publisher/config.clj b/publisher/src/net/deertopia/publisher/config.clj index c1328c1..0e86e8a 100644 --- a/publisher/src/net/deertopia/publisher/config.clj +++ b/publisher/src/net/deertopia/publisher/config.clj @@ -1,17 +1,32 @@ (ns net.deertopia.publisher.config (:require [babashka.fs :as fs] [clojure.spec.alpha :as s] - [net.deertopia.doerg.config :as doerg])) + [net.deertopia.doerg :as-alias doerg] + [net.deertopia.publisher :as-alias p] + [aero.core :as aero] + [clojure.java.io :as io])) -(s/def ::config - (s/keys :req [::state-directory - ::org-roam-db-path])) +(s/def ::p/config + (s/keys :req [::p/state-directory + ::p/org-roam-db-path])) + +(s/def ::p/state-directory ::doerg/file) +(s/def ::p/org-roam-db-path ::doerg/file) + +(defn read-config [& files] + (->> files + (filter identity) + (map aero/read-config) + (apply merge) + (s/conform ::p/config))) (def default - {::state-directory (fs/xdg-state-home "doerg-publisher") - ::org-roam-db-path (fs/file (fs/home) ".cache" "emacs" "org-roam.db")}) + (let [r (-> "net/deertopia/publisher/config.edn" + io/resource + (read-config (System/getenv "DOERG_PUBLISHER_CONFIG")))] + (if (s/invalid? r) + (throw (IllegalArgumentException. + "default config is bad!")) + r))) (def ^:dynamic *cfg* default) - -(s/def ::state-directory ::doerg/file) -(s/def ::org-roam-db-path ::doerg/file) diff --git a/publisher/src/net/deertopia/publisher/roam.clj b/publisher/src/net/deertopia/publisher/roam.clj index 765bb45..f34f650 100644 --- a/publisher/src/net/deertopia/publisher/roam.clj +++ b/publisher/src/net/deertopia/publisher/roam.clj @@ -3,6 +3,7 @@ [net.deertopia.publisher.config :as cfg] [net.deertopia.publisher.elisp :as elisp] [net.deertopia.publisher.slug :as slug] + [net.deertopia.publisher :as-alias publisher] [next.jdbc :as sql]) (:import (java.util UUID))) @@ -11,7 +12,7 @@ (defonce ^:dynamic *use-db-cache?* true) -(def db-path (-> cfg/*cfg* ::cfg/org-roam-db-path +(def db-path (-> cfg/*cfg* ::publisher/org-roam-db-path fs/expand-home str)) (def db {:dbtype "sqlite"