This is an automated email from the git hooks/post-receive script.

guix_mirror_bot pushed a commit to branch master
in repository guix.

The following commit(s) were added to refs/heads/master by this push:
     new e931cab87f gnu: home: services: Add 
home-git-annex-assistant-service-type
e931cab87f is described below

commit e931cab87fef3159511a6f425e5cddbeb8b06c96
Author: Yarl Baudig <[email protected]>
AuthorDate: Sat Mar 14 13:22:58 2026 +0100

    gnu: home: services: Add home-git-annex-assistant-service-type
    
    * gnu/home/services/git-annex-assistant.scm: New file.
    * gnu/local/mk (GNU_SYSTEM_MODULES): Register it.
    * doc/guix.texi (Miscellaneous Services): Document it.
    
    Change-Id: I9ca75210dfe7f6d2d81b9eb8919d6eb34c7bb002
    Signed-off-by: Ian Eure <[email protected]>
---
 doc/guix.texi                             | 40 +++++++++++++++
 gnu/home/services/git-annex-assistant.scm | 83 +++++++++++++++++++++++++++++++
 gnu/local.mk                              |  1 +
 3 files changed, 124 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index d5f782f35c..f4279bfb79 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -150,6 +150,7 @@ Copyright @copyright{} 2025 dan@*
 Copyright @copyright{} 2025 Noé Lopez@*
 Copyright @copyright{} 2026 David Elsing@*
 Copyright @copyright{} 2026 Nguyễn Gia Phong@*
+Copyright @copyright{} 2026 Yarl Baudig@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -55053,6 +55054,45 @@ You may specify a custom configuration by providing a
                        '(("grafana:/var/lib/grafana"))))))))
 @end lisp
 
+@subsubheading git-annex assistant Service
+
+@cindex git-annex assistant service
+The @code{(gnu home services git-annex-assistant)} module provides a
+service to run the @uref{https://git-annex.branchable.com/assistant/,
+git-annex assistant}.
+
+@defvar home-git-annex-assistant-service-type
+This is the type of the service that runs the assistant.  You must
+supply a @code{<home-git-annex-assistant-configuration>}.
+
+The service runs one assistant for each directory provided.  For
+example:
+
+@lisp
+(service home-git-annex-assistant-service-type
+         (home-git-annex-assistant-configuration
+           (directories '("/path/to/foo" "/path/to/bar"))))
+@end lisp
+@end defvar
+
+@c %start of fragment
+
+@deftp {Data Type} home-git-annex-assistant-configuration
+Available @code{home-git-annex-assistant-configuration} fields are:
+
+@table @asis
+@item @code{package} (default: @code{git-annex}) (type: package)
+Package that provides @code{git-annex}.
+
+@item @code{directories} (default: @code{()}) (type: list-of-strings)
+List of directories.
+
+@end table
+
+@end deftp
+
+@c %end of fragment
+
 @node Invoking guix home
 @section Invoking @command{guix home}
 
diff --git a/gnu/home/services/git-annex-assistant.scm 
b/gnu/home/services/git-annex-assistant.scm
new file mode 100644
index 0000000000..e8885b8cda
--- /dev/null
+++ b/gnu/home/services/git-annex-assistant.scm
@@ -0,0 +1,83 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2026 Yarl Baudig <[email protected]>
+
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu home services git-annex-assistant)
+  #:use-module (guix gexp)
+  #:use-module ((guix packages) #:select (package?))
+  #:use-module (guix records)
+  #:use-module (gnu services configuration)
+  #:use-module (gnu home services)
+  #:use-module (gnu home services shepherd)
+  #:use-module (gnu packages haskell-apps)
+  #:use-module (srfi srfi-1)
+  #:export (home-git-annex-assistant-configuration
+            home-git-annex-assistant-service-type))
+
+(define-configuration/no-serialization home-git-annex-assistant-configuration
+  (package
+    (package git-annex)
+    "Package that provides @code{git-annex}.")
+  (directories
+   (list-of-strings '())
+   "List of directories."))
+
+(define (home-git-annex-assistant-shepherd-services config)
+  (match-record config
+      <home-git-annex-assistant-configuration> (package directories)
+    (let ((gaa-command
+           #~(list (string-append #$package "/bin/git-annex") "assistant")))
+      (map
+       (lambda (dir)
+         (let ((pid-file (in-vicinity dir ".git/annex/daemon.pid")))
+           (shepherd-service
+            (documentation
+              (string-append "Run git-annex assistant against " dir "."))
+            (provision
+             (list
+              (symbol-append 'home-git-annex-assistant-
+                              (string->symbol dir))))
+            (start #~(lambda _
+                       (and (zero? (spawn-command #$gaa-command
+                                                  #:directory #$dir))
+                            (read-pid-file #$pid-file))))
+            (stop #~(lambda _
+                      (unless (zero? (spawn-command
+                                      (append #$gaa-command '("--stop"))
+                                      #:directory #$dir))
+                        (error "failed to stop git-annex assistant"))
+                      #f)))))
+       directories))))
+
+(define home-git-annex-assistant-service-type
+  (service-type
+    (name 'git-annex-assistant)
+    (extensions
+     (list (service-extension home-shepherd-service-type
+                             home-git-annex-assistant-shepherd-services)))
+    (compose concatenate)
+    (extend (lambda (config directories)
+              (home-git-annex-assistant-configuration
+               (inherit config)
+               (directories
+                (append
+                 (home-git-annex-assistant-configuration-directories config)
+                 directories)))))
+    (description
+     "Run the git-annex assistant daemon on a list of directories.")))
+
diff --git a/gnu/local.mk b/gnu/local.mk
index 25ac77b706..6455e9feb3 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -113,6 +113,7 @@ GNU_SYSTEM_MODULES =                                \
   %D%/home/services/dotfiles.scm               \
   %D%/home/services/symlink-manager.scm                \
   %D%/home/services/fontutils.scm              \
+  %D%/home/services/git-annex-assistant.scm    \
   %D%/home/services/gnome.scm                  \
   %D%/home/services/gnupg.scm                  \
   %D%/home/services/guix.scm                   \

Reply via email to