Suckless programs
The suckless project values simplicity, clarity and frugality in software.
Our philosophy is about keeping things simple, minimal and usable. We believe this should become the mainstream philosophy in the IT sector.
As a user of most of their programs including the infamous dwm (a tiling window manager), dmenu (launcher), st (terminal emulator) and others tools, I can attest to benefits of using minimal and efficient software.
Patching⌗
Programs are customised by patching the C source code. However, unlike typical open source projects, suckless source code is quite readable and hackable, a by-product of the philosophy.
Because dwm is customized through editing its source code [C], it’s pointless to make binary packages of it. This keeps its userbase small and elitist. No novices asking stupid questions.
Download a patch and apply it:
patch -p1 -i cool-dwm-feature-i-need-20191002-b46028b.diff
The first few patches generally apply cleanly. After that, the base source code gets too frankensteined for patch
to work with. Don’t fear, manually applying the patches using your editor is quite enjoyable.
Some suckless conventions:
- User configuration is defined in the
config.def.h
header. Always maintain this file and neverconfig.h
directly. - I patch the
clean
target in theMakefile
to include a@rm -f config.h
- When building always do a clean before running install, like this
make clean && sudo make install
- Don’t use too many patches (i.e. stay vanilla as possible)
- Get in the habit of applying the patches, as opposed to forking the git repo. Forking results in an unmaintainable mess that gets out of sync with upstream suckless changes.
- Every so often
git pull
(or re-cloning if your too heavily patched) the latest fixes and enhancements, and re-patching. - Don’t try to automate the practice of patching manually. I have and all options suck (shell scripts, using git branches with upstream remoets). Embrace the patches!
dwm⌗
Tiling window manager. Ditch GNOME/KDE when you’re ready to ascend.
First build dependencies:
pacman -Sy xorg-server xorg-xinit xf86-video-amdgpu libxft libxinerama
Patches I use:
attachbottom
new windows attach to bottom of the stack (instead of top), and to me feels less obtrusivecenter
adds the ability to centre floating windows, for example I like to havepulsemixer
bound to a keybinding that just floats above everything when I want itfullgaps
configurable amount of padding between windows, including outer gaps (between client and screen frame)pertag
a per tag (virtual desktop) layout modewarp
move mouse cursor to center of currently focused window, nice for multi-monitor setup
config.def.h
mods:
- Change
MODKEY
to super key - Define the
HYPER
andMEH
combinations for ergodox - Register launcher strings (
const char*
) for each program I want shortcuts for. - Register the above launcher strings to specific key bindings (e.g. HYPER + I will launch
pulsemixer
in a centered floating window).
st⌗
Terminal emulator.
Patches:
nordtheme
color themescrollback
ability to scoll using shift + page-up/downscollback-mouse
ability to scoll using shift + mouse-scroll
config.def.h
mods:
- set font string to
FuraCode Nerd Font:pixelsize=14:antialias=true:autohint=true
slock⌗
A graphical lock screen.
Patches:
messages
adds text based message