App-Ariza.git | resources/templates/ | uninstall-posix.sh.j2


#!/bin/sh
# {{ app_display }} uninstaller — macOS and Linux.
#
# Generated by ariza from {{ app_name }}'s ariza.toml. Do not edit this
# file: edit ariza's resources/templates/uninstall-posix.sh.j2 and re-run
# `ariza installers --app=<this repository>`.
#
#   curl -fsSL {{ raw_base }}/uninstall.sh | sh
#   sh uninstall.sh
#
# Removes exactly what install.sh created: the versions directory, the
# `current` symlink, the ~/.local/bin link, and the marked PATH block in
# your shell rc files. Anything {{ app_display }} itself wrote — your data,
# your configuration — is left alone, and this says where it is rather
# than deciding for you.

set -eu

APP_DISPLAY='{{ app_display }}'
APP_EXEC='{{ app_exec }}'

ARIZA_PATH_MARKER="# >>> $APP_EXEC PATH >>>"
ARIZA_PATH_END="# <<< $APP_EXEC PATH <<<"

ARIZA_ROOT="${XDG_DATA_HOME:-$HOME/.local/share}/$APP_EXEC"
ARIZA_BIN_DIR="$HOME/.local/bin"
ARIZA_STATE="${XDG_STATE_HOME:-$HOME/.local/state}/$APP_EXEC"

############################# common runtime ##################################
{{ lib_posix | safe }}
###############################################################################

ariza_usage() {
    cat <<USAGE
Usage: uninstall.sh [-h|--help]

Removes $ARIZA_ROOT, the $ARIZA_BIN_DIR/$APP_EXEC link, and the
$APP_EXEC PATH block from your shell rc files. Nothing else is touched.
USAGE
}

ariza_remove_bin_link() {
    _bin="$ARIZA_BIN_DIR/$APP_EXEC"
    if [ -L "$_bin" ]; then
        # Only ours. Someone may have their own $APP_EXEC on PATH, and a
        # tool that deletes a link it did not create is a tool nobody
        # runs twice.
        _target=$(readlink "$_bin" || true)
        case $_target in
            "$ARIZA_ROOT"/*)
                rm -f "$_bin"
                ariza_ok "removed $_bin"
                ;;
            *)
                ariza_warn "$_bin points at $_target, which is not ours -- leaving it alone"
                ;;
        esac
    elif [ -e "$_bin" ]; then
        ariza_warn "$_bin is not a symlink -- leaving it alone"
    fi
}

main() {
    case ${1:-} in
        -h|--help) ariza_usage; exit 0 ;;
        '') ;;
        *) ariza_err "unknown option '$1' -- run with --help" ;;
    esac

    ariza_log "uninstalling $APP_DISPLAY"

    if [ -d "$ARIZA_ROOT" ]; then
        rm -rf "$ARIZA_ROOT"
        ariza_ok "removed $ARIZA_ROOT"
    else
        ariza_log "nothing installed at $ARIZA_ROOT"
    fi

    ariza_remove_bin_link
    ariza_unpersist_path

    printf '\n'
    ariza_ok "$APP_DISPLAY uninstalled"
    printf '    Not touched, because this installer never wrote them:\n'
    printf '      %s\n' "$ARIZA_STATE"
    printf '      any data or configuration %s created for you\n' "$APP_DISPLAY"
}

main "$@"