1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.lonestar.org>
;;;
;;; This program is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU General Public License as
;;; published by the Free Software Foundation; either version 3 of the
;;; License, or (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;;; General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program. If not, see
;;; <http://www.gnu.org/licenses/>.
(use-modules (custom sxml))
(define %software-projects
'(("Mines" "Dormant"
"https://git.sr.ht/~jakob/mines"
("Android implementation of the classic video game \"Minesweeper\"."))
("Rebuild" "Dormant"
"https://git.sr.ht/~jakob/rebuild"
("An attempt at reimplementing Ken Silverman's Build engine, with the goal of being modular enough to host a modern Blood source port."))
("wildmidi" "Dormant"
"https://git.sr.ht/~jakob/wildmidi"
("A simple [Rust] wrapper around the WildMIDI software synthesizer library."))
("Slime the World" "Finished"
"https://git.sr.ht/~jakob/slime-the-world"
("My entry for the 2018 Autumn Lisp Game Jam; a game about covering everything in slime."))
("Nekopack" "Finished"
"https://git.sr.ht/~jakob/nekopack"
("Tool for extracting game data from Nekopara's XP3 archives."))
("skullfuck" "Finished"
"https://git.sr.ht/~jakob/skullfuck"
("Optimizing compiler for Brainfuck, contained in a single C source file."))
("Brisket" "Abandoned"
"https://git.sr.ht/~jakob/brisket"
("Primitive newsreader script for interacting with NNTP servers."))
("Hypodermic" "Abandoned"
"https://git.sr.ht/~jakob/hypodermic"
("Proof-of-concept shared object injector that will eventually be integrated with PINCE."))
("Duke on FluidSynth" "Abandoned"
"https://git.sr.ht/~jakob/duke-on-fluidsynth"
("Experimental FluidSynth MIDI driver for EDuke32."))))
(define %software-contributions
`(("Haiku" "Finished"
"https://www.haiku-os.org/"
("The Haiku operating system."
(ul (li ,(link "1337: mediaplayer: Implement AppendM3uToPlaylist"
"https://review.haiku-os.org/c/haiku/+/1337"))
(li ,(link "1351: Add mime_db entry for application/vnd.apple.mpegurl (M3U)"
"https://review.haiku-os.org/c/haiku/+/1351")))))))
(define %packaging-projects
'(("zerodaysfordays" "Active"
"https://git.sr.ht/~jakob/zerodaysfordays"
("My personal Gentoo ebuild overlay."))))
(define (project name status url description)
(let ((status-class (cond ((string= status "Active") "info")
((string= status "Finished") "good")
((string= status "Dormant") "okay")
((string= status "Abandoned") "bad")
(else "info"))))
`(tr (td ,(link name url))
(td (span (@ (class ,(string-append "label " status-class))) ,status))
(td ,@description))))
(define (project-section name projects)
`((h2 ,name)
(table
(tbody
,@(map (lambda (args) (apply project args)) projects)))))
`((h2 "Projects")
(p "I'm still in the process of putting things together, so this page is a bit empty.")
,@(project-section "Software" %software-projects)
,@(project-section "Packaging" %packaging-projects)
,@(project-section "Other Contributions" %software-contributions))
|