
___x_cmd_install_env(){
    [ $# -gt 0 ]    ||  set -- --tsv

    local fmt=tsv
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)  ___x_cmd help -m install --env "$@"; return 0 ;;
            --tsv|--csv|--json)
                        fmt="${1#--}" ;   shift ;;
            *)          break ;;
        esac
    done

    ___x_cmd_install_env___"$fmt"
}

___x_cmd_install_env___tsv(){
    local _os _arch _release _wsl _sys_tool _container _sudo _user

    local x_
    # System info
    ___x_cmd os name_ ;     _os="$x_"
    ___x_cmd os arch_ ;     _arch="$x_"

    local info
    info="$( ___x_cmd os release )"
    _release="${info%%
*}"
    _wsl="${info%%-WSL?}"
    _wsl="${info##"${_wsl}"}"
    [ -n "$_wsl" ] && _wsl=yes || _wsl=no

    # System package manager
    x_=""
    ___x_cmd_install_sys___tool_ 2>/dev/null
    _sys_tool="$x_"
    [ -n "$_sys_tool" ] || _sys_tool="none"

    # Container detection
    _container=no
    if [ -f /.dockerenv ] || grep -q 'docker\|podman\|containerd' /proc/1/cgroup 2>/dev/null; then
        _container=yes
    fi

    # Sudo availability
    if [ "$(id -u)" = "0" ]; then
        _sudo=yes
    elif ___x_cmd_hascmd sudo && sudo -n true 2>/dev/null; then
        _sudo=yes
    else
        _sudo=no
    fi

    # Current user
    _user="$(id -un 2>/dev/null || echo unknown)"

    printf "%s\t%s\n" "key"       "value"
    printf "%s\t%s\n" "os"        "$_os"
    printf "%s\t%s\n" "arch"      "$_arch"
    printf "%s\t%s\n" "release"   "$_release"
    printf "%s\t%s\n" "wsl"       "$_wsl"
    printf "%s\t%s\n" "container" "$_container"
    printf "%s\t%s\n" "sudo"      "$_sudo"
    printf "%s\t%s\n" "user"      "$_user"
    printf "%s\t%s\n" "sys_tool"  "$_sys_tool"
}

___x_cmd_install_env___csv(){
    ___x_cmd_install_env___tsv | ___x_cmd tsv tocsv
}

___x_cmd_install_env___json(){
    ___x_cmd_install_env___csv | ___x_cmd csv tojson
}

