#!/usr/bin/env sh
# poke around in the dark to see where is
# ----- helpers -----
have() {
    command -v "$@" > /dev/null 2>&1
}
first_existing() {
    for x in "$@"; do
        [ -e "$x" ] && {
            printf '%s\n' "$x"
            return 0
        }
    done
    return 1
}
kv() {
    printf '%-16s %s\n' "$1:" "$2"
}
# ----- OS -----
OS_NAME=""
OS_VERSION=""
OS_ID=""
OS_LIKE=""
ROLLING="unknown"
if [ -r /etc/os-release ]; then
    # shellcheck disable=SC1091
    . /etc/os-release
    OS_NAME="${NAME:-unknown}"
    OS_VERSION="${VERSION_ID:-${VERSION:-unknown}}"
    OS_ID="${ID:-unknown}"
    OS_LIKE="${ID_LIKE:-}"
    case "$OS_ID $OS_LIKE" in
        *arch*|*gentoo*)
            ROLLING="likely"
            ;;
        *opensuse-tumbleweed*)
            ROLLING="yes"
            ;;
        *)
            ROLLING="no/unknown"
            ;;
    esac
else
    OS_NAME="$(uname -s 2>/dev/null || echo unknown)"
    OS_VERSION="$(uname -r 2>/dev/null || echo unknown)"
fi
# ---------- kernel ----------
KERNEL="$(uname -r 2>/dev/null || echo unknown)"
KERNEL_FULL="$(uname -srv 2>/dev/null || echo unknown)"
# ---------- libc ----------
LIBC="unknown"
if have ldd; then
    LDD_OUT="$(ldd --version 2>&1 | head -n 1)"
    case "$LDD_OUT" in
        *musl*)
            LIBC="musl"
            ;;
        *glibc*|*GNU\ libc*|*GNU\ C\ Library*)
            LIBC="glibc"
            ;;
        *)
            LIBC="$LDD_OUT"
            ;;
    esac
elif [ -e /lib/libc.musl-x86_64.so.1 ]; then
    LIBC="musl"
fi
# ---------- package manager ----------
PKG_MGR="unknown"
for pm in \
    apt dnf yum pacman zypper apk emerge xbps-install \
    brew nix guix pkg pkg_add winget choco scoop
do
    if have "$pm"; then
        PKG_MGR="$pm"
        break
    fi
done
# ---------- locale ----------
LOCALE="${LC_ALL:-${LANG:-unknown}}"
# ---------- shell ----------
CURRENT_SHELL="${SHELL:-unknown}"
CURRENT_SHELL_NAME="${CURRENT_SHELL##*/}"
# ---------- python ----------
PYTHON="none"
if have python3; then
    PYTHON="$(python3 --version 2>&1)"
elif have python; then
    PYTHON="$(python --version 2>&1)"
fi
# ---------- lua ----------
LUA="none"
for lua_cmd in lua lua5.4 lua5.3 lua5.2 lua5.1; do
    if have "$lua_cmd"; then
        LUA="$($lua_cmd -v 2>&1 | head -n 1)"
        break
    fi
done
# ---------- libcurl ----------
LIBCURL="none"
if have curl; then
    LIBCURL="$(curl --version 2>&1 | head -n 1 | awk '{print $1, $2}')"
elif have pkg-config && pkg-config --exists libcurl 2>/dev/null; then
    LIBCURL="libcurl $(pkg-config --modversion libcurl 2>/dev/null)"
elif have curl-config; then
    LIBCURL="libcurl $(curl-config --version 2>/dev/null)"
fi
# ---------- cc (gcc vs clang) ----------
CC_INFO="none"
if have cc; then
    CC_OUT="$(cc --version 2>&1 | head -n 1)"
    case "$CC_OUT" in
        *clang*|*LLVM*)
            CC_INFO="clang — $CC_OUT"
            ;;
        *gcc*|*GCC*|*Free\ Software\ Foundation*)
            CC_INFO="gcc — $CC_OUT"
            ;;
        *)
            CC_INFO="unknown — $CC_OUT"
            ;;
    esac
fi~
# ---------- output ----------
kv "OS" "$OS_NAME"
kv "OS Version" "$OS_VERSION"
kv "Rolling Release" "$ROLLING"
kv "Kernel" "$KERNEL"
kv "Kernel Full" "$KERNEL_FULL"
kv "libc" "$LIBC"
kv "Package Manager" "$PKG_MGR"
kv "Locale" "$LOCALE"
kv "Shell" "$CURRENT_SHELL_NAME"
kv "Python" "$PYTHON"
kv "Lua" "$LUA"
kv "libcurl" "$LIBCURL"
kv "cc" "$CC_INFO"