diff options
Diffstat (limited to '')
-rw-r--r-- | software.sxml | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/software.sxml b/software.sxml new file mode 100644 index 0000000..8ef1002 --- /dev/null +++ b/software.sxml | |||
@@ -0,0 +1,226 @@ | |||
1 | (use-modules (ice-9 match) | ||
2 | (srfi srfi-9) | ||
3 | (srfi srfi-69) | ||
4 | (haunt utils)) | ||
5 | |||
6 | (define-record-type <project> | ||
7 | (project id name url members) | ||
8 | project? | ||
9 | (id project-id) | ||
10 | (name project-name) | ||
11 | (url project-url) | ||
12 | (members project-members set-project-members!)) | ||
13 | |||
14 | (define-record-type <person> | ||
15 | (make-person name url avatar) | ||
16 | person? | ||
17 | (name person-name) | ||
18 | (url person-url) | ||
19 | (avatar person-avatar)) | ||
20 | |||
21 | (define* (person name #:optional url avatar) | ||
22 | (make-person name url avatar)) | ||
23 | |||
24 | (define %projects | ||
25 | (let ((table (make-hash-table))) | ||
26 | (for-each | ||
27 | (match-lambda | ||
28 | ((id name url) | ||
29 | (hash-table-set! table id (project id name url (list))))) | ||
30 | '((8sync | ||
31 | "8sync" | ||
32 | "https://www.gnu.org/software/8sync/") | ||
33 | (adns | ||
34 | "GNU adns" | ||
35 | "https://www.gnu.org/software/adns/") | ||
36 | (archimedes | ||
37 | "GNU Archimedes" | ||
38 | "https://www.gnu.org/software/archimedes/") | ||
39 | (binutils | ||
40 | "binutils" | ||
41 | "https://www.gnu.org/software/binutils/") | ||
42 | (classpath | ||
43 | "GNU Classpath" | ||
44 | "https://www.gnu.org/software/classpath/") | ||
45 | (dominion | ||
46 | "GNU Dominion" | ||
47 | "https://savannah.gnu.org/projects/dominion") | ||
48 | (gcc | ||
49 | "GNU Compiler Collection (GCC)" | ||
50 | "https://gcc.gnu.org") | ||
51 | (gdb | ||
52 | "GDB" "https://www.gnu.org/software/gdb/") | ||
53 | (glibc | ||
54 | "GNU C Library" | ||
55 | "https://www.gnu.org/software/libc/") | ||
56 | (gneural | ||
57 | "GNU Gneural Network" | ||
58 | "https://www.gnu.org/software/gneuralnetwork/") | ||
59 | (gnucobol | ||
60 | "GnuCOBOL" | ||
61 | "https://gnucobol.sourceforge.io/") | ||
62 | (gnupg | ||
63 | "GnuPG" | ||
64 | "https://gnupg.org") | ||
65 | (gsl | ||
66 | "GNU Scientific Library" | ||
67 | "https://www.gnu.org/software/gsl/") | ||
68 | (guile | ||
69 | "GNU Guile" | ||
70 | "https://www.gnu.org/software/guile/") | ||
71 | (guile-debbugs | ||
72 | "Guile-Debbugs" | ||
73 | "https://savannah.gnu.org/projects/guile-debbugs/") | ||
74 | (guile-gnome | ||
75 | "Guile-GNOME" | ||
76 | "https://www.gnu.org/software/guile-gnome/") | ||
77 | (guile-opengl | ||
78 | "Guile-OpenGL" | ||
79 | "https://www.gnu.org/software/guile-opengl/") | ||
80 | (guile-rpc | ||
81 | "GNU Guile-RPC" | ||
82 | "https://www.gnu.org/software/guile-rpc/") | ||
83 | (guix | ||
84 | "GNU Guix" | ||
85 | "https://guix.gnu.org") | ||
86 | (gwl | ||
87 | "Guix Workflow Language" | ||
88 | "https://guixwl.org") | ||
89 | (hurd | ||
90 | "GNU Hurd" | ||
91 | "https://hurd.gnu.org") | ||
92 | (indent | ||
93 | "GNU indent" | ||
94 | "https://www.gnu.org/software/indent/") | ||
95 | (libgcrypt | ||
96 | "GNU Libgcrypt" | ||
97 | "https://gnupg.org/related_software/libgcrypt/") | ||
98 | (libtasn1 | ||
99 | "GNU Libtasn1" | ||
100 | "https://www.gnu.org/software/libtasn1/") | ||
101 | (lilypond | ||
102 | "GNU LilyPond" | ||
103 | "https://lilypond.org/") | ||
104 | (liquid-war-6 | ||
105 | "Liquid War 6" | ||
106 | "https://www.gnu.org/software/liquidwar6/") | ||
107 | (mcsim | ||
108 | "GNU MCSim" | ||
109 | "https://www.gnu.org/software/mcsim/") | ||
110 | (mediagoblin | ||
111 | "GNU MediaGoblin" | ||
112 | "https://mediagoblin.org/") | ||
113 | (mes | ||
114 | "GNU Mes" | ||
115 | "https://www.gnu.org/software/mes/") | ||
116 | (mpc | ||
117 | "GNU MPC" | ||
118 | "http://www.multiprecision.org/mpc/") | ||
119 | (nano-archimedes | ||
120 | "GNU Nano-Archimedes" | ||
121 | "https://www.gnu.org/software/archimedes/") | ||
122 | (shepherd | ||
123 | "GNU Shepherd" | ||
124 | "https://www.gnu.org/software/shepherd/") | ||
125 | (source-highlight | ||
126 | "GNU Source Highlight" | ||
127 | "https://www.gnu.org/software/src-highlite/") | ||
128 | (userv | ||
129 | "GNU userv" | ||
130 | "https://www.gnu.org/software/userv/"))) | ||
131 | table)) | ||
132 | |||
133 | (define-syntax-rule (define-member person projects ...) | ||
134 | (for-each (lambda (project-id) | ||
135 | (let ((project | ||
136 | (hash-table-ref %projects project-id | ||
137 | (lambda () | ||
138 | (error (format #false | ||
139 | "Unknown project ~a for ~a~%" | ||
140 | project-id name)))))) | ||
141 | (set-project-members! | ||
142 | project (cons person (project-members project))))) | ||
143 | (quote (projects ...)))) | ||
144 | |||
145 | (define-member (person "Carlos O'Donell") | ||
146 | glibc gdb gcc binutils) | ||
147 | (define-member (person "Mark J. Wielaard" | ||
148 | "https://gnu.wildebeest.org/blog/mjw/") | ||
149 | classpath gcc glibc gdb) | ||
150 | (define-member (person "Andy Wingo" | ||
151 | "https://wingolog.org") | ||
152 | guile guile-gnome guile-opengl) | ||
153 | (define-member (person "Ludovic Courtès" | ||
154 | "https://people.bordeaux.inria.fr/lcourtes/") | ||
155 | guix guile shepherd guile-rpc) | ||
156 | (define-member (person "Frederic Y. Bois") | ||
157 | mcsim) | ||
158 | (define-member (person "Andrej Shadura") | ||
159 | indent) | ||
160 | (define-member (person "Werner Koch") | ||
161 | gnupg libgcrypt) | ||
162 | (define-member (person "Mark Galassi") | ||
163 | gsl dominion) | ||
164 | (define-member (person "Jean Michel Sellier") | ||
165 | archimedes nano-archimedes gneural) | ||
166 | (define-member (person "Christopher Webber" | ||
167 | "https://dustycloud.org") | ||
168 | 8sync mediagoblin) | ||
169 | (define-member (person "Ian Jackson") | ||
170 | adns userv) | ||
171 | (define-member (person "Samuel Thibault") | ||
172 | hurd) | ||
173 | (define-member (person "Jan Nieuwenhuizen") | ||
174 | mes lilypond) | ||
175 | (define-member (person "Christian Mauduit") | ||
176 | liquid-war-6) | ||
177 | (define-member (person "Nikos Mavrogiannopoulos") | ||
178 | libtasn1) | ||
179 | (define-member (person "Andreas Enge") | ||
180 | mpc) | ||
181 | (define-member (person "Han-Wen Nienhuys") | ||
182 | lilypond) | ||
183 | (define-member (person "Tobias Geerinckx-Rice") | ||
184 | guix) | ||
185 | (define-member (person "Bernard Giroud") | ||
186 | gnucobol) | ||
187 | (define-member (person "Tom Tromey") | ||
188 | source-highlight) | ||
189 | (define-member (person "Jeff Law") | ||
190 | gcc) | ||
191 | (define-member (person "David Malcolm") | ||
192 | gcc) | ||
193 | (define-member (person "Ricardo Wurmus" | ||
194 | "https://elephly.net") | ||
195 | guix gwl guile-debbugs) | ||
196 | |||
197 | |||
198 | `((title . "Software") | ||
199 | (author . "The GNU Assembly") | ||
200 | (date . ,(string->date* "2021-04-13 23:00")) | ||
201 | (menu . "software") | ||
202 | (content | ||
203 | ((h2 "Software") | ||
204 | (p "Maintainers of the following projects participate in the GNU Assembly:") | ||
205 | (ul (@ (class "projects")) | ||
206 | ,@(hash-table-fold %projects | ||
207 | (lambda (key project acc) | ||
208 | (cons `(li (span | ||
209 | (a (@ (class "project-url") | ||
210 | (href ,(project-url project))) | ||
211 | ,(project-name project)) | ||
212 | ,(let ((members (project-members project))) | ||
213 | `(details | ||
214 | (summary ,(format #false "members (~a)" | ||
215 | (length members))) | ||
216 | (ul (@ (class "members")) | ||
217 | ,(map (lambda (person) | ||
218 | `(li (@ (class "person")) | ||
219 | ,(let ((home-page (person-url person))) | ||
220 | (if home-page | ||
221 | `(a (@ (href ,home-page)) | ||
222 | ,(person-name person)) | ||
223 | (person-name person))))) | ||
224 | members)))))) | ||
225 | acc)) | ||
226 | '()))))) | ||