up | maxheisinger.at

Rendered from Emacs

The website is created using a customized exporter from Emacs' Org Mode HTML export feature. This is mainly nice because I can organize things well from my editor and also publish directly to the web without having to re-do content in some browser-based editor. Also, it's just a nice and fun tinkering experience.

Emacs Version

I'm mainly using Emacs 29, although this page setup should also work with older releases. I recently switched to the Lucid version of Emacs, as this reduces lag spikes with the pure GTK port. Even though this is using XWayland, the performance still very noticably improved, with less issues. The package emacs-lucid already works perfectly well for this.

Compiling Emacs

In order to compile Emacs, you can use the following steps. Please use the versions you want to use. The pre-release versions are used for testing config changes. These instructions are specific to Fedora.

sudo dnf build-dep emacs

mkdir -p ~/src

cd ~/src
git clone https://github.com/tree-sitter/tree-sitter.git
cd tree-sitter
# Use a recent version of TreeSitter.
git checkout v0.24.7
make -j$(nproc)
sudo make install
# This step is later automated using the new entry in
# /etc/ld.so.conf.d/usr-local.conf, otherwise one has to re-execute
# this every time Emacs is started.
sudo ldconfig /usr/local/lib

cd ~/src
git clone -b master https://github.com/emacs-mirror/emacs.git
cd emacs
# Use the version you feel comfortable with.
git checkout emacs-30.0.93
./autogen.sh
./configure --prefix=/usr/local --with-x-toolkit=lucid --with-native-compilation=aot --with-tree-sitter CFLAGS="-O2 -mtune=native -march=native -fomit-frame-pointer"
make -j$(nproc)
sudo make install

Afterwards, add /usr/bin/local to your ldconfig, e.g. by adding the file /etc/ld.so.conf.d/usr-local.conf with the content /usr/local/lib.

Fonts

I designed this page with Iosevka Etoile and Iosevka Aile in mind, see Iosevka's project page. After some changes, I settled on just using the webfont-versions directly and let the webserver handle the compression. The fonts should be cached after the first visit.

Before publishing though, I run the page through subfont. This optimizes all the font files so that only the needed glyphs are actually loaded.

Old Org Roam-based System

The excellent org-roam was used to organize links and pages together. I used this system to author notes and keep ideas (semi) organized. All notes that are tagged for publication on the website were published by some small shell scripts that run Emacs to convert the .org files into .html files, which are then uploaded to an external webhost. It is not terribly efficient, but it was (and still is!) fun to build.

Because this system is a bit cumbersome and syncing the website became difficult, I switched to a pure Org-Mode based setup. I now just regenerate pages if they have to be regenerated.

On Finding new Content and Posts

I don't intend on keeping a clear list of blog posts, instead relying on a manually curated list of pages on the homepage. I am absolutely certain though that this page is in no way as nice as other pages such as the one from System Crafters, to which I am forever grateful for inspiration.

Live-Reload and a Modern Feel During Development

I use the live-server crate in order to display the website during writing. The F5 key renders the page using Emacs' Org-Mode HTML export and the live-server reloads the page in the browser once the change is detected.

Testing the Website Exporter Code and Style

This page not only explains how the export works, but also serves as a testing ground for the export.

Bold text may appear anywhere.

Also, italic text is a possibility.

Why not some good old pre-formatted text?

Or strikethrough text?

Many different levels

of headers

contribute to something

that is

Author: Max Heisinger

Created: 2025-10-03 Fri 08:38