]> git.jsancho.org Git - blog.git/blob - haunt.scm
Fix lugaru tags
[blog.git] / haunt.scm
1 (use-modules (haunt asset)
2              (haunt builder blog)
3              (haunt builder atom)
4              (haunt builder assets)
5              (haunt html)
6              (haunt page)
7              (haunt reader)
8              (haunt reader texinfo)
9              (haunt site)
10              (haunt post)
11              (srfi srfi-1)
12              (srfi srfi-19))
13
14 (define (stylesheet name)
15   `(link (@ (rel "stylesheet")
16             (href ,(string-append "css/" name ".css")))))
17
18 (define (static-page title file-name body)
19   (lambda (site posts)
20     (make-page file-name
21                (with-layout flex-theme site title body)
22                sxml->html)))
23
24 (define (get-tags post)
25   (or (assoc-ref (post-metadata post) 'tags) '()))
26
27 (define (post-date-and-tags date tags)
28   (let ((div `(div (@ (class "date-and-tags"))
29                    (time (@ (datetime ,(date->string date "~Y-~m-~dT~H:~M:~S")))
30                          ,(date->string date "~Y-~m-~d")))))
31     (cond ((> (length tags) 0)
32            (append div
33                    `(" "
34                      (span (@ (style "margin: 0 3px")) ⦿)
35                      (span (@ (class "tags"))
36                            ,@(drop-right
37                               (apply
38                                append
39                                (map (lambda (tag)
40                                       `((a (@ (href ,(format #f "tags/~a.html" tag))) ,tag) ", "))
41                                     tags))
42                               1)))))
43           (else
44            div))))
45
46 (define flex-theme
47   (theme #:name "Flex"
48          #:layout
49          (lambda (site title body)
50            `((doctype "html")
51              (html
52               (head
53                (meta (@ (charset "utf-8")))
54                (title ,(string-append title " - " (site-title site)))
55                (link (@ (rel "stylesheet") (href "https://fonts.googleapis.com/css?family=Merriweather+Sans:400,300,300italic,400italic,700,700italic,800,800italic|Merriweather:400,300,300italic,400italic,700,700italic,900,900italic|Source+Code+Pro:200,300,400,500,600,700,900")))
56                ,(stylesheet "application.min")
57                ,(stylesheet "pygments.min")
58                ,(stylesheet "custom")
59                (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0"))))
60               (body
61                ,(let ((metadata (site-default-metadata site)))
62                   `(div (@ (id "page-content"))
63                         (header
64                          (nav (@ (role "navigation") (class "navigation-bar"))
65                               (ul (@ (class "navigation-items left"))
66                                   (li (@ (id "blog-title-header"))
67                                       (a (@ (href "index.html"))
68                                          (h1 ,(assoc-ref metadata 'author)))))
69                               (ul (@ (class "navigation-items center"))
70                                   (li (a (@ (href "https://jsancho.org/")) "in spanish")))
71                               (ul (@ (class "navigation-items right"))
72                                   ,@(map (lambda (page)
73                                            `(li (a (@ (href ,(cdr page))) ,(car page))))
74                                          (assoc-ref metadata 'pages)))))
75                         (section (@ (role "main"))
76                                  (div (@ (class "content") (class "col-md-12")) ,body))))))))
77
78          #:post-template
79          (lambda (post)
80            `((article (@ (class "inline"))
81                       (header
82                        (h1 (@ (class "title")) ,(post-ref post 'title))
83                        ,(post-date-and-tags (post-date post) (get-tags post)))
84                       ,(post-sxml post))))
85
86          #:collection-template
87          (lambda (site title posts prefix)
88            (define (post-uri post)
89              (string-append (or prefix "")
90                             (site-post-slug site post) ".html"))
91
92            (define (get-paragraphs sxml count)
93              (let ((pars (filter
94                           (lambda (e) (and (pair? e) (eq? (car e) 'p)))
95                           sxml)))
96                (list-head pars (min count (length pars)))))
97                      
98            (define (post-summary post)
99              (or (post-ref post 'summary)
100                  (get-paragraphs (cdr (post-sxml post)) 3)))
101
102            `(
103              ,@(map (lambda (post)
104                       `(article (@ (class "inline"))
105                                 (header
106                                  (h2 (@ (class "title"))
107                                      (a (@ (href ,(post-uri post)))
108                                         ,(post-ref post 'title)))
109                                  ,(post-date-and-tags (post-date post) (get-tags post)))
110                                 ,(post-summary post)
111                                 (footer (@ (class "read-more"))
112                                            (a (@ (href ,(post-uri post))) "...read more..."))))
113                     (posts/reverse-chronological posts))))))
114
115 (define about-page
116   (static-page
117    "About me"
118    "about.html"
119    `((div
120       (article
121        (header (h2 "About me"))
122        (img (@ (src "images/jsancho.jpg") (width "150") (height "150") (align "left") (style "margin: 10px;")))
123        (p "My name is Javier Sancho, and I am a programmer and a free software evangelist. I live in Castellón, Spain.")
124        (p "I met GNU/Linux and free software while I was studying Computer Science at " (a (@ (href "http://www.uji.es/")) "Universitat Jaume I") " and, since then, my commitment with these ideas hasn't stopped growing.")
125        (p "It was in 2003 when I started as an activist, participating in events related with free software, demonstrations against software patents, talks and information sessions at install parties, schools, etc.")
126        (p "I enjoy programming and I use the programming language that better fits my needs (Python, PHP, Golang, Erlang, ...). For many years my favorite language was C, although over time that privileged place has been occupied by Lisp y Scheme. I'm in love with the functional paradigm.")
127        (p "I'm married with a wonderful woman and we have a kid that amaze us every day. They are the best of my life.")
128        (p "Besides this blog, sometimes I share thoughts in " (a (@ (href "https://twitter.com/jsancho_gpl")) "Twitter") ". You can email me at " (a (@ (href "mailto:jsf@jsancho.org")) "jsf@jsancho.org") "."))))))
129
130 (define %collections
131   `(("Home" "index.html" ,posts/reverse-chronological)))
132
133 (site #:title "Javier Sancho"
134       #:domain "jsancho.org"
135       #:default-metadata
136       '((author . "Javier Sancho")
137         (description . "Free Software Evangelist - Programmer")
138         (email . "jsf@jsancho.org")
139         (picture . "images/jsancho.jpg")
140         (pages . (("projects" . "http://git.jsancho.org/")
141                   ("about me" . "about.html"))))
142       #:readers (list sxml-reader html-reader)
143       #:builders (list (blog #:theme flex-theme #:collections %collections)
144                        (atom-feed)
145                        (atom-feeds-by-tag)
146                        about-page
147                        (static-directory "images")
148                        (static-directory "fonts")
149                        (static-directory "css")))