blob: 7fd9355360b32af3ab34286946310ac8ad3ddbe4 (
plain)
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
83
84
85
86
87
88
89
90
91
92
|
;;; 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 alias)
(custom tag)
(custom theme)
(haunt builder atom)
(haunt builder assets)
(haunt builder blog)
(haunt html)
(haunt page)
(haunt post)
(haunt reader)
(haunt site)
(sxml simple)
(srfi srfi-19)
(srfi srfi-26)
(ice-9 match))
;; Use a temporary reader until my patch makes it into an upstream release.
(define (read-html-post-prime port)
(values (read-metadata-headers port)
(let loop ((ret '()))
(catch 'parser-error
(lambda ()
(match (xml->sxml port)
(('*TOP* sxml) (loop (cons sxml ret)))))
(lambda (key . parameters)
(reverse ret))))))
(define html-reader-prime
(make-reader (make-file-extension-matcher "html")
(cut call-with-input-file <> read-html-post-prime)))
;; Replace Haunt's default 'string->date* function with one that recognizes the
;; date format that Org uses.
(define (org-string->date str)
"Convert STR, a string in Org format, into a SRFI-19 date object."
(string->date str "<~Y-~m-~d ~a>"))
(register-metadata-parser! 'date org-string->date)
(define (static-page title slug)
(lambda (site posts)
(let ((file-name (format #f "~a.html" slug))
(body (load (format #f "~a.scm" slug))))
(make-page file-name
(with-layout jakob-theme site title body)
sxml->html))))
(define %collections
`(("Recent Posts" "index.html" ,posts/reverse-chronological)))
(define %aliases
'(("blog/post/Bad BEHAVIOR" . "/reverse-engineering-babbys-first-archive-format.html")))
(site #:title "Jakob's Personal Webpage"
#:domain "jakob.space"
#:default-metadata
'((author . "Jakob L. Kreuze")
(email . "zerodaysfordays@sdf.lonestar.org"))
#:make-slug (lambda (post)
(let* ((file-name (post-file-name post))
(splice-start (+ (string-rindex file-name
(cut char=? <> #\/))
1))
(splice-end (string-rindex file-name
(cut char=? <> #\.))))
(substring file-name splice-start splice-end)))
#:readers (list html-reader-prime)
#:builders (list (blog #:theme jakob-theme #:collections %collections)
(article-aliases %aliases)
(atom-feed)
(sort-by-tag)
(static-page "About Me" "about")
(static-page "Projects" "projects")
(static-directory "css")
(static-directory "fonts")
(static-directory "images")))
|