#!/usr/bin/env /lib/runit/invoke-run
#Copyright: 2026 Aitor <aitor@genuen.org>
#License: CC0-1.0
#Comment: stage-2 oneshot (runsvdir/default, after vdev); no static ./down
#Comment: alsactl restore — store is alsa-utils-stop

exec 2>&1

ebegin() { [ "${VERBOSE:-}" = no ] || echo "$@"; }
eend() { r=${1:-0}; shift || true; [ "$r" -eq 0 ] || [ "${VERBOSE:-}" = no ] || echo "$*" >&2; return "$r"; }
einfo() { [ "${VERBOSE:-}" = no ] || echo "$@"; }
ewarn() { echo "$@" >&2; }
eerror() { echo "$@" >&2; }

[ -x /usr/sbin/vdevd ] && sv check vdev || exit 170

_sysfs="/sys"

[ -x /usr/sbin/alsactl ] || exit 0
ALSACTLHOME=/run/alsa
ALSACTLRUNTIME="${ALSACTLHOME}/runtime"
mkdir -p "$ALSACTLRUNTIME"
[ -r /usr/share/alsa/utils.sh ] && . /usr/share/alsa/utils.sh

# Prefer cards after vdev coldplug; soft-wait briefly if none yet.
i=0
while [ ! -d /proc/asound ] && [ "$i" -lt 50 ]; do
	sleep 0.1
	i=$((i + 1))
done
unset i

if test -x /usr/sbin/vdevd; then
    for path in $(ls -l "${_sysfs}/bus/pci/devices/" | grep -o 'devices/pci.*'); do
        _class=
        if [ -n "$path" ] && [ -f "${_sysfs}/${path}/class" ]; then
            _class=$(cat "${_sysfs}/${path}/class")
        fi
        case "$_class" in
            0x0401*|0x0403*)
                _modalias=$(cat "${_sysfs}/${path}/modalias")
                /sbin/modprobe -b -q -- "$_modalias"
                ;;
        esac
    done
    # With vdev, cards may still be absent briefly; do not fail the boot.
    if ! card_OK "$TARGET_CARD"; then
        ewarn "no sound cards loaded yet"
        eend 0
        exit 0
    fi
elif [ ! -d /proc/asound ]; then
    ewarn "no sound cards loaded yet"
    exit 0
fi

ebegin "Setting up ALSA"
if [ -f /var/lib/alsa/asound.state ]; then
  alsactl -E HOME="$ALSACTLHOME" -E XDG_RUNTIME_DIR="${ALSACTLRUNTIME}" restore || \
    alsactl -E HOME="$ALSACTLHOME" -E XDG_RUNTIME_DIR="${ALSACTLRUNTIME}" -F restore || true
fi
eend 0
exit 0
