diff --git a/wayland/dwl/SlackBuild b/wayland/dwl/SlackBuild new file mode 100755 index 00000000..5689302c --- /dev/null +++ b/wayland/dwl/SlackBuild @@ -0,0 +1,178 @@ +#!/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=$(basename $CWD) +BUILD=${BUILD:-1} +TAG=${TAG:-gwh} +PKGTYPE=${PKGTYPE:-txz} + +GITHUB_REPO=djpohly/dwl +REPOSITORY=/home/installs/SlackBuilds/_repositories/$PRGNAM +VERSION=${VERSION:-"latest"} + +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/$TAG} +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 + +[ ! -e $REPOSITORY ] && git clone https://github.com/${GITHUB_REPO} $REPOSITORY +cd $REPOSITORY +git pull --all + +cp -R $REPOSITORY $TMP/ + +cd $TMP/$PRGNAM/ +case $VERSION in + trunk) + VERSION="git_$(git log -1 --format=%h_%ad --date=format:%Y.%m.%d)" + ;; + latest) + VERSION=$(git for-each-ref --sort=taggerdate --format '%(tag)' | tail -n1) + git checkout $VERSION + ;; + *) + git checkout $VERSION + ;; +esac + +# fix to correct man pages directory path +sed -i 's/share/man/g' config.mk + +# compile with XWayland support +XWAYLAND=${XWAYLAND:-yes} +[ "$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 + +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'. + +find $CWD/patches/ -name \*.patch -exec patch --verbose -p1 -i {} \; + +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 +cp -a LICENSE LICENSE.dwm LICENSE.tinywl README.md $PKG/usr/doc/$PRGNAM +cat $CWD/SlackBuild > $PKG/usr/doc/$PRGNAM/SlackBuild + +mkdir -p $PKG/install +cat < $PKG/install/slack-desc +# 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: +EOF + +cat < $PKG/install/doinst.sh +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi +EOF + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/wayland/dwl/dwl.desktop b/wayland/dwl/dwl.desktop new file mode 100644 index 00000000..8c34a2ce --- /dev/null +++ b/wayland/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/wayland/dwl/patches/use_foot_instead_of_alacritty.patch_sample b/wayland/dwl/patches/use_foot_instead_of_alacritty.patch_sample new file mode 100644 index 00000000..d9e1e78c --- /dev/null +++ b/wayland/dwl/patches/use_foot_instead_of_alacritty.patch_sample @@ -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/wayland/dwl/sbo-patches/autostart.patch b/wayland/dwl/sbo-patches/autostart.patch new file mode 100644 index 00000000..f85383eb --- /dev/null +++ b/wayland/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/wayland/dwl/sbo-patches/dwl.desktop b/wayland/dwl/sbo-patches/dwl.desktop new file mode 100644 index 00000000..4c64a6dd --- /dev/null +++ b/wayland/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/wayland/dwl/sbo-patches/use-XWayland.patch b/wayland/dwl/sbo-patches/use-XWayland.patch new file mode 100644 index 00000000..8295ebaa --- /dev/null +++ b/wayland/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/wayland/dwl/sbo-patches/use-winkey.patch b/wayland/dwl/sbo-patches/use-winkey.patch new file mode 100644 index 00000000..7dafe503 --- /dev/null +++ b/wayland/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} }, \