
\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}
