Last active
December 17, 2025 17:48
-
-
Save rabol/907d6bb1542bc65e39a0ed4cd911866c to your computer and use it in GitHub Desktop.
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 | |
| # | |
| # remove-snap.sh | |
| # | |
| # This script: | |
| # 1. Removes all Snap packages and snapd | |
| # 2. Disables and purges snapd | |
| # 3. Blocks snapd from being reinstalled via APT pinning | |
| # 4. Installs GNOME Software (no Snap) + Flatpak plugin | |
| # 5. Installs Flatpak and enables Flathub | |
| # 6. Optionally installs Firefox, Brave, and GNOME Extensions Manager | |
| # | |
| # Tested on Ubuntu 22.04/24.04 style systems. | |
| # | |
| # READ BEFORE RUNNING: | |
| # - This will run 'rm -rf' on Snap directories (/snap, /var/snap, etc.). | |
| # - This will modify /etc/apt and add pinning and repos. | |
| # - Only run if you're sure you don't want Snap at all. | |
| set -euo pipefail | |
| echo "[1/6] Removing installed Snap packages (if present)..." | |
| SNAPS=( | |
| firefox | |
| gtk-common-themes | |
| gnome-42-2204 | |
| snapd-desktop-integration | |
| snap-store | |
| firmware-updater | |
| bare | |
| core22 | |
| snapd | |
| ) | |
| for pkg in "${SNAPS[@]}"; do | |
| if snap list | awk '{print $1}' | grep -Fxq "$pkg" 2>/dev/null; then | |
| echo " - Removing snap: $pkg" | |
| sudo snap remove "$pkg" || true | |
| else | |
| echo " - Snap $pkg not installed, skipping" | |
| fi | |
| done | |
| echo | |
| echo "[2/6] Stopping and disabling snapd service..." | |
| sudo systemctl stop snapd.service snapd.socket snapd.seeded.service 2>/dev/null || true | |
| sudo systemctl disable snapd.service snapd.socket snapd.seeded.service 2>/dev/null || true | |
| sudo systemctl mask snapd.service snapd.socket snapd.seeded.service 2>/dev/null || true | |
| echo | |
| echo "[3/6] Purging snapd package and marking it on hold..." | |
| if dpkg -l | awk '{print $2}' | grep -Fxq "snapd"; then | |
| sudo apt purge -y snapd | |
| else | |
| echo " - snapd package already absent" | |
| fi | |
| sudo apt-mark hold snapd || true | |
| echo | |
| echo "[4/6] Removing leftover Snap directories..." | |
| sudo rm -rf /snap /var/snap /var/lib/snapd /var/cache/snapd 2>/dev/null || true | |
| sudo rm -rf "$HOME/snap" 2>/dev/null || true | |
| echo | |
| echo "[5/6] Preventing snapd from ever reinstalling (APT pinning)..." | |
| sudo tee /etc/apt/preferences.d/nosnap.pref > /dev/null <<'EOF' | |
| Package: snapd | |
| Pin: release a=* | |
| Pin-Priority: -10 | |
| EOF | |
| echo " - Updating APT after nosnap.pref..." | |
| sudo apt update | |
| echo | |
| echo "[6/6] Installing GNOME Software and Flatpak support..." | |
| sudo apt install -y --install-suggests gnome-software gnome-software-plugin-flatpak | |
| if ! command -v flatpak >/dev/null 2>&1; then | |
| sudo apt install -y flatpak | |
| else | |
| echo " - flatpak already installed" | |
| fi | |
| if flatpak remote-list | awk '{print $1}' | grep -Fxq "flathub"; then | |
| echo " - flathub remote already exists" | |
| else | |
| sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo | |
| fi | |
| # ------------------------------- | |
| # Optional Software Installations | |
| # ------------------------------- | |
| echo | |
| read -rp "Do you want to install Firefox (no-Snap .deb from Mozilla)? [y/N] " install_firefox | |
| if [[ "${install_firefox,,}" == "y" || "${install_firefox,,}" == "yes" ]]; then | |
| echo | |
| echo "[Optional] Installing Firefox from Mozilla APT repo (no Snap)..." | |
| sudo install -d -m 0755 /etc/apt/keyrings | |
| wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- \ | |
| | sudo tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null | |
| echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" \ | |
| | sudo tee /etc/apt/sources.list.d/mozilla.list > /dev/null | |
| sudo tee /etc/apt/preferences.d/mozilla > /dev/null <<'EOF' | |
| Package: * | |
| Pin: origin packages.mozilla.org | |
| Pin-Priority: 1000 | |
| EOF | |
| sudo apt update | |
| sudo apt install -y firefox | |
| else | |
| echo " - Skipping Firefox installation" | |
| fi | |
| echo | |
| read -rp "Do you want to install Brave Browser? [y/N] " install_brave | |
| if [[ "${install_brave,,}" == "y" || "${install_brave,,}" == "yes" ]]; then | |
| echo | |
| echo "[Optional] Installing Brave Browser from official APT repo..." | |
| if ! command -v curl >/dev/null 2>&1; then | |
| echo " - curl not found, installing curl..." | |
| sudo apt update | |
| sudo apt install -y curl | |
| fi | |
| sudo install -d -m 0755 /etc/apt/keyrings | |
| curl -fsSL https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg \ | |
| | sudo tee /etc/apt/keyrings/brave-browser-archive-keyring.gpg > /dev/null | |
| echo "deb [signed-by=/etc/apt/keyrings/brave-browser-archive-keyring.gpg arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main" \ | |
| | sudo tee /etc/apt/sources.list.d/brave-browser-release.list > /dev/null | |
| sudo apt update | |
| sudo apt install -y brave-browser | |
| else | |
| echo " - Skipping Brave installation" | |
| fi | |
| echo | |
| read -rp "Do you want to install GNOME Extensions Manager (Flatpak)? [y/N] " install_extensions_manager | |
| if [[ "${install_extensions_manager,,}" == "y" || "${install_extensions_manager,,}" == "yes" ]]; then | |
| echo | |
| echo "[Optional] Installing GNOME Extensions Manager from Flathub..." | |
| flatpak install -y flathub com.mattjakeman.ExtensionManager | |
| else | |
| echo " - Skipping GNOME Extensions Manager installation" | |
| fi | |
| echo | |
| echo "All done!" | |
| echo "You are now Snap-free. GNOME Software and Flatpak/Flathub are configured." | |
| echo "If selected, Firefox, Brave, and/or GNOME Extensions Manager have been installed." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment