My build of dwm with minimal patches. Go to patches section to know more.
- Terminal Emulator: Alacritty
- Colorscheme: Tokyonight
dwm is an extremely fast, small, and dynamic window manager for X.
DWM comes in pretty good shape. This fork of DWM tries to be minimal yet some features that I thought is missing (for my personal use obviously). The word minimal is different from person to person. To be fair, I even tried to get rid of the bar. Lol! Also, one of the main purpose for this project is learning the beautifully unsafe C programming language that dwm is written in. :/
- Simple edited
config.h
file. - Ability to reload dwm without logging out. Default key for this is
Mod4 + Shift + r
. - Gaps and the ability to change the gaps on the fly. See
keybindings
section. - Smartgaps: Show no gaps when there is only one window.
- Ability to set colours from
~/.Xresources
or~/.config/X11/xresources
file. See more at Xresources Section. - Centers terminal windows (or any windows defined in the config) to the center
if it is the only window in that tag. Also change the
height
,width
and they-offset
of that window. - Custom height for bar.
Gaplessgrid
layout, but with gaps.- Toggle minimize.
- No border when a window is minimized (can change the behaviour from the config).
- Maybe a
lua
config file. Not too crazy likeawesomewm
. I am not sure. Heh. - Combinations of
alttagsdecoration
,underline tags
, andrainbow
tags and the ability to turn them on/off from the config.
- In order to build dwm you need the Xlib header files.
- For colour emoji support, install
libxft-bgra
. Heres the repo. st
, unless you change the terminal emmulatordmenu
, as the run launcherxmneu
, for right click menu supportxdotool
, for some of the xmenu scriptingJetBrainsMono Nerd Font
or any nerd font for icons
Clone the repo:
git clone https://github.com/saifshahriar/dwm-saif dwm --depth=1
cd dwm
Edit config.mk
to match your local setup (dwm is installed into the
/usr/local
namespace by default).
First time installing the window manager, type this commnad (as root) to setup everything.
make setup
Above command also copies the current contents of the folder to /opt/dwm-saif
Enter the following command to build and install dwm after every change to the files (if necessary as root):
make clean install
If dwm crashes
This is a problem with libXft < 2.3.5
. This problem constantly occurs in Debian/Ubuntu derivatives. There is a patch file.
Run this command before make install
patch -p1 < noemoji.patch
Add the following line to your .xinitrc to start dwm using startx:
exec dwm
In order to connect dwm to a specific display, make sure that the DISPLAY environment variable is set correctly, e.g.:
DISPLAY=foo.bar:1 exec dwm
(This will start dwm on display :1 of the host foo.bar.)
If you are using a display manager (i.e. lightdm, sddm, gdm) and if you have
already ran the make setup
command, you should see it in the login screen
list.
In order to display status info in the bar, you can do something like this in your .xinitrc:
while xsetroot -name "`date` `uptime | sed 's/.*,//'`"
do
sleep 1
done &
exec dwm
If you want a similar status bar like mine, you can get it from my dotfiles repo.
The configuration of dwm is done by creating a custom config.h and (re)compiling the source code.
Here are some of the patches that I have applied.
- actualfullscreen - Actually toggle fullscreen for a window, instead of toggling the status bar and the monocle layout.
- adjacenttag - Focus adjacent tag using left/right arrow keys.
- alttagsdecoration - An alternative text for tags which contain at least one window
- alwayscenter - Always center floating windows.
- center first window - Center specific window if only one window.
- cursorwarp - Warp the cursor to the center of the target window when switching between them.
- extrabar - Dual bar.
- focusonnetactive - Focus when a window gets active even in some other tag.
- maximize - Toggle maximize.
- movestack - Move stacks in a tag using mod+shift+{j,k}
- noborder - Noborder when only one window.
- pertag - dwm pertag patch, which allow different type of window size in different tags and doesn't change if one changed in one tag.
- preserveonrestart - Don't mashup all windows in a single tag on restarting dmw
- psudogaplessgrid - Basically
gaplessgrid
layout. Psudo version is modified by me which adds gaps fromvanitygaps
patch. - restartsig - Restart dwm without exiting logging back on.
- status2d - Allows colors and rectangle drawing in DWM status bar.
- underline tags - Underline below a tag.
- vanitygaps - Adds gapps around the windows.
- xrdb - Read colors from xresources. For this patch to work, run the command
xrdb -load <path-to-xresources>
This is an example for all the variables you can use to customize the colours of
dwm using Xresources
file.
Note that, dwm will look for the config file first in the
~/.config/X11/xresources
file. If not found, it will look for the
~/.Xresources
file. You have to press Mod4 + F5
to make the changes take
effect. This basically runs the xrdb -merge <xresources>
command
! TokyoNight colors for Xresources
*background: #1a1b26
*foreground: #c0caf5
*selbackground: #1a1b26
*selforeground: #7aa2f7
*accent: #7aa2f7
*border: #7aa2f7
*color0: #15161e
*color1: #f7768e
*color2: #9ece6a
*color3: #e0af68
*color4: #7aa2f7
*color5: #bb9af7
*color6: #7dcfff
*color7: #a9b1d6
*color8: #414868
*color9: #f7768e
*color10: #9ece6a
*color11: #e0af68
*color12: #7aa2f7
*color13: #bb9af7
*color14: #7dcfff
*color15: #c0caf5
! Xmenu specific
xmenu.font: JetBrainsMono Nerd Font:size=9, NotoColorEmoji:size=11
xmenu.separator: #c0caf5
xmenu.borderWidth: 2
Super
(Mod4) key in the Modkey
Keys | Events |
---|---|
Mod + Return | Open a terminal (st) |
Mod + d | Launch dmenu_run |
Mod + c | Close focused window |
Mod + {k, j} | Move focus to the {next, prev} windows |
Mod + Shift + {k, j} | Move focused window in stack |
Mod + {h, l} | {Increase, Decrease} master pane size |
Alt + Tab | Cycle focus between windows |
Mod + Tab | Toggle between tile and grid layout |
Mod + f | Toggle fullscreen |
Mod + Space | Toggle floating |
Mod + Shift + Space | Toggle maximize |
Mod + {1-9} | Goto tag {1-9} |
Mod + Shift + {1-9} | Move focused window to tag {1-9} |
Mod + {Left, Right} | Goto {next, prev} tag |
Mod + Shift + {Left, Right} | Move focused window to {next, prev} tag |
Mod + {equal, minus} | {Increase, Decrease} gaps |
Mod + Shift + g | Toggle gaps |
Mod + Shift + q | Quit DWM |
Mod + Shift + r | Restart DWM |
See more keybinds from config.h