This is my version of dwm - an extremely fast, small, and dynamic (tiling) window manager for X. I chose dwm over other tiling window managers because its defaults work really well for me, so I don't have to patch it much.
| Floating | Browser/Terminal Split |
|---|---|
![]() |
![]() |
| Clean |
|---|
![]() |
I am utilizing a customized iteration of dwmblocks to showcase pertinent information, including the current kernel version.
These scripts are both straightforward and sophisticated; an icon signals the need for a system reboot, and a small + icon indicates the availability of upgraded packages, particularly if there's a newer kernel version among them.
Additionally, the weather script employs IP-based location detection and leverages Nerd Fonts to present aesthetically pleasing glyphs:
For me, the greatest feature of tiling window managers like dwm is the ability to modify how my windows are displayed using my keyboard - fullscreen, side by side, stacked, and even floating windows are possible. See also "keybindings".
I would recommend having some basic knowledge of Linux before trying out dwm (or any other tiling window manager). However, the installation process is simple. I have written down a list of dependencies for my system, so if you want to use my setup, make sure you have those packages installed.
Dependencies
I also use my own version of st (simple terminal), but you can choose another one if you prefer. Just make sure you have configured it in your
config.hfile accordingly.
pacman -S base-devel git dmenu libpulse playerctl dunst feh libx11 libxft xorg-server xorg-xinit libxinerama neovim ttf-meslo-nerd pacman-contrib terminus-font jq
Clone from this repo
git clone https://github.com/dme86/dwm.gitModify xinit
echo "exec dwm" > ~/.xinitrcbuild dwm
cd dwm/
make installbuild dwmblocks
cd dwm/dwmblocks-async
make dwmblocks
make installRun startx to start dwm incl dwmblocks.
The defaults of dwm suit me really well, and I only use a few patches. Patching dwm is quite straightforward. I download the diff file into my patch folder and apply it using, for example:
patch < patches/dwm-pertag-6.2.diffUsually, the patch should work OOTB. If not, you have to fix it. If you want to remove a patch that didn't work, you can do it using, for example:
patch -R < patches/dwm-pertag-6.2.diff`You need to recompile dwm after applying or removing a patch.
I've configured a PostTransaction hook on Arch:
/etc/pacman.d/hooks/dwmblocks.hook:
[Trigger]
Operation = Upgrade
Type = Package
Target = *
[Action]
Description = Restarting dwmblocks after upgrade...
When = PostTransaction
Exec = /bin/sh -c "/usr/bin/pkill -RTMIN+25 dwmblocks && /usr/bin/pkill -RTMIN+24 dwmblocks"
It reloads the update indicator script inside the statusbar after pacman -Syu.
To use it like this you need to configure HookDir = /etc/pacman.d/hooks/ in your /etc/pacman.conf.
To intercept the charging event of your notebook on Arch Linux and use dunstify to show a notification, you can follow these steps:
Install acpid if it's not already installed:
sudo pacman -S acpidStart the acpid daemon and enable it to start at boot:
sudo systemctl start acpid.service
sudo systemctl enable acpid.serviceChange /etc/acpi/handler.sh to your needs, eg:
#!/bin/bash
case "$1" in
ac_adapter)
case "$2" in
AC|ACAD|ADP0)
case "$4" in
00000000)
# AC adapter unplugged
;;
00000001)
# AC adapter plugged in
DISPLAY=:0 dunstify "Notebook is charging"
;;
esac
;;
esac
;;
esacReload acpid to apply the changes:
sudo systemctl reload acpid.serviceMy wallpapers are stored inside $HOME/.wallpapers - just clone them from github. In my setups i'm using those two lines of bash to choose an wallpaper from that folder and set it via feh as a background:
img=(`find ~/.wallpapers/ -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image' | cut -d':' -f1`)
feh --bg-scale "${img[$RANDOM % ${#img[@]} ]}"It depends from where you have to call this script. On systems with a login manager i would put it inside ~/.xprofile. If you don't use a display manager you can put it inside ~/.xinitrc.
I often use multiple monitors and there fore autorandr, which enables me to automatically hot-plug external displays.
I mostly use dwm defaults here because I'm used to them, and I like the workflow out of the box. However, you're free to figure out what works best for you.
| Key | Description |
|---|---|
Shift + Ctrl/Strg + Enter |
Start Terminal st |
Alt/opt + y |
Open/Close Scratchpad |
Alt/Opt + p |
Open dmenu |
Alt/Opt + j or k |
Switch window focus |
Alt/Opt + Enter |
Switches the primary window with stack |
Alt/Opt + t |
Change the layout to tiling (dwm default) |
Alt/Opt + m |
Change the layout to monocle so the windows will be maximized |
Alt/Opt + Shift + Space |
Toggle floating mode on the active window. Alt/Opt + right mouse key for resizing, Alt/Opt + left mouse key for moving the window |
Alt/Opt + h or l |
Changes the ratio between the primary and stack correspondingly |
Alt/Opt + 1 or 2 or 3 or ... |
Switch workspace |
Shift + Alt/Opt + 1 or 2 or 3 or ... |
Move active window to another workspace |
Shift + Alt/Opt + c |
Close window |
Alt/Opt + b |
Hide/Show titlebar |
Alt/Opt + , or . |
If you are using multiple displays those commands will change the focussed monitor. I recommend arandr if you have a multi-monitor setup. |
Alt/Opt + |
Increase Gap-size. tiling mode only |
Alt/Opt - |
Decrease Gap-size. tiling mode only |



