/p

build.c: a config-less build tool

This tool builds C programs from source by guessing what targets should be compiled and in what order. It expects to build a single library from everything in /src, then a command from each file or directory in /cmd, and links the library into all of them. It also knows how to pack resources into a bespoke archive format and build/run tests automatically.

disp.c: graphical display of stdin

This tool displays the most recent line read from stdin in a small window using SDL. This has a lot of uses - I sometimes use it as a timer or a notification widget.

ekko.c: symmetric encryption tool

This program encrypts and decrypts files with a symmetric crypto system (AES-256-EAX) using bearssl's primitives for the same. It is not a replacement for gpg or age - it does not handle any of the hard problems those tools handle. All it does is encrypt and decrypt files with a given key.

false.c: a FALSE compiler

This is a compiler for the esoteric language FALSE, which compiles FALSE directly into x86-64 assembly. It does no optimizations at all so the resulting code can be quite bad, but it's a pretty simple example of a straight-to-assembly compiler.

genblog.c: my blog generator

This tool builds the RSS feed and index HTML page for my blog by extracting metadata from each blog post file. It's not super exciting unless you like reading C that generates XML.

hq.c: an html query tool

This tool parses HTML documents and allows you to run queries across them or extract elements from them - for example, you can extract the href value of every a element that is a web link by writing =a ?href~http a:href. See the source for more details :)

httpd.c: a web server

This is a web server, which supports multiple concurrent clients and CGI programs. It's also a demonstration of how to use epoll(7) on Linux, and of the common "reactor" / "event loop" pattern for network programming on Unix-like systems. No TLS support at the moment but maybe I'll add it later.

pagezero.lua: a knowledge graph... thing

This is a line-mode tool for interactively building a graph of linked pages, like if you had a wiki with the interface of ed(1). It works pretty well - I used it for a while at work, before I switched to org-mode.

rzim.c: a random wallpaper generator

This program generates a random image filled with boxes fading from color to color, producing a neat abstract wallpaper. I used to have a cron job generate a new one of these every day. This is also a demo of how easy it is to work with PPM files.

watchd.c: an inotify daemon

This program reads a config file, which specifies a list of files to watch for changes and programs to run in response to changes to those files.