
\documentclass[12pt]{article}
\usepackage[T2A,OT1]{fontenc}
\usepackage[default]{cantarell}
\usepackage[a4paper, top=20mm, bottom=20mm, left=20mm, right=20mm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[russian, english]{babel}
\usepackage{tabu}
\usepackage{hyperref}
\usepackage{parskip}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage[normalem]{ulem}
\usepackage{float}
\floatstyle{boxed}
\restylefloat{figure}
\usepackage{setspace}
\onehalfspacing
\author{Artyom Bologov \href{mailto:this-post-is-lisp@aartaka.me}{(email)}}
\date{\today}
\title{This Post is Written in Lisp}
\makeatletter
\def\endenv{\expandafter\end\expandafter{\@currenvir}}
\makeatother
\begin{document}
\maketitle

I launch my IDE (well, actually, it’s Emacs with SLY),
open up a Lisp file,
start up the console (we call it REPL here) side-by-side with the code,
and start programming.
I pick tab completions, add more procedures,
and iterate over the data.
Occasionally, some syntax error pops at me—some
stray comma or misspelled keyword.
It compiles, memory consumption, and code complexity is bearable.
A neat piece, I’d say.

Okay, that’s a good blog post!
Let’s publish it.
Maybe program some project afterward: I’ve got some time left before sunset.

So yes, this post (and other posts on this blog) are written in Lisp. Most of it is regular Lisp syntax:

\begin{itemize}\item symbols
\item lists
\item and sometimes strings.
\end{itemize}

Having these, I get a fancy blog post generated from raw s-expressions,
needing just a couple of syntax quirks to resolve.
Here’s how it works:

\begin{itemize}\item I load \href{https://github.com/ruricolist/spinneret}{Spinneret} (a library using Lisp macros to construct HTML) into the running Lisp image.
\item Then comes my boilerplate macros collection:
\begin{description}\item[:page*]
To generate all the <meta> tags, favicons, and styles.
\item[:section*]
To create linkable sections.
\item[:p*]
To generate linkable plaintext paragraphs from raw Lisp code (you’ve seen these pilcrow signs after the previous paragraph.)
\item[:ul* / :ol* / :dl* / :table*]
To shorten the overly verbose list and table markup (including this list you’re reading.)
\item[:a*]
To generate anchor tags from the shortest possible links and text.
\end{description}
\item Load Lisp files with these macros in them and save the generated HTML.
\item If something doesn’t compile (usually due to unescaped comma or colon)—fix and reload.
\item Push the files to the repository where CI will deploy them to the website.
\item Profit!
\end{itemize}

So here I am, bored before my IDE and uncertain about what to do next because my blog posts are already done compiling and deploying.
Maybe write some more?

Update December 2023: I switched to
\href{run:this-post-is-cpp}{C preprocessor for website generation}.

Update December 2024: I switched to
\href{run:this-post-is-ed}{ed(1)}.


\par\noindent\rule{\textwidth}{0.4pt}
\href{https://creativecommons.org/licenses/by/4.0}{CC-BY 4.0} 2022-2026 by Artyom Bologov (aartaka,)
\href{https://codeberg.org/aartaka/pages/commit/a91befa}{with one commit remixing Claude-generated code}.
Any and all opinions listed here are my own and not representative of my employers; future, past and present.
\end{document}
