#!/bin/bash

version="3.0.3"
reldate="2026/08/01"

if (( EUID != 0 )); then
    echo "nanolx-apt must be run as root"
    exit 1
fi

# configuration management in /usr/share for more flexibility
if [ -f nanolx-apt.conf ]; then
    source nanolx-apt.conf
else
    source /usr/share/nanolx/nanolx-apt.conf
fi

[[ -d "${key_base}" ]] || mkdir -p "${key_base}"

manage_repos_int () {
    if [[ "${mode}" = "add" ]]; then
        case "${1}" in
            *.asc | *.gpg | *.key )
                wget "${1}" -O "${2}"
                if ! echo "${3}" "${2}" | sha256sum -c &>/dev/null; then
                    echo "SHA256 checksum for ${2} is wrong"
                    rm "${2}"
                else
                    echo "enabling repo: ${repo}"
                    cp "${sources_d}/${repo}.sources" "/etc/apt/sources.list.d/${repo}.sources"
                fi
            ;;
            *.deb )
                wget "${1}" -O "/var/cache/nanolx/${2}"
                if ! echo "${3}" "/var/cache/nanolx/${2}" | sha256sum -c &>/dev/null; then
                    echo "SHA256 checksum for ${2} is wrong"
                    rm "/var/cache/nanolx/${2}"
                else
                    dpkg -i "/var/cache/nanolx/${2}"
                    echo "enabling repo: ${repo}"
                    cp "${sources_d}/${repo}.sources" "/etc/apt/sources.list.d/${repo}.sources"
                fi
            ;;
            0x* )
                gpg --keyserver "${3}" --recv-keys "${1}"
                gpg --export "${1}" > "${2}"
                if [ -f "${2}" ]; then
                    echo "enabling repo: ${repo}"
                    cp "${sources_d}/${repo}.sources" "/etc/apt/sources.list.d/${repo}.sources"
                else
                    echo "failed to grab key ${1} from ${3}"
                fi
            ;;
            "" )
                cp "${sources_d}/${repo}.sources" "/etc/apt/sources.list.d/${repo}.sources"
            ;;
        esac
    elif [[ "${mode}" = "check" ]]; then
        if [ -f "/etc/apt/sources.list.d/${repo}.sources" ]; then
            echo "repo ${repo}:       enabled"
        else
            echo "repo ${repo}:       disabled"
        fi
    else
        echo "disabling repo: ${repo}"
        rm "/etc/apt/sources.list.d/${repo}.sources"
    fi
}

manage_repos () {
    mode="${1}"
    shift

    for repo in "${@}"; do
        case ${repo} in
            debian ) manage_repos_int ;;
            nanolx ) manage_repos_int "${nanolx}" "${nanolx_store}" "${nanolx_sha}" ;;
            liquorix ) manage_repos_int "${liquorix}" "${liquorix_store}" "${liquorix_sha}" ;;
            winehq ) manage_repos_int "${winehq}" "${winehq_store}" "${winehq_sha}" ;;
            i2p ) manage_repos_int "${i2p}" "${i2p_store}" "${ip2_sha}" ;;
            deb-multimedia ) manage_repos_int "${debmultimedia_url}" \
                "${debmultimedia_pkg}" "${debmultimedia_sha}" ;;
            mozilla ) manage_repos_int "${mozilla}" "${mozilla_store}" "${mozilla_sha}" ;;
            * ) echo "repository ${repo} unknown." ;;
        esac
    done

    [[ ! "${mode}" = "check" ]] && apt update -q
}

user_opt="${1}"
shift

case ${user_opt} in
    list )
         echo "nanolx-apt supports the following repos: ${repo_list}"
         echo "apt config at:  /usr/share/nanolx/apt.d/99nanolx"
         echo "apt pinning at: /usr/share/nanolx/apt.d/pinning"
    ;;
    add ) manage_repos "add" "${@}" ;;
    remove ) manage_repos "remove" "${@}" ;;
    check ) manage_repos "check" ${all_repos} ;;
    enable-config )
        echo "enabling nanolx apt configuration"
        cp /usr/share/nanolx/apt.d/99nanolx /etc/apt/apt.conf.d/99nanolx
    ;;
    disable-config )
        echo "disabling nanolx apt configuration"
        rm /etc/apt/apt.conf.d/99nanolx
    ;;
    enable-pinning )
        if [ -f /etc/apt/preferences.d/pinning ]; then
            echo "backing up previous apt pinning to /etc/apt/preferences.d/pinning.nanolx_old"
            cp /etc/apt/preferences.d/pinning{,.nanolx_old}
        fi
        echo "enabling nanolx apt pinning configuration"
        cp /usr/share/nanolx/apt.d/pinning /etc/apt/preferences.d/pinning
    ;;
    disable-pinning )
        if [ -f /etc/apt/preferences.d/pinning ]; then
            echo "disabling nanolx apt pinning configuration"
            rm /etc/apt/preferences.d/pinning
        else
            echo "nanolx apt pinning not in use"
        fi
        if [ -f /etc/apt/preferences.d/pinning.nanolx_old ]; then
            echo "resotoring previous apt pinning from /etc/apt/preferences.d/pinning.nanolx_old"
            mv /etc/apt/preferences.d/pinning{.nanolx_old,}
        fi
    ;;
    * )
        echo -e "nanolx-apt v${version} (${reldate})
© 2014-2026 Christopher Roy Bratusek <nano@jpberlin.de>

licensed under the GNU General Public License v3 (or newer)

usage:
    nanolx-apt list             (list available repositories)
    nanolx-apt add              [repo1...repo2]
    nanolx-apt remove           [repo1...repo2]
    nanolx-apt check            [check which repos are enabled]
    nanolx-apt enable-config    [enable 99nanolx apt config]
    nanolx-apt disable-config   [disable 99nanolx apt config]
    nanolx-apt enable-pinning   [enable nanolx apt pinning]
    nanolx-apt disable-pinning  [disable nanolx apt pinning]
"
esac