From 961485d04cbcfe5ee1e70220026a2ec056bdf74a Mon Sep 17 00:00:00 2001 From: Damian Perticone Date: Fri, 17 Jun 2022 22:02:03 +0100 Subject: desktop/dwl: Added (wayland compositor based on wlroots) Signed-off-by: Dave Woodfall Signed-off-by: Willy Sudiarto Raharjo --- desktop/dwl/README | 72 +++++++++++ desktop/dwl/doinst.sh | 3 + desktop/dwl/dwl.SlackBuild | 141 +++++++++++++++++++++ desktop/dwl/dwl.desktop | 5 + desktop/dwl/dwl.info | 10 ++ .../patches/use_foot_instead_of_alacritty.patch | 11 ++ desktop/dwl/sbo-patches/autostart.patch | 133 +++++++++++++++++++ desktop/dwl/sbo-patches/dwl.desktop | 5 + desktop/dwl/sbo-patches/use-XWayland.patch | 8 ++ desktop/dwl/sbo-patches/use-fuzzel.patch | 11 ++ desktop/dwl/sbo-patches/use-winkey.patch | 11 ++ desktop/dwl/slack-desc | 19 +++ 12 files changed, 429 insertions(+) create mode 100644 desktop/dwl/README create mode 100644 desktop/dwl/doinst.sh create mode 100644 desktop/dwl/dwl.SlackBuild create mode 100644 desktop/dwl/dwl.desktop create mode 100644 desktop/dwl/dwl.info create mode 100644 desktop/dwl/patches/use_foot_instead_of_alacritty.patch create mode 100644 desktop/dwl/sbo-patches/autostart.patch create mode 100644 desktop/dwl/sbo-patches/dwl.desktop create mode 100644 desktop/dwl/sbo-patches/use-XWayland.patch create mode 100644 desktop/dwl/sbo-patches/use-fuzzel.patch create mode 100644 desktop/dwl/sbo-patches/use-winkey.patch create mode 100644 desktop/dwl/slack-desc (limited to 'desktop/dwl') diff --git a/desktop/dwl/README b/desktop/dwl/README new file mode 100644 index 0000000000..cdcc9bfc2d --- /dev/null +++ b/desktop/dwl/README @@ -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 diff --git a/desktop/dwl/doinst.sh b/desktop/dwl/doinst.sh new file mode 100644 index 0000000000..5fb28930db --- /dev/null +++ b/desktop/dwl/doinst.sh @@ -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 diff --git a/desktop/dwl/dwl.SlackBuild b/desktop/dwl/dwl.SlackBuild new file mode 100644 index 0000000000..0b63be44df --- /dev/null +++ b/desktop/dwl/dwl.SlackBuild @@ -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 diff --git a/desktop/dwl/dwl.desktop b/desktop/dwl/dwl.desktop new file mode 100644 index 0000000000..8c34a2ce0f --- /dev/null +++ b/desktop/dwl/dwl.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=dwl +Comment=dwl is a compact, hackable compositor for Wayland based on wlroots +Exec=dwl +Type=Application diff --git a/desktop/dwl/dwl.info b/desktop/dwl/dwl.info new file mode 100644 index 0000000000..ac398853c0 --- /dev/null +++ b/desktop/dwl/dwl.info @@ -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" diff --git a/desktop/dwl/patches/use_foot_instead_of_alacritty.patch b/desktop/dwl/patches/use_foot_instead_of_alacritty.patch new file mode 100644 index 0000000000..d9e1e78cfc --- /dev/null +++ b/desktop/dwl/patches/use_foot_instead_of_alacritty.patch @@ -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[] = { diff --git a/desktop/dwl/sbo-patches/autostart.patch b/desktop/dwl/sbo-patches/autostart.patch new file mode 100644 index 0000000000..f85383eb7f --- /dev/null +++ b/desktop/dwl/sbo-patches/autostart.patch @@ -0,0 +1,133 @@ +From a82c5bd1a264725842e25f13ba494aee1db2a801 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= + +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 diff --git a/desktop/dwl/sbo-patches/dwl.desktop b/desktop/dwl/sbo-patches/dwl.desktop new file mode 100644 index 0000000000..4c64a6ddcd --- /dev/null +++ b/desktop/dwl/sbo-patches/dwl.desktop @@ -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 diff --git a/desktop/dwl/sbo-patches/use-XWayland.patch b/desktop/dwl/sbo-patches/use-XWayland.patch new file mode 100644 index 0000000000..8295ebaa1c --- /dev/null +++ b/desktop/dwl/sbo-patches/use-XWayland.patch @@ -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 diff --git a/desktop/dwl/sbo-patches/use-fuzzel.patch b/desktop/dwl/sbo-patches/use-fuzzel.patch new file mode 100644 index 0000000000..97fa1589f1 --- /dev/null +++ b/desktop/dwl/sbo-patches/use-fuzzel.patch @@ -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. */ diff --git a/desktop/dwl/sbo-patches/use-winkey.patch b/desktop/dwl/sbo-patches/use-winkey.patch new file mode 100644 index 0000000000..7dafe503bd --- /dev/null +++ b/desktop/dwl/sbo-patches/use-winkey.patch @@ -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} }, \ diff --git a/desktop/dwl/slack-desc b/desktop/dwl/slack-desc new file mode 100644 index 0000000000..5344b7e376 --- /dev/null +++ b/desktop/dwl/slack-desc @@ -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: -- cgit v1.2.3-79-gdb01