How do you download, patch, configure, and install suckless software?
Released versions are listed for download under the homepage for each program. These download links are also provided on the suckless homepage and news (RSS/Atom) feed when they announce the release of a new version.
Programs can also be downloaded via
git clone, for the latest
development versions and for version control history. See
Find and download patches on the suckless website listed under each program. The commands and strategies below are discussed in order of preference.
This section assumes that you downloaded the program’s source code as a
git(1) repository (which is recommended), using
git clone or
similar. If not, skip to the next section.
First, try using
git am <patch>.diff
to apply a patch and commit it automatically. This only works with
patches that were formatted for/with git(1), though. Unfortunately,
that’s not the case for all of the patches, so if
git am fails, try
git apply <patch>.diff
which will apply the patch and stage the changes.
To reverse a patch, use
git reset --hard HEAD^
if the patch was commited. (This is the case if you ran
git am or
commited manually.) If the patch was not commited (you used
git apply and did not commit manually), use the following.
git revert .
This is only recommended if you cannot use the git(1) commands (as mentioned above).
Use the following. The
--merge flag on patch(1) is to handle
conflicts more easily (in the same way as git(1) handles conflicts).
patch -i --merge <patch>.diff
There are 3 files named
config. What are the differences?
Configuration for the Makefile. The
.mk extension/suffix denotes
Makefile syntax, for a file meant to be
included in a Makefile.
Stores default values for all of the configuration options; a
template. Often modified by patches; they add the default values for
their own custom config options to this file. Used to generate
Intended to be edited by the end user: they provide their own values for
each of the configuration options. If it does not exist, it is copied
config.def.h when running
However, if it does exist, it is not modified. This can cause problems
when applying patches after
config.h is already generated. The program
is built from
config.def.h, so after applying the
patch you may not have the config options required by the patch. In that
case, compilation will fail with errors!
Programs are installed by running make(1) targets, which are defined
To compile, run
make all. This will
output the compiled program to the current working folder, where it can
be run; if I compiled st(1), I could run it with
Installing a program makes it available from anywhere, not just a single
directory, and makes it available to all users. Run
sudo make install
If you do not have administrative privileges, you may want to (instead
of installing) place the compiled executable somewhere in your
so that the program can be started easily from any location.