#!/bin/bash
# Minimal, standalone rebuild of sxwm with all local patches applied.
#
# Does exactly one thing: clone upstream sxwm, apply every *.patch in this
# directory that install.sh's step_sxwm() applies (same order), build, and
# `sudo make install`. No other install.sh steps (deps, sxbar, dmenu, st,
# configs, ...) run. Useful when you only changed an sxwm patch and want to
# rebuild+install it directly, without the interactive prompts.
#
# Usage: ./rebuild-sxwm.sh
set -eu
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SXWM_REPO="https://github.com/uint23/sxwm.git"
BUILD_DIR="$(mktemp -d /tmp/sxwm-rebuild.XXXXXX)"
PATCHES=(
cursor-dpi-fix.patch
net-active-window.patch
multi-monitor-struts.patch
monitor-hotplug-remap.patch
fullscreen-monitor-fix.patch
strut-fresh-screen-size.patch
focus-follows-mouse.patch
)
echo "==> Klonar sxwm i $BUILD_DIR..."
git clone --depth=1 "$SXWM_REPO" "$BUILD_DIR"
cd "$BUILD_DIR"
echo "==> Applicerar patchar..."
for p in "${PATCHES[@]}"; do
echo " $p"
patch -p1 < "$SCRIPT_DIR/$p"
done
echo "==> Bygger..."
make
echo "==> Installerar (kräver sudo)..."
sudo make install
BIN_HASH=$(md5sum "$BUILD_DIR/sxwm" | cut -d' ' -f1)
INSTALLED_HASH=$(md5sum /usr/local/bin/sxwm | cut -d' ' -f1)
if [ "$BIN_HASH" = "$INSTALLED_HASH" ]; then
echo "==> Installerat och verifierat (samma md5: $BIN_HASH)."
else
echo "==> VARNING: /usr/local/bin/sxwm matchar inte det nybyggda binaryt." >&2
echo " byggt: $BIN_HASH" >&2
echo " installerat: $INSTALLED_HASH" >&2
exit 1
fi
echo ""
echo "Filen på disk är uppdaterad, men sxwm läser inte om sig själv."
echo "Starta om sxwm för att den nya binären ska börja gälla, t.ex.:"
echo " killall sxwm (X-sessionen startar om sxwm om .xinitrc/en supervisor gör det)"
echo "eller logga ut och in igen."
rm -rf "$BUILD_DIR"