(use-modules (ice-9 match) (srfi srfi-9) (srfi srfi-69) (haunt utils)) (define-record-type (project id name url logo members) project? (id project-id) (name project-name) (url project-url) (logo project-logo) (members project-members set-project-members!)) (define-record-type (make-person name url avatar) person? (name person-name) (url person-url) (avatar person-avatar)) (define* (person name #:optional url avatar) (make-person name url avatar)) (define %projects (let ((table (make-hash-table)) (placeholder-logo "/static/images/logos/placeholder.svg")) (for-each (match-lambda ((id name url logo) (hash-table-set! table id (project id name url logo (list)))) ((id name url) (hash-table-set! table id (project id name url placeholder-logo (list))))) '((8sync "8sync" "https://www.gnu.org/software/8sync/" "/static/images/logos/8sync.png") (adns "GNU adns" "https://www.gnu.org/software/adns/") (archimedes "GNU Archimedes" "https://www.gnu.org/software/archimedes/") (binutils "binutils" "https://www.gnu.org/software/binutils/") (classpath "GNU Classpath" "https://www.gnu.org/software/classpath/") (dominion "GNU Dominion" "https://savannah.gnu.org/projects/dominion") (gcc "GNU Compiler Collection (GCC)" "https://gcc.gnu.org" "/static/images/logos/gcc.png") (gdb "GDB" "https://www.gnu.org/software/gdb/" "/static/images/logos/gdb.svg") (glibc "GNU C Library" "https://www.gnu.org/software/libc/" "/static/images/logos/glibc.jpg") (gneural "GNU Gneural Network" "https://www.gnu.org/software/gneuralnetwork/" "/static/images/logos/gneural_network.png") (gnucobol "GnuCOBOL" "https://gnucobol.sourceforge.io/" "/static/images/logos/gnucobol.png") (gnupg "GnuPG" "https://gnupg.org" "/static/images/logos/gnupg.png") (gsl "GNU Scientific Library" "https://www.gnu.org/software/gsl/") (guile "GNU Guile" "https://www.gnu.org/software/guile/" "/static/images/logos/guile.svg") (guile-debbugs "Guile-Debbugs" "https://savannah.gnu.org/projects/guile-debbugs/" "/static/images/logos/guile.svg") (guile-gnome "Guile-GNOME" "https://www.gnu.org/software/guile-gnome/" "/static/images/logos/guile.svg") (guile-opengl "Guile-OpenGL" "https://www.gnu.org/software/guile-opengl/" "/static/images/logos/guile.svg") (guile-rpc "GNU Guile-RPC" "https://www.gnu.org/software/guile-rpc/" "/static/images/logos/guile.svg") (guix "GNU Guix" "https://guix.gnu.org" "/static/images/logos/guix.png") (gwl "Guix Workflow Language" "https://guixwl.org" "/static/images/logos/gwl.png") (hurd "GNU Hurd" "https://hurd.gnu.org" "/static/images/logos/hurd.png") (indent "GNU indent" "https://www.gnu.org/software/indent/") (libgcrypt "GNU Libgcrypt" "https://gnupg.org/related_software/libgcrypt/" "/static/images/logos/gnupg.png") (libtasn1 "GNU Libtasn1" "https://www.gnu.org/software/libtasn1/") (lilypond "GNU LilyPond" "https://lilypond.org/" "/static/images/logos/lilypond.png") (liquid-war-6 "Liquid War 6" "https://www.gnu.org/software/liquidwar6/") (mcron "GNU Mcron" "https://www.gnu.org/software/mcron/" "/static/images/logos/mcron.png") (mcsim "GNU MCSim" "https://www.gnu.org/software/mcsim/" "/static/images/logos/mcsim.png") (mediagoblin "GNU MediaGoblin" "https://mediagoblin.org/" "/static/images/logos/mediagoblin.svg") (mes "GNU Mes" "https://www.gnu.org/software/mes/") (mpc "GNU MPC" "http://www.multiprecision.org/mpc/") (nano-archimedes "GNU Nano-Archimedes" "https://www.gnu.org/software/archimedes/") (pspp "GNU PSPP" "https://www.gnu.org/software/pspp/") (shepherd "GNU Shepherd" "https://www.gnu.org/software/shepherd/") (source-highlight "GNU Source Highlight" "https://www.gnu.org/software/src-highlite/") (userv "GNU userv" "https://www.gnu.org/software/userv/") (gnu-radio "GNU Radio" "https://www.gnuradio.org" "/static/images/logos/gnuradio.svg"))) table)) (define-syntax-rule (define-member person projects ...) (let ((p person)) (for-each (lambda (project-id) (let ((project (hash-table-ref %projects project-id (lambda () (error (format #false "Unknown project ~a for ~a~%" project-id name)))))) (set-project-members! project (cons p (project-members project))))) (quote (projects ...))))) (define-member (person "Carlos O'Donell") glibc gcc) (define-member (person "Mark J. Wielaard" "https://gnu.wildebeest.org/blog/mjw/") classpath gcc glibc) (define-member (person "Andy Wingo" "https://wingolog.org") guile guile-gnome guile-opengl) (define-member (person "Ludovic Courtès" "https://people.bordeaux.inria.fr/lcourtes/") guix guile shepherd guile-rpc) (define-member (person "Frederic Y. Bois") mcsim) (define-member (person "Andrej Shadura") indent) (define-member (person "Werner Koch") gnupg libgcrypt) (define-member (person "Mark Galassi") gsl dominion) (define-member (person "Jean Michel Sellier") archimedes nano-archimedes gneural) (define-member (person "Christine Lemmer Webber" "https://dustycloud.org") 8sync mediagoblin) (define-member (person "Ian Jackson") adns userv) (define-member (person "Samuel Thibault") hurd) (define-member (person "Jan Nieuwenhuizen") mes lilypond) (define-member (person "Christian Mauduit") liquid-war-6) (define-member (person "Nikos Mavrogiannopoulos") libtasn1) (define-member (person "Andreas Enge" "http://www.multiprecision.org/") guix mpc) (define-member (person "Han-Wen Nienhuys") lilypond) (define-member (person "Tobias Geerinckx-Rice") guix) (define-member (person "Bernard Giroud") gnucobol) (define-member (person "Tom Tromey") source-highlight) (define-member (person "Jeff Law") gcc) (define-member (person "David Malcolm") gcc) (define-member (person "Ricardo Wurmus" "https://elephly.net") guix gwl guile-debbugs) (define-member (person "Marius Bakke") guix) (define-member (person "Jack Hill") guix) (define-member (person "Leo Famulari") guix) (define-member (person "Efraim Flashner") guix) (define-member (person "Mathieu Othacehe" "https://othacehe.org/") guix) (define-member (person "Dale Mellor" "https://rdmp.org/dale-mellor/") mcron guix) (define-member (person "Ben Pfaff" "https://benpfaff.org/") pspp) (define-member (person "Jonathan Wakely") gcc) (define-member (person "Tobias Platen" "https://www.qtau.de/") guix lilypond) (define-member (person "Léo Le Bouter") guix) (define-member (person "Jason Merrill") gcc) (define-member (person "Derek Kozel") gnu-radio)