My Wayland Desktop Setup
I’m sharing my wayland desktop setup, aka what programs I use to do what
DWL
DWL is a compact, hackable compositor for Wayland based on wlroots. It’s basically DWM but ported to Wayland. I use DWL because frankly, Hyprland and Sway are both too bloated for my use case. I do not need a lot of the features they offer, especially in Hyprland’s case. (I’m past my blur and rounded corners phase!) I also am not interested in floating window managers because I have noticed an actual productivity increase by only using my keyboard instead of using my mouse. It’s simply more efficient to hit alt+k to move to the next window on the right instead of moving my hand to move my mouse and clicking the window to focus on it.
If you do not want to patch DWL, the next best option is RiverWM, a dynamic tiling compositor (just like DWL) with a focus on layouts. If you don’t already have a bar like yambar or waybar set up, I also recommend dam, a bar for river that looks like the bar from DWM.
Anyways, back to DWL. I have 7 patches installed, with 2 of them just being aesthetic patches.
These are my patches:
-
alwayscenter: Just a nice thing to have, as my eyes naturally go to the center of the screen. It’s also quite annoying to have floating windows spawn at the top left hand side of the screen.
-
bar: A minimal and functional bar that looks exactly like the bar in DWM. The right hand side of the bar have a status monitor like
slstatus
:slstatus -s | dwl
-
cursortheme: Uses xcursor to display a custom cursor on the screen, replacing the boring and basic black cursor. This basically removes 80% of the problems with custom cursors on Wayland (Flatpaks are still extremely annoying because they don’t respect this at all.)
-
gaps: A minimal gaps patch. I don’t need the extra customization in vanitygaps, and I don’t use custom layouts so this patch is good enough for me. I’ve revived a patch called genericgaps that works with every single layout, but I probably won’t release it to the dwl-patches repo.
-
mouse-follows-focus: A stale patch revived by me, which I also won’t release because of the existence of the warpcursor patch, but there’s an annoying bug that moves the cursor into the corner when you enter fullscreen. See https://codeberg.org/dwl/dwl-patches/issues/92 This breaks my whole workflow because I play Minecraft and it warps my cursor to the top right corner everytime I go back to the workspace containing it.
-
regions: This patch basically just makes slurp + grim combo actually work. How you take selection screenshots like with screen snip on Windows is by doing
grim -g "$(slurp)"
-
swallow: This patch implements window swallowing in DWL. Attention FreeBSD users: You will need to install an extra patch on top of the swallow patch for it to work properly. See the patch README for more details.
Here’s a Luke Smith video explaining window swallowing, for those interested:
mew
I use mew as my menu program (insert brainrot mewing meme here). I don’t really use it for anything other than launching applications via desktop entries using j4-dmenu-desktop, so yeah.
swaybg
Fun fact: I once tried to find an animated wallpaper program so that I could have a cool animated wallpaper of the Paladin Strait MV. Unfortunately, every program either didn’t work or ate up my memory.
It might be surprising that I use swaybg, but that’s because swaybg is just the best wallpaper setter for Wayland. wbg eats up a significantly larger amount of memory compared to swaybg.
My wallpaper is a nice monochrome picture of Tyler Joseph performing in a concert.
Terminal
foot is the best and only terminal emulator you should ever use on Wayland. Alacritty and Kitty both might be fast, but they both sacrifice features for speed. The Kitty maintainer is also a bit of a meanie (See https://www.youtube.com/watch?v=ApQE1ksRdg4). Wezterm just looks bad, and every other VTE-based terminal is just plain slow. So yeah, foot is just perfect for my use case. Paired with tmux for tabs and splits, it’s a nice minimalist terminal emulator.
Idle and Lockscreen
I use widle and wlock for my idle daemon and lock screen respectively. Wlock works on all compositors that implement the ext-session-lock-v1
protocol, which is basically every compositor worth using. It looks exactly like slock by suckless.org, and you configure its colors by editing wlock.c
. I have wlock themed to the Catppuccin colorscheme.
1static Clr colorname[3] = {
2 [INIT] = { 0x00000000, 0x00000000, 0x00000000 }, /* after initialization */
3 [INPUT] = { 0x89898989, 0xb4b4b4b4, 0xfafafafa }, /* during input */
4 [FAILED] = { 0xf3f3f3f3, 0x8b8b8b8b, 0xa8a8a8a8 }, /* wrong password */
5};
You use widle by running widle -t <time> <program>
So I have it set to execute wlock after 300 seconds of idling.
wtw
I go to school, so I need a list of homework and project deadlines to stay organised. wtw offers exactly that. I just run wtw -f /usr/share/fonts/source-code-pro-nerd -- cat ~/notes/todo.md
and it displays a list of all the things I need to do above the wallpaper, but always below my windows. So I use it as a glorified sticky note which sticks to my wallpaper. Whenever I need to see what I still have due, I just switch to an empty wallpaper and it’s right there. wtw is configured by editing config.h
, but the file is relatively short.
1/* See LICENSE file for copyright and license details. */
2
3/* appearance */
4static int pad = 10;
5static const char *font_name = "Source Code Pro Regular:size=10:dpi=96";
6static uint32_t scheme[2] = {
7 [ColFg] = 0xbbbbbbff,
8 [ColBg] = 0x00000000,
9};
10
11static int32_t width = 0;
12static int32_t height = 0;
13static int x = 10;
14static int y = 450;
15
16/* behavior */
17static int period = 0;
18
19/*
20 * Delimeter string, encountered as a separate line in subcommand output,
21 * signaling rendering buffered text and continuing with next frame.
22 */
23static const char delimeter[] = "\4";
miscellaneous things
- night light: gammastep
- notifications: mako
- clipboard stuff: wl-clipboard & cliphist
conclusion
So yeah, that’s my whole Wayland stack. I hope you start using minimalist software and cut out the bloat from your life!