(use-modules (haunt asset) (haunt builder blog) (haunt builder atom) (haunt builder assets) (haunt html) (haunt page) (haunt reader) (haunt reader texinfo) (haunt site) (haunt post) (srfi srfi-1) (srfi srfi-19)) (define (stylesheet name) `(link (@ (rel "stylesheet") (href ,(string-append "css/" name ".css"))))) (define (static-page title file-name body) (lambda (site posts) (make-page file-name (with-layout flex-theme site title body) sxml->html))) (define flex-theme (theme #:name "Flex" #:layout (lambda (site title body) `((doctype "html") (html (head (meta (@ (charset "utf-8"))) (title ,(string-append title " - " (site-title site))) (link (@ (rel "stylesheet") (href "//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic"))) ,(stylesheet "style.min") ,(stylesheet "monokai.min") ,(stylesheet "font-awesome.min") ,(stylesheet "custom") (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0")))) (body ,(let ((metadata (site-default-metadata site))) `(aside (div (a (@ (href "index.html")) (img (@ (src ,(assoc-ref metadata 'picture))))) (h1 (a (@ (href "index.html")) ,(assoc-ref metadata 'author))) (p ,(assoc-ref metadata 'description)) (nav (ul (@ (class "list")) ,@(map (lambda (page) `(li (a (@ (href ,(cdr page))) ,(car page)))) (assoc-ref metadata 'pages)))) (ul (@ (class "social")) (li (a (@ (class "sc-linkedin") (target "_blank") (href "")) (i (@ (class "fa fa-linkedin"))))) " " (li (a (@ (class "sc-github") (target "_blank") (href "")) (i (@ (class "fa fa-github"))))) " " (li (a (@ (class "sc-twitter") (target "_blank") (href "")) (i (@ (class "fa fa-twitter"))))) " " (li (a (@ (class "sc-rss") (target "_blank") (href "feed.xml")) (i (@ (class "fa fa-rss"))))))))) (main ,body))))) #:post-template (lambda (post) (define (get-tags post) (or (assoc-ref (post-metadata post) 'tags) '())) `((article (@ (class "single")) (header (h1 ,(post-ref post 'title)) (p "Posted on " ,(date->string (post-date post) "~B ~d, ~Y"))) ,(post-sxml post) (div (@ (class "tag-cloud")) (p ,@(map (lambda (tag) `((a (@ (href "")) ,tag) " ")) (get-tags post))))))) #:collection-template (lambda (site title posts prefix) (define (post-uri post) (string-append (or prefix "") (site-post-slug site post) ".html")) (define (get-paragraphs sxml count) (let ((pars (filter (lambda (e) (and (pair? e) (eq? (car e) 'p))) sxml))) (list-head pars (min count (length pars))))) (define (post-summary post) (or (post-ref post 'summary) (get-paragraphs (cdr (post-sxml post)) 3))) `( ,@(map (lambda (post) `(article (header (h2 (a (@ (href ,(post-uri post))) ,(post-ref post 'title))) (p "Posted on " ,(date->string (post-date post) "~B ~d, ~Y"))) (div ,(post-summary post) (br) (a (@ (class "btn") (href ,(post-uri post))) " Continue reading ")) (hr))) (posts/reverse-chronological posts)))))) (define about-page (static-page "About me" "about.html" `((h2 "hi.")))) (define %collections `(("Home" "index.html" ,posts/reverse-chronological))) (site #:title "Javier Sancho" #:domain "jsancho.org" #:default-metadata '((author . "Javier Sancho") (description . "Free Software Evangelist - Programmer") (email . "jsf@jsancho.org") (picture . "images/jsancho.jpg") (pages . (("about" . "about.html") ("projects" . "http://git.jsancho.org/")))) #:readers (list sxml-reader html-reader) #:builders (list (blog #:theme flex-theme #:collections %collections) (atom-feed) (atom-feeds-by-tag) about-page (static-directory "images") (static-directory "fonts") (static-directory "css")))