aboutsummaryrefslogtreecommitdiff
path: root/module/xdg/basedir.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/xdg/basedir.scm')
-rw-r--r--module/xdg/basedir.scm43
1 files changed, 25 insertions, 18 deletions
diff --git a/module/xdg/basedir.scm b/module/xdg/basedir.scm
index 92a5c7d9..f4e7b89b 100644
--- a/module/xdg/basedir.scm
+++ b/module/xdg/basedir.scm
@@ -3,59 +3,66 @@
;;; Code:
(define-module (xdg basedir)
- :export (sysconfdir runtime-dir
- data-home config-home cache-home
+ :export (runtime-dir
+ data-home config-home state-home cache-home
data-dirs config-dirs))
+;;; Check if an environment variable is set to a non-empty value.
+(define (set? var)
+ (cond ((getenv var)
+ => (lambda (s)
+ (if (string-null? s)
+ #f s)))
+ (else #f)))
+
;;; XDG_DATA_HOME
;;; $HOME/.local/share
(define (data-home)
- (or (getenv "XDG_DATA_HOME")
+ (or (set? "XDG_DATA_HOME")
(string-append (getenv "HOME") "/.local/share")))
;;; XDG_CONFIG_HOME
;;; $HOME/.config
(define (config-home)
- (or (getenv "XDG_CONFIG_HOME")
+ (or (set? "XDG_CONFIG_HOME")
(string-append (getenv "HOME") "/.config")))
+;;; XDG_STATE_HOME
+;;; $HOME/.local/state
+(define (state-home)
+ (or (set? "XDG_STATE_HOME")
+ (string-append (getenv "HOME") "/.local/state")))
+
;;; XDG_DATA_DIRS
;;; colon (:) sepparated, in addition to XDG_DATA_HOME
;;; /usr/local/share/:/usr/share/
(define (data-dirs)
- (let ((str (getenv "XDG_DATA_DIRS")))
+ (let ((str (set? "XDG_DATA_DIRS")))
(if str
- (parse-path str)
+ (string-split str #\:)
'("/usr/local/share" "/usr/share"))))
-;;; sysconfdir
-;;; /etc
-;;; Techincly not part of the standard, but it's mentioned
-(define (sysconfdir)
- (or (getenv "sysconfdir")
- "/etc"))
-
-
;;; XDG_CONFIG_DIRS
;;; colon (:) separated, in adddition to XDG_CONFIG_HOME
;;; /etc/xdg
(define (config-dirs)
- (let ((str (getenv "XDG_CONFIG_DIRS")))
+ (let ((str (set? "XDG_CONFIG_DIRS")))
(if str
(string-split str #\:)
- (list (string-append sysconfdir "/xdg")))))
+ '("/etc/xdg"))))
;;; XDG_CACHE_HOME
;;; $HOME/.cache
(define (cache-home)
- (or (getenv "XDG_CACHE_HOME")
+ (or (set? "XDG_CACHE_HOME")
(string-append (getenv "HOME") "/.cache")))
;;; XDG_RUNTIME_DIR
;;; Default to /tmp or /tmp/$(uid), and raise a warning
(define (runtime-dir)
- (or (getenv "XDG_RUNTIME_DIR")
+ (or (set? "XDG_RUNTIME_DIR")
(begin
(display "WARNING: XDG_RUNTIME_DIR unset, defaulting to /tmp\n"
(current-error-port))
"/tmp")))
+