This is my personalised build of dwm 6.5.
I applied several quality-of-life patches, as well as some fixes here and there. Note that some of these patches may not apply correctly for a new dwm build, and may need to patch them yourself.
NOTE: to apply the statuscmd
patch, I had to modify dwm.c
, in particular the drawbar()
function: since the patch does not account for the systray, I had to make space for it, otherwhise dwmblocks
would draw under it.
To get started, compile dwm:
cd dwm
make
sudo make install
It will be available under /usr/local/bin/dwm
.
This repo also contains my build of dwmblocks.
To obtain the scripts, you can:
- Get them from my dotfiles repo, under
scripts/.local/bin
- Pull the
dotfiles
submodule, which links to the repo above.
The other scripts (scripts/.config/scripts
) are launched by dwm, not dwmblocks.
Glyph support in libXft was finally fixed in 2022, after two and a half years. Better late than never?
It is not necessary anymore to manually patch libXft. Yay!
We need to set fallback fonts, otherwise things will get ugly.
Make sure you have at least one of the following fonts.
- Serif & Sans-serif: IBM Plex, Iosevka
- Emojis: JoyPixels, Noto Color Emoji
You can choose whichever you like most.. or choose all of them!
Modify .config/fontconfig/fonts.conf
, and add the following:
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<alias>
<family>serif</family>
<prefer>
<family>IBM Plex Serif</family>
<family>Iosevka</family>
<family>JoyPixels</family>
<family>Noto Color Emoji</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>IBM Plex Sans</family>
<family>Iosevka</family>
<family>JoyPixels</family>
<family>Noto Color Emoji</family>
</prefer>
</alias>
<alias>
<family>sans</family>
<prefer>
<family>IBM Plex Sans</family>
<family>Iosevka</family>
<family>JoyPixels</family>
<family>Noto Color Emoji</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>IBM Plex Mono</family>
<family>Iosevka Term</family>
</prefer>
</alias>
<dir>~/.fonts</dir>
</fontconfig>
This will set the following font preferences:
- Serif: IBM Plex Serif, Iosevka, JoyPixels, Noto Color Emoji
- Sans Serif: IBM Plex Sans, Iosevka, JoyPixels, Noto Color Emoji
- Sans: IBM Plex Sans, Iosevka, JoyPixels, Noto Color Emoji
- Monospace: IBM Plex Mono, Iosevka Term
The default action key is the ALT key.
The Shift key will be referred to as S.
The Super key (also known as "windows" key) will be referred to as WIN.
- Toggle statusbar: ALTb
- Make window fullscreen: ALTf
- Kill client: ALTSc
- Restart dwm: ALTSr
- Quit dwm: ALTSq
- Tile layout: ALTt
- Monocle layout: ALTSt
- Spiral layout: ALTy
- Dwindle layout: ALTSy
- Deck layout: ALTu
- Bstack layout: ALTSu
- Bstack-horiz layout: ALTi
- Grid layout: ALTSi
- Nrowgrid layout: ALTo
- Horizontal grid layout: ALTSo
- Gapless grid layout: ALTp
- Centeredmaster layout: ALTSp
- Make window floating: ALTSSPACE
- Toggle gaps: ALTWIN0
- Reset gaps: ALTWINS0
- Increase gaps: ALTWIN1
- Decrease gaps: ALTWINS1
All the other keybindings can be found in config.h
.
- Move window left: ALTSh
- Move window down: ALTSj
- Move window up: ALTSk
- Move window right: ALTSl
- Decrease window width: ALTh
- Increase window width: ALTl
- Focus window down/anti-clockwise: ALTj
- Focus window up/clockwise: ALTk
All the other keybindings can be found in config.h
.
- View all windows: ALT0
- Go to last tag: ALTTAB.
- Go to tag
x
: ALTx
(x
is a value between1
and9
) - Move selected window to tag
x
: ALTSx.
- Terminal (
/usr/local/bin/st
): ALTENTER - Rofi: ALTd
- Dmenu: ALTSd
- File manager (
dolphin
): ALTSf - Web browser (
librewolf-bin
): ALTSW
The "Print screen" key is referred to as PrntScr.
- Take a screenshot: PrntScr
- Select area to screenshot: ALTPrntScr
The screenshot will be taken using scrot
, saving it under $HOME/Pictures
.
Some XF86 action keys are already mapped, so your keyboard's audio & brightness controls should work without any issues. Audio controls use pactl
, while brightness controls use xbacklight
.
NOTE: on Gentoo, the XF86keysym.h
header (required for XF86 keys to work) is provided by the package xorg-proto
.
NOTE: to launch these scripts, or even add your own, make sure you setup the correct directory! In config.h
, look for S_PATH
, which is set to .config/scripts
by default. Change it only if the path to the scripts is different! You do not need to specify your home directory.
If you have any doubts, just inspect the scripts yourself.
NOTE 2: TERMCMD
(which is /usr/local/bin/st
by default) will be used to launch these scripts. Change it if your path is different, or you want to use a different terminal! (Example: urxvt
)
To use the set-fan
script, you need a ThinkPad. Even then, you need to configure thinkpad_acpi
to allow writing custom fan speeds to /proc/acpi/ibm/fan
. This is well explained here. Use your own script/program if you don't.
To use the screenlock
script, you need slock
.
To use the screenrecord
script, you need ffmpeg
. No, OBS is not used.
To use the toggletouchpad
script, make sure you have a synaptics
file in /etc/X11/xorg.conf.d
! If you don't, you can copy one from your distro's defaults:
cp /usr/share/X11/xorg.conf.d/*0-synaptics.conf /etc/X11/xorg.conf.d/
To use the randomwall-now
script, you need hsetroot
. Wallpapers will be loaded from ~/wallpapers
.
The randomwall
script, which is included but not ran by dwm, will set a random wallpaper immediately, and change it every 3 minutes. This script will run indefinitely.
- Detect and select displays: WINd
- Set fan speed: WINf
- Move mouse automatically, periodically: WINi
- Lock the screen: WINl
- Mount drives: WINm
- Record the screen: WINr
- Toggle touchpad: WINt
- Unmount drives: WINu
- Set random wallpaper: WINw
- Safe mode: WINSb
- Emoji chooser: WINSe
- Script launcher: WINSl
- Set a reminder: WINSr
- See disk usage: WINSu
- Downloader: XF86Search ("Search" icon on your keyboard)
Here the patches are explained in more detail.
The following patches are applied:
- dwm-alpha-systray-6.3_full
- dwm-centeredsizehints-6.5
- dwm-cfacts-vanitygaps-6.5_full
- dwm-dragmfact-6.5
- dwm-focusfollowmouse-6.5
- dwm-inplacerotate-6.2
- dwm-netclientliststacking-6.5
- dwm-placemouse-6.5
- dwm-r1615-selfrestart
- dwm-sortscreens-6.5
- dwm-statuscmd-20210405-67d76bd
- dwm-swallow-6.5
- dwm-togglefullscreen-6.5
- dwm-xresources-6.2
Add translucent bars to dwm, while also adding a system tray (systray).
Patch downloaded from bakkeby
Center clients based on size hints.
Patch downloaded from bakkeby
Make windows resizeable (cfacts), and add inner & outer gaps (vanitygaps).
Patch downloaded from bakkeby
Resize windows with the mouse.
Patch downloaded from bakkeby
Focus follows the mouse
Patch downloaded from bakkeby
Move windows up/down the stack
Patch downloaded from suckless
Add the _NET_CLIENT_LIST_STACKING property which may be needed by some applications, for example "zoom" for screen sharing
Patch downloaded from bakkeby
Move window onto another window's location, effectively "swapping" their position and sizes.
Patch downloaded from bakkeby
Restart dwm in place.
Patch downloaded from suckless
Resize window from the nearest corner, instead of warping the mouse to the bottom-right corner of the window. (NOTE: this was chosen instead of resizepoint because of several patching issues)
Patch downloaded from suckless
Multi-monitor fixes
Patch downloaded from bakkeby
Signaling for dwmblocks, also fixes weird []
shapes
Patch downloaded from suckless
Swallow terminal windows
Patch downloaded from bakkeby
Toggle fullscreen
Patch downloaded from bakkeby