speedwm screenshot

speedwm

What is speedwm?

speedwm is a window manager forked from suckless.org’s dwm or dynamic window manager. It manages the user’s open windows and tiles them according to a set layout (dynamic).

Just like dwm, speedwm also tries to be minimal but also has functionality and aesthetics as a goal. It is also much more minimal than other window managers like i3-gaps while offering many more features.

Tiling window managers (unlike floating window managers that you may be used to) tile windows based on a set layout making them easy to get productive on. They also encourage the user to use their keyboard instead of the mouse so that the user doesn’t have to move their hands much but there are mouse keybinds and more can be added.

Installation

In order to install this build of speedwm, all dependencies must be installed. You can see (Dependencies) for a list of all dependencies required to use this fork.

Layouts

speedwm comes with the following layouts:

They can be switched between using a little menu (See Keybinds for more information) or by right clicking the Layout indicator. The more commonly used layouts can be switched between using a quick keybind.

Keybinds

This is a full list of keybinds. Please let me know if any keybinds are missing as these have been manually added.

Keybinds for regular applications

These keybinds are for navigating speedwm

Chained keybinds

These will only work if your keyboard has special multimedia buttons.

These binds can be activated using your mouse

Dependencies

These are absolutely necessary, speedwm will NOT compile without them - libxft - pango - libXinerama - Can be disabled through editing toggle.mk if you’re not interested in multiple monitors. - imlib2 - Tag previews, Window icons. Can be disabled through editing toggle.mk and toggle.h if you don’t want these features. - yajl - Required for the IPC patch. If the IPC patch is disabled, you do not need this. - tcc - Very minimal C compiler that speedwm uses to speed up compile times. If you don’t want this dependency, edit host.mk and set CC to ‘cc’ (or what you prefer).

Features

These are necessary for certain features and keybinds. If you want to use an alternative, change it in options.h and/or keybinds.h and mouse.h.

Software

This build of speedwm comes with binds for software. You can add, change and remove keybinds by editing ‘keybinds.h’ and running ‘make clean install’.

And everything under ‘Features’.

Important

If you’re used to dwm, speedwm might be a little unfamiliar to you at first. This is because speedwm doesn’t use config.h (or config.def.h). Instead, config.h is split into different parts to make it easier to edit. Instead of editing config.h you’ll want to edit:

After you’ve edited one of the files, you need to run ‘make clean install’ to reinstall speedwm. Remember that you can change colors through your .Xresources file (see .Xresources and Pywal) meaning you do not need to recompile speedwm.

Another important detail you must keep in mind is that this build comes with a status bar simply named ‘speedwm_status’. It can be found in the speedwm source code directory. It is just a shell script which adds stuff to your status bar. It will automatically be started when speedwm starts.

You can edit the status bar simply by editing ‘speedwm_stellar’ or its modules (modules_*) and running ‘make clean install’. You can also configure it by editing ‘~/.config/speedwm/statusrc’.

If you want to change status bar, edit options.h and set ‘static char status’ to your status bar binary (must be in $PATH). Alternatively, you can also set it in .Xresources (See .Xresources and Pywal).

.Xresources and Pywal

This fork of speedwm has .Xresources support thanks to the .Xresources patch. It also has pywal support (tool which grabs colors based on your wallpaper).

Colors do not reload automatically though, you must reload them manually. Use a signal for this (See list of signals above) or simply ‘libspeedwm –perform core_wm_reload’.

To use .Xresources, make sure ‘xrdb’ is installed. If a .xinitrc is used, add ‘xrdb /path/to/.Xresources/file’ before ‘speedwm’. If a .Xresources file is not used, add it to ~/.config/speedwm/autostart.sh instead.

If you don’t want to define the options manually, there is an example .Xresources file containing speedwm default settings in docs/example.Xresources. You can copy this somewhere or you can simply ‘< docs/example.Xresources >> ~/.Xresources’ to append the speedwm options to your .Xresources file.

The magic of .Xresources is that it is a universal configuration file. While you can use the col.value values, you can also use traditional colors 0 through 15 as well. These colors take priority over regular speedwm colors. This is so that speedwm is compatible with Pywal and more general/mainstream .Xresources configurations.

Below is a list of all .Xresources values you can define.

Signals

Thanks to the ‘fsignal’ patch available on suckless.org’s website, we can easily write shell scripts to interact with dwm and therefore speedwm. I made some changes to this patch, because it has some.. questionable behaviour in my opinion.

To use signals, you can use libspeedwm. Previously, speedwm-utils (part of speedwm-extras) would be used but that now depends on libspeedwm anyway. Using libspeedwm directly is the easiest option.

If you do not have speedwm-extras or libspeedwm, you can use the speedwm binary itself. The syntax is speedwm -s “#cmd:” This option is not as solid though as signums can and will likely be moved around breaking your scripts. Therefore I highly recommend you use libspeedwm when writing scripts.

Below is a list of all signums and what they do.

Status bar

speedwm has a status bar. It’s the right part of the bar. It supports Pango, status2d and statuscmd markup as well as regular plain text and colored emojis or glyphs. To override this status, you can use the ‘speedwm -s ’ command.

Bundled with speedwm is a fork of dwmblocks. dwmblocks is a dwm status bar that handles this all for you through a block system. This fork has been integrated into the Makefile and is (by default) installed when speedwm is compiled. The status bar can be configured in the status.c and status.h and clickability can be configured in statusbar.h.

By default the status bar runs modules that are also bundled with speedwm (see modules/ directory). To configure these modules, you can edit ~/.config/speedwm/statusrc which should be created when a module runs.

The bundled status bar is autostarted by speedwm if it is installed. If you want to use your own status bar, comment out ‘USESTATUS’ in toggle.mk and remove /usr/bin/status if speedwm has been installed previously. Then simply start the status bar through autostart.h, ~/.config/speedwm/autostart.sh or .xinitrc if you are using that.

Additional note on autostart

If you wish to add autostart entries without recompiling, consider using $HOME/.config/speedwm/autostart.sh. This is a path added to autostart.h and you can fill it with anything you want.

Do note that it will NOT just run once. It will run every time you restart and start speedwm (restart signals count as well, color reloads do not). To get around this, you may wrap stuff in a function in the script and have some way of checking if it has ran before such as pgrep. If it hasn’t, call the function.

Credits

I far from wrote this entire project myself. Below are people who made this project what it is through submitting patches to suckless or otherwise contributing code in some way in alphabetical order.

See Codeberg contributions for more information.

Auto generated.

This page was auto generated by the speedwm-help script bundled with speedwm. It acts as the help script and it writes documentation to HTML, Markdown and plain text from documentation in the docs folder and data grabbed from your current system.