diff --git a/glicid/services/forgejo.scm b/glicid/services/forgejo.scm new file mode 100644 index 0000000..4cccba0 --- /dev/null +++ b/glicid/services/forgejo.scm @@ -0,0 +1,79 @@ +(define-module (glicid services forgejo) + #:use-module (glicid packages forgejo) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (gnu system shadow) + #:use-module (gnu system pam) + #:use-module (gnu packages admin) + #:use-module (gnu packages base) + #:use-module (gnu packages certs) + #:use-module (gnu packages version-control) + #:use-module (guix gexp) + #:use-module (guix modules) + #:use-module (guix records) + #:use-module (ice-9 match) + #:export (forgejo-configuration + forgejo-configuration? + forgejo-service + forgejo-service-type + %forgejo-account + %forgejo-group + %forgejo-accounts)) + +(define %forgejo-group + (user-group + (name "forgejo") + (system? #t))) + +(define %forgejo-account + (user-account + (name "forgejo") + (group "forgejo") + (system? #t) + (comment "forgejo server user") + (home-directory "/var/lib/forgejo") + (shell (file-append bash "/bin/bash")))) + +(define %forgejo-accounts + (list %forgejo-group %forgejo-account)) + +(define-record-type* forgejo-configuration + make-forgejo-configuration + forgejo-configuration? + (forgejo forgejo (default forgejo)) + (forgejo-conf forgejo-conf (default "/etc/forgejo/app.ini")) + (log-file log-file (default "/var/log/forgejo.log"))) + +(define %forgejo-activation + #~(begin + (mkdir-p "/etc/forgejo") + (touch "/etc/forgejo/app.ini") + (touch "/var/log/forgejo.log") + (chown "/etc/forgejo" (passwd:uid "forgejo") (passwd:gid "forgejo")) + (chown "/etc/forgejo/app.ini" (passwd:uid "forgejo") (passwd:gid "forgejo")) + (chown "/var/log/forgejo.log" (passwd:uid "forgejo") (passwd:gid "forgejo")) + #t)) + + +(define forgejo-service + (match-lambda + (($ forgejo forgejo-conf log-file) + (list (shepherd-service (provision '(forgejo)) + (documentation "Run forgejo.") + (requirement '(user-processes)) + (respawn? #t) + (start #~(make-forkexec-constructor (list #$(file-append forgejo "/bin/forgejo") + "web" + "--config" forgejo-conf) + #:log-file #$log-file + #:user (passwd:uid (getpwnam "forgejo")) + #:group (passwd:gid (getpwnam "forgejo")))) + (stop #~(make-kill-destructor))))))) + +(define forgejo-service-type + (service-type (name 'forgejo) + (extensions (list (service-extension shepherd-root-service-type forgejo-service) + (service-extension activation-service-type (const %forgejo-activation)) + (service-extension account-service-type (const %forgejo-accounts)))) + (description "Run forgejo") + ))