#!/bin/sh # Function to check if a package is installed in Debian-based distributions is_deb_package_installed() { dpkg-query -W -f='${Status}' "$1" 2>/dev/null | grep -c "ok installed" } # Function to check if a package is installed in Redhat-based distributions is_rpm_package_installed() { rpm -q "$1" &> /dev/null } # Function to check if a package is installed in Arch-based distributions is_arch_package_installed() { pacman -Q "$1" &> /dev/null } # Function to uninstall Bitcoin from source uninstall_bitcoin_from_source() { # Find the path to the bitcoin binary bitcoin_bin=$(which bitcoin) if [ -z "$bitcoin_bin" ]; then say "Could not find Bitcoin installed from source" return 1 fi # Assume the parent directory of the binary is the source directory bitcoin_src_dir=$(dirname "$bitcoin_bin") say "Uninstalling Bitcoin Core installed from source in $bitcoin_src_dir" cd "$bitcoin_src_dir" sudo make uninstall } # Function to uninstall Bitcoin package uninstall_bitcoin_package() { # Detect the operating system's package manager and uninstall if command -v apt &> /dev/null && is_deb_package_installed bitcoin; then say "Uninstalling Bitcoin Core package installed with apt" sudo apt-get remove -y bitcoin elif command -v dnf &> /dev/null && is_rpm_package_installed bitcoin; then say "Uninstalling Bitcoin Core package installed with dnf" sudo dnf remove -y bitcoin elif command -v pacman &> /dev/null && is_arch_package_installed bitcoin; then say "Uninstalling Bitcoin Core package installed with pacman" sudo pacman -Rns bitcoin --noconfirm elif command -v brew &> /dev/null && brew list --cask bitcoin-core; then say "Uninstalling Bitcoin Core package installed with brew" brew uninstall --cask bitcoin-core else # If no package manager is found, assume it was installed from source uninstall_bitcoin_from_source fi } # Function to uninstall Bitcoin uninstall_bitcoin() { read -p "This will uninstall Bitcoin Core and might delete your wallet data. Are you sure? (Y/n) " yn case $yn in [Yy]* ) uninstall_bitcoin_package ;; [Nn]* ) say "Uninstallation cancelled" ;; * ) say "Invalid input. Please answer with Y (yes) or N (no)" uninstall_bitcoin ;; esac } # Start the uninstallation uninstall_bitcoin