[shepherd] Fix init file
‘current-filename’ is the real file name of the file, not the symbolic link that it's accessed through, so any relative references will be wrong.
This commit is contained in:
parent
13f4427ed9
commit
2313102c2b
1 changed files with 24 additions and 9 deletions
|
@ -1,13 +1,28 @@
|
||||||
[[info:shepherd][The Shepherd manual]] suggests that you use a single =init.scm=, but as is pointed out by this article about [[https://guix.gnu.org/en/blog/2020/gnu-shepherd-user-services/][GNU Shepherd user services]] it might be better to have the services in separate files so you can restart them individually if you make any changes to them. So I just put a loading script into =init.scm= that goes through the =init.d= directory and loads each service defined in there.
|
[[info:shepherd][The Shepherd manual]] suggests that you use a single =init.scm=, but as is pointed out by this article about [[https://guix.gnu.org/en/blog/2020/gnu-shepherd-user-services/][GNU Shepherd user services]] it might be better to have the services in separate files so you can restart them individually if you make any changes to them. So I just put a loading script into =init.scm= that goes through the =init.d= directory and loads each service defined in there.
|
||||||
|
|
||||||
#+begin_src scheme
|
#+begin_src scheme
|
||||||
(use-modules (shepherd service)
|
(use-modules (shepherd service)
|
||||||
((ice-9 ftw) #:select (scandir)))
|
((ice-9 ftw) #:select (scandir)))
|
||||||
|
#+end_src
|
||||||
(for-each
|
|
||||||
(λ (file) (load (string-append "init.d/" file)))
|
I can't use ~(current-filename)~ here because this file will be symlinked into the =$XDG_CONFIG_DIR/shepherd/init.scm= and the =current-filename= function will return the actual path, not the path of the symbolic link.
|
||||||
(scandir (string-append (dirname (current-filename)) "/init.d")
|
|
||||||
(λ (file) (string-suffix? ".scm" file))))
|
#+begin_src scheme
|
||||||
|
(define init-directory
|
||||||
(action 'shepherd 'daemonize)
|
(string-append (getenv "XDG_CONFIG_HOME") "/shepherd/init.d"))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
With that in place, we can loop over each =*.scm= file in the =init-directory= and load them.
|
||||||
|
|
||||||
|
#+begin_src scheme
|
||||||
|
(for-each
|
||||||
|
(λ (file) (load (string-append "init.d/" file)))
|
||||||
|
(scandir init-directory
|
||||||
|
(λ (file) (string-suffix? ".scm" file))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Now turn shepherd into a daemon.
|
||||||
|
|
||||||
|
#+begin_src scheme
|
||||||
|
(action 'shepherd 'daemonize)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
Loading…
Reference in a new issue