Lately I’ve been looking at Suckless’ programs and I wanted to try out the st terminal. Although I can’t say it’s particularly hard to set up, there were definitely some gotchas along the way. I’ll outline these here so I can hopefully save you some time if you’re interested in setting st up too.
I wanted to try something new coming from urxvt. Something more minimal. That’s where Suckless comes into play. Their philosophy is one of ultimate minimalism and extensibility. This quickly becomes clear when you read the introduction for the st terminal, in which they state:
The popular alternative, rxvt has only 32K lines of code. This is just too much for something as simple as a terminal emulator; it’s yet another example of code complexity.
Contrary to how it may seem at first sight, the installation of st is actually rather trivial. We’re practically just executing two commands. You’ll need some other terminal installed in order to these commands though.
Getting the source code This can be done with
git clone https://git.suckless.org/stor by outright downloading the provided archive and extracting it with
tar -xf. Make sure you do this in a directory you want your extracted st folder to live in. I called mine
Installing the program This is as simple as running
sudo make clean installfrom the directory in which the source code is located.
Configuring st Since st is built from source the configuration can be found in the C file
config.h. I choose to edit
config.def.hbecause patches apply their config changes there. A new version of
config.his created after compiling if it doesn’t exist yet. If you keep
config.hyou should merge it back into
config.def.hafter you or patches apply changes there.
Chances are you’re missing some functionality when running a bare installation of st. Suckless’ programs are meant to be as minimal as possible after all. That’s not to say you’re left completely in the dust if you want something like scrollback support though. st’s patches provide you with an easy way of adding some extra functionality.
I personally chose to apply the following patches:
- scrollback (for scrollback support)
- vertcenter (for vertically centering text on lines)
- xresources (in order to use the color scheme generated by pywal)
- externalpipe (read st’s screen through a pipe for URL recognition)
That’s all well and good, but how do you apply these patches? This is where it becomes apparent how little the documentation guides you. Other than a few commands at the bottom of the hacking page you’re supposed to figure this out on your own.
This is how I did it:
- Download the patch into your st folder. I choose to create a subfolder called
- Apply the patch with
patch --merge -i /path/to/patch.diff. This will use the merge conflict notation if there are problems applying the patch to your current build
- Rebuild st with
rm -rf config.h && sudo make clean install. This will generate an up-to-date config file and compile the latest changes into your new build
It’s advised to store your source code with Git. This way you can easily revert if something breaks.
As you can see this whole process isn’t exactly rocket science. Due to Suckless’ documentation, or the lack thereof, it can take quite some time to figure out though. That doesn’t mean I regret installing st as it taught me the commands
patch. It’s also my first foray into the world of C.
In case you’re interested: you can find my specific build of st in it’s own GitHub repo.