summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2024-01-04 18:33:50 +0100
committerVivien Kraus <vivien@planete-kraus.eu>2024-01-04 18:43:08 +0100
commit62170513a363101bd20cfb8f15025d124cc42feb (patch)
treebf2c83903366996c5150d5467748d6592e020ad2
parent8a79669aa1b66eb82be3ea1c6de7c42f2066c445 (diff)
Make copirate a proper package
-rw-r--r--copirate/modules/copirate-site.scm62
-rw-r--r--guix/vkraus/packages/copirate-site.scm115
-rw-r--r--guix/vkraus/services/copirate-site.scm74
3 files changed, 189 insertions, 62 deletions
diff --git a/copirate/modules/copirate-site.scm b/copirate/modules/copirate-site.scm
deleted file mode 100644
index 61083ba..0000000
--- a/copirate/modules/copirate-site.scm
+++ /dev/null
@@ -1,62 +0,0 @@
-(define-module (copirate modules copirate-site)
- #:use-module (guix gexp)
- #:use-module (guix modules)
- #:use-module (gnu packages audio)
- #:use-module (gnu packages music)
- #:use-module (gnu packages imagemagick)
- #:export
- (
- build-copirate-site
- ))
-
-(define (build-copirate-site source)
- (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 #$source #$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)
- (format (current-error-port) "PDF file: ~s…\n" 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" "+append"
- (string-append name "[0-4]")
- 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 "."))
- (let ((enter? (lambda (name stat result) #t))
- (leaf (lambda (name stat result)
- (format (current-error-port) "Potentially midi file: ~s…\n" name)
- (when (string-prefix? "./" name)
- (set! name (substring name (string-length "./"))))
- (when (string-suffix? ".midi" name)
- (format (current-error-port) "Midi file: ~s…\n" name)
- (invoke #$(file-append timidity++ "/bin/timidity")
- "-Ov" 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 ".")))))))
diff --git a/guix/vkraus/packages/copirate-site.scm b/guix/vkraus/packages/copirate-site.scm
new file mode 100644
index 0000000..5be4da9
--- /dev/null
+++ b/guix/vkraus/packages/copirate-site.scm
@@ -0,0 +1,115 @@
+(define-module (vkraus packages copirate-site)
+ #:use-module ((guix packages)
+ #:select (package origin base32))
+ #:use-module ((guix git-download)
+ #:select (git-fetch
+ git-file-name
+ git-reference))
+ #:use-module ((guix build-system gnu)
+ #:select (gnu-build-system))
+ #:use-module ((guix gexp)
+ #:select (gexp))
+ #:use-module ((gnu packages music)
+ #:select (lilypond))
+ #:use-module ((gnu packages imagemagick)
+ #:select (imagemagick))
+ #:use-module ((gnu packages audio)
+ #:select (timidity++))
+ #:export (copirate-site)
+ #:declarative? #t)
+
+(define copirate-site
+ (package
+ (name "copirate-site")
+ (version "2023")
+ (source
+ (origin
+ (method git-fetch)
+ (uri
+ (git-reference
+ (url "https://labo.planete-kraus.eu/copirate-site.git")
+ (commit
+ "87eb4ed037ff72bc278721f3c6dfd7750fc4b61b")))
+ (file-name
+ (git-file-name name version))
+ (sha256
+ (base32 "0l0j9slqbz68iparqyy5jchwd8rc23di30dkzc94lq4s3859xypv"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases
+ %standard-phases
+ (delete 'configure)
+ (delete 'build)
+ (delete 'check)
+ (replace
+ 'install
+ (lambda* (#:key native-inputs inputs #:allow-other-keys)
+ (use-modules (ice-9 ftw))
+ (let ((lilypond
+ (search-input-file (or native-inputs inputs)
+ "/bin/lilypond"))
+ (convert
+ (search-input-file (or native-inputs inputs)
+ "/bin/convert"))
+ (timidity
+ (search-input-file (or native-inputs inputs)
+ "/bin/timidity")))
+ (mkdir-p #$output)
+ (copy-recursively "." #$output)
+ (with-directory-excursion
+ #$output
+ (let ((enter? (lambda (name stat result) #t))
+ (leaf (lambda (name stat result)
+ (when (string-suffix? ".ly" name)
+ (invoke 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)
+ (format (current-error-port) "PDF file: ~s…\n" name)
+ (let ((miniature-name
+ (string-append
+ (substring name 0 (- (string-length name) (string-length ".pdf")))
+ "-miniature.png")))
+ (invoke convert
+ "-resize" "210x297" "+append"
+ (string-append name "[0-4]")
+ 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 "."))
+ (let ((enter? (lambda (name stat result) #t))
+ (leaf (lambda (name stat result)
+ (format (current-error-port) "Potentially midi file: ~s…\n" name)
+ (when (string-prefix? "./" name)
+ (set! name (substring name (string-length "./"))))
+ (when (string-suffix? ".midi" name)
+ (format (current-error-port) "Midi file: ~s…\n" name)
+ (invoke timidity
+ "-Ov" 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 ".")))))))))
+ (native-inputs
+ (list lilypond imagemagick timidity++))
+ (synopsis
+ "The content of the copirate website")
+ (description
+ "This package contains the full contents of the copirate website.")
+ (home-page
+ "https://copirate.planete-kraus.eu")
+ (license
+ ((@@ (guix licenses) license)
+ "No license"
+ ""
+ "No license"))))
diff --git a/guix/vkraus/services/copirate-site.scm b/guix/vkraus/services/copirate-site.scm
new file mode 100644
index 0000000..c4f40a1
--- /dev/null
+++ b/guix/vkraus/services/copirate-site.scm
@@ -0,0 +1,74 @@
+(define-module (vkraus services copirate-site)
+ #:use-module ((gnu services)
+ #:select (service-type
+ service-extension))
+ #:use-module ((gnu services web)
+ #:select (nginx-service-type
+ nginx-server-configuration
+ nginx-location-configuration))
+ #:use-module ((gnu services certbot)
+ #:select (certbot-service-type
+ certificate-configuration))
+ #:use-module ((vkraus services simple-firewall)
+ #:select (simple-firewall-configuration
+ simple-firewall-service-type))
+ #:use-module ((vkraus packages copirate-site)
+ #:select ((copirate-site . package:copirate-site)))
+ #:use-module ((guix gexp)
+ #:select (file-append program-file gexp))
+ #:use-module ((oop goops)
+ #:select (define-class
+ define-method
+ make
+ slot-ref
+ slot-set!
+ deep-clone))
+ #:re-export (make)
+ #:export (<copirate-site-configuration>
+ copirate-site-service-type)
+ #:duplicates (merge-generics)
+ #:declarative? #t)
+
+(define-class <copirate-site-configuration> ()
+ (domain-name #:init-keyword #:domain-name)
+ (copirate-site #:init-keyword #:copirate-site
+ #:init-value package:copirate-site))
+
+(define-method (nginx-extension (cfg <copirate-site-configuration>))
+ (list
+ (nginx-server-configuration
+ (server-name (list (slot-ref cfg 'domain-name)))
+ (listen '("443 ssl" "[::]:443 ssl"))
+ (ssl-certificate
+ (format #f "/etc/letsencrypt/live/~a/fullchain.pem"
+ (slot-ref cfg 'domain-name)))
+ (ssl-certificate-key
+ (format #f "/etc/letsencrypt/live/~a/privkey.pem"
+ (slot-ref cfg 'domain-name)))
+ (index '("index.xhtml"))
+ (root (build-copirate-site (slot-ref cfg 'copirate-source))))))
+
+(define-method (certbot-extension (cfg <copirate-site-configuration>))
+ (list
+ (certificate-configuration
+ (domains (list (slot-ref cfg 'domain-name)))
+ (deploy-hook
+ (program-file
+ "refresh-nginx"
+ #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
+ (kill pid SIGHUP)))))))
+
+(define-method (simple-firewall-extension (cfg <copirate-site-configuration>))
+ (list
+ (simple-firewall-configuration #f '(http https) '(http https))))
+
+(define copirate-site-service-type
+ (service-type
+ (name 'copirate-site)
+ (description
+ "Serve the copirate site.")
+ (extensions
+ (list
+ (service-extension nginx-service-type nginx-extension)
+ (service-extension certbot-service-type certbot-extension)
+ (service-extension simple-firewall-service-type simple-firewall-extension)))))