From 09e3c8bff91e9af7dbce3ecc7e585e1df7c0c0ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 14 Apr 2021 23:17:37 +0200 Subject: Add /people. * projects.scm: New file, with code formerly... * software.sxml: ... here. Include it. * people.sxml: New file. * haunt.scm (static-pages): Add it. * posts/kickoff.md, index.md: Refer to it. --- haunt.scm | 2 + index.md | 2 +- people.sxml | 49 ++++++++++++ posts/kickoff.md | 2 +- projects.scm | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ software.sxml | 226 +------------------------------------------------------ 6 files changed, 278 insertions(+), 227 deletions(-) create mode 100644 people.sxml create mode 100644 projects.scm diff --git a/haunt.scm b/haunt.scm index 1b0bd04..b0f917a 100644 --- a/haunt.scm +++ b/haunt.scm @@ -160,6 +160,8 @@ representation." (sxml-page "/en/software/index.html" "software.sxml") + (sxml-page "/en/people/index.html" + "people.sxml") (markdown-page "/en/documents/index.html" "documents.md") (markdown-page "/en/contribute/index.html" diff --git a/index.md b/index.md index 59f5112..c553f46 100644 --- a/index.md +++ b/index.md @@ -7,7 +7,7 @@ frontpage: yes Here’s what “GNU” means to us: - Gathering under a New Umbrella — - [We](https://wiki.gnu.tools/gnu:social-contract-endorsement), + [We](/en/people), maintainers and contributors of [well-known free software projects](/en/software) are making this place our new home, fighting for the freedom of computer users and hacking the good hack. diff --git a/people.sxml b/people.sxml new file mode 100644 index 0000000..e9ab88b --- /dev/null +++ b/people.sxml @@ -0,0 +1,49 @@ +(use-modules (srfi srfi-1)) + +(include "projects.scm") + +(define %members + ;; List of member/projects tuples. + (let ((table (make-hash-table eq? hashq))) + (hash-table-fold %projects + (lambda (key project lst) + (for-each (lambda (member) + (let ((projects (hash-table-ref/default + table member '()))) + (hash-table-set! table member + (cons project + projects)))) + (project-members project))) + '()) + (sort (delete-duplicates + (hash-table-fold table alist-cons '())) + (match-lambda* + (((member1 . _) (member2 . _)) + (stringdate* "2021-04-14 23:00")) + + (content + ((h2 "People") + (p "The following maintainers and contributors participate in " + "the GNU Assembly and have endorsed the " + (a (@ (href "/en/documents/social-contract")) + "Social Contract") ":") + + (ul ;; (@ (class "projects")) + ,@(map (match-lambda + ((person projects ...) + `(li (@ (class "person")) + ,(let ((home-page (person-url person))) + (if home-page + `(a (@ (href ,home-page)) + ,(person-name person)) + (person-name person))) + " (" + ,(string-join (map project-name projects) + ", ") + ")"))) + %members))))) diff --git a/posts/kickoff.md b/posts/kickoff.md index 8fa1d15..869475c 100644 --- a/posts/kickoff.md +++ b/posts/kickoff.md @@ -75,6 +75,6 @@ list](https://lists.gnu.tools/hyperkitty/list/assembly@lists.gnu.tools/) is where this group discusses its organization, including [governance](/en/documents/governance). -Currently, the GNU Assembly consists of maintainers and developers from +Currently, the GNU Assembly consists of [maintainers and developers](/en/people) from about [30 packages](/en/software)—old and young, small and big. You too can [join us](/en/contribute)! diff --git a/projects.scm b/projects.scm new file mode 100644 index 0000000..9551582 --- /dev/null +++ b/projects.scm @@ -0,0 +1,224 @@ +(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/") + (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/") + (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/"))) + 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 "Christopher 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") + 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) diff --git a/software.sxml b/software.sxml index cc6a308..9942eb7 100644 --- a/software.sxml +++ b/software.sxml @@ -1,228 +1,4 @@ -(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/") - (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/") - (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/"))) - 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 "Christopher 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") - 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) - +(include "projects.scm") `((title . "Software") (author . "The GNU Assembly") -- cgit v1.2.1