From fad31603a2201dbf1b33e5c0ae8530a52a823546 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Sun, 22 Mar 2026 16:08:05 -0600 Subject: [PATCH] =?UTF-8?q?feat:=20publisher=EC=97=90=EC=84=9C=20configura?= =?UTF-8?q?tion=EC=9D=84=20=EC=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doerg/src/net/deertopia/doerg/config.clj | 28 +++++++++++++------ .../net/deertopia/publisher/config.edn | 5 ++++ .../src/net/deertopia/publisher/config.clj | 25 +++++++++++------ .../src/net/deertopia/publisher/roam.clj | 3 +- 4 files changed, 42 insertions(+), 19 deletions(-) create mode 100644 publisher/resources/net/deertopia/publisher/config.edn diff --git a/doerg/src/net/deertopia/doerg/config.clj b/doerg/src/net/deertopia/doerg/config.clj index 6c0cc07..60c14ad 100644 --- a/doerg/src/net/deertopia/doerg/config.clj +++ b/doerg/src/net/deertopia/doerg/config.clj @@ -14,13 +14,10 @@ ::d/doerg-parser])) (s/def ::d/directory - (s/conformer #(if-some [x (fs/file %)] - (if (fs/directory? x) x ::s/invalid) - ::s/invalid))) + (s/conformer #(fs/file %))) (s/def ::d/file - (s/conformer #(or (-> % fs/file fs/expand-home fs/absolutize) - ::s/invalid))) + (s/conformer #(-> % fs/expand-home fs/file))) (s/def ::d/executable (s/conformer @@ -44,12 +41,25 @@ (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 make-read-config [spec] + (fn [& files] + (let [r (->> files + (filter identity) + (map aero/read-config) + (apply merge)) + conformed (s/conform spec r)] + (if-not (s/invalid? conformed) + conformed + (throw (IllegalArgumentException. + "bad config" + (ex-info "couldn't conform" + (s/explain-data spec r)))))))) + +(def read-config (make-read-config ::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..6c6661a 100644 --- a/publisher/src/net/deertopia/publisher/config.clj +++ b/publisher/src/net/deertopia/publisher/config.clj @@ -1,17 +1,24 @@ (ns net.deertopia.publisher.config (:require [babashka.fs :as fs] [clojure.spec.alpha :as s] - [net.deertopia.doerg.config :as doerg])) + [net.deertopia.doerg.config :as 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 ::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) + +(def read-config (doerg-config/make-read-config ::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")}) + (-> "net/deertopia/publisher/config.edn" + io/resource + (read-config (System/getenv "DOERG_PUBLISHER_CONFIG")))) (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"