Subject: [bug#72400] [PATCH] services: gitile: Allow to set user and group.

From: Evgeny Pisemsky <[email-masked]>
Date: Wed, 31 Jul 2024 18:00:55 +0300

>From 91ec60142ea1220cf4a87883915bf086e1344f69 Mon Sep 17 00:00:00 2001
Message-ID: <[email-masked]>
From: Evgeny Pisemsky <[email-masked]>
Date: Wed, 31 Jul 2024 17:30:50 +0300
Subject: [PATCH] services: gitile: Allow to set user and group.

Change-Id: I757d7a6c2690326272f0437eda2ba4b2fae409a0
---
 doc/guix.texi                    |  7 +++++
 gnu/services/version-control.scm | 45 ++++++++++++++++++++------------
 2 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 41814042f5..9b04a0b0e5 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -129,6 +129,7 @@
 Copyright @copyright{} 2024 Richard Sent@*
 Copyright @copyright{} 2024 Dariqq@*
 Copyright @copyright{} 2024 Denis 'GNUtoo' Carikli@*
+Copyright @copyright{} 2024 Evgeny Pisemsky@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -39287,6 +39288,12 @@ Version Control Services
 The footer content, as a list of sxml expressions.  This is shown on every
 page served by Gitile.
 
+@item @code{user} (default: @code{"git"})
+Owner of the @code{gitile} process.
+
+@item @code{group} (default: @code{"git"})
+Owner's group of the @code{gitile} process.
+
 @item @code{nginx}
 An nginx server block that will be extended and used as a reverse proxy by
 Gitile to serve its pages, and as a normal web server to serve its assets.
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 14ff0a59a6..d61675345f 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017 Clément Lassieur <[email-masked]>
 ;;; Copyright © 2018 Christopher Baines <[email-masked]>
 ;;; Copyright © 2021 Julien Lepiller <[email-masked]>
+;;; Copyright © 2024 Evgeny Pisemsky <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,6 +75,8 @@ (define-module (gnu services version-control)
             gitile-configuration-index-title
             gitile-configuration-intro
             gitile-configuration-footer
+            gitile-configuration-user
+            gitile-configuration-group
             gitile-configuration-nginx
 
             gitile-service-type))
@@ -441,6 +444,10 @@ (define-record-type* <gitile-configuration>
          (default '()))
   (footer gitile-configuration-footer
           (default '()))
+  (user gitile-configuration-user
+        (default "git"))
+  (group gitile-configuration-group
+         (default "git"))
   (nginx gitile-configuration-nginx))
 
 (define (gitile-config-file host port database repositories base-git-url
@@ -462,7 +469,7 @@ (define (gitile-config-file host port database repositories base-git-url
 (define gitile-nginx-server-block
   (match-lambda
     (($ <gitile-configuration> package host port database repositories
-        base-git-url index-title intro footer nginx)
+        base-git-url index-title intro footer user group nginx)
      (list (nginx-server-configuration
              (inherit nginx)
              (locations
@@ -488,7 +495,7 @@ (define gitile-nginx-server-block
 (define gitile-shepherd-service
   (match-lambda
     (($ <gitile-configuration> package host port database repositories
-        base-git-url index-title intro footer nginx)
+        base-git-url index-title intro footer user group nginx)
      (list (shepherd-service
              (provision '(gitile))
              (requirement '(loopback))
@@ -500,21 +507,27 @@ (define gitile-shepherd-service
                                                    repositories
                                                    base-git-url index-title
                                                    intro footer))
-                              #:user "gitile"
-                              #:group "git")))
+                              #:user #$user
+                              #:group #$group)))
              (stop #~(make-kill-destructor)))))))
 
-(define %gitile-accounts
-  (list (user-group
-         (name "git")
-         (system? #t))
-        (user-account
-          (name "gitile")
-          (group "git")
-          (system? #t)
-          (comment "Gitile user")
-          (home-directory "/var/empty")
-          (shell (file-append shadow "/sbin/nologin")))))
+(define (gitile-accounts config)
+  (let ((user (gitile-configuration-user config))
+        (group (gitile-configuration-group config)))
+    (filter identity
+            (list
+             (and (equal? group "gitile")
+                  (user-group
+                   (name "gitile")
+                   (system? #t)))
+             (and (equal? user "gitile")
+                  (user-account
+                   (name "gitile")
+                   (group group)
+                   (system? #t)
+                   (comment "Gitile user")
+                   (home-directory "/var/empty")
+                   (shell (file-append shadow "/sbin/nologin"))))))))
 
 (define gitile-service-type
   (service-type
@@ -523,7 +536,7 @@ (define gitile-service-type
 on the web.")
     (extensions
       (list (service-extension account-service-type
-                               (const %gitile-accounts))
+                               gitile-accounts)
             (service-extension shepherd-root-service-type
                                gitile-shepherd-service)
             (service-extension nginx-service-type

base-commit: 01d4363168ed10ea223047f7a7b83201f161ec0b
-- 
2.45.2