Skip to content

Instantly share code, notes, and snippets.

@rabol
Last active December 17, 2025 17:48
Show Gist options
  • Select an option

  • Save rabol/907d6bb1542bc65e39a0ed4cd911866c to your computer and use it in GitHub Desktop.

Select an option

Save rabol/907d6bb1542bc65e39a0ed4cd911866c to your computer and use it in GitHub Desktop.
#!/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