diff options
-rw-r--r-- | src/infrastructure/lib/curth0.scm | 481 | ||||
-rw-r--r-- | src/infrastructure/machines.scm | 376 | ||||
-rw-r--r-- | tests/unit-tests.scm | 10 |
3 files changed, 0 insertions, 867 deletions
diff --git a/src/infrastructure/lib/curth0.scm b/src/infrastructure/lib/curth0.scm deleted file mode 100644 index 7360f6d..0000000 --- a/src/infrastructure/lib/curth0.scm +++ /dev/null @@ -1,481 +0,0 @@ -(define-module (curth0) - #:use-module ((language tree-il) #:prefix tree-il:) - #:use-module ((ice-9 pretty-print) #:prefix pp:) - #:use-module ((srfi srfi-1) #:prefix s1:) - #:use-module ((srfi srfi-1) #:select (first second)) - #:use-module ((srfi srfi-64) #:prefix t:) - #:export (-> - ->> - tap) - #:re-export (first - second)) - -(define (tap x) - (pp:pretty-print x) - x) - -(define-syntax -> - (syntax-rules () - ((_) #f) - ((_ x) x) - ((_ x (f . (head ...))) (f x head ...)) - ((_ x f) (f x)) - ((_ x (f . (head ...)) rest ...) (-> (f x head ...) rest ...)) - ((_ x f rest ...) (-> (f x) rest ...)))) - -(define-syntax ->> - (syntax-rules () - ((_) #f) - ((_ x) x) - ((_ x (f ...)) (f ... x)) - ((_ x f) (f x)) - ((_ x (f ...) rest ...) (->> (f ... x) rest ...)) - ((_ x f rest ...) (->> (f x) rest ...)))) - -(define (test-thread-macro) - (define (expand l) - (tree-il:tree-il->scheme (macroexpand l))) - - (t:test-group "-> and ->>" - (t:test-equal '#f (expand '(->))) - (t:test-equal '#f (expand '(->>))) - - (t:test-equal '1 (expand '(-> 1))) - (t:test-equal '1 (expand '(->> 1))) - - (t:test-equal '(f 1) (expand '(-> (f 1)))) - (t:test-equal '(f 1) (expand '(->> (f 1)))) - - (t:test-equal '(f 1 2 3) (expand '(-> 1 (f 2 3)))) - (t:test-equal '(f 2 3 1) (expand '(->> 1 (f 2 3)))) - - (t:test-equal '(f 1) (expand '(-> 1 f))) - (t:test-equal '(f 1) (expand '(->> 1 f))) - - (t:test-equal '(f2 (f1 1)) (expand '(-> 1 f1 f2))) - (t:test-equal '(f2 (f1 1)) (expand '(->> 1 f1 f2))) - - (t:test-equal '(f2 (f1 1)) (expand '(-> 1 (f1) f2))) - (t:test-equal '(f2 (f1 1)) (expand '(->> 1 (f1) f2))) - - (t:test-equal '(f2 (f1 1)) (expand '(-> 1 f1 (f2)))) - (t:test-equal '(f2 (f1 1)) (expand '(->> 1 f1 (f2)))) - - (t:test-equal '(f2 (f1 1)) (expand '(-> 1 (f1) (f2)))) - (t:test-equal '(f2 (f1 1)) (expand '(->> 1 (f1) (f2)))) - - (t:test-equal '(f1 1 (f2)) (expand '(-> 1 (f1 (f2))))) - (t:test-equal '(f1 (f2) 1) (expand '(->> 1 (f1 (f2))))) - - (t:test-equal '(f6 (f5 (f4 (f3 (f1 1 (f2)))) 0 1 2)) - (expand '(-> 1 (f1 (f2)) f3 (f4) (f5 0 1 2) f6))) - (t:test-equal '(f6 (f5 0 1 2 (f4 (f3 (f1 (f2) 1))))) - (expand '(->> 1 (f1 (f2)) f3 (f4) (f5 0 1 2) f6))))) - -(eval-when (expand load eval) - (define consumable-chars - '(#\space #\tab)) - - (define (extract-single-line-indentation chars) - (s1:fold (lambda (curr acc) - (let* ((prev (s1:first acc)) - (halted? (s1:second acc)) - (n (s1:third acc)) - (non-blank? (not (member curr consumable-chars))) - (changed? (and (not (null? prev)) - (not (equal? curr prev))))) - (cond - (halted? acc) - (non-blank? (list prev #t n)) - (changed? (list prev #t n)) - (#:else (list curr #f (+ 1 n)))))) - '(#nil #f 0) - chars))) - -(define (test-extract-single-line-indentation) - (t:test-group "extract-single-line-indentation" - (t:test-equal '(#nil #f 0) - (extract-single-line-indentation - '())) - - (t:test-equal '(#nil #t 0) - (extract-single-line-indentation - '(#\a #\b #\c))) - - (t:test-equal '(#\space #t 1) - (extract-single-line-indentation - '(#\space #\b #\c))) - - (t:test-equal '(#\space #t 5) - (extract-single-line-indentation - '(#\space #\space #\space #\space #\space #\b #\c))) - - (t:test-equal '(#\space #f 5) - (extract-single-line-indentation - '(#\space #\space #\space #\space #\space))) - - (t:test-equal '(#\space #f 1) - (extract-single-line-indentation - '(#\space))) - - (t:test-equal '(#\tab #t 3) - (extract-single-line-indentation - '(#\tab #\tab #\tab #\b #\c))) - - (t:test-equal '(#\tab #f 3) - (extract-single-line-indentation - '(#\tab #\tab #\tab))) - - (t:test-equal '(#\tab #f 1) - (extract-single-line-indentation - '(#\tab))) - - (t:test-equal '(#\space #t 1) - (extract-single-line-indentation - '(#\space #\tab))) - - (t:test-equal '(#\space #t 2) - (extract-single-line-indentation - '(#\space #\space #\tab #\space))) - - (t:test-equal '(#\tab #t 3) - (extract-single-line-indentation - '(#\tab #\tab #\tab #\space))) - - (t:test-equal '(#\tab #t 3) - (extract-single-line-indentation - '(#\tab #\tab #\tab #\a #\tab))) - - (t:test-equal '(#\tab #t 3) - (extract-single-line-indentation - '(#\tab #\tab #\tab #\a #\space))))) - -(eval-when (compile load eval) - (define (extract-line-indentations lines) - (map (compose (lambda (triple) - (list (s1:first triple) - (s1:third triple))) - extract-single-line-indentation - string->list) - lines))) - -(define (test-extract-line-indentations) - (t:test-group "extract-line-indentations" - (t:test-equal '() - (extract-line-indentations - '())) - - (t:test-equal '((#nil 0)) - (extract-line-indentations - '(""))) - - (t:test-equal '((#nil 0) (#nil 0) (#nil 0)) - (extract-line-indentations - '("" "" ""))) - - (t:test-equal '((#nil 0) (#nil 0) (#nil 0)) - (extract-line-indentations - '("a" "b" "c"))) - - (t:test-equal '((#\space 1) (#\space 2) (#\space 3)) - (extract-line-indentations - '(" " " " " "))) - - (t:test-equal '((#\space 1) (#\tab 1) (#\space 3)) - (extract-line-indentations - '(" " " " " "))) - - (t:test-equal '((#nil 0) (#\space 3) (#\tab 2)) - (extract-line-indentations - '("no spaces" " with spaces" " with tabs"))))) - -(eval-when (compile load eval) - (define (maximum-indentation lines) - (let* ((line-indentations (extract-line-indentations lines)) - (chars (map s1:first line-indentations)) - (different-indents? (not (= 1 (length (s1:delete-duplicates chars)))))) - (if different-indents? - 0 - (apply min (map s1:second line-indentations)))))) - -(define (test-maximum-indentation) - (t:test-group "maximum-indentation" - (t:test-equal 0 - (maximum-indentation - '())) - - (t:test-equal 0 - (maximum-indentation - '(""))) - - (t:test-equal 0 - (maximum-indentation - '("" "" ""))) - - (t:test-equal 0 - (maximum-indentation - '("" " " ""))) - - (t:test-equal 1 - (maximum-indentation - '(" " " " " "))) - - (t:test-equal 2 - (maximum-indentation - '(" a" " b" " c"))) - - (t:test-equal 1 - (maximum-indentation - '(" space space" " space tab" " space space tab"))) - - (t:test-equal 0 - (maximum-indentation - '(" space space" " space tab" "none"))))) - -(eval-when (compile load eval) - (define (trim-indentation s) - (let* ((lines (string-split s #\newline)) - (trim-n (maximum-indentation - (filter (lambda (s) (not (equal? "" s))) - lines)))) - (string-join - (map (lambda (line) - (if (equal? "" line) - line - (substring line trim-n))) - lines) - "\n")))) - -(define (test-trim-indentation) - (t:test-group "trim-indentation" - (t:test-equal "" - (trim-indentation "")) - - (t:test-equal "alltogether" - (trim-indentation "alltogether")) - - (t:test-equal "with spaces between" - (trim-indentation "with spaces between")) - - (t:test-equal "with spaces around " - (trim-indentation " with spaces around ")) - - (t:test-equal "with multiple spaces " - (trim-indentation " with multiple spaces ")) - - (t:test-equal "tabs " - (trim-indentation " tabs ")) - - (t:test-equal "tabs and spaces " - (trim-indentation " tabs and spaces ")) - - (t:test-equal "\n" - (trim-indentation "\n")) - - (t:test-equal "\n\n\nmultiple empty lines\n\n\n" - (trim-indentation "\n\n\nmultiple empty lines\n\n\n")) - - (t:test-equal "\n\nmixed\n indentations\n" - (trim-indentation "\n\nmixed\n indentations\n")) - - (t:test-equal "\n\n\n \n lines with only spaces\n" - (trim-indentation "\n\n \n \n lines with only spaces\n")) - - (t:test-equal "\n\n mixed spaces\n and tabs" - (trim-indentation "\n\n mixed spaces\n and tabs")) - - (t:test-equal "\nstripped\n tabs" - (trim-indentation "\n stripped\n tabs")) - - (t:test-equal " -#!/bin/sh -set -eu - -ret=0 -if cmd; then - echo 'Done!' - ret=1 -fi -exit $ret -" - (trim-indentation " - #!/bin/sh - set -eu - - ret=0 - if cmd; then - echo 'Done!' - ret=1 - fi - exit $ret -")))) - - -(eval-when (compile load eval) - (define (non-quote-chars? chars) - (let ((non-quote-chars (filter (lambda (c) - (not (equal? #\" c))) - chars))) - (< 0 (length non-quote-chars))))) - -(define (test-non-quote-chars?) - (t:test-group "non-quote-chars?" - (t:test-equal #f - (non-quote-chars? - '())) - - (t:test-equal #f - (non-quote-chars? - '(#\"))) - - (t:test-equal #f - (non-quote-chars? - '(#\" #\" #\"))) - - (t:test-equal #t - (non-quote-chars? - '(#\" #\" #\-))) - - (t:test-equal #t - (non-quote-chars? - '(#\a #\"))))) - -(eval-when (expand load eval) - (define (multiline-string-reader _char port) - (let ((multiline? #f) - (chars '())) - (do ((curr (read-char port) - (read-char port))) - ((equal? #\newline curr)) - (set! chars (cons curr chars))) - (when (and (not (null? chars)) - (equal? #\- (car chars))) - (set! multiline? #t) - (set! chars (cdr chars))) - (let ((non-quote-chars (non-quote-chars? chars))) - (when non-quote-chars - (error - (format - #f - "Invalid characters at the beginning of the multiline reader: ~s" - (reverse non-quote-chars))))) - (let* ((quote-count (+ 1 (length chars))) - (quote-n 0) - (output '())) - (while #t - (let ((curr (read-char port))) - (when (eof-object? curr) - (error "EOF while reading #\"\"# multiline string")) - (set! output (cons curr output)) - (set! quote-n - (cond - ((and (>= quote-n quote-count) - (equal? #\# curr)) - (break)) - ((equal? #\" curr) (+ 1 quote-n)) - (#:else 0))))) - (let ((s (list->string - (reverse - (s1:drop output (+ 1 quote-count)))))) - (if multiline? - (trim-indentation s) - s))))) - - (read-hash-extend #\" multiline-string-reader)) - -(define (test-multiline-string-reader) - (t:test-group "multiline-string-reader" - (t:test-equal "" - #"" -""#) - - (t:test-equal " " - #"" - ""#) - - (t:test-equal " " - #"" - ""#) - - (t:test-equal "" - #""- - ""#) - - (t:test-equal " some\n text" - #"" - some - text""#) - - (t:test-equal "some\ntext" - #""- - some - text""#) - - (t:test-equal " indented\ntext" - #""- - indented - text""#) - - (t:test-equal "with\nnewline\n" - #""- - with - newline - ""#) - - (t:test-equal " unindented\n newline\n" - #""- - unindented - newline - ""#) - - (t:test-equal "multiple quotes: #\"\"\"inside\"\"\"#\n" - #""""- - multiple quotes: #"""inside"""# - """"#) - - (t:test-equal " indented" - #" - indented"#) - - (t:test-equal "unindented" - #""- - unindented""#) - - (t:test-equal "#!/bin/sh -set -eu - -some-cmd -echo \"$SOMETHING\"# here is a valid glued comment -if cmd; then - echo 'Indentation here!' - echo \"\"# anothe valid comment, glued to an empty string -fi -" - #"""- - #!/bin/sh - set -eu - - some-cmd - echo "$SOMETHING"# here is a valid glued comment - if cmd; then - echo 'Indentation here!' - echo ""# anothe valid comment, glued to an empty string - fi - """#))) - -(define test-fns - (list - test-thread-macro - test-extract-single-line-indentation - test-extract-line-indentations - test-maximum-indentation - test-trim-indentation - test-non-quote-chars? - test-multiline-string-reader)) - -(define (unit-tests) - (t:test-begin "curth0-tests") - (for-each (lambda (fn) (fn)) test-fns) - (let ((n-fail (t:test-runner-fail-count (t:test-runner-get)))) - (t:test-end) - n-fail)) diff --git a/src/infrastructure/machines.scm b/src/infrastructure/machines.scm deleted file mode 100644 index 7b3e5ee..0000000 --- a/src/infrastructure/machines.scm +++ /dev/null @@ -1,376 +0,0 @@ -(use-modules (gnu) - (curth0) - (srfi srfi-26) - - (gnu packages ssh) - - (gnu services certbot) - (gnu services mcron) - (gnu services mail) - (gnu services networking) - (gnu services ssh) - (gnu services web)) - - -(define sshd.conf #"""- - ClientAliveInterval 30 - ClientAliveCountMax 20 - MaxSessions 20 - """#) - -(define profile-extra - (plain-file "profile-extra" #"""- - export BORG_REMOTE_PATH='borg1' - export BORG_PASSPHRASE_FD='/opt/secrets/borg-passphrase.txt' -"""#)) - -(define bashrc-extra - (plain-file "bashrc-extra" #"""- - alias l='ls -lahF --color' - alias info='info --init-file /etc/infokey' - - export EDITOR=vi -"""#)) - -(define ps1.sh - (plain-file "ps1.sh" #"""- - end="\033[0m" - - gray() { - printf "\033[0;90m$1$end" - } - - yellow() { - printf "\033[1;33m$1$end" - } - - red() { - printf "\033[1;31m$1$end" - } - - redl() { - printf "\033[0;31m$1$end" - } - - error_marker() { - STATUS=$? - if [ "$STATUS" != 0 ]; then - red " (!! $STATUS !!) " - fi - } - - export PS1='`error_marker`'$(gray '\T')' '$(yellow '\w/')'\n'$(redl '\\u@\h')'\$ ' -"""#)) - -(define infokey - (plain-file "infokey" #"""- - ^e down-line - ^y up-line - - #var - link-style=cyan - active-link-style=blue,bold - match-style=underline,bold,bggreen -"""#)) - -(define with-email.sh - (plain-file "with-email.sh" #"""- - #!/bin/sh - set -u - - while getopts 's:' flag; do - case "$flag" in - s) - SUBJECT="$OPTARG" - ;; - *) - exit 2 - ;; - esac - done - shift $((OPTIND - 1)) - - now() { - date '+%Y-%m-%dT%H:%M:%S%Z' - } - - uuid() { - # Taken from: - # https://serverfault.com/a/799198 - od -xN20 /dev/urandom | - head -n1 | - awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}' - } - - mkstemp() { - name="${TMPDIR:-/tmp}/uuid-tmpname with spaces.$(uuid)" - touch "$name" - echo "$name" - } - - OUT="$(mkstemp)" - printf 'Running command: %s\nStarting at: %s\n\n' "$*" "$(now)" >> "$OUT" - ("$@" 2>&1) >> "$OUT" - STATUS="$?" - printf '\nFinished at: %s\n' "$(now)" >> "$OUT" - - mail \ - -a 'Content-Type: text/plain; charset=UTF-8' \ - -a 'From:cron@arrobaponto.org' \ - -s "(exit status: $STATUS) - ${SUBJECT:-NO SUBJECT}" \ - eu@euandre.org < "$OUT" - - cat "$OUT" -"""#)) - -(define backup.sh - (plain-file "backup.sh" #"""- - #!/bin/sh - set -eux - . /etc/profile-extra - - finish() { - STATUS=$? - printf '\n>>>\n>>> exit status: %s\n>>>\n\n' "$STATUS" >&2 - } - trap finish EXIT - - borg init -e repokey-blake2 suyin:borg/toph ||: - borg key export suyin:borg/toph /opt/secrets/borg-key.txt - - borg create \ - --exclude /root/.cache/ \ - --stats \ - --compression lzma,9 \ - suyin:borg/toph::{hostname}-{now}-${1:-cronjob}" \ - /root/ \ - /home/ \ - /etc/letsencrypt/ \ - /var/lib/certbot/ \ - /var/lib/letsencrypt \ - /opt/ - - borg check \ - --verbose \ - suyin:borg/toph - - borg prune \ - --verbose \ - --list \ - --keep-within=6m \ - --keep-weekly=52 \ - --keep-monthly=24 \ - suyin:borg/toph -"""#)) - -(define vi.exrc - (plain-file "vi.exrc" #"""- - " set number - set autoindent - set tabstop=8 - set shiftwidth=8 - set ruler - set showmode - set showmatch -"""#)) - -(define opensmtpd.conf - (plain-file "opensmtpd.conf" #"""- - listen on 0.0.0.0 - - action inbound mbox - match for local action inbound - - action outbound relay - match from local for any action outbound -"""#)) - -(define opensmtpd.conf1 - (plain-file "opensmtpd.conf" #"""- - table aliases file:/etc/aliases - table creds { } - - pki mail.arrobaponto.org cert "/etc/letsencrypt/live/arrobaponto.org/fullchain.pem" - pki mail.arrobaponto.org key "/etc/letsencrypt/live/arrobaponto.org/privkey.pem" - - listen on eth0 - - filter check_dyndns phase connect match rdns regex { '.*\.dyn\..*', '.*\.dsl\..*' } junk - filter check_rdns phase connect match !rdns junk - filter check_fcrdns phase connect match !fcrdns junk - - accept from any for domain "arrobaponto.org" alias <aliases> deliver to maildir - accept for local alias <aliases> deliver to maildir - - accept for any relay -"""#)) - - -(define cronjobs - (list - #~(job "0 30 * * 0" "guix gc -d 1m -F 10G"))) - - -(define admin-user "andreh") - -(define andreh-pk - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDnUv7iWOejQNa3fZ6v4lkHT6qFRp2+NuzIpFJ2Vy7eP58XZoiz6HJPcCU8Hf95JXwaXEwS4S7mXdw1x60hd8JIe058Ek6MZSSVQmlLfocGsAYj1wTrLmnQ8+PV0IeQlNj1aytBI1fL+v3IPt+JdLt6b+g3vwcEUU9efzxx2E0KZ5GIpb2meiCQ6ha+tcd7XqegB53eQj/h/coE2zLJodpaJ3xbj894pE/OJCNC0+4d0Sv7oHhY7QoLYldTQbSgPyhyfl4iZpJf6OEPZxK2cJaB+cbeoBB6aGNyU+CIJToM+uAJJ7H7EpvxfcnfJQ1PuY5szTdvFbW820euiUEKEW69mW4uaFNPSc6D4Z8tZ5hXQIqBD40irULhF0CYNkIILmyNV/KJIZ5HkbQ1q+UrCFHJyvuH/3aCTjj9OSfE7xHPQ3xd3Xw8vvj0Mjie09xFbbcklBTw5WRzH7cw8c+Q0O69kZZ8b+ykcdzWTeZeWNdnzptNqnMjfheig90rUIJ7DN0c+53jCUcGpWJxJhcYF9Uk1RNHmSE5+VzK1y+20t0grVFX90nApm4Tl35QPrX7Qxp9C81cWiUB8xCAE6jYrmd4x+P/3wSQfc1Xg0Eg3QjJB+6JD7cbyDJpzDR3ja+CLZCAr9I0B4rDKD2d6et/z67iXPnZUWMyZ8RVVZPFbBMOTw== openpgp:0xF727046D") - -(define users - `(((#:username . "andreh") - (#:extra-groups . ("wheel")) - (#:public-keys . (,andreh-pk))))) - -(define user-accounts - (map (lambda (user) - (let ((name (assoc-ref user #:username)) - (groups (or (assoc-ref user #:extra-groups) '()))) - (user-account - (name name) - (comment name) - (group "users") - (supplementary-groups groups)))) - users)) - -(define authorized-keys - (map (lambda (user) - (let* ((name (assoc-ref user #:username)) - (pk-strs (assoc-ref user #:public-keys)) - (pk-files (map (cut plain-file "id_rsa.pub" <>) pk-strs))) - `(,name . ,pk-files))) - users)) - - -(define toph - (operating-system - (locale "fr_FR.utf8") - (timezone "America/Sao_Paulo") - (host-name "toph") - (users (append user-accounts %base-user-accounts)) - (sudoers-file (plain-file "sudoers" #"""- - root ALL=(ALL) ALL - %wheel ALL=NOPASSWD: ALL - """#)) - (packages - (append (map (compose list specification->package+output symbol->string) - '(nss-certs ; required for guix pull - git-minimal - borg)) - %base-packages)) - (services - (append - (list - (service openssh-service-type - (openssh-configuration - (port-number 38123) - (openssh openssh-sans-x) - (password-authentication? #f) - (subsystems '()) - (log-level 'verbose) - (authorized-keys authorized-keys) - (extra-content sshd.conf))) - (service dhcp-client-service-type) - (service mcron-service-type - (mcron-configuration - (jobs cronjobs))) - (simple-service 'extra-etc-file etc-service-type - `(("backup.sh" ,backup.sh) - ("profile-extra" ,profile-extra) - ("bashrc-extra" ,bashrc-extra) - ("ps1.sh" ,ps1.sh) - ("vi.exrc" ,vi.exrc) - ("infokey" ,infokey) - ("with-email.sh" ,with-email.sh))) - (service certbot-service-type - (let ((hook (program-file - "nginx-deploy-hook" - #~(let ((pid (call-with-input-file - "/var/run/nginx/pid" - read))) - (kill pid SIGHUP))))) - (certbot-configuration - (email "eu@euandre.org") - (certificates - (list - (certificate-configuration - (domains '("p.arrobaponto.org")) - (deploy-hook hook)) - (certificate-configuration - (domains '("arrobaponto.org")) - (deploy-hook hook))))))) - (service nginx-service-type - (nginx-configuration - (run-directory "/var/run/nginx") - (server-blocks - (list - (nginx-server-configuration - (server-name '("p.arrobaponto.org")) - (listen '("[::]:443 ssl http2" "443 ssl http2")) - (root "/opt/www/p.arrobaponto.org/static") - (ssl-certificate "/etc/letsencrypt/live/p.arrobaponto.org/fullchain.pem") - (ssl-certificate-key "/etc/letsencrypt/live/p.arrobaponto.org/privkey.pem") - (raw-content '(#"""- - autoindex on; - add_header Strict-Transport-Security 'max-age=86400; includeSubdomains' always; - auth_basic "Privado"; - auth_basic_user_file /opt/www/p.arrobaponto.org/secrets/htpasswd; - """#))) - (nginx-server-configuration - (server-name '("arrobaponto.org")) - (listen '("[::]:443 ssl http2" "443 ssl http2")) - (root "/opt/www/arrobaponto.org/static") - (ssl-certificate "/etc/letsencrypt/live/arrobaponto.org/fullchain.pem") - (ssl-certificate-key "/etc/letsencrypt/live/arrobaponto.org/privkey.pem") - (raw-content '(#"""- - autoindex on; - add_header Strict-Transport-Security 'max-age=86400; includeSubdomains' always; - """#))))))) - (service mail-aliases-service-type - `(("webmaster" ,admin-user) - ("abuse" ,admin-user) - ("root" ,admin-user) - ("postmaster" ,admin-user))) - (service opensmtpd-service-type - (opensmtpd-configuration - (config-file opensmtpd.conf)))) - (modify-services - %base-services - (guix-service-type - config => (guix-configuration - (inherit config) - (authorized-keys - (append - (list - (local-file "/etc/guix/signing-key.pub")) - %default-authorized-guix-keys))))))) - (bootloader - (bootloader-configuration - (bootloader grub-bootloader) - (targets '("/dev/vda")))) - (swap-devices - (list - (swap-space - (target (uuid "30122738-f2f6-4f93-a37c-62023f56c73b"))))) - (file-systems - (append - (list - (file-system - (mount-point "/") - (device - (uuid "455682d0-7ce7-4144-9728-a6d07beb049a" - 'btrfs)) - (type "btrfs"))) - %base-file-systems)))) - - - -(list - (machine - (operating-system toph) - (environment managed-host-environment-type) - (configuration (machine-ssh-configuration - (host-name "toph") - (system "x86_64-linux") - (user admin-user) - (port 38123) - (host-key "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILoz1gFl6chY91vQ5SrZXSP5yHqRI3TdYy2ccEDpS7Z4"))))) diff --git a/tests/unit-tests.scm b/tests/unit-tests.scm deleted file mode 100644 index 4312a27..0000000 --- a/tests/unit-tests.scm +++ /dev/null @@ -1,10 +0,0 @@ -(use-modules (curth0)) - -(define (run-tests) - (let ((fns (list (@@ (curth0) unit-tests)))) - (for-each (lambda (fn) - (when (not (= 0 (fn))) - (exit 1))) - fns))) - -(run-tests) |