dwl.md (2080B)
1 --- 2 title: dwl, ultra minimal tiling window manager 3 author: "Linus Behrens" 4 date: 2025-06-16T14:00:00+02:00 5 tags: ['tech', 'wm', 'suckless'] 6 header: "/header/linux.jpg" 7 --- 8 9 My first rather serious linux system should be built on a Thinkpad x61s in 2023. 10 Due to a lack in performence I thought about installing only the most minimal software on it. 11 12 So I came to see the famouse Thinkpad Arch combination. (I know and knew that it was not the most minimal os possible, but I was convinced) 13 When trying to find the most minimal and fast window manager found the perfect fit: `dwm`. 14 15 `dwm` became my wm that just worked. 16 17 --- 18 19 However as I continued to gain understanding of how Xorg works and as I understood the bloat in `X`, I found it hard to swich. 20 On YouTube I came across `dwl` a project about translating `dwl` to work with `wlroots`. 21 22 Even though being familiar with the rather difficult to install `dwm`, I wasn't able to even compile `dwl`. Now I understand and give you - the reader - a path to follow. 23 24 ```bash 25 sudo dnf install \ 26 libinput libinput-devel \ 27 wayland wayland-devel \ 28 wlroots wlroots-devel \ 29 xkbcommon xkbcommon-devel \ 30 wayland-protocols \ 31 pkgconf-pkg-config 32 ``` 33 34 ```bash 35 git clone https://codeberg.org/dwl/dwl.git 36 cd dwl 37 git checkout v0.7 38 make 39 sudo make install 40 ``` 41 42 ```bash 43 sudo dnf install \ 44 libinput libinput-devel \ 45 wayland wayland-devel \ 46 wlroots wlroots-devel \ 47 xkbcommon xkbcommon-devel \ 48 wayland-protocols-devel \ 49 pkgconf-pkg-config \ 50 meson ninja-build \ 51 gcc 52 ``` 53 ```bash 54 git clone https://github.com/waycrate/wmenu.git 55 cd wmenu 56 meson setup build 57 ninja -C build 58 sudo ninja -C build install 59 ``` 60 61 --- 62 63 Edits to `sources/dwl/config.h`: 64 65 ```c 66 static const char *termcmd[] = { "ghostty", NULL }; 67 ``` 68 69 ```c 70 static const MonitorRule monrules[] = { 71 /* macbook m1 14" */ 72 { "eDP-1", 0.5f, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, 73 }; 74 ``` 75 76 ```c 77 static const struct xkb_rule_names xkb_rules = { 78 /* default: 79 .options = NULL, 80 */ 81 .layout = "de", 82 .variant = "latin1", 83 }; 84 ``` 85 86 87