Use ~/.jcode/ for all config, data, and plugins

ober

59d760f543d088cc6d84504ea59abef1e5e41810

diff --git a/src/jcode/core/config.ss b/src/jcode/core/config.ss
index bee34f5..6299fc9 100644
--- a/src/jcode/core/config.ss
+++ b/src/jcode/core/config.ss
@@ -1,6 +1,7 @@
 ;;; jcode configuration management
 
 (export load-config
+        jcode-home
         config-ref
         config-api-key
         config-model
@@ -14,13 +15,16 @@
 
 (def *config* (make-parameter #f))
 
+(def (jcode-home)
+  "Return ~/.jcode, creating it if needed."
+  (let ((dir (path-join (getenv "HOME") ".jcode")))
+    (unless (file-exists? dir) (mkdir dir))
+    dir))
+
 (def (config-paths)
   (list
     (path-join (current-directory) "jcode.json")
-    (path-join (or (getenv "XDG_CONFIG_HOME")
-                   (path-join (getenv "HOME") ".config"))
-               "jcode" "config.json")
-    (path-join (getenv "HOME") ".jcode.json")))
+    (path-join (jcode-home) "config.json")))
 
 (def (find-config-file)
   (let loop ((paths (config-paths)))
@@ -59,10 +63,8 @@
     config))
 
 (def (merge-opencode-keys! providers)
-  ;; Read ~/.local/share/opencode/auth.json for provider keys
-  (let ((auth-file (path-join (or (getenv "XDG_DATA_HOME")
-                                  (path-join (getenv "HOME") ".local" "share"))
-                              "opencode" "auth.json")))
+  ;; Read opencode auth.json for provider keys
+  (let ((auth-file (path-join (getenv "HOME") ".local" "share" "opencode" "auth.json")))
     (when (file-exists? auth-file)
       (try
         (let ((auth (call-with-input-file auth-file read-json)))
diff --git a/src/jcode/core/plugin.ss b/src/jcode/core/plugin.ss
index 420615f..40e00e8 100644
--- a/src/jcode/core/plugin.ss
+++ b/src/jcode/core/plugin.ss
@@ -17,9 +17,7 @@
 
 (def (plugin-dirs)
   "Return list of directories to scan for plugins."
-  (let ((home-dir (path-join (or (getenv "XDG_CONFIG_HOME")
-                                 (path-join (getenv "HOME") ".config"))
-                             "jcode" "plugins"))
+  (let ((home-dir (path-join (jcode-home) "plugins"))
         (local-dir (path-join (current-directory) ".jcode" "plugins"))
         (cfg-dirs (config-ref "pluginDirs")))
     (filter file-directory?
diff --git a/src/jcode/core/session.ss b/src/jcode/core/session.ss
index a8bb8c6..b5f5069 100644
--- a/src/jcode/core/session.ss
+++ b/src/jcode/core/session.ss
@@ -17,17 +17,13 @@
         :std/misc/uuid
         :std/os/path
         :std/text/json
+        ./config
         ./message)
 
 (defstruct session (id title created messages))
 
 (def (db-path)
-  (let* ((data-dir (or (getenv "XDG_DATA_HOME")
-                       (path-join (getenv "HOME") ".local" "share")))
-         (dir (path-join data-dir "jcode")))
-    (unless (file-exists? dir)
-      (mkdir dir))
-    (path-join dir "sessions.db")))
+  (path-join (jcode-home) "sessions.db"))
 
 (def (open-db)
   (sqlite-open (db-path)))