summaryrefslogtreecommitdiff
path: root/guix/ui.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix/ui.scm')
-rw-r--r--guix/ui.scm21
1 files changed, 21 insertions, 0 deletions
diff --git a/guix/ui.scm b/guix/ui.scm
index 2b75504573..7d1ea2bcbd 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -41,6 +41,7 @@
location->string
call-with-temporary-output-file
switch-symlinks
+ config-directory
fill-paragraph
string->recutils
package->recutils
@@ -178,6 +179,26 @@ both when LINK already exists and when it does not."
(symlink target pivot)
(rename-file pivot link)))
+(define (config-directory)
+ "Return the name of the configuration directory, after making sure that it
+exists. Honor the XDG specs,
+<http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html>."
+ (let ((dir (and=> (or (getenv "XDG_CONFIG_HOME")
+ (and=> (getenv "HOME")
+ (cut string-append <> "/.config")))
+ (cut string-append <> "/guix"))))
+ (catch 'system-error
+ (lambda ()
+ (mkdir dir)
+ dir)
+ (lambda args
+ (match (system-error-errno args)
+ ((or EEXIST 0)
+ dir)
+ (err
+ (leave (_ "failed to create configuration directory `~a': ~a~%")
+ dir (strerror err))))))))
+
(define* (fill-paragraph str width #:optional (column 0))
"Fill STR such that each line contains at most WIDTH characters, assuming
that the first character is at COLUMN.