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.
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.hheader. Always maintain this file and never
- I patch the
cleantarget in the
Makefileto 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!
Tiling window manager. Ditch GNOME/KDE when you’re ready to ascend.
Patches I use:
attachbottomnew windows attach to bottom of the stack (instead of top), and to me feels less obtrusive
centeradds the ability to centre floating windows, for example I like to have
pulsemixerbound to a keybinding that just floats above everything when I want it
fullgapsconfigurable amount of padding between windows, including outer gaps (between client and screen frame)
pertaga per tag (virtual desktop) layout mode
warpmove mouse cursor to center of currently focused window, nice for multi-monitor setup
MODKEYto super key
- Define the
MEHcombinations 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
pulsemixerin a centered floating window).
scrollbackability to scoll using shift + page-up/down
scollback-mouseability to scoll using shift + mouse-scroll
- set font string to
FuraCode Nerd Font:pixelsize=14:antialias=true:autohint=true
A graphical lock screen.
messagesadds text based message