Skip to content

Instantly share code, notes, and snippets.

@jetfir3
Last active August 4, 2026 18:46
Show Gist options
  • Select an option

  • Save jetfir3/f620e44fc246c1bed45ed040bbfa2d68 to your computer and use it in GitHub Desktop.

Select an option

Save jetfir3/f620e44fc246c1bed45ed040bbfa2d68 to your computer and use it in GitHub Desktop.
Uninstallify -- remove Spotify + app/cache data
#!/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
@jetfir3

jetfir3 commented Nov 21, 2023

Copy link
Copy Markdown
Author
  • Run script to completely uninstall Spotify on Linux and macOS
  • If found, script will ask before deleting app, app data, cache data

Run directly with:

bash <(curl -sSL https://gist.github.com/jetfir3/f620e44fc246c1bed45ed040bbfa2d68/raw/uninstallify.sh)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment