From aca61738a2c35a9a10bdd2b291204490bd0c9eef Mon Sep 17 00:00:00 2001 From: fauxmight Date: Fri, 19 Dec 2025 06:12:03 +0100 Subject: Note unmaintained status in README --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 390788d..4a56b7e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,14 @@ # dwl - dwm for Wayland +--- +2025-08-16: +dwl IS CURRENTLY UN-MAINTAINED. +AT THE PRESENT TIME, I (@fauxmight) DO NOT HAVE +THE TIME OR CAPACITY TO KEEP UP WITH [wlroots] CHANGES. +IF YOU ARE INTERESTED IN TAKING ON LEAD DEVELOPER RESPONSIBILITIES, +SEE ISSUE [#1166](https://codeberg.org/dwl/dwl/issues/1166). +--- + Join us on our IRC channel: [#dwl on Libera Chat] Or on the community-maintained [Discord server]. -- cgit v1.3 From 9ba7461f4df9b7bd82d81a784c79d8eb416fd006 Mon Sep 17 00:00:00 2001 From: fauxmight Date: Fri, 19 Dec 2025 06:12:24 +0100 Subject: Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 4a56b7e..38211c4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # dwl - dwm for Wayland ---- 2025-08-16: dwl IS CURRENTLY UN-MAINTAINED. AT THE PRESENT TIME, I (@fauxmight) DO NOT HAVE -- cgit v1.3 From 9837ea5729c01bbbec10f6200509146a1b7bd28c Mon Sep 17 00:00:00 2001 From: jackinfurs Date: Sat, 27 Dec 2025 08:21:23 +0000 Subject: fix: ignore case of keysyms in `keybindings` --- config.def.h | 6 +++--- dwl.c | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/config.def.h b/config.def.h index 95c2afa..804a5cb 100644 --- a/config.def.h +++ b/config.def.h @@ -123,7 +123,7 @@ static const char *termcmd[] = { "foot", NULL }; static const char *menucmd[] = { "wmenu-run", NULL }; static const Key keys[] = { - /* Note that Shift changes certain key codes: c -> C, 2 -> at, etc. */ + /* Note that Shift changes certain key codes: 2 -> at, etc. */ /* modifier key function argument */ { MODKEY, XKB_KEY_p, spawn, {.v = menucmd} }, { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd} }, @@ -135,7 +135,7 @@ static const Key keys[] = { { MODKEY, XKB_KEY_l, setmfact, {.f = +0.05f} }, { MODKEY, XKB_KEY_Return, zoom, {0} }, { MODKEY, XKB_KEY_Tab, view, {0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_C, killclient, {0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_c, killclient, {0} }, { MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XKB_KEY_m, setlayout, {.v = &layouts[2]} }, @@ -157,7 +157,7 @@ static const Key keys[] = { TAGKEYS( XKB_KEY_7, XKB_KEY_ampersand, 6), TAGKEYS( XKB_KEY_8, XKB_KEY_asterisk, 7), TAGKEYS( XKB_KEY_9, XKB_KEY_parenleft, 8), - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Q, quit, {0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_q, quit, {0} }, /* Ctrl-Alt-Backspace and Ctrl-Alt-Fx used to be handled by X server */ { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_Terminate_Server, quit, {0} }, diff --git a/dwl.c b/dwl.c index 12f441e..44f3ad9 100644 --- a/dwl.c +++ b/dwl.c @@ -1616,7 +1616,8 @@ keybinding(uint32_t mods, xkb_keysym_t sym) const Key *k; for (k = keys; k < END(keys); k++) { if (CLEANMASK(mods) == CLEANMASK(k->mod) - && sym == k->keysym && k->func) { + && xkb_keysym_to_lower(sym) == xkb_keysym_to_lower(k->keysym) + && k->func) { k->func(&k->arg); return 1; } -- cgit v1.3 From 53e3e60d4de4ee3c8521ae0896bf1cf3d96c7222 Mon Sep 17 00:00:00 2001 From: A Frederick Christensen Date: Sat, 27 Dec 2025 16:47:38 -0600 Subject: config.def.h whitespace cleanup --- config.def.h | 68 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/config.def.h b/config.def.h index 804a5cb..bcaa8a0 100644 --- a/config.def.h +++ b/config.def.h @@ -124,40 +124,40 @@ static const char *menucmd[] = { "wmenu-run", NULL }; static const Key keys[] = { /* Note that Shift changes certain key codes: 2 -> at, etc. */ - /* modifier key function argument */ - { MODKEY, XKB_KEY_p, spawn, {.v = menucmd} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd} }, - { MODKEY, XKB_KEY_j, focusstack, {.i = +1} }, - { MODKEY, XKB_KEY_k, focusstack, {.i = -1} }, - { MODKEY, XKB_KEY_i, incnmaster, {.i = +1} }, - { MODKEY, XKB_KEY_d, incnmaster, {.i = -1} }, - { MODKEY, XKB_KEY_h, setmfact, {.f = -0.05f} }, - { MODKEY, XKB_KEY_l, setmfact, {.f = +0.05f} }, - { MODKEY, XKB_KEY_Return, zoom, {0} }, - { MODKEY, XKB_KEY_Tab, view, {0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_c, killclient, {0} }, - { MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} }, - { MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} }, - { MODKEY, XKB_KEY_m, setlayout, {.v = &layouts[2]} }, - { MODKEY, XKB_KEY_space, setlayout, {0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, - { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, - { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, - { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, - { MODKEY, XKB_KEY_period, focusmon, {.i = WLR_DIRECTION_RIGHT} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less, tagmon, {.i = WLR_DIRECTION_LEFT} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater, tagmon, {.i = WLR_DIRECTION_RIGHT} }, - TAGKEYS( XKB_KEY_1, XKB_KEY_exclam, 0), - TAGKEYS( XKB_KEY_2, XKB_KEY_at, 1), - TAGKEYS( XKB_KEY_3, XKB_KEY_numbersign, 2), - TAGKEYS( XKB_KEY_4, XKB_KEY_dollar, 3), - TAGKEYS( XKB_KEY_5, XKB_KEY_percent, 4), - TAGKEYS( XKB_KEY_6, XKB_KEY_asciicircum, 5), - TAGKEYS( XKB_KEY_7, XKB_KEY_ampersand, 6), - TAGKEYS( XKB_KEY_8, XKB_KEY_asterisk, 7), - TAGKEYS( XKB_KEY_9, XKB_KEY_parenleft, 8), - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_q, quit, {0} }, + /* modifier key function argument */ + { MODKEY, XKB_KEY_p, spawn, {.v = menucmd} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd} }, + { MODKEY, XKB_KEY_j, focusstack, {.i = +1} }, + { MODKEY, XKB_KEY_k, focusstack, {.i = -1} }, + { MODKEY, XKB_KEY_i, incnmaster, {.i = +1} }, + { MODKEY, XKB_KEY_d, incnmaster, {.i = -1} }, + { MODKEY, XKB_KEY_h, setmfact, {.f = -0.05f} }, + { MODKEY, XKB_KEY_l, setmfact, {.f = +0.05f} }, + { MODKEY, XKB_KEY_Return, zoom, {0} }, + { MODKEY, XKB_KEY_Tab, view, {0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_c, killclient, {0} }, + { MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} }, + { MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} }, + { MODKEY, XKB_KEY_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XKB_KEY_space, setlayout, {0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, + { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, + { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, + { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, + { MODKEY, XKB_KEY_period, focusmon, {.i = WLR_DIRECTION_RIGHT} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less, tagmon, {.i = WLR_DIRECTION_LEFT} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater, tagmon, {.i = WLR_DIRECTION_RIGHT} }, + TAGKEYS( XKB_KEY_1, XKB_KEY_exclam, 0), + TAGKEYS( XKB_KEY_2, XKB_KEY_at, 1), + TAGKEYS( XKB_KEY_3, XKB_KEY_numbersign, 2), + TAGKEYS( XKB_KEY_4, XKB_KEY_dollar, 3), + TAGKEYS( XKB_KEY_5, XKB_KEY_percent, 4), + TAGKEYS( XKB_KEY_6, XKB_KEY_asciicircum, 5), + TAGKEYS( XKB_KEY_7, XKB_KEY_ampersand, 6), + TAGKEYS( XKB_KEY_8, XKB_KEY_asterisk, 7), + TAGKEYS( XKB_KEY_9, XKB_KEY_parenleft, 8), + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_q, quit, {0} }, /* Ctrl-Alt-Backspace and Ctrl-Alt-Fx used to be handled by X server */ { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_Terminate_Server, quit, {0} }, -- cgit v1.3 From 9b11a49cb757b80f8589088b487b5f1e56643aa1 Mon Sep 17 00:00:00 2001 From: A Frederick Christensen Date: Sat, 27 Dec 2025 17:06:27 -0600 Subject: config.def.h clarify Rule and MonitorRule comments closes #660 --- config.def.h | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/config.def.h b/config.def.h index bcaa8a0..8a6eda0 100644 --- a/config.def.h +++ b/config.def.h @@ -20,12 +20,11 @@ static const float fullscreen_bg[] = {0.0f, 0.0f, 0.0f, 1.0f}; /* You ca /* logging */ static int log_level = WLR_ERROR; -/* NOTE: ALWAYS keep a rule declared even if you don't use rules (e.g leave at least one example) */ static const Rule rules[] = { /* app_id title tags mask isfloating monitor */ - /* examples: */ { "Gimp_EXAMPLE", NULL, 0, 1, -1 }, /* Start on currently visible tags floating, not tiled */ { "firefox_EXAMPLE", NULL, 1 << 8, 0, -1 }, /* Start on ONLY tag "9" */ + /* default/example rule: can be changed but cannot be eliminated; at least one rule must exist */ }; /* layout(s) */ @@ -38,17 +37,14 @@ static const Layout layouts[] = { /* monitors */ /* (x=-1, y=-1) is reserved as an "autoconfigure" monitor position indicator - * WARNING: negative values other than (-1, -1) cause problems with Xwayland clients - * https://gitlab.freedesktop.org/xorg/xserver/-/issues/899 -*/ -/* NOTE: ALWAYS add a fallback rule, even if you are completely sure it won't be used */ + * WARNING: negative values other than (-1, -1) cause problems with Xwayland clients due to + * https://gitlab.freedesktop.org/xorg/xserver/-/issues/899 */ static const MonitorRule monrules[] = { - /* name mfact nmaster scale layout rotate/reflect x y */ - /* example of a HiDPI laptop monitor: - { "eDP-1", 0.5f, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, - */ - /* defaults */ + /* name mfact nmaster scale layout rotate/reflect x y + * example of a HiDPI laptop monitor: + { "eDP-1", 0.5f, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, */ { NULL, 0.55f, 1, 1, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, + /* default monitor rule: can be changed but cannot be eliminated; at least one monitor rule must exist */ }; /* keyboard */ -- cgit v1.3 From a8915224e8159e6e0b6ff0fe7b2c6436fb3a1b6d Mon Sep 17 00:00:00 2001 From: fauxmight Date: Mon, 9 Feb 2026 08:06:25 +0100 Subject: Remove "unmaintained" notice from README User @thanatos has offered to take on the lead developer role for dwl. --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index 38211c4..390788d 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,5 @@ # dwl - dwm for Wayland -2025-08-16: -dwl IS CURRENTLY UN-MAINTAINED. -AT THE PRESENT TIME, I (@fauxmight) DO NOT HAVE -THE TIME OR CAPACITY TO KEEP UP WITH [wlroots] CHANGES. -IF YOU ARE INTERESTED IN TAKING ON LEAD DEVELOPER RESPONSIBILITIES, -SEE ISSUE [#1166](https://codeberg.org/dwl/dwl/issues/1166). ---- - Join us on our IRC channel: [#dwl on Libera Chat] Or on the community-maintained [Discord server]. -- cgit v1.3 From ca4123072d63ff52351f3a6bd64ae4a3e7a9888f Mon Sep 17 00:00:00 2001 From: Guido Cella Date: Tue, 3 Feb 2026 11:44:47 +0100 Subject: add support for the data control protocol Enables the protocol documented at https://wayland.app/protocols/ext-data-control-v1 It is the upstreamed version of the old wlr_data_control. It is used e.g. by mpv to read and write the clipboard. --- dwl.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dwl.c b/dwl.c index 44f3ad9..320910d 100644 --- a/dwl.c +++ b/dwl.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -2518,6 +2519,7 @@ setup(void) wlr_export_dmabuf_manager_v1_create(dpy); wlr_screencopy_manager_v1_create(dpy); wlr_data_control_manager_v1_create(dpy); + wlr_ext_data_control_manager_v1_create(dpy, 1); wlr_primary_selection_v1_device_manager_create(dpy); wlr_viewporter_create(dpy); wlr_single_pixel_buffer_manager_v1_create(dpy); -- cgit v1.3 From 227cdf012812955ceda554fadc0f97240a845632 Mon Sep 17 00:00:00 2001 From: thanatos Date: Sat, 21 Feb 2026 16:46:08 +0100 Subject: Added Matrix to README --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 390788d..30ffea3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # dwl - dwm for Wayland -Join us on our IRC channel: [#dwl on Libera Chat] -Or on the community-maintained [Discord server]. +Join us on our [Discord server] +Or Matrix: [#dwl-official:matrix.org] +Or on our IRC channel: [#dwl on Libera Chat] dwl is a compact, hackable compositor for [Wayland] based on [wlroots]. It is intended to fill the same space in the Wayland world that [dwm] does in X11, @@ -209,3 +210,4 @@ inspiration, and to the various contributors to the project, including: [wiki]: https://codeberg.org/dwl/dwl/wiki/Home#compatible-status-bars [Discord server]: https://discord.gg/jJxZnrGPWN [Wayland]: https://wayland.freedesktop.org/ +[#dwl-official:matrix.org]: https://matrix.to/#/#dwl-official:matrix.org \ No newline at end of file -- cgit v1.3 From 908a73da8228a9e0ce0dab1dbeaa18b795724cf9 Mon Sep 17 00:00:00 2001 From: thanatos Date: Sat, 21 Feb 2026 16:53:19 +0100 Subject: Corrected README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 30ffea3..d5f2098 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # dwl - dwm for Wayland -Join us on our [Discord server] -Or Matrix: [#dwl-official:matrix.org] +Join us on our [Discord server] +Or Matrix: [#dwl-official:matrix.org] Or on our IRC channel: [#dwl on Libera Chat] dwl is a compact, hackable compositor for [Wayland] based on [wlroots]. It is -- cgit v1.3 From 9b76ee8e90b6ad3600b4370aca36be1f6b12b1b7 Mon Sep 17 00:00:00 2001 From: thanatos Date: Sat, 21 Feb 2026 19:50:17 +0100 Subject: Updated README to clarify branch roles This change effectively reverts DWL to the prior development model, where development of DWL itself happens against the current wlroots release, and changes in anticipation of the next wlroots release are made on a separate branch. --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d5f2098..c81efd0 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,13 @@ with each release on the [release] page ### Development branch [main] Active development progresses on the `main` branch. The `main` branch is built -against a late (and often changing) git commit of wlroots. While the adventurous -are welcome to use `main`, it is a rocky road. Using `main` requires that the -user be willing to chase git commits of wlroots. Testing development pull -requests may involve merging unmerged pull requests in [wlroots]' git repository -and/or git commits of wayland. +against the latest release of [wlroots]. PRs should target this branch unless they +depend on functionality that is not in the current release of `wlroots`. + +### Preview branch [wlroots-next] +The `wlroots-next` branch is built against the git version of [wlroots], which +is unstable and changes frequently. PRs requiring functionality from the git +version of `wlroots` should target this branch. ### Building dwl dwl has the following dependencies: @@ -203,6 +205,7 @@ inspiration, and to the various contributors to the project, including: [dwl-patches]: https://codeberg.org/dwl/dwl-patches [list of useful resources on our wiki]: https://codeberg.org/dwl/dwl/wiki/Home#migrating-from-x [main]: https://codeberg.org/dwl/dwl/src/branch/main +[wlroots-next]: https://codeberg.org/dwl/dwl/src/branch/wlroots-next [release]: https://codeberg.org/dwl/dwl/releases [runit]: http://smarden.org/runit/faq.html#userservices [s6]: https://skarnet.org/software/s6/ -- cgit v1.3 From cb4cc3ae8ff2bdc7e41ae7ab6e888b0c3b176b16 Mon Sep 17 00:00:00 2001 From: Diego Viola Date: Wed, 25 Feb 2026 02:38:09 -0300 Subject: Fix typos --- dwl.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dwl.c b/dwl.c index 320910d..101a45f 100644 --- a/dwl.c +++ b/dwl.c @@ -586,7 +586,7 @@ arrangelayers(Monitor *m) arrange(m); } - /* Arrange non-exlusive surfaces from top->bottom */ + /* Arrange non-exclusive surfaces from top->bottom */ for (i = 3; i >= 0; i--) arrangelayer(m, &m->layers[i], &usable_area, 0); @@ -2134,7 +2134,7 @@ powermgrsetmode(struct wl_listener *listener, void *data) if (!m) return; - m->gamma_lut_changed = 1; /* Reapply gamma LUT when re-enabling the ouput */ + m->gamma_lut_changed = 1; /* Reapply gamma LUT when re-enabling the output */ wlr_output_state_set_enabled(&state, event->mode); wlr_output_commit_state(m->wlr_output, &state); @@ -2456,7 +2456,7 @@ setup(void) wlr_log_init(log_level, NULL); /* The Wayland display is managed by libwayland. It handles accepting - * clients from the Unix socket, manging Wayland globals, and so on. */ + * clients from the Unix socket, managing Wayland globals, and so on. */ dpy = wl_display_create(); event_loop = wl_display_get_event_loop(dpy); -- cgit v1.3 From a2d03cf6188350005dbdaac12f3b0fbc4d60c567 Mon Sep 17 00:00:00 2001 From: Diego Viola Date: Wed, 25 Feb 2026 02:26:38 -0300 Subject: Remove trailing whitespace from README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c81efd0..3a3b9bd 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ depend on functionality that is not in the current release of `wlroots`. The `wlroots-next` branch is built against the git version of [wlroots], which is unstable and changes frequently. PRs requiring functionality from the git version of `wlroots` should target this branch. - + ### Building dwl dwl has the following dependencies: - libinput @@ -213,4 +213,4 @@ inspiration, and to the various contributors to the project, including: [wiki]: https://codeberg.org/dwl/dwl/wiki/Home#compatible-status-bars [Discord server]: https://discord.gg/jJxZnrGPWN [Wayland]: https://wayland.freedesktop.org/ -[#dwl-official:matrix.org]: https://matrix.to/#/#dwl-official:matrix.org \ No newline at end of file +[#dwl-official:matrix.org]: https://matrix.to/#/#dwl-official:matrix.org -- cgit v1.3