desktop/dwl: Added (wayland compositor based on wlroots)

Signed-off-by: Dave Woodfall <dave@slackbuilds.org>

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
Damian Perticone 2022-06-17 22:02:03 +01:00 committed by Willy Sudiarto Raharjo
parent 36d01948d1
commit 961485d04c
No known key found for this signature in database
GPG key ID: 3F617144D7238786
12 changed files with 429 additions and 0 deletions

72
desktop/dwl/README Normal file
View file

@ -0,0 +1,72 @@
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, primarily in terms of philosophy, and secondarily in terms
of functionality. Like dwm, dwl is:
•Easy to understand, hack on, and extend with patches
•One C source file (or a very small number) configurable via config.h
•Limited to 2000 SLOC to promote hackability
•Tied to as few external dependencies as possible
dwl is not meant to provide every feature under the sun.
Instead, like dwm, it sticks to features which are
necessary, simple, and straightforward to implement given the base on
which it is built. Implemented default features are:
•Any features provided by dwm/Xlib: simple window borders, tags,
keybindings, client rules, mouse move/resize. Providing a
built-in status bar is an exception to this goal, to avoid
dependencies on font rendering and/or drawing libraries when an
external bar could work well.
•Configurable multi-monitor layout support, including position and
rotation
•Configurable HiDPI/multi-DPI support
•Idle-inhibit protocol which lets applications such as mpv disable
idle monitoring
•Provide information to external status bars via stdout/stdin
•Urgency hints via xdg-activate protocol
•Support screen lockers via input-inhibitor protocol
•Various Wayland protocols
•XWayland support as provided by wlroots (can be enabled in config.mk)
•Zero flickering - Wayland users naturally expect that
"every frame is perfect"
•Layer shell popups (used by Waybar)
•Damage tracking provided by scenegraph API
NOTE: the autostart patch is enabled by default, if you need a
wallpaper modify the autostart patch file at line 23 and change
"swaybg --image /xap/local/background", NULL, to
"swaybg -i (your wallpaper path)", NULL,
If you want to start dwl without a login manager just type dwl
If you want to start dwl with somebar launch with: dwl -s somebar
You can disable the autostart patch and use azote to have a wallpaper
like this dwl -s ~/.azotebg
Suggested programs:
swaybg for background/wallpaper
bemenu wayland menu
fuzzel wayland menu
rofi-lbonn-wayland
alacritty terminal emulator
foot terminal emulator
OPTIONS:
Use the Xwayland patch:
XWAYLAND=yes sh dwl.SlackBuild
Use Windows key instead of alt:
MODWINKEY=yes sh dwl.SlackBuild
Use fuzzel instead of bemenu:
FUZZEL=yes sh dwm.SlackBuild
Use somebar (similar to dwm bar)
SOMEBAR=yes sh dwm.SlackBuild
more patches available at dwl github wiki

3
desktop/dwl/doinst.sh Normal file
View file

@ -0,0 +1,3 @@
if [ -x /usr/bin/update-desktop-database ]; then
/usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi

141
desktop/dwl/dwl.SlackBuild Normal file
View file

@ -0,0 +1,141 @@
#!/bin/bash
# Slackware build script for dwl
# Copyright 2022 Damian Perticone, Berisso, Argentina
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=dwl
VERSION=${VERSION:-0.3.1}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
# fix to correct man pages directory path
sed -i 's/share/man/g' config.mk
# compile with XWayland support
USEXWAYLAND=${XWAYLAND:-no}
[ "$XWAYLAND" = "yes" ] && patch -p1 <$CWD/sbo-patches/use-XWayland.patch
# autostart patch for stuff like swaybg
patch -p1 < $CWD/sbo-patches/autostart.patch
mkdir -p $PKG/usr/share/wayland-sessions
# use bar
SOMEBAR=${SOMEBAR:-no}
[ "$SOMEBAR" = "yes" ] && cat $CWD/sbo-patches/dwl.desktop > $PKG/usr/share/wayland-sessions/dwl.desktop
[ "$SOMEBAR" = "no" ] && cat $CWD/dwl.desktop > $PKG/usr/share/wayland-sessions/dwl.desktop
# use win key instead of alt key
MODWINKEY=${MODWINKEY:-no}
[ "$MODWINKEY" = "yes" ] && patch -p1 <$CWD/sbo-patches/use-winkey.patch
# use fuzzel menu instead of bemenu
FUZZEL=${FUZZEL:-no}
[ "$FUZZEL" = "yes" ] && patch -p1 <$CWD/sbo-patches/use-fuzzel.patch
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
### for those that wish to include custom patches.
### A sample patch is included in the patches/ directory
### that will change the default terminal from 'alacritty'
### to 'foot'.
if [ "${PATCHES:-no}" = "yes" ]; then
for p in $CWD/patches/*; do
patch --verbose -p1 < $p
done
fi
make \
OPTS="$SLKCFLAGS" \
PREFIX=/usr \
MANPREFIX=/usr/man \
make PREFIX=$PKG/usr install
mkdir -p $PKG/usr/man/man1
cp -a $PKG/usr/man/man/man1/dwl.1 $PKG/usr/man/man1/dwl.1
rm -r $PKG/usr/man/man
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a LICENSE LICENSE.dwm LICENSE.tinywl README.md $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE

5
desktop/dwl/dwl.desktop Normal file
View file

@ -0,0 +1,5 @@
[Desktop Entry]
Name=dwl
Comment=dwl is a compact, hackable compositor for Wayland based on wlroots
Exec=dwl
Type=Application

10
desktop/dwl/dwl.info Normal file
View file

@ -0,0 +1,10 @@
PRGNAM="dwl"
VERSION="0.3.1"
HOMEPAGE="https://github.com/djpohly/dwl"
DOWNLOAD="https://github.com/djpohly/dwl/archive/v0.3.1/dwl-0.3.1.tar.gz"
MD5SUM="fcf149b551be52bd02d8562e8acdc59e"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="wlroots swaybg somebar"
MAINTAINER="Damian Perticone"
EMAIL="mjolnirdam@gmail.com"

View file

@ -0,0 +1,11 @@
--- a/config.def.h 2022-05-12 00:58:25.427926600 -0300
+++ b/config.def.h 2022-05-14 00:30:50.588985094 -0300
@@ -63,7 +63,7 @@
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */
-static const char *termcmd[] = { "alacritty", NULL };
+static const char *termcmd[] = { "foot", NULL };
static const char *menucmd[] = { "bemenu-run", NULL };
static const Key keys[] = {

View file

@ -0,0 +1,133 @@
From a82c5bd1a264725842e25f13ba494aee1db2a801 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?=
<leohdz172@protonmail.com>
Date: Wed, 9 Feb 2022 07:02:47 -0600
Subject: [PATCH] apply autostart patch from dwm
https://dwm.suckless.org/patches/cool_autostart/
---
config.def.h | 6 ++++++
dwl.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 60 insertions(+), 2 deletions(-)
diff --git a/config.def.h b/config.def.h
index a98ec361..efd10263 100644
--- a/config.def.h
+++ b/config.def.h
@@ -84,6 +84,12 @@ LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE
static const enum libinput_config_accel_profile accel_profile = LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE;
static const double accel_speed = 0.0;
+/* Autostart */
+static const char *const autostart[] = {
+ "sh", "-c", "swaybg --image /xap/local/background", NULL,
+ NULL /* terminate */
+};
+
/* If you want to use the windows key change this to WLR_MODIFIER_LOGO */
#define MODKEY WLR_MODIFIER_ALT
#define TAGKEYS(KEY,SKEY,TAG) \
diff --git a/dwl.c b/dwl.c
index e0f7e996..7b3cdf61 100644
--- a/dwl.c
+++ b/dwl.c
@@ -211,6 +211,7 @@ static void arrange(Monitor *m);
static void arrangelayer(Monitor *m, struct wl_list *list,
struct wlr_box *usable_area, int exclusive);
static void arrangelayers(Monitor *m);
+static void autostartexec(void);
static void axisnotify(struct wl_listener *listener, void *data);
static void buttonpress(struct wl_listener *listener, void *data);
static void chvt(const Arg *arg);
@@ -376,6 +377,9 @@ static Atom netatom[NetLast];
/* compile-time check if all tags fit into an unsigned int bit array. */
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
+static pid_t *autostart_pids;
+static size_t autostart_len;
+
/* function implementations */
void
applybounds(Client *c, struct wlr_box *bbox)
@@ -394,6 +398,29 @@ applybounds(Client *c, struct wlr_box *bbox)
c->geom.y = bbox->y;
}
+void
+autostartexec(void) {
+ const char *const *p;
+ size_t i = 0;
+
+ /* count entries */
+ for (p = autostart; *p; autostart_len++, p++)
+ while (*++p);
+
+ autostart_pids = calloc(autostart_len, sizeof(pid_t));
+ for (p = autostart; *p; i++, p++) {
+ if ((autostart_pids[i] = fork()) == 0) {
+ setsid();
+ execvp(*p, (char *const *)p);
+ fprintf(stderr, "dwl: execvp %s\n", *p);
+ perror(" failed");
+ _exit(EXIT_FAILURE);
+ }
+ /* skip arguments */
+ while (*++p);
+ }
+}
+
void
applyexclusive(struct wlr_box *usable_area,
uint32_t anchor, int32_t exclusive,
@@ -1668,6 +1695,16 @@ printstatus(void)
void
quit(const Arg *arg)
{
+ size_t i;
+
+ /* kill child processes */
+ for (i = 0; i < autostart_len; i++) {
+ if (0 < autostart_pids[i]) {
+ kill(autostart_pids[i], SIGTERM);
+ waitpid(autostart_pids[i], NULL, 0);
+ }
+ }
+
wl_display_terminate(dpy);
}
@@ -1762,6 +1799,7 @@ run(char *startup_cmd)
setenv("WAYLAND_DISPLAY", socket, 1);
/* Now that the socket exists, run the startup command */
+ autostartexec();
if (startup_cmd) {
int piperw[2];
if (pipe(piperw) < 0)
@@ -2120,10 +2158,24 @@ sigchld(int unused)
* but the Xwayland implementation in wlroots currently prevents us from
* setting our own disposition for SIGCHLD.
*/
+ pid_t pid;
+
if (signal(SIGCHLD, sigchld) == SIG_ERR)
die("can't install SIGCHLD handler:");
- while (0 < waitpid(-1, NULL, WNOHANG))
- ;
+ while (0 < (pid = waitpid(-1, NULL, WNOHANG))) {
+ pid_t *p, *lim;
+
+ if (!(p = autostart_pids))
+ continue;
+ lim = &p[autostart_len];
+
+ for (; p < lim; p++) {
+ if (*p == pid) {
+ *p = -1;
+ break;
+ }
+ }
+ }
}
void

View file

@ -0,0 +1,5 @@
[Desktop Entry]
Name=dwl
Comment=dwl is a compact, hackable compositor for Wayland based on wlroots
Exec=dwl -s somebar
Type=Application

View file

@ -0,0 +1,8 @@
--- a/config.mk 2022-04-10 23:38:48.000000000 -0300
+++ b/config.mk 2022-05-14 00:15:09.751999693 -0300
@@ -6,4 +6,4 @@
CFLAGS ?= -g -Wall -Wextra -Werror -Wno-unused-parameter -Wno-sign-compare -Wno-unused-function -Wno-unused-variable -Wno-unused-result -Wdeclaration-after-statement
# Uncomment to build XWayland support
-#CFLAGS += -DXWAYLAND
+CFLAGS += -DXWAYLAND

View file

@ -0,0 +1,11 @@
--- a/config.def.h 2022-05-12 00:58:25.427926600 -0300
+++ b/config.def.h 2022-05-13 23:31:21.236290183 -0300
@@ -64,7 +64,7 @@
/* commands */
static const char *termcmd[] = { "alacritty", NULL };
-static const char *menucmd[] = { "bemenu-run", NULL };
+static const char *menucmd[] = { "fuzzel", NULL };
static const Key keys[] = {
/* Note that Shift changes certain key codes: c -> C, 2 -> at, etc. */

View file

@ -0,0 +1,11 @@
--- a/config.def.h 2022-04-10 23:38:48.000000000 -0300
+++ b/config.def.h 2022-05-12 00:58:25.427926600 -0300
@@ -52,7 +52,7 @@
static const int natural_scrolling = 0;
/* If you want to use the windows key change this to WLR_MODIFIER_LOGO */
-#define MODKEY WLR_MODIFIER_ALT
+#define MODKEY WLR_MODIFIER_LOGO
#define TAGKEYS(KEY,SKEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|WLR_MODIFIER_CTRL, KEY, toggleview, {.ui = 1 << TAG} }, \

19
desktop/dwl/slack-desc Normal file
View file

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
dwl: dwl (wayland compositor based on wlroots)
dwl:
dwl: Dwl dwl is a compact, hackable compositor for Wayland based on
dwl: wlroots. It is intended to fill the same space in the Wayland world
dwl: that dwm does in X11
dwl:
dwl:
dwl:
dwl: Home: https://github.com/djpohly/dwl
dwl:
dwl: