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{}. + +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 + +;;; +;;; 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 . + +(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 + (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 \