[[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 (use-modules (shepherd service) ((ice-9 ftw) #:select (scandir))) (for-each (λ (file) (load (string-append "init.d/" file))) (scandir (string-append (dirname (current-filename)) "/init.d") (λ (file) (string-suffix? ".scm" file)))) (action 'shepherd 'daemonize) #+end_src