From 85314da0ba587c12c25c8d0fb9ca2708adb487ca Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Thu, 28 Nov 2019 23:49:11 -0500 Subject: [PATCH] begin work on porting to haunt https://dthompson.us/projects/haunt.html --- haunt.scm | 234 ++++++++++++++++++++++++++++++++++ static/reset.css | 48 +++++++ style.css => static/style.css | 74 +++++------ 3 files changed, 320 insertions(+), 36 deletions(-) create mode 100644 haunt.scm create mode 100644 static/reset.css rename style.css => static/style.css (74%) diff --git a/haunt.scm b/haunt.scm new file mode 100644 index 0000000..be470cd --- /dev/null +++ b/haunt.scm @@ -0,0 +1,234 @@ +(use-modules (haunt asset) + (haunt builder blog) + (haunt builder atom) + (haunt builder assets) + (haunt html) + (haunt page) + (haunt post) + (haunt reader commonmark) + (haunt site) + (haunt utils) + (ice-9 match) + (srfi srfi-19)) + +(define (stylesheet name) + `(link (@ (rel "stylesheet") + (href ,(string-append "/" name ".css"))))) + +(define* (base-layout site body #:key title) + `((doctype "html") + (html + (head + (meta (@ (charset "utf-8"))) + (title ,(if title (string-append title " — " (site-title site)) + "Amin Bandali’s Personal Site")) + ,(stylesheet "reset") + ,(stylesheet "style")) + (body + (main ,body) + (footer + (p + "Copyright 2016–2019 Amin Bandali. See " + (a (@ (href "license.html")) "license.html") + " for license conditions. Please copy and share.")))))) + +(define (bandali-post-template post) + `((header + (h1 ,(post-ref post 'title)) + (address "By " + (a (@ (href "/")) + ,(post-ref post 'author)) + " <" ,(post-ref post 'email) ">") + (p (@ (class "date")) + ,(date->string (post-date post) "~B ~d, ~Y"))) + ,(post-sxml post))) + +(define (bandali-collection-template site title posts prefix) + (define (post-uri post) + (string-append (or prefix "") "/" + (site-post-slug site post) ".html")) + + `((h3 ,title) + (ul + ,@(map (lambda (post) + `(li + (a (@ (href ,(post-uri post))) + ,(post-ref post 'title)) + " — " ,(date->string (post-date post) "~B ~d, ~Y"))) + posts)))) + +(define bandali-theme + (theme #:name "bandali" + #:layout + (lambda (site title body) + (base-layout site body + #:title title)) + #:post-template bandali-post-template + #:collection-template bandali-collection-template)) + +(define (index-material site posts) + `(div + (h1 (@ (style "font-size: 0;")) + "Amin Bandali") + (p (@ (style "margin-top: 0;")) + "Hi, I’m " + (a (@ (href "images/bandali-with-rms.jpg") + (title ,(string-append + "photo of bandali with rms wearing a " + "“pay cash don’t be tracked” pin"))) + "Amin Bandali") + ". I’m a graduate student at " + (a (@ (href "https://watform.uwaterloo.ca")) + "WatForm") + " at University of Waterloo, supervised by " + (a (@ (href "https://cs.uwaterloo.ca/~nday/")) + "Dr. Nancy Day") + ". The main goal of my research is improving " + (strong "software and systems reliability") + " through application of " (em "formal methods") ".") + (p "My research at WatForm focuses on formal logic, model " + "checking, and verification. I’m also interested in " + "programming languages, theorem provers, and their " + "type systems. You may wish to view my academic " + (a (@ (href "bandali-cv.html")) "curriculum vitae") ".") + (p (@ (class "notice")) + (strong "SE 212 students: ") + "see " (a (@ (href "se212-f19/")) "here") " for slides and " + "other material from the tutorials.") + (p "On the side, I dabble in " + (a (@ (href "https://leanprover.github.io")) "Lean") + " and enjoy " + (a (@ (href "https://stallman.org/articles/on-hacking.html")) + "hacking") + " on " + (a (@ (href "https://www.gnu.org/software/emacs/manual/elisp.html")) + "Elisp") + ". I’m a " + (a (@ (href "https://www.gnu.org/philosophy/free-sw.html")) + "Free Software") + " activist and FSF " + (a (@ (href "https://www.fsf.org/associate/")) "supporter") + ", and a GNU " + (a (@ (href "https://www.gnu.org/people/#bandali")) + "maintainer") + " and " + (a (@ (href "https://www.gnu.org/people/webmeisters.html#bandali")) + "webmaster") + ". I co-host the " + (a (@ (href "https://emacsel.com")) "Emacs.el") + " podcast with " + (a (@ (href "https://www.pygopar.com")) + "Daniel Gopar") ", and organize " + (a (@ (href "https://emacsconf.org")) "EmacsConf") " with help" + " from many wonderful people. I am also a member of the" + " Systems Committee for the " + (a (@ (href "https://csclub.uwaterloo.ca") + (title ,(string-append + "Computer Science Club of the " + "University of Waterloo"))) "CSC") + ".") + (p "See my " (a (@ (href "contact.html")) "contact") " page for " + "how to best reach me.") + (h2 (@ (id "papers")) "Papers") + (dl + (dt "A Comparison of the Declarative Modelling Languages B, DASH, + and TLA" (sup "+") + (span (@ (class "plinks")) + " [ " + (a (@ (href "papers/modre2018-declarative.pdf")) + "pdf") + " | " + (a (@ (href "papers/modre2018-declarative.bib")) + "bib") + " ]")) + (dd "Ali Abbassi, " + (a (@ (href "https://bandali.eu.org")) "Amin Bandali") ", " + (a (@ (href "https://cs.uwaterloo.ca/~nday/")) + "Nancy A. Day") + ", and Jose Serna" + (br) + (em "2018 IEEE 8th International Model-Driven Requirements" + " Engineering Workshop (MoDRE)") + (br) + "Copyright © 2018 IEEE. All Rights Reserved. Sadly.")) + (h2 (@ (id "talks")) "Talks") + (dl + (dt + "The Magic of Specifications and Type Systems" + (span (@ (class "plinks")) + " [ " + (a (@ (href "talks/cucsc-2017-slides.pdf") + (title ,(string-append + "presented at the Canadian Undergraduate" + " Computer Science Conference 2017,\n" + "University of Toronto, Canada," + "June 15–17, 2017"))) + "slides") + " | " + (a (@ (href "talks/eecs4080-poster.pdf") + (title ,(string-append + "presented at the Lassonde Undergraduate" + " Summer Student Research Conference,\n" + "York University, Toronto, Canada," + "August 15, 2017"))) + "poster") + " ]")) + (dd (a (@ (href "https://bandali.eu.org")) "Amin Bandali") ", " + (a (@ (href "https://github.com/cipher1024")) + "Simon Hudon") + ", " + (a (@ (href "http://www.cse.yorku.ca/~jonathan/")) + "Jonathan S. Ostroff"))) + (h2 (@ (id "projects")) "Projects") + (p "Below are a number of free software projects I have worked " + "on:") + (dl + (dt (a (@ (href "https://git.sr.ht/~bandali/george-mode")) + "george-mode")) + (dd "Emacs major mode for editing George files") + (dt (a (@ (href "https://git.uwaterloo.ca/bandali/alloy-catalyst")) + "alloy-catalyst")) + (dd "Framework for performance analysis of Alloy models") + (dt (a (@ (href "https://github.com/unitb/unitb-web")) + "unitb-web")) + (dd "Web interface for Unit-B") + (dt (a (@ (href "https://github.com/unitb/tex2png-hs")) + "tex2png-hs")) + (dd "Library and CLI for converting TeX and LaTeX to PNG " + "images")) + (h2 (@ (id "notes")) "Notes") + (ul + ,@(map + (lambda (post) + (define (post-uri post) + (string-append "/" + (site-post-slug site post) ".html")) + `(li + (a (@ (href ,(post-uri post))) + ,(post-ref post 'title)) + " — " ,(date->string (post-date post) "~B ~d, ~Y"))) + (take-up-to 10 (posts/reverse-chronological posts)))))) + +(define (index-page site posts) + (make-page + "index.html" + (base-layout site (index-material site posts)) + sxml->html)) + +(define my-domain "bandali.eu.org") + +(site #:title "Amin Bandali" + #:domain my-domain + #:default-metadata + '((author . "Amin Bandali") + (email . "bandali@gnu.org") + (domain . my-domain)) + #:readers (list commonmark-reader) + #:builders (list (blog #:theme bandali-theme + #:collections + `(("Notes" "notes.html" + ,posts/reverse-chronological))) + index-page + (atom-feed) + (atom-feeds-by-tag) + (static-directory "static" ""))) diff --git a/static/reset.css b/static/reset.css new file mode 100644 index 0000000..ed11813 --- /dev/null +++ b/static/reset.css @@ -0,0 +1,48 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/style.css b/static/style.css similarity index 74% rename from style.css rename to static/style.css index c460723..ea05296 100644 --- a/style.css +++ b/static/style.css @@ -1,12 +1,7 @@ -/* for old browsers */ -article, aside, footer, header, nav, section { - display: block; -} - body { font-family: sans-serif; line-height: 1.6; - padding: 1em; + padding: 2em; } nav, main, footer { @@ -18,30 +13,39 @@ nav { font-size: 0.84em; } main { - /* margin-top: 1em; */ - margin-bottom: 3em; - /* margin-top: 2%; */ + margin-bottom: 2em; +} +p { + margin: 1em 0; +} +header { + font-size: 0.875em; + margin-bottom: 1.5em; } footer { border-top: 1px solid #bbb; + font-size: 0.84em; padding-top: 1em; } footer p { margin: 0; - font-size: 0.84em; } -#hiddentitle { - font-size: 0; -} h1 { font-size: 1.5em; } -#subtitle { - display: inline; - font-weight: normal; - font-size: 1.2em; - color: #444; +h1 + address { + margin-top: 0.75em; +} +address + p { + margin: 0; +} + +h2 { + font-size: 1.25em; +} +h3 { + font-size: 1.125em; } a { @@ -93,9 +97,15 @@ article h3 { } code { - font-size: 1.15em; + font: 1.15em monospace; text-transform: none; } +strong { + font-weight: bold; +} +em { + font-style: italic; +} table td { padding: 0 0.3em; @@ -107,12 +117,6 @@ table td:last-child { padding-right: 0 } -dl { - margin: 0 0 0.5em 0; -} -dl:last-child { - margin: 0; -} dt { margin-bottom: 0.15em; } @@ -121,6 +125,9 @@ dd { margin-left: 1.5em; margin-bottom: 0.75em; } +dd:last-child { + margin-bottom: 1em; +} .plinks { font-size: 0.9em; } @@ -141,15 +148,10 @@ ul > li::before { left: 0.5em; } -/* -ol { - margin: 0; - padding: 0; -} -ol li { - margin-top: 0.5em; +h2 + ul, h3 + ul, h2 + dl, h3 + dl { + margin-top: 1em; } -ol li:first-child { - margin-top: 0; -} -*/ + +sup, sub { font-size: 0.85em; } +sup { vertical-align: super; } +sub { vertical-align: sub; } -- 2.20.1