summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2023-02-07 22:12:35 +0100
committerVivien Kraus <vivien@planete-kraus.eu>2023-02-07 23:22:28 +0100
commitaa8431658ffd40ae0c2cdb63d93b65eefbf58d57 (patch)
tree6d8be150dd48894db585045d4132b56d134a4347
Add the copirate site service
-rw-r--r--copirate/services/copirate-site.scm66
1 files changed, 66 insertions, 0 deletions
diff --git a/copirate/services/copirate-site.scm b/copirate/services/copirate-site.scm
new file mode 100644
index 0000000..bec3c33
--- /dev/null
+++ b/copirate/services/copirate-site.scm
@@ -0,0 +1,66 @@
+(define-module (copirate services copirate-site)
+ #:use-module (guix gexp)
+ #:use-module (guix modules)
+ #:use-module (guix git)
+ #:use-module (gnu services)
+ #:use-module (gnu services web)
+ #:use-module (gnu packages music)
+ #:use-module (gnu packages imagemagick)
+ #:export
+ (
+ copirate-site-service-type
+ ))
+
+(define latest-copirate-site
+ (computed-file
+ "copirate-site"
+ (with-imported-modules
+ (source-module-closure '((guix build utils)))
+ #~(begin
+ (use-modules (guix build utils) (ice-9 ftw))
+ (mkdir-p #$output)
+ (copy-recursively
+ #$(git-checkout
+ (url "file:///srv/git/copirate-site.git"))
+ #$output)
+ (with-directory-excursion
+ #$output
+ (let ((enter? (lambda (name stat result) #t))
+ (leaf (lambda (name stat result)
+ (when (string-suffix? ".ly" name)
+ (invoke #$(file-append lilypond "/bin/lilypond") name))))
+ (down (lambda (name stat result) #t))
+ (up (lambda (name stat result) #t))
+ (skip (lambda (name stat result) #t))
+ (error (lambda (name stat errno result) #t)))
+ (file-system-fold enter? leaf down up skip error #t "."))
+ (let ((enter? (lambda (name stat result) #t))
+ (leaf (lambda (name stat result)
+ (when (string-suffix? ".pdf" name)
+ (let ((miniature-name
+ (string-append
+ (substring name 0 (- (string-length name) (string-length ".pdf")))
+ "-miniature.png")))
+ (invoke #$(file-append imagemagick "/bin/convert")
+ "-resize" "210x297"
+ (string-append name "[0]")
+ miniature-name)))))
+ (down (lambda (name stat result) #t))
+ (up (lambda (name stat result) #t))
+ (skip (lambda (name stat result) #t))
+ (error (lambda (name stat errno result) #t)))
+ (file-system-fold enter? leaf down up skip error #t ".")))))))
+
+(define copirate-site-service-type
+ (service-type
+ (name 'copirate)
+ (extensions
+ (list
+ (service-extension
+ nginx-service-type
+ (const
+ (list
+ (nginx-server-configuration
+ (root latest-copirate-site)))))))
+ (description
+ (format #f "The Copirate editions main website."))))