]> git.jsancho.org Git - blog.git/blob - haunt.scm
Merge branch 'master' into english
[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 flex-theme
25   (theme #:name "Flex"
26          #:layout
27          (lambda (site title body)
28            `((doctype "html")
29              (html
30               (head
31                (meta (@ (charset "utf-8")))
32                (title ,(string-append title " - " (site-title site)))
33                (link (@ (rel "stylesheet") (href "//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic")))
34                ,(stylesheet "style.min")
35                ,(stylesheet "monokai.min")
36                ,(stylesheet "font-awesome.min")
37                ,(stylesheet "custom")
38                (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0"))))
39               (body
40                ,(let ((metadata (site-default-metadata site)))
41                   `(aside
42                     (div
43                      (a (@ (href "index.html")) (img (@ (src ,(assoc-ref metadata 'picture)))))
44                      (h1 (a (@ (href "index.html")) ,(assoc-ref metadata 'author)))
45                      (p ,(assoc-ref metadata 'description))
46                      (nav
47                       (ul (@ (class "list"))
48                           ,@(map (lambda (page)
49                                    `(li (a (@ (href ,(cdr page))) ,(car page))))
50                                  (assoc-ref metadata 'pages))))
51                      (ul (@ (class "social"))
52                          (li (a (@ (class "sc-bitbucket") (target "_blank") (href "https://bitbucket.org/jsancho_gpl/")) (i (@ (class "fa fa-bitbucket")))))
53                          " "
54                          (li (a (@ (class "sc-github") (target "_blank") (href "https://github.com/jsancho-gpl")) (i (@ (class "fa fa-github")))))
55                          " "
56                          (li (a (@ (class "sc-twitter") (target "_blank") (href "https://twitter.com/jsancho_gpl")) (i (@ (class "fa fa-twitter")))))
57                          " "
58                          (li (a (@ (class "sc-rss") (target "_blank") (href "feed.xml")) (i (@ (class "fa fa-rss")))))))))
59                (main ,body)))))
60
61          #:post-template
62          (lambda (post)
63            (define (get-tags post)
64              (or (assoc-ref (post-metadata post) 'tags) '()))
65
66            `((article (@ (class "single"))
67                       (header
68                        (h1 ,(post-ref post 'title))
69                        (p "Posted on " ,(date->string (post-date post) "~B ~d, ~Y")))
70                       ,(post-sxml post)
71                       (div (@ (class "tag-cloud"))
72                            (p
73                             ,@(map (lambda (tag)
74                                      `((a (@ (href "")) ,tag) " "))
75                                    (get-tags post)))))))
76
77          #:collection-template
78          (lambda (site title posts prefix)
79            (define (post-uri post)
80              (string-append (or prefix "")
81                             (site-post-slug site post) ".html"))
82
83            (define (get-paragraphs sxml count)
84              (let ((pars (filter
85                           (lambda (e) (and (pair? e) (eq? (car e) 'p)))
86                           sxml)))
87                (list-head pars (min count (length pars)))))
88                      
89            (define (post-summary post)
90              (or (post-ref post 'summary)
91                  (get-paragraphs (cdr (post-sxml post)) 3)))
92
93            `(
94              ,@(map (lambda (post)
95                       `(article
96                         (header
97                          (h2
98                           (a (@ (href ,(post-uri post)))
99                              ,(post-ref post 'title)))
100                          (p "Posted on " ,(date->string (post-date post) "~B ~d, ~Y")))
101                         (div ,(post-summary post)
102                              (br)
103                              (a (@ (class "btn") (href ,(post-uri post))) " Continue reading "))
104                         (hr)))
105                     (posts/reverse-chronological posts))))))
106
107 (define about-page
108   (static-page
109    "About me"
110    "about.html"
111    `((div
112       (article
113        (header (h2 "About me"))
114        (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.")
115        (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.")
116        (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.")
117        (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."))))))
118
119 (define %collections
120   `(("Home" "index.html" ,posts/reverse-chronological)))
121
122 (site #:title "Javier Sancho"
123       #:domain "jsancho.org"
124       #:default-metadata
125       '((author . "Javier Sancho")
126         (description . "Free Software Evangelist - Programmer")
127         (email . "jsf@jsancho.org")
128         (picture . "images/jsancho.jpg")
129         (pages . (("about" . "about.html")
130                   ("projects" . "http://git.jsancho.org/"))))
131       #:readers (list sxml-reader html-reader)
132       #:builders (list (blog #:theme flex-theme #:collections %collections)
133                        (atom-feed)
134                        (atom-feeds-by-tag)
135                        about-page
136                        (static-directory "images")
137                        (static-directory "fonts")
138                        (static-directory "css")))