40 lines
1.2 KiB
Clojure
40 lines
1.2 KiB
Clojure
(ns net.deertopia.publisher.config
|
|
(:require [babashka.fs :as fs]
|
|
[clojure.spec.alpha :as s]
|
|
[net.deertopia.doerg.config]
|
|
[net.deertopia.doerg :as-alias doerg]
|
|
[net.deertopia.publisher :as-alias p]
|
|
[aero.core :as aero]
|
|
[clojure.java.io :as io]))
|
|
|
|
(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]
|
|
(let [r (->> files
|
|
(filter identity)
|
|
(map aero/read-config)
|
|
(apply merge))
|
|
conformed (s/conform ::p/config r)]
|
|
(if-not (s/invalid? conformed)
|
|
conformed
|
|
(throw (IllegalArgumentException.
|
|
"bad config"
|
|
(ex-info "couldn't conform"
|
|
(s/explain-data ::p/config r)))))))
|
|
|
|
(def default
|
|
(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)
|