Relative urls
[blog.git] / haunt.scm
1 (use-modules (haunt asset)
2              (haunt builder blog)
3              (haunt builder atom)
4              (haunt builder assets)
5              (haunt reader)
6              (haunt reader texinfo)
7              (haunt site)
8              (haunt post)
9              (srfi srfi-1))
10
11 (define (stylesheet name)
12   `(link (@ (rel "stylesheet")
13             (href ,(string-append "css/" name ".css")))))
14
15 (define flex-theme
16   (theme #:name "Flex"
17          #:layout
18          (lambda (site title body)
19            `((doctype "html")
20              (html
21               (head
22                (meta (@ (charset "utf-8")))
23                (title ,(string-append title " - " (site-title site)))
24                (link (@ (rel "stylesheet") (href "//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic")))
25                ,(stylesheet "style.min")
26                ,(stylesheet "monokai.min")
27                ,(stylesheet "font-awesome.min")
28                ,(stylesheet "custom")
29                (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0"))))
30               (body
31                ,(let ((metadata (site-default-metadata site)))
32                   `(aside
33                     (div
34                      (a (@ (href "index.html")) (img (@ (src ,(assoc-ref metadata 'picture)))))
35                      (h1 (a (@ (href "index.html")) ,(assoc-ref metadata 'author)))
36                      (p ,(assoc-ref metadata 'description))
37                      (nav
38                       (ul (@ (class "list"))
39                           ,@(map (lambda (page)
40                                    `(li (a (@ (href ,(cdr page))) ,(car page))))
41                                  (assoc-ref metadata 'pages))))
42                      (ul (@ (class "social"))
43                          (li (a (@ (class "sc-linkedin") (target "_blank") (href "")) (i (@ (class "fa fa-linkedin")))))
44                          " "
45                          (li (a (@ (class "sc-github") (target "_blank") (href "")) (i (@ (class "fa fa-github")))))
46                          " "
47                          (li (a (@ (class "sc-twitter") (target "_blank") (href "")) (i (@ (class "fa fa-twitter")))))
48                          " "
49                          (li (a (@ (class "sc-rss") (target "_blank") (href "feed.xml")) (i (@ (class "fa fa-rss")))))))))
50                (main ,body)))))
51
52          #:post-template
53          (lambda (post)
54            (define (get-tags post)
55              (or (assoc-ref (post-metadata post) 'tags) '()))
56
57            `((article (@ (class "single"))
58                       (header
59                        (h1 ,(post-ref post 'title))
60                        (p ,(date->string* (post-date post))))
61                       ,(post-sxml post)
62                       (div (@ (class "tag-cloud"))
63                            (p
64                             ,@(map (lambda (tag)
65                                      `((a (@ (href "")) ,tag) " "))
66                                    (get-tags post)))))))
67
68          #:collection-template
69          (lambda (site title posts prefix)
70            (define (post-uri post)
71              (string-append (or prefix "")
72                             (site-post-slug site post) ".html"))
73
74            (define (get-paragraphs sxml count)
75              (let ((pars (filter
76                           (lambda (e) (and (pair? e) (eq? (car e) 'p)))
77                           sxml)))
78                (list-head pars (min count (length pars)))))
79                      
80            (define (post-summary post)
81              (or (post-ref post 'summary)
82                  (get-paragraphs (cdr (post-sxml post)) 3)))
83
84            `(
85              ,@(map (lambda (post)
86                       `(article
87                         (header
88                          (h2
89                           (a (@ (href ,(post-uri post)))
90                              ,(post-ref post 'title)))
91                          (p ,(date->string* (post-date post))))
92                         (div ,(post-summary post)
93                              (br)
94                              (a (@ (class "btn") (href ,(post-uri post))) " Seguir leyendo "))
95                         (hr)))
96                     (posts/reverse-chronological posts))))))
97
98 (define %collections
99   `(("Home" "index.html" ,posts/reverse-chronological)))
100
101 (site #:title "Javier Sancho"
102       #:domain "jsancho.org"
103       #:default-metadata
104       '((author . "Javier Sancho")
105         (description . "Free Software Evangelist - Programmer")
106         (email . "jsf@jsancho.org")
107         (picture . "images/jsancho.jpg")
108         (pages . (("about" . "about.html")
109                   ("projects" . "http://git.jsancho.org/"))))
110       #:readers (list sxml-reader html-reader)
111       #:builders (list (blog #:theme flex-theme #:collections %collections)
112                        (atom-feed)
113                        (atom-feeds-by-tag)
114                        (static-directory "images")
115                        (static-directory "fonts")
116                        (static-directory "css")))