summaryrefslogtreecommitdiff
path: root/gnu/home/services
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/home/services')
-rw-r--r--gnu/home/services/shells.scm32
-rw-r--r--gnu/home/services/shepherd.scm44
-rw-r--r--gnu/home/services/symlink-manager.scm36
-rw-r--r--gnu/home/services/xdg.scm5
4 files changed, 71 insertions, 46 deletions
diff --git a/gnu/home/services/shells.scm b/gnu/home/services/shells.scm
index 7b9769bcf3..d96c951cd8 100644
--- a/gnu/home/services/shells.scm
+++ b/gnu/home/services/shells.scm
@@ -77,7 +77,7 @@ user's customizations. Extend home-shell-profile service only if you
really know what you do."))
(define (add-shell-profile-file config)
- `(("profile"
+ `((".profile"
,(mixed-text-file
"shell-profile"
"\
@@ -211,18 +211,18 @@ source ~/.profile
(zsh-serialize-field config field)))))
(define (zsh-get-configuration-files config)
- `(("zprofile" ,(zsh-file-by-field config 'zprofile)) ;; Always non-empty
- ,@(if (and (zsh-field-not-empty? config 'zshenv)
- (zsh-field-not-empty? config 'environment-variables))
- `(("zshenv" ,(zsh-file-by-field config 'zshenv))) '())
+ `((".zprofile" ,(zsh-file-by-field config 'zprofile)) ;; Always non-empty
+ ,@(if (or (zsh-field-not-empty? config 'zshenv)
+ (zsh-field-not-empty? config 'environment-variables))
+ `((".zshenv" ,(zsh-file-by-field config 'zshenv))) '())
,@(if (zsh-field-not-empty? config 'zshrc)
- `(("zshrc" ,(zsh-file-by-field config 'zshrc))) '())
+ `((".zshrc" ,(zsh-file-by-field config 'zshrc))) '())
,@(if (zsh-field-not-empty? config 'zlogin)
- `(("zlogin" ,(zsh-file-by-field config 'zlogin))) '())
+ `((".zlogin" ,(zsh-file-by-field config 'zlogin))) '())
,@(if (zsh-field-not-empty? config 'zlogout)
- `(("zlogout" ,(zsh-file-by-field config 'zlogout))) '())))
+ `((".zlogout" ,(zsh-file-by-field config 'zlogout))) '())))
-(define (zsh-home-files config)
+(define (add-zsh-dot-configuration config)
(define zshenv-auxiliary-file
(mixed-text-file
"zshenv-auxiliary"
@@ -230,14 +230,14 @@ source ~/.profile
"[[ -f $ZDOTDIR/.zshenv ]] && source $ZDOTDIR/.zshenv\n"))
(if (home-zsh-configuration-xdg-flavor? config)
- `(("zshenv" ,zshenv-auxiliary-file))
+ `((".zshenv" ,zshenv-auxiliary-file))
(zsh-get-configuration-files config)))
-(define (zsh-xdg-configuration-files config)
+(define (add-zsh-xdg-configuration config)
(if (home-zsh-configuration-xdg-flavor? config)
(map
(lambda (lst)
- (cons (string-append "zsh/." (car lst))
+ (cons (string-append "zsh/" (car lst))
(cdr lst)))
(zsh-get-configuration-files config))
'()))
@@ -298,10 +298,10 @@ source ~/.profile
(extensions
(list (service-extension
home-files-service-type
- zsh-home-files)
+ add-zsh-dot-configuration)
(service-extension
home-xdg-configuration-files-service-type
- zsh-xdg-configuration-files)
+ add-zsh-xdg-configuration)
(service-extension
home-profile-service-type
add-zsh-packages)))
@@ -430,7 +430,7 @@ alias grep='grep --color=auto'\n")
(field-obj (car (filter-fields field))))
(if (or extra-content
(not (null? ((configuration-field-getter field-obj) config))))
- `(,(object->snake-case-string file-name)
+ `(,(string-append "." (object->snake-case-string file-name))
,(apply mixed-text-file
(object->snake-case-string file-name)
(append (or extra-content '())
@@ -439,7 +439,7 @@ alias grep='grep --color=auto'\n")
(filter
(compose not null?)
- `(("bash_profile"
+ `((".bash_profile"
,(mixed-text-file
"bash_profile"
"\
diff --git a/gnu/home/services/shepherd.scm b/gnu/home/services/shepherd.scm
index feff130259..62ab0aadc6 100644
--- a/gnu/home/services/shepherd.scm
+++ b/gnu/home/services/shepherd.scm
@@ -51,7 +51,7 @@
home-shepherd-configuration make-home-shepherd-configuration
home-shepherd-configuration?
(shepherd home-shepherd-configuration-shepherd
- (default shepherd)) ; package
+ (default shepherd-0.9)) ; package
(auto-start? home-shepherd-configuration-auto-start?
(default #t))
(services home-shepherd-configuration-services
@@ -78,12 +78,16 @@ as shepherd package."
'#$files))
(action 'root 'daemonize)
(format #t "Starting services...~%")
- (for-each
- (lambda (service) (start service))
- '#$(append-map shepherd-service-provision
- (filter shepherd-service-auto-start?
- services)))
- (newline)))
+ (let ((services-to-start
+ '#$(append-map shepherd-service-provision
+ (filter shepherd-service-auto-start?
+ services))))
+ (if (defined? 'start-in-the-background)
+ (start-in-the-background services-to-start)
+ (for-each start services-to-start))
+
+ (redirect-port (open-input-file "/dev/null")
+ (current-input-port)))))
(scheme-file "shepherd.conf" config)))
@@ -92,17 +96,21 @@ as shepherd package."
(services (home-shepherd-configuration-services config)))
(if (home-shepherd-configuration-auto-start? config)
(with-imported-modules '((guix build utils))
- #~(let ((log-dir (or (getenv "XDG_LOG_HOME")
- (format #f "~a/.local/var/log" (getenv "HOME")))))
- ((@ (guix build utils) mkdir-p) log-dir)
- (system*
- #$(file-append shepherd "/bin/shepherd")
- "--logfile"
- (string-append
- log-dir
- "/shepherd.log")
- "--config"
- #$(home-shepherd-configuration-file services shepherd))))
+ #~(unless (file-exists?
+ (string-append
+ (or (getenv "XDG_RUNTIME_DIR")
+ (format #f "/run/user/~a" (getuid)))
+ "/shepherd/socket"))
+ (let ((log-dir (or (getenv "XDG_LOG_HOME")
+ (format #f "~a/.local/var/log"
+ (getenv "HOME")))))
+ ((@ (guix build utils) mkdir-p) log-dir)
+ (system*
+ #$(file-append shepherd "/bin/shepherd")
+ "--logfile"
+ (string-append log-dir "/shepherd.log")
+ "--config"
+ #$(home-shepherd-configuration-file services shepherd)))))
#~"")))
(define (reload-configuration-gexp config)
diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm
index 3b851229f3..e4c931fbee 100644
--- a/gnu/home/services/symlink-manager.scm
+++ b/gnu/home/services/symlink-manager.scm
@@ -54,6 +54,10 @@
(or (getenv "XDG_CONFIG_HOME")
(string-append (getenv "HOME") "/.config")))
+ (define xdg-data-home
+ (or (getenv "XDG_DATA_HOME")
+ (string-append (getenv "HOME") "/.local/share")))
+
(define backup-directory
(string-append home-directory "/" (number->string (current-time))
"-guix-home-legacy-configs-backup"))
@@ -61,19 +65,30 @@
(define (preprocess-file file)
"If file is in XDG-CONFIGURATION-FILES-DIRECTORY use
subdirectory from XDG_CONFIG_HOME to generate a target path."
- (if (string-prefix? #$xdg-configuration-files-directory file)
- (string-append
- (substring xdg-config-home
- (1+ (string-length home-directory)))
- (substring file
- (string-length #$xdg-configuration-files-directory)))
- (string-append "." file)))
+ (cond
+ ((string-prefix? #$xdg-configuration-files-directory file)
+ (string-append
+ (substring xdg-config-home
+ (1+ (string-length home-directory)))
+ (substring file
+ (string-length #$xdg-configuration-files-directory))))
+ ((string-prefix? #$xdg-data-files-directory file)
+ (string-append
+ (substring xdg-data-home
+ (1+ (string-length home-directory)))
+ (substring file
+ (string-length #$xdg-data-files-directory))))
+ (else file)))
(define (target-file file)
;; Return the target of FILE, a config file name sans leading dot
;; such as "config/fontconfig/fonts.conf" or "bashrc".
(string-append home-directory "/" (preprocess-file file)))
+ (define (no-follow-file-exists? file)
+ "Return #t if file exists, even if it's a dangling symlink."
+ (->bool (false-if-exception (lstat file))))
+
(define (symlink-to-store? file)
(catch 'system-error
(lambda ()
@@ -112,7 +127,7 @@ subdirectory from XDG_CONFIG_HOME to generate a target path."
(const #t)
(lambda (file stat _) ;leaf
(let ((file (target-file (strip file))))
- (when (file-exists? file)
+ (when (no-follow-file-exists? file)
;; DO NOT remove the file if it is no longer a symlink to
;; the store, it will be backed up later during
;; create-symlinks phase.
@@ -142,6 +157,7 @@ subdirectory from XDG_CONFIG_HOME to generate a target path."
#t
(G_ "Skipping ~a (not an empty directory)... done\n")
directory))
+ ((= ENOENT errno) #t)
((= ENOTDIR errno) #t)
(else
(apply throw args)))))))))
@@ -171,7 +187,7 @@ subdirectory from XDG_CONFIG_HOME to generate a target path."
(lambda (file stat result) ;leaf
(let ((source (source-file (strip file)))
(target (target-file (strip file))))
- (when (file-exists? target)
+ (when (no-follow-file-exists? target)
(backup-file (strip file)))
(format #t (G_ "Symlinking ~a -> ~a...")
target source)
@@ -180,7 +196,7 @@ subdirectory from XDG_CONFIG_HOME to generate a target path."
(lambda (directory stat result) ;down
(unless (string=? directory config-file-directory)
(let ((target (target-file (strip directory))))
- (when (and (file-exists? target)
+ (when (and (no-follow-file-exists? target)
(not (file-is-directory? target)))
(backup-file (strip directory)))
diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm
index 361a2a6148..71c028c788 100644
--- a/gnu/home/services/xdg.scm
+++ b/gnu/home/services/xdg.scm
@@ -421,7 +421,8 @@ that the application cannot open the specified MIME type.")
(define (add-xdg-desktop-entry-file entry)
(let ((file (first entry))
(config (second entry)))
- (list (format #f "local/share/applications/~a" file)
+ ;; TODO: Use xdg-data-files instead of home-files here
+ (list (format #f "applications/~a" file)
(apply mixed-text-file
(format #f "xdg-desktop-~a-entry" file)
config))))
@@ -468,7 +469,7 @@ that the application cannot open the specified MIME type.")
(service-type (name 'home-xdg-mime-applications)
(extensions
(list (service-extension
- home-files-service-type
+ home-xdg-data-files-service-type
home-xdg-mime-applications-files)
(service-extension
home-xdg-configuration-files-service-type