blog

My personal blog.
Log | Files | Refs

commit af4d5e9fa04fd566b3a6aed7f445808702eca710
Author: Luke Willis <lukejw@loquat.dev>
Date:   Sun, 17 Aug 2025 23:23:48 -0400

Setup basic site

Diffstat:
A.gitignore | 1+
Acss/reset.css | 41+++++++++++++++++++++++++++++++++++++++++
Acss/style.css | 111+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agrug.scm | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aimg/by-sa.svg | 33+++++++++++++++++++++++++++++++++
Amanifest.scm | 4++++
Apages/about.md | 4++++
Apages/errdocs/404.md | 4++++
Apages/errdocs/err.md | 2++
Aposts/setup.md | 8++++++++
10 files changed, 269 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -0,0 +1 @@ +site diff --git a/css/reset.css b/css/reset.css @@ -0,0 +1,41 @@ +/* + Josh's Custom CSS Reset + https://www.joshwcomeau.com/css/custom-css-reset/ +*/ + +*, *::before, *::after { + box-sizing: border-box; +} + +* { + margin: 0; +} + +body { + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} + +img, picture, video, canvas, svg { + display: block; + max-width: 100%; +} + +input, button, textarea, select { + font: inherit; +} + +p, h1, h2, h3, h4, h5, h6 { + overflow-wrap: break-word; +} + +p { + text-wrap: pretty; +} +h1, h2, h3, h4, h5, h6 { + text-wrap: balance; +} + +#root, #__next { + isolation: isolate; +} diff --git a/css/style.css b/css/style.css @@ -0,0 +1,111 @@ +html { + scrollbar-gutter: stable both-edges; + font-family: serif; +} + +/* Page sizing */ + +.container { + max-width: 46rem; + padding-inline: 3rem; + margin-inline: auto; +} + +/* General */ + +h1, h2, h3, h4, h5, h6 { + margin-block: 1rem; +} + +p { + margin-block: 1rem; +} + +li { + margin-block: 0.3rem; +} + +li p { + margin-block: 0; +} + +a { + text-decoration: none; + color: #83a598; +} + +a:visited { + color: #458588; +} + +/* Article previews */ + +article { + margin-bottom: 1rem; +} + +.date { + margin-top: -1rem; +} + +/* Navigation bar */ + +nav { + display: flex; + justify-content: space-between; + padding-block: 1rem; + margin-bottom: 3rem; + border-bottom: 0.15rem solid #000; +} + +nav ul { + list-style-type: none; + display: flex; + margin: 0; + padding: 0; +} + +nav li { + display: inline; + padding-right: 1rem; +} + +nav li:first-child { + padding-left: 0; +} + +nav li:last-child { + padding-right: 0; +} + +nav a { + display: inline-block; + color: #000; +} + +nav a:visited { + color: #000; +} + +/* Footer */ + +footer { + padding-block: 1rem; + margin-top: 3rem; + border-top: 0.15rem solid #000; +} + +.copyright { + text-align: center; +} + +.copyright a { + vertical-align: middle; + margin-left: 0.4rem; +} + +.copyright img { + display: inline; + height: 1rem; +} + diff --git a/grug.scm b/grug.scm @@ -0,0 +1,61 @@ +(use-modules (grug site) + (grug builders) + (srfi srfi-19)) + +(define (stylesheet name) + `(link (@ (rel "stylesheet") + (href ,(string-append "/css/" name ".css"))))) + +(define (link name uri) + `(a (@ (href ,uri)) ,name)) + +(define (blog-template site-metadata metadata body) + `(*TOP* (*DECL* DOCTYPE html) + (head + (meta (@ (charset "utf-8"))) + (meta (@ (name "viewport") + (content "width=device-width, initial-scale=1"))) + (title ,(string-append (assoc-ref metadata 'title) + " — " + (assoc-ref site-metadata 'title))) + ,(stylesheet "reset") + ,(stylesheet "style")) + (body + (div (@ (class "container")) + (nav + (ul (li ,(link (assoc-ref site-metadata 'title) "/"))) + (ul (li ,(link "About" "/about.html")))) + (h1 ,(assoc-ref metadata 'title)) + ,@body + (footer + (p (@ (class "copyright")) + "© 2025 Luke Willis" + (a (@ (href "https://creativecommons.org/licenses/by-sa/4.0/")) + (img (@ (src "/img/by-sa.svg")))))))))) + +(define (blog-collection-template posts) + `(,@(map + (lambda (post) + `(article (h2 (a (@ (href ,(assoc-ref post 'uri))) + ,(assoc-ref post 'title))) + ;; Parse ISO 8601 date from 'date and reformat it to look nice + (p (@ (class "date")) + ,(date->string + (string->date (assoc-ref post 'date) "~Y~m~d") "~B ~d, ~Y")))) + (sort posts + (lambda (a b) + (string>? (assoc-ref a 'date) + (assoc-ref b 'date))))))) + +(site #:metadata `((title . "Luke Willis")) + #:builders (list (simple-pages + "pages" + #:template blog-template) + (blog + "posts" + #:template blog-template + #:collection-template blog-collection-template) + (copy-directory + "css") + (copy-directory + "img"))) diff --git a/img/by-sa.svg b/img/by-sa.svg @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="80" height="15" id="svg2279" sodipodi:version="0.32" inkscape:version="0.45+devel" version="1.0" sodipodi:docname="by-sa.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs id="defs2281"> + <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3442"> + <rect style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect3444" width="20.614058" height="12.483703" x="171.99832" y="239.1203"/> + </clipPath> + </defs> + <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#999999" borderopacity="1" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="10.5125" inkscape:cx="40" inkscape:cy="7.5" inkscape:document-units="px" inkscape:current-layer="layer1" width="80px" height="15px" showborder="true" inkscape:showpageshadow="false" inkscape:window-width="935" inkscape:window-height="624" inkscape:window-x="50" inkscape:window-y="160"/> + <metadata id="metadata2284"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + </cc:Work> + </rdf:RDF> + </metadata> + <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1"> + <g id="BY-SA" transform="matrix(0.9875019,0,0,0.9333518,-323.90064,-356.81188)"> + <g id="g3747" transform="translate(158,145)"> + <rect style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.04161763;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect3749" width="80" height="15" x="170.5" y="237.86218"/> + <rect y="239.36218" x="172" height="12" width="77" id="rect3751" style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> + <path style="fill:#abb1aa;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.46913578" d="M 171.99996,239.37505 L 171.99996,251.37505 L 192.33474,251.37505 C 193.64339,249.62474 194.52652,247.59057 194.52652,245.37505 C 194.52652,243.17431 193.65859,241.1179 192.36599,239.37505 L 171.99996,239.37505 z" id="path3753" sodipodi:nodetypes="cccscc"/> + <g id="g3755" transform="matrix(0.9612533,0,0,0.9612533,6.8341566,9.5069994)" clip-path="url(#clipPath3442)"> + <path id="path3757" cx="296.35416" ry="22.939548" cy="264.3577" type="arc" rx="22.939548" d="M 190.06417,245.36206 C 190.06667,249.25405 186.91326,252.41072 183.02153,252.41323 C 179.12979,252.41572 175.97262,249.26256 175.97036,245.3706 C 175.97036,245.36783 175.97036,245.36507 175.97036,245.36206 C 175.9681,241.47007 179.12126,238.3134 183.013,238.31113 C 186.90524,238.30864 190.06191,241.46181 190.06417,245.3538 C 190.06417,245.35628 190.06417,245.35929 190.06417,245.36206 z" style="opacity:1;fill:#ffffff"/> + <path d="M 188.74576,239.62226 C 190.30843,241.18492 191.08988,243.09869 191.08988,245.36206 C 191.08988,247.62592 190.32197,249.51913 188.78615,251.04165 C 187.15627,252.64521 185.22995,253.44672 183.00722,253.44672 C 180.81132,253.44672 178.91837,252.65172 177.32887,251.06174 C 175.73912,249.47198 174.94436,247.57226 174.94436,245.36206 C 174.94436,243.15235 175.73912,241.23908 177.32887,239.62226 C 178.87799,238.0591 180.77094,237.27764 183.00722,237.27764 C 185.2706,237.27764 187.18312,238.05909 188.74576,239.62226 z M 178.38093,240.67355 C 177.05978,242.008 176.39945,243.57116 176.39945,245.36429 C 176.39945,247.15694 177.05326,248.70682 178.36062,250.01393 C 179.66822,251.32153 181.22487,251.97509 183.03105,251.97509 C 184.83724,251.97509 186.40716,251.31502 187.74161,249.99412 C 189.0086,248.76725 189.64234,247.22467 189.64234,245.36429 C 189.64234,243.51799 188.99831,241.95084 187.71101,240.66354 C 186.42396,239.37649 184.86406,238.7327 183.03105,238.7327 C 181.19804,238.73271 179.64767,239.37975 178.38093,240.67355 z M 181.85761,244.57559 C 181.65573,244.13545 181.35354,243.91525 180.95051,243.91525 C 180.23802,243.91525 179.8819,244.39501 179.8819,245.35404 C 179.8819,246.31328 180.23802,246.79255 180.95051,246.79255 C 181.421,246.79255 181.75705,246.55908 181.95869,246.09111 L 182.94629,246.61701 C 182.47555,247.45339 181.76934,247.87168 180.82763,247.87168 C 180.10136,247.87168 179.51953,247.64899 179.08265,247.20409 C 178.64502,246.7587 178.42684,246.14477 178.42684,245.36206 C 178.42684,244.59313 178.65204,243.98271 179.10271,243.53056 C 179.55338,243.07838 180.11463,242.8524 180.7875,242.8524 C 181.78288,242.8524 182.49561,243.24465 182.92647,244.02835 L 181.85761,244.57559 z M 186.50398,244.57559 C 186.30184,244.13545 186.00567,243.91525 185.61517,243.91525 C 184.88839,243.91525 184.52474,244.39501 184.52474,245.35404 C 184.52474,246.31328 184.88839,246.79255 185.61517,246.79255 C 186.08642,246.79255 186.41644,246.55908 186.6048,246.09111 L 187.61447,246.61701 C 187.14448,247.45339 186.43926,247.87168 185.49931,247.87168 C 184.77403,247.87168 184.19346,247.64899 183.75683,247.20409 C 183.32096,246.7587 183.10254,246.14477 183.10254,245.36206 C 183.10254,244.59313 183.32422,243.98271 183.76737,243.53056 C 184.21026,243.07838 184.77404,242.8524 185.4592,242.8524 C 186.45282,242.8524 187.16455,243.24465 187.5939,244.02835 L 186.50398,244.57559 z" id="path3759" style="opacity:1"/> + </g> + </g> + <path id="text3761" d="M 357.4197,389.68502 C 357.66518,389.68502 357.85131,389.63144 357.9781,389.52427 C 358.10488,389.4171 358.16827,389.25904 358.16828,389.05005 C 358.16827,388.84376 358.10488,388.68703 357.9781,388.57986 C 357.85131,388.47002 357.66518,388.4151 357.4197,388.41509 L 356.55784,388.41509 L 356.55784,389.68502 L 357.4197,389.68502 M 357.4723,392.30926 C 357.78522,392.30926 358.0199,392.24363 358.17637,392.11235 C 358.33552,391.98107 358.4151,391.78281 358.4151,391.51756 C 358.4151,391.25769 358.33686,391.06345 358.18041,390.93485 C 358.02396,390.80357 357.78792,390.73793 357.4723,390.73793 L 356.55784,390.73793 L 356.55784,392.30926 L 357.4723,392.30926 M 358.92089,390.15119 C 359.25538,390.24764 359.51434,390.42581 359.69779,390.68568 C 359.88121,390.94557 359.97293,391.26439 359.97294,391.64215 C 359.97293,392.22086 359.776,392.6522 359.38217,392.93619 C 358.98833,393.22018 358.38947,393.36218 357.5856,393.36218 L 355.00001,393.36218 L 355.00001,387.36218 L 357.33878,387.36218 C 358.17771,387.36218 358.78466,387.4881 359.15962,387.73994 C 359.53727,387.99178 359.7261,388.395 359.7261,388.94959 C 359.7261,389.24162 359.65732,389.49078 359.51975,389.69708 C 359.38217,389.90069 359.18255,390.05206 358.92089,390.15119 M 359.83746,387.36218 L 361.54096,387.36218 L 362.91671,389.50015 L 364.29245,387.36218 L 366,387.36218 L 363.69764,390.83438 L 363.69764,393.36218 L 362.13982,393.36218 L 362.13982,390.83438 L 359.83746,387.36218 M 365.15837,390.40839 L 367.69946,390.40839 L 367.69946,391.57785 L 365.15837,391.57785 L 365.15837,390.40839 M 373.12153,387.55105 L 373.12153,388.82099 C 372.78973,388.67363 372.46602,388.56245 372.15042,388.48743 C 371.8348,388.41241 371.53671,388.3749 371.25618,388.3749 C 370.88391,388.3749 370.60877,388.42581 370.43073,388.52761 C 370.25268,388.62943 370.16367,388.7875 370.16367,389.00183 C 370.16367,389.16259 370.22301,389.28851 370.3417,389.37959 C 370.4631,389.46801 370.68159,389.54436 370.99721,389.60866 L 371.66081,389.74127 C 372.33249,389.87524 372.80996,390.07886 373.0932,390.35213 C 373.37644,390.62541 373.51806,391.01389 373.51807,391.51756 C 373.51806,392.17933 373.3198,392.67229 372.92326,392.99647 C 372.52941,393.31797 371.92651,393.47872 371.11455,393.47872 C 370.7315,393.47872 370.3471,393.44255 369.96136,393.37021 C 369.5756,393.29788 369.18985,393.1907 368.80411,393.04871 L 368.80411,391.74262 C 369.18985,391.94624 369.56211,392.10029 369.92089,392.20477 C 370.28236,392.30658 370.63034,392.35749 370.96484,392.35749 C 371.30473,392.35749 371.56504,392.30123 371.74578,392.1887 C 371.92651,392.07618 372.01688,391.91542 372.01688,391.70645 C 372.01688,391.51891 371.95484,391.37423 371.83076,391.27242 C 371.70936,391.17062 371.46523,391.07952 371.09837,390.99915 L 370.49547,390.86653 C 369.89122,390.73793 369.44882,390.53297 369.16827,390.25166 C 368.89042,389.97035 368.7515,389.59125 368.7515,389.11435 C 368.7515,388.51691 368.94572,388.05743 369.33418,387.73592 C 369.72262,387.41442 370.28101,387.25367 371.00935,387.25367 C 371.34115,387.25367 371.68238,387.27912 372.03307,387.33003 C 372.38374,387.37826 372.74656,387.45193 373.12153,387.55105 M 378.55573,392.26907 L 376.11985,392.26907 L 375.73545,393.36218 L 374.16953,393.36218 L 376.40714,387.36218 L 378.2644,387.36218 L 380.50201,393.36218 L 378.93609,393.36218 L 378.55573,392.26907 M 376.5083,391.15588 L 378.16324,391.15588 L 377.3378,388.76874 L 376.5083,391.15588" style="font-size:8.25858784px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:'Bitstream Vera Sans'"/> + </g> + </g> +</svg> +\ No newline at end of file diff --git a/manifest.scm b/manifest.scm @@ -0,0 +1,4 @@ +(use-modules (gnu packages rsync)) + +(packages->manifest + (list rsync)) diff --git a/pages/about.md b/pages/about.md @@ -0,0 +1,4 @@ +`((title . "About Me")) +My name is Luke Willis. I'm an Eastern Orthodox Christian interested in theology and programming. + +Christ is in our midst! diff --git a/pages/errdocs/404.md b/pages/errdocs/404.md @@ -0,0 +1,4 @@ +`((title . "Not Found")) +# 404 + +You found the 404 page! Congratulations. diff --git a/pages/errdocs/err.md b/pages/errdocs/err.md @@ -0,0 +1,2 @@ +`((title . "Error")) +# $RESPONSE\_CODE - $HTTP\_ERROR diff --git a/posts/setup.md b/posts/setup.md @@ -0,0 +1,8 @@ +`((title . "Hello, world!") (date . "2025-08-17"));` +Lo and behold, the blog has been reset once again. I have been configuring my VPS anew and +digging into the details of how my personal things are set up. I will elaborate more on this in +a future post. + +In Christ, + +Luke