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