#!/bin/sh
# Pone en fila todas las pantallas conectadas, con la del portátil
# (eDP*/LVDS*) a la izquierda y como principal, apaga las desconectadas y
# vuelve a pintar el fondo. Lo lanzan .xinitrc al arrancar y la regla de udev
# (sistema/etc/udev/rules.d) al conectar o desconectar una pantalla.
#
# udev lo ejecuta como root: entonces se relanza como el usuario de la sesión
# de dwm, con su DISPLAY.

if [ "$(id -u)" -eq 0 ]; then
	pid=$(pgrep -xo dwm) || exit 0
	usuario=$(stat -c %U "/proc/$pid")
	casa=$(getent passwd "$usuario" | cut -d: -f6)
	entorno=$(tr '\0' '\n' <"/proc/$pid/environ" | grep -E '^(DISPLAY|XAUTHORITY)=')
	# shellcheck disable=SC2086
	exec env $entorno HOME="$casa" chpst -u "$usuario" "$0"
fi

estado=$(xrandr) || exit 1
interna=$(echo "$estado" | awk '/^(eDP|LVDS)[^ ]* connected/ { print $1 }')
otras=$(echo "$estado" | awk '/ connected/ && $1 !~ /^(eDP|LVDS)/ { print $1 }')
fuera=$(echo "$estado" | awk '/ disconnected/ { print $1 }')

set --
ant=
for o in $interna $otras; do
	if [ -z "$ant" ]; then
		set -- "$@" --output "$o" --auto --primary --pos 0x0
	else
		set -- "$@" --output "$o" --auto --right-of "$ant"
	fi
	ant=$o
done
for o in $fuera; do
	set -- "$@" --output "$o" --off
done
[ $# -gt 0 ] && xrandr "$@"

xwallpaper --zoom "$HOME/.local/share/wallpaper.jpg"
