Last active
August 4, 2026 18:46
-
-
Save jetfir3/f620e44fc246c1bed45ed040bbfa2d68 to your computer and use it in GitHub Desktop.
Uninstallify -- remove Spotify + app/cache data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| # Uninstallify -- remove Spotify + app/cache data | |
| case $(uname | tr '[:upper:]' '[:lower:]') in | |
| darwin*) platformType='macOS' ;; | |
| linux*) platformType='Linux' ;; | |
| *) echo "Unsupported operating system" >&2; exit 1 ;; | |
| esac | |
| [[ -n "${HOME}" && "${HOME}" != "/" ]] || { echo "Invalid home directory" >&2; exit 1; } | |
| command pkill -9 '[sS]potify' 2>/dev/null | |
| read_yn() { | |
| local yn | |
| while : ; do | |
| read -rp "$* (y/n) " -n 1 yn || { echo; return 1; } | |
| echo | |
| case "${yn}" in | |
| [Yy]*) return 0 ;; | |
| [Nn]*) return 1 ;; | |
| *) echo "Please enter [y]es or [n]o." ;; | |
| esac | |
| done | |
| } | |
| sudo_run() { | |
| ((EUID == 0)) && { command "$@"; return; } | |
| sudo "$@" | |
| } | |
| remove_package() { | |
| local packageName="${1}" | |
| shift | |
| read_yn "Remove ${packageName}?" || { echo "${packageName} not removed"; return; } | |
| "$@" && echo "${packageName} removed" || echo "${packageName} not removed" >&2 | |
| } | |
| delete_path() { | |
| local path="${1}" | |
| local pathName="${2}" | |
| [[ -e "${path}" || -L "${path}" ]] || return 1 | |
| [[ -z "${path}" || "${path}" == "/" || "${path}" == "${HOME}" ]] && { | |
| echo "Unsafe ${pathName} path refused: ${path}" >&2 | |
| return 1 | |
| } | |
| read_yn "Are you sure you want to delete ${path}?" || { echo "${pathName} at ${path} not deleted"; return; } | |
| rm -rf -- "${path}" 2>/dev/null | |
| [[ ! -e "${path}" && ! -L "${path}" ]] && { echo "${pathName} at ${path} deleted"; return; } | |
| command -v sudo >/dev/null && sudo rm -rf -- "${path}" 2>/dev/null | |
| [[ ! -e "${path}" && ! -L "${path}" ]] && echo "${pathName} at ${path} deleted with elevated privileges" || echo "${pathName} at ${path} not deleted" >&2 | |
| } | |
| delete_paths() { | |
| local pathName="${1}" | |
| local path found | |
| shift | |
| for path in "$@"; do | |
| [[ -e "${path}" || -L "${path}" ]] || continue | |
| found='true' | |
| delete_path "${path}" "${pathName}" | |
| done | |
| [[ -z "${found}" ]] && echo "${pathName} not found" | |
| } | |
| remove_linux_packages() { | |
| local package rpmManager | |
| command -v snap >/dev/null && snap list spotify >/dev/null 2>&1 && remove_package "Spotify Snap package" sudo_run snap remove --purge spotify | |
| command -v flatpak >/dev/null && { | |
| flatpak info --user com.spotify.Client >/dev/null 2>&1 && remove_package "Spotify user Flatpak" flatpak uninstall --user --delete-data -y com.spotify.Client | |
| flatpak info --system com.spotify.Client >/dev/null 2>&1 && remove_package "Spotify system Flatpak" flatpak uninstall --system --delete-data -y com.spotify.Client | |
| } | |
| command -v dpkg-query >/dev/null && { | |
| for package in spotify-client spotify; do | |
| [[ "$(dpkg-query -W -f='${Status}' "${package}" 2>/dev/null)" == "install ok installed" ]] || continue | |
| command -v apt-get >/dev/null && { remove_package "${package} package" sudo_run apt-get purge -y "${package}"; continue; } | |
| remove_package "${package} package" sudo_run dpkg --purge "${package}" | |
| done | |
| } | |
| command -v pacman >/dev/null && { | |
| for package in spotify spotify-launcher; do | |
| pacman -Qq "${package}" >/dev/null 2>&1 && remove_package "${package} package" sudo_run pacman -Rns --noconfirm "${package}" | |
| done | |
| } | |
| command -v rpm >/dev/null && { | |
| command -v dnf >/dev/null && rpmManager='dnf' | |
| [[ -z "${rpmManager}" ]] && command -v yum >/dev/null && rpmManager='yum' | |
| [[ -z "${rpmManager}" ]] && command -v zypper >/dev/null && rpmManager='zypper' | |
| for package in spotify-client spotify; do | |
| rpm -q "${package}" >/dev/null 2>&1 || continue | |
| case "${rpmManager}" in | |
| dnf) remove_package "${package} package" sudo_run dnf remove -y "${package}" ;; | |
| yum) remove_package "${package} package" sudo_run yum remove -y "${package}" ;; | |
| zypper) remove_package "${package} package" sudo_run zypper --non-interactive remove "${package}" ;; | |
| *) echo "${package} is installed but no supported RPM package manager was found" >&2 ;; | |
| esac | |
| done | |
| } | |
| } | |
| [[ "${platformType}" == "Linux" ]] && { | |
| remove_linux_packages | |
| delete_paths "App" \ | |
| "/opt/spotify" \ | |
| "/usr/share/spotify" \ | |
| "/usr/lib/spotify" \ | |
| "/usr/lib64/spotify" \ | |
| "${HOME}/.local/share/spotify" \ | |
| "${HOME}/.local/share/flatpak/app/com.spotify.Client" \ | |
| "/var/lib/flatpak/app/com.spotify.Client" | |
| delete_paths "App cache" \ | |
| "${HOME}/.cache/spotify" \ | |
| "${HOME}/.cache/spotify-launcher" \ | |
| "${HOME}/.cache/spotx-bash" | |
| delete_paths "App data" \ | |
| "${HOME}/.config/spotify" \ | |
| "${HOME}/.local/share/spotify-launcher" \ | |
| "${HOME}/.var/app/com.spotify.Client" \ | |
| "${HOME}/snap/spotify" \ | |
| "/var/snap/spotify" | |
| } | |
| [[ "${platformType}" == "macOS" ]] && { | |
| delete_paths "App" \ | |
| "/Applications/Spotify.app" \ | |
| "${HOME}/Applications/Spotify.app" | |
| delete_paths "App cache" \ | |
| "${HOME}/Library/Caches/com.spotify.client" \ | |
| "${HOME}/Library/Caches/com.spotify.client.ShipIt" \ | |
| "${HOME}/Library/Caches/com.spotify.client.helper" | |
| delete_paths "App data" \ | |
| "${HOME}/Library/Application Support/Spotify" \ | |
| "${HOME}/Library/Application Support/com.spotify.client.ShipIt" \ | |
| "${HOME}/Library/Preferences/com.spotify.client.plist" \ | |
| "${HOME}/Library/Preferences/com.spotify.client.helper.plist" \ | |
| "${HOME}/Library/Saved Application State/com.spotify.client.savedState" \ | |
| "${HOME}/Library/HTTPStorages/com.spotify.client" \ | |
| "${HOME}/Library/HTTPStorages/com.spotify.client.binarycookies" \ | |
| "${HOME}/Library/Cookies/com.spotify.client.binarycookies" \ | |
| "${HOME}/Library/WebKit/com.spotify.client" \ | |
| "${HOME}/Library/Logs/Spotify" | |
| } | |
| echo -e "\nFinished!" | |
| exit 0 |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Run directly with: