My builds of suckless utilities (thanks for speedie for patches)
Go to file
2023-11-01 23:07:38 +08:00
abduco@8c32909a15 Fix layoutmenu 2023-09-28 20:20:07 +08:00
config Add cli-vis config 2023-10-26 22:54:01 +08:00
desktop Update startdwm to reflect this change 2023-10-17 22:23:02 +08:00
dmenu-flexipatch Improvements for dmenu, such as patches and Xresources entries 2023-10-20 22:27:30 +08:00
dvtm@7bcf43f8db Fix layoutmenu 2023-09-28 20:20:07 +08:00
dwm-flexipatch Split up statusbutton into seperate patches 2023-11-01 22:29:00 +08:00
dwmblocks-async Fix forecast 2023-09-22 21:34:04 +08:00
nsxiv Fix desktop entry 2023-10-11 23:21:58 +08:00
pics Update screenshots (except login) 2023-10-26 23:31:31 +08:00
scripts Organize the script directory, and add in the script directory as well. 2023-10-26 20:40:10 +08:00
sfm@1b5eeb0974 Add sfm submodule 2023-09-12 20:44:39 +08:00
shmenu@3e6d31c80f Fixed shmenu not cloning 2023-10-11 23:57:53 +08:00
slim Fix login panel 2023-10-15 16:22:18 +08:00
slock-flexipatch Improve slock 2023-10-19 23:40:16 +08:00
slstatus Remove object and binaries 2023-09-08 10:02:27 +08:00
spmenu@625474875f Update submodule 2023-09-10 16:15:38 +08:00
st-flexipatch Bug fixing dwm and tabbed 2023-10-21 00:42:29 +08:00
tabbed-flexipatch Add tabbed patches not included in upstream 2023-11-01 23:07:38 +08:00
.gitmodules Fixed shmenu not cloning 2023-10-11 23:57:53 +08:00 Rename to 2023-09-14 19:40:48 +08:00
LICENSE Wnhanced menu, new font, new patches, new color scheme 2023-09-06 21:05:38 +08:00 Update screenshots (except login) 2023-10-26 23:31:31 +08:00

Suckless Utilities version 6.4


These are my builds of suckless software such as dwm and st, based on the work for flexipatch by bakkeby. This aims for much more streamlined configuration and patching than 6.3 (which becomes more complicated over time and whenever more patches are integrated).

This was designed to save me some sanity in maintaining it as well as easily integrating requested patches, whenever it drops from the flexipatch upstream. This should be easy to hack and build, and should be as fast as the previous versions of my build.

Included software


  • dwm
  • dmenu
  • st
  • slstatus
  • tabbed
  • sfm
  • spmenu
  • dwmblocks-async
  • slock
  • nsxiv
  • slim


  • dvtm
  • abduco
  • shmenu

Applications by default

  • firefox (browser)
  • sfm/broot (file manager)
  • ncmpcpp (mpd client/music player)
  • dunst (notification daemon)
  • jgmenu (floating stdin/stdout menu utility)
  • spmenu (dmenu alternative)
  • newsboat (rss/atom feed reader)


slim notes

To reload the preset theme (located in /usr/share/themes/slim/suckless), then run .cache/wal/slim-reload after running pywal. The script must also be ran as sudo.

This is, if you wanted a display manager added. The scripts also works a workaround unless if slim could handle loading themes from other dirs.

eww notes

The weather widget is pretty barebones as of now. Report bugs if found.

Configuration notes

The bare essentials of my dotfiles are located in the config directory. This includes spmenu, picom, ncmpcppp, neofetch, broot, newsboat, and wal.

Newsboat config also include preset urls.

Compatibility notes

For those who want the old version, check out oldmain. I don't plan on maintaining it myself since the flexipatch base means much more flexibility over codebase updates as well as new patches.

Note that there are some programs that is included here, mainly for compatibility or choice reasons. While slstatus is pretty barebones compared to dwmblocks-async, it is included on the repo if one decides not to have statuscmd, for example. This aims to be also compatible with already existing setups.

For the shutdown menu script (located in scripts/shutdown), /usr/libexec/ssh/gnome-ssh-askpass was set by default for asking password for killing X. Either change it to a more preferred ssh-askpass program or make sudo passwordless.

Keybind notes

In the documentation for this suite, Mod4Key would be defined as ⊞ Win/⌘ Cmd/❖ Super, depending on whichever keyboard do you use.

In most cases, you probably have only ⊞ Win, but I added ⌘ Cmd and ❖ Super for Mac and advanced Linux/Unix users, respectively.

If one uses ChromeOS, ⊞ Win equals to the 🔍 Search key. But I don't know who uses X11 window managers inside ChromeOS.

For new to dwm, MODKEY or Mod1Mask is the Alt key.

spmenu notes

Additionals are spmenu configs made by myself, as well as scripts for spmenu_run. If you prefer dmenu, it still exists, and could be launched via ⊞ Win/⌘ Cmd/❖ Super+Alt+S, while ⊞ Win/⌘ Cmd/❖ Super+S would launch spmenu_run -d by default (only with .desktop entries, while ⊞ Win/⌘ Cmd/❖ Super+Shift+S would launch spmenu_run in a similar fashion to dmenu.

Some user scripts are also included, which has it's own set of dependencies. For example, clipmenu-spmenu needs xsel and clipnotify. These are optional, however.

clipmenu-spmenu dependencies:
- xsel
- clipnotify

screenshot-spmenu dependencies:
- curl
- xclip (X11)
- maim (X11)
- wayshot (Wayland)
- wl-clipboard (Wayland)
- slurp (Wayland)

wallpaper-spmenu dependencies:
- xwallpaper

Additionally, spmenu will not work on macOS, so use dmenu instead.



Linux/Unix users:
- xorg (including drivers of course)
- base-devel (or build-essential/s)
- libX11(-devel or -dev)
- libXft(-devel or -dev) 
- libXcb(-devel or -dev)
- libXrender(-devel or -dev)
- libXinerama(-devel or -dev) 
- freetype(-devel or -dev) 
- fontconfig(-devel or -dev)
- Nerd Fonts (Hack as default, can be changed manually)
- imlibs2(-devel or -dev)
- picom (for transparency)
- feh (optional)
- pywal (for colors/wallpaper)
- slop (for riodraw)
- yajl (for ipc)
- eww (optional)
- jgmenu
- libexif(-devel or -dev) (for nsxiv)
- jq (for handling eww notifications)
- pamixer

Termux users:
- xorg 
- termux-X11 repo (via main Termux app)
- proot/chroot
- PulseAudio (if you like audio support)
- TigerVNC 
- VNC client
- XSDL client
- Termux:X11 (both apk and deb)

For spmenu:
- wayland-client(-devel or -dev, for Wayland support)
- wayland-scanner(-devel or -dev, for Wayland support)
- wayland-protocols(-devel or -dev, for Wayland support)
- xbcommon(-devel or -dev, for Wayland support)
- pango(-devel or -dev)
- cairo(-devel or -dev)
- libconfig(-devel or -dev)
- OpenSSL or libssl(-devel or -dev)
- meson

To make the tabbed windows functionality to work:
- cut
- xargs
- grep
- pstree
- sed
- wmctrl
- xdotool
- xprop
- xwininfo

Refer to patches.def.h and for additional patch-related requirements.

Compiling the whole thing

  1. Install necessary tools and libraries

  2. Clone this repository (git clone --recurse-submodules)

  3. Change directory to what suckless software do you want to use

  4. Remove the config.h, and patches.h files, to make sure all patches are applied correctly

  5. Copy make clean install (or make install-all for nsxiv) and paste it on your terminal

  6. Building the spmenu submodule included in this repo (by speedie) would strictly use meson as it's build system.

    1. For that, cd to the spmenu folder.
    2. Initialize setup via meson setup build. Pass -Dwayland-=false for disabling Wayland support.
    3. Run ninja -C build for building the binaries.
    4. Install via meson install -C build, and it'll prompt you if you would like to use sudo if not run as root.
  7. Insert dwm, slstatus and/or st inside your .xinitrc using your favorite text editor (usually located in $HOME/.xinitrc)

    • Additionally, a script called startdwm located in desktop could be installed in /usr/local/bin which could be used to launch dwm on display managers, such as GDM or SDDM.
    • startdwm could be also used as the xinitrc script by putting it under $HOME and renaming it to .xinitrc.
  8. Install the dwmblocks scripts (in scripts/dwmblocks) to your $PATH.

  9. Install eww, and put the config inside config/eww to $HOME/.config. Put the scripts inside scripts/eww inside $PATH.

    • (Recommended) Make a hard link of .cache/wal/colors.scss to .config/eww/colors.scss.
  10. Set up slim (optional)

    1. If you wanted to, all you have to do is setup the makefiles by making a build folder.
    2. Generate makefiles via cmake. Make sure the PREFIX variable is set on /usr
    3. Run make and make install.
    4. Set up the systemd service included, tweak if necessary (same applies with other inits but would have to deal with manual config)
  11. Put $HOME/.local/bin in $PATH to seperate scripts and compiled applications, as well as to reduce clutter.

  12. Start it and done!

Future plans

  • Rebase the dwm build to dwm-flexipatch (maybe under a new branch with a VM debug environment?)
  • Integrate barmodules if the dwm-flexipatch rewrite did happen
  • Version jump from 6.3 -> 6.4
  • Potentially making this project into a desktop environment, when I feel it's ready to do so
  • Use spmenu-desktop-launcher if it's mature/usable, retaining spmenu_run for backwards compatibility with existing scripts
  • Making a wiki for documenting functions in this build, as well as other important information about the project

Patching even further

Patching everything is as easy as editing the patches.def.h file included in the repo. Unlike 6.3, which had a complicated codebase, 6.4 aims for a much more streamlined process of patching things, unlike the previous version which would mean using patch and manually editing files whenever something isn't patched up properly.

A huge thanks for bakkeby on the work for making suckless software easier to patch, meaning more people could modify and configure the code to their liking.

Contributing to the project

Contributions are welcome, as long as it follows the defined rules in the CONTRIBUTING document.

Documentations are also welcome, in fact, I do need someone who could maintain documentation for the project's inner workings.

How the versioning system works

Suckless Utilities (the whole package and not the individual components) are versioned under the current version of the repo's dwm. Even if dwm(-flexipatch) 6.5 releases, if the repo still uses dwm(-flexipatch) 6.4 for compatibility reasons, the whole package will still be Suckless Utilities 6.4.


All programs are licensed under the MIT License, except for some submodules, which might have different licenses (for example, GPLv2).


Screenshot of the desktop Screenshot of neofetch Screenshot of random screenshots Screenshot of it's gaming abilities A demo of it's pywal abilities Screenhot of slim on a Debian test VM Screenhot of tabb running

Special thanks

  • Speedie for helping me out with this and providing me with patches
  • The suckless team for maintaining suckless software suck less
  • bakkeby for creating dwm-flexipatch and related projects, making it possible to easily integrate patches