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 never config.h directly.
  • I patch the clean target in the Makefile 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 obtrusive
  • center adds the ability to centre floating windows, for example I like to have pulsemixer bound to a keybinding that just floats above everything when I want it
  • fullgaps configurable amount of padding between windows, including outer gaps (between client and screen frame)
  • pertag a per tag (virtual desktop) layout mode
  • warp 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 and MEH 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 theme
  • scrollback ability to scoll using shift + page-up/down
  • scollback-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