1
0
Fork
You've already forked dwl
0
forked from dwl/dwl
My personal dwl configuration
  • C 95.3%
  • Roff 2.5%
  • Makefile 2.2%
2026年02月20日 03:46:00 +01:00
.gitea/issue_template request description before logs 2024年01月15日 02:15:54 +00:00
patches Add custom changes and patches 2026年02月18日 21:19:13 -03:00
protocols Implement support for output power management 2024年06月20日 19:11:52 -06:00
systray Add custom changes and patches 2026年02月18日 21:19:13 -03:00
.gitignore Add config.h to .gitignore 2021年01月13日 15:25:24 +00:00
.mailmap add myself to .mailmap 2024年07月24日 15:51:49 -06:00
CHANGELOG.md fix crash when a client is created while all outputs are disabled 2024年08月26日 21:56:10 -06:00
client.h Add custom changes and patches 2026年02月18日 21:19:13 -03:00
config.def.h Update config.def.h 2026年02月20日 03:43:22 +01:00
config.def.h.bak Add custom changes and patches 2026年02月18日 21:19:13 -03:00
config.mk Add custom changes and patches 2026年02月18日 21:19:13 -03:00
dbus.c Add custom changes and patches 2026年02月18日 21:19:13 -03:00
dbus.h Add custom changes and patches 2026年02月18日 21:19:13 -03:00
drwl.h Add custom changes and patches 2026年02月18日 21:19:13 -03:00
dwl.1 document status output 2025年06月09日 13:55:38 -06:00
dwl.c Add custom changes and patches 2026年02月18日 21:19:13 -03:00
dwl.desktop Add desktop entry file 2023年09月22日 19:49:18 -06:00
LICENSE add sway LICENSE file 2022年03月22日 23:44:53 -06:00
LICENSE.dwm add TinyWL and dwm LICENSE files 2020年04月22日 11:26:57 -05:00
LICENSE.sway add sway LICENSE file 2022年03月22日 23:44:53 -06:00
LICENSE.tinywl add TinyWL and dwm LICENSE files 2020年04月22日 11:26:57 -05:00
Makefile Add custom changes and patches 2026年02月18日 21:19:13 -03:00
README.md Update README.md 2026年02月20日 03:46:00 +01:00
util.c replace spaces with tabs 2024年07月27日 00:41:39 -06:00
util.h set O_NONBLOCK flag to stdout 2024年07月01日 20:40:54 -06:00

dwl — personal build

A personal configuration of dwl, a compact Wayland compositor based on wlroots, following the suckless philosophy.

Patches

Listed by size:

Patch Description
bar-systray-0.7.patch System tray support for the bar — depends on bar patch and libdbus
bar.patch Adds a status bar identical to dwm's — requires tllist, fcft and pixman
pertag.patch Per-tag layout configuration
minimalborders.patch Merges borders between adjacent tiled windows
autostart.patch Executes commands from autostart[] in config.h on startup
xwayland-handle-minimize.patch Proper minimize event handling for XWayland clients
simpleborders-v0.7.patch Removes borders when only one window is on screen
hide_vacant_tags.patch Hides empty tags from the bar
rotate-clients.patch Rotate clients on the current monitor with keybindings
alwayscenter.patch Floating windows open centered
attachbottom.patch New clients attach at the bottom of the stack

Dependencies

Build dependencies:

  • wlroots 0.19
  • wayland-protocols
  • pixman
  • fcft
  • tllist
  • libdbus

Runtime:

  • aslstatus — status bar feed
  • uwsm — session manager
  • foot — terminal emulator (server mode)
  • mew — application launcher
  • wbg — wallpaper
  • mako — notification daemon
  • kanshi — display configuration
  • grim + slurp — screenshots
  • wl-copy — clipboard
  • brightnessctl — backlight control
  • wpctl (wireplumber/pipewire) — audio control
  • swaylock — screen locker
  • firefox, discord, thunderbird, AyuGram, steam, qbittorrent — applications with tag rules

Building

make clean && make
sudo make install

Configuration is done in config.h. The build system creates it automatically from config.def.h on first run. To customize:

cp config.def.h config.h
# edit config.h
make clean && make

Running

uwsm provides proper systemd session integration — environment propagation, graphical-session.target lifecycle, and clean shutdown.

1. Create the wrapper script at ~/.local/bin/dwl-aslstatus:

#!/bin/sh
aslstatus | dwl
chmod +x ~/.local/bin/dwl-aslstatus

The script exists solely to pipe aslstatus into dwl's stdin before the process starts. This cannot be done from the autostart array since dwl's stdin is fixed at launch time.

2. Create a session entry at /usr/local/share/wayland-sessions/dwl-aslstatus.desktop:

[Desktop Entry]
Name=dwl (aslstatus)
Comment=dwm for Wayland with aslstatus
Exec=dwl-aslstatus
Type=Application

Don't edit the dwl.desktop installed by make install — it will be overwritten on reinstall. The separate file also lets you choose between a bare dwl session and this one from the display manager login screen.

3. Choose your launch path:

TTY login — add to ~/.profile:

if uwsm check may-start; then
 exec uwsm start dwl-aslstatus.desktop
fi

Display manager — simply select "dwl (aslstatus)" from the session list at login.

Session startup sequence

On launch, autostart[] in config.h runs after dwl initializes:

static const char *const autostart[] = {
 "uwsm", "finalize", NULL, /* propagates WAYLAND_DISPLAY into systemd/dbus */
 "wbg", "/path/to/wallpaper", NULL,
 "mako", NULL,
 "kanshi", NULL,
 "foot", "--server", NULL, /* foot server for fast terminal spawning */
 NULL
};

uwsm finalize must be first — it exports WAYLAND_DISPLAY into the activation environment, which is required for screen sharing and any app launched as a systemd service.

Key configuration

Setting Value
Modifier Super (Logo)
Border width 2px
Font Hack 10
Color scheme Tokyo Night
Keyboard layout Brazilian ABNT2 (br, abnt2)
Key repeat rate 48/s, 430ms delay

Keybindings

Binding Action
Super + Return Terminal (footclient)
Super + Space App menu (mew-run)
Super + B Toggle bar
Super + C Kill client
Super + Shift + Q Quit dwl
Super + [J/K] Focus next/previous
Super + Shift + [J/K] Rotate clients
Super + [H/L] Adjust master width
Super + Shift + [I/D] Inc/dec master count
Super + Shift + Return Promote to master
Super + Tab Previous tag
Super + Ctrl + [T/F/M] Tile / float / monocle layout
Super + Ctrl + Space Previous layout
Super + Shift + Space Toggle floating
Super + Shift + F Toggle fullscreen
Super + [,/.] Focus monitor left/right
Super + Shift + [</> ] Move to monitor left/right
Super + [1-9] Switch tag
Super + 0 Show all tags
Super + W Firefox
Super + D Discord
Super + T Telegram (AyuGram)
Super + M Email (Thunderbird)
Super + F File manager (lf)
Super + S Spotify
Super + G Steam
Super + Q qBittorrent
Super + Z Elecwhat
Super + Shift + L Lock screen (swaylock)
Super + Print Screenshot selection → clipboard + file
Print Full screenshot → clipboard + file
Media keys Volume and brightness via wpctl/brightnessctl

Screenshots are saved to ~/pix/ss/ with a timestamp filename and copied to clipboard. Notifications are sent via mako.

License

Inherits licenses from dwl, dwm, tinywl, and sway. See LICENSE* files for details.