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). Unlike dwm, speedwm tries to be minimal just dwm 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.
If any warnings show up, fix it by installing the missing dependency.
If a .xinitrc is used, add 'speedwm_run' to the end.
NOTE: Your .xinitrc should ONLY contain 'speedwm_run'. speedwm will automatically start everything else. If not, edit autostart.h and 'make clean install'. If a .xinitrc is not used then you don't need to worry. A .desktop file is automatically created when you run 'make clean install'.
Layouts
speedwm comes with the following layouts:
Tile
Monocle
Grid
Deck
Centered Master
Centered Floating Master
Spiral
Dwindle
Three Column
Bottom Stack
Horizontal Bottom Stack
Horizonal Grid
Tatami
Tilewide
Stairs
Tiling (5:4)
Column
Dynamic Grid
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
Below is a list of all speedwm keybinds.
Applications
Keybinds for regular applications
Super+Shift+Enter | Opens a terminal
Super+Shift+Colon | Opens a dmenu prompt
Super+Shift+s | Opens 'maim' to take a screenshot and copies it to the clipboard using 'xclip'
Super+Shift+f | Opens the defined file manager
Super+Shift+w | Opens the defined web browser
Super+Shift+o | Opens the bundled dfmpeg dmenu script to record your screen.
Super+Shift+e | Opens the dboard dmenu script in dmenu which can copy text to your clipboard
Super+Shift+t | Opens the defined editor in your terminal
Super+Shift+p | Kills the defined web browser
Super+Shift+m | Kills the defined music player
Super+Shift+a | Opens the defined mixer in your terminal
Super+Shift+m | Opens the defined music player
Super+Shift+x | Opens the defined system process viewer in your terminal
Super+Control+Shift+m | Opens the defined email client
Super+Control+u | Opens the defined RSS reader
Navigation
These keybinds are for navigating speedwm
Super+t | Reorganize tags and move clients
Super+f | Full-screen the selected window
Super+b | Show/hide the speedwm bar
Super+s | Show/hide the systray (If trayer is installed)
Super+j/k | Move focus between visible windows
Super+Alt+j/k | Increase/decrease gaps between windows in tiling layout by 1
Super+Alt+u/d | Increase/decrease gaps between windows in tiling layout by 5
Super+Shift+j/k | Move focus between hidden windows
Super+a/d | Increase/decrease size of each window
Super+o | Hide a window
Super+Control+o | Show a window
Super+w | Hide all windows except focused
Super+Control+w | Show all windows except focused
Super+a/d | Move to the next/previous tag
Super+Minus | Show the scratchpad
Super+Equal | Remove the scratchpad
Super+Enter | Switch order of windows
Super+Shift+q | Close the current window
Super+Space | Set layout
Super+t | Disable inactive fade
Super+Shift+Equal | Toggle scratchpads
Super+Shift+Minus | Hide the scratchpad
Super+Shift+Space | Unfloat floating windows
Super+Shift+Arrow | Resizes a window in floating mode
Super+1 | Move to tag 1
Super+2 | Move to tag 2
Super+3 | Move to tag 3
Super+4 | Move to tag 4
Super+5 | Move to tag 5
Super+6 | Move to tag 6
Super+7 | Move to tag 7
Super+8 | Move to tag 8
Super+9 | Move to tag 9
Super+Shift+1 | Preview tag 1
Super+Shift+2 | Preview tag 2
Super+Shift+3 | Preview tag 3
Super+Shift+4 | Preview tag 4
Super+Shift+5 | Preview tag 5
Super+Shift+6 | Preview tag 6
Super+Shift+7 | Preview tag 7
Super+Shift+8 | Preview tag 8
Super+Shift+9 | Preview tag 9
Super+Shift+h/j/k/l | Rotates a stack.
Super+Shift+Escape | Ask the user if they want to shutdown or reboot or nothing
Super+Shift+i | Open a dmenu prompt and open the file the user picks in Zathura
Super+Shift+p | Open a dmenu prompt and open the file the user picks in Vim
Super+Control+e | Switch to layout 3 (Grid)
Super+Control+r | Switch to layout 1 (Monocle)
Super+Control+t | Switch to layout 0 (Master & stack)
Super+Control+y | Switch to layout 4 (Deck)
Super+Control+0 | Set all windows to use the same tag
Super+Control+Arrow | Moves a window to any corner of your screen (Arrow key)
Super+Control+Tab | Open a dmenu prompt asking the user what layout to switch to
Super+Control+h | Open a list of all keybinds in your terminal using less
Super+Control+Shift+a/d | Move between available layouts
Super+Alt+s | Make the current selected window sticky
Super+Control+Shift+Esc | Open speedwm-utils (Main menu)
Super+Control+Shift+Arrow | Resize the window to the screen size.
Super+Control+Shift+s | Set a wallpaper
Super+Control+Shift+n | Connect to wifi (Requires iwd)
Super+Control+Shift+b | Connect to a bluetooth device (Requires bluez and bluez-utils)
Super+Control+Shift+e | Open up a list of dotfiles in dmenu that you can edit.
Super+c & m | Ask the user for a topic and curl cheat.sh
Super+g & t | Toggle gaps
Super+g & 0 | Reset gaps
Super+g & i | Increase inner gaps by 1
Super+Shift+g & i | Decrease inner gaps by 1
Super+g & o | Increase outer gaps by 1
Super+Shift+g & o | Decrease outer gaps by 1
Super+r+v | Open the defined music visualizer
Extras
These will only work if your keyboard has special multimedia buttons.
Mute button | Mutes your audio
Up Volume button | Increases your volume
Down Volume button | Decreases your volume
Stop button | Stops your defined music player
Browser button | Opens your defined web browser
Power button | Ask if you wanna shut down, restart or lock your computer.
Email button | Open your defined email client
System button | Open your defined status viewer in a terminal
Mouse
These binds can be activated using your mouse
Tag <num> (Left click) | Switch to tag <num>
Layout indicator (Left click) | Switch to the next layout
Layout indicator (Middle click) | Switch to the next layout
Layout indicator (Right click) | Open a dmenu list of all layouts
Window title (Left click) | Hide/Show the window
Window title (Right click) | Open speedwm-utils
Focused window (Super+Alt+Left click) | Move the focused window around
Focused window (Super+Alt+Middle click) | Make the focused window floating
Focused window title (Middle click) | Rotate stack
Dragging (Super+Right click) | Increase/decrease size of each window
There are also keybinds for statuscmd, but you must implement it into your own status bar. See mouse.h for more information.
Dependencies
These are absolutely necessary, speedwm will NOT compile without them
libxft-bgra (Can be installed through 'make <distro>-libxftfix')
NOTE: libXft will do but will cause speedwm and as such all your applications to crash if a colored emoji is displayed in the status bar.
libXinerama
Can be disabled through editing config.mk if you're not interested in multiple monitors.
imlib2
Features
These are dependencies if you wanna use certain features NOTE: Do not add any of these to .xinitrc or similar. They are going to be autostarted by speedwm. If you want to use an alternative, change it in options.h.
dmenu
NOTE: dmenu is required for most scripts included with this build of speedwm. My build is required for Pywal support.
NOTE 2: The build must have the 'grid' patch. If yours does not have this, you can patch it in or get my build here: https://codeberg.org/speedie/dmenu
picom
xclip (Required for clipboard support by a few scripts, will start automatically)
xwallpaper (Required to set wallpapers automatically)
xmodmap (Install if you want Escape instead of Caps Lock and Right Super+hjkl for arrow keys)
xrdb (Install if you want .Xresources support)
pywal (Install if you want pywal support. Requires swal aka the default way to set wallpapers)
wmctrl (Needed for proper window management)
xsetroot (Needed for most scripts including Pywal support)
slock (Required for screen locking)
maim (Required for built in 'speedwm-screenshotutil' script)
Software
This build of speedwm comes with binds for software. These must be installed by default but you can change what software is required by editing 'options.h' and running 'make clean install'. You can also remove keybinds by editing 'keybinds.h' and running 'make clean install'.
st (Terminal)
firefox (Web browser)
htop (Status monitor)
newsboat (RSS reader)
zathura (PDF reader)
alsa-utils (Required for audio controls)
mocp (Default music player)
vim (Text editor)
neomutt (Email client)
maim (Screenshot tool, automatically copies to clipboard using xclip)
vifm (File manager)
slock (Lock screen) 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:
autostart.h for starting stuff right before speedwm (For example xclip, pywal, etc.)
options.h for changing colors and applications to use with keybinds.
fsignal.h for adding fake signals
colors.h for changing alpha options, most users won't need to edit it.
xresources.h for adding .Xresources options
rules.h for adding rules
keybinds.h for adding/removing keybinds.
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 '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 'status' and running 'make clean install'. You can also configure it by editing '~/.config/speedwm-de/status/config'. Please note that most status bars including the built in 'status' depends on xsetroot which must be installed. speedwm-compatcheck is going to tell you about this when compiling.
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 speedwm.status: <statusbar> 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 reload automagically because of a reloadxresources function this build has combined with fsignal and a wallpaper script I wrote. Therefore, if you want colors to reload instantly, you're unfortunately forced to use the bundled wallpaper script.
If you want to use another script, you can open up speedwm-utils and select 'Reload .Xresources' to reload .Xresources. Alternatively, you can write a script yourself (18 reloads the colors)
Below is a list of all .Xresources values you can define. The .Xresources file should be placed in ~ or ~/.config by the user. If it is not or you want it somewhere else, you can edit 'autostart.h' and 'make clean install'.
Note that the 'xrdb' dependency is required for both pywal and .Xresources support and 'xsetroot' is required for automatic reloading of colors, the built in status bar, and more so you should install this.
Thanks to the 'fsignal' patch available on suckless.org's website, we can easily write shell scripts to interact with dwm and therefore speedwm. This is exactly what I did and speedwm-utils, speedwm-swal, speedwm-shutdown and more take advantage of it.
In order to use 'fsignal', your system must have 'xsetroot' installed. Then simply use the dwm-utils script. Syntax is dwm-utils -exec <signum>
Below is a list of all signums and what they do.
1 | Switch to the Tiling layout
2 | Switch to the Floating layout
3 | Switch to the Monocle layout
4 | Switch to the Grid layout
5 | Switch to the Deck layout
6 | Switch to the Centered Master layout
7 | Switch to the Centered Floating Master layout
8 | Switch to the Fibonacci Spiral layout
9 | Switch to the Fibonacci Dwindle layout
10 | Switch to the Three Column layout
11 | Switch to the Bottom Stack Vertical layout
12 | Switch to the Bottom Stack Horizontal layout
13 | Switch to the Horizontal Grid layout
14 | Switch to the Tatami layout
15 | To be added
16 | Cycle layout (Previous)
17 | Cycle layout (Next)
18 | Reload colors from .Xresources
19 | Set mfact (-0.05)
20 | Set mfact (+0.05)
21 | Toggle Scratchpad
22 | Toggle Sticky
23 | Toggle Bar
24 | Toggle Fullscreen
25 | Restart speedwm keeping all your applications open.
26 | Unused at the moment.
27 | Switch to the Stairs layout
28 | Reset layout and mfact
29 | Reorganize tags
30 | Restart speedwm
31 | Shutdown speedwm
32 | To be added
33 | To be added
34 | To be added
35 | Switch to the Tiling (5:4) layout
36 | Switch to the Column layout
37 | Switch to the Dynamic Grid layout
Switching run launcher
Some users may prefer to use a different run launcher than dmenu. Previously all scripts bundled would only run dmenu from $PATH but you can now switch run launcher very easily.
Edit options.h and change RUN to your run launcher
Add export RUNLAUNCHER=<runlauncher> to your .<shell>rc
Run launchers must support dmenu arguments because otherwise scripts are going to be incompatible. It must also support the additional '-g' argument that the dmenu grid patch provides unless you modify the scripts bundled. Keep in mind that if you use a different run launcher, it may not support Pywal/.Xresources.
Auto generated.
This page was auto generated by the dwm-help script bundled with dwm. 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.