Ubuntu / Linux Mint
A bigger pick-your-own checklist for default bloat, then autoremove and clear the cache.
Overview
Ubuntu and Mint both ship a handful of games, stock utilities, and LibreOffice components most people never open. This tool scans a wide candidate list and lets you pick exactly what to remove from a numbered checklist - nothing goes unless you select it. It then runs apt's own autoremove and cache-clearing steps. On Ubuntu it also asks if you want Flatpak/Flathub set up at the end - Mint skips that prompt since it already ships Flatpak.
Changes
- Scans over 25 optional installed apps: LibreOffice, default games (gnome-mahjongg, aisleriot, hitori, etc.), Thunderbird, Rhythmbox, Transmission, HexChat, Deja Dup, Remmina, GNOME Boxes/Maps/Weather/Contacts, and stock packages
- Shows a numbered checklist of what's actually installed - you choose which numbers to remove, 'all', or skip entirely
- Runs
apt-get autoremove --purge - Clears the apt package cache with
apt-get clean - On Ubuntu, asks whether to install Flatpak and add the Flathub remote - only happens if you say yes. Skipped automatically on Mint, which already has Flatpak preinstalled
What stays
Anything not on the checklist, or on the checklist but not selected, is left alone. autoremove only removes packages apt itself has already flagged as no longer required. Flatpak is only installed if you say yes to that prompt, and the prompt itself only appears on Ubuntu - the script checks /etc/os-release to detect Mint and skips it there.
Command
Same script either way - it detects apt on its own. This is the exact command whether you're running Ubuntu.
curl -sSL https://debloatme.com/ubuntu | bash
Script source
#!/usr/bin/env bash
#
# DebloatMe - Ubuntu / Linux Mint
# https://debloatme.com/ubuntu
#
# What this script does:
# 1. Lets you pick, from a checklist, which optional apps to remove
# (LibreOffice, default games, stock packages, and a broader list
# of common desktop bloat) - nothing is removed unless you select it
# 2. Runs apt autoremove with purge
# 3. Clears the apt package cache
# 4. Optionally installs Flatpak and adds the Flathub remote, if you
# say yes when asked
#
# Reads confirmation prompts from /dev/tty so this still works when the
# script is piped straight from curl (curl ... | bash).
#
# Review this script before running it. Some listed packages may be relied
# on by other software on your system; the script checks before removing.
set -euo pipefail
echo "== DebloatMe: Ubuntu / Linux Mint =="
echo "This will remove selected packages and clear the apt cache."
read -r -p "Continue? [y/N] " confirm </dev/tty
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
echo "Aborted. No changes made."
exit 0
fi
# 1. Interactive checklist - nothing removed unless you pick it
echo
echo "-> Scanning for optional installed apps..."
candidate_ids=()
candidate_labels=()
lo_installed=$(dpkg -l 2>/dev/null | awk '/^ii libreoffice/ {print $2}')
if [[ -n "$lo_installed" ]]; then
candidate_ids+=("__libreoffice__")
candidate_labels+=("LibreOffice (full suite)")
fi
check_pkg() {
local pkg="$1" label="$2"
if dpkg -s "$pkg" >/dev/null 2>&1; then
candidate_ids+=("$pkg")
candidate_labels+=("$label")
fi
}
check_pkg "gnome-mahjongg" "GNOME Mahjongg"
check_pkg "gnome-mines" "GNOME Mines"
check_pkg "gnome-sudoku" "GNOME Sudoku"
check_pkg "gnome-2048" "GNOME 2048"
check_pkg "aisleriot" "Aisleriot (Solitaire)"
check_pkg "iagno" "Iagno (Reversi)"
check_pkg "four-in-a-row" "Four-in-a-row"
check_pkg "hitori" "Hitori"
check_pkg "quadrapassel" "Quadrapassel"
check_pkg "thunderbird-gnome-support" "Thunderbird GNOME integration"
check_pkg "thunderbird" "Thunderbird (mail client)"
check_pkg "popularity-contest" "Popularity Contest (usage stats)"
check_pkg "rhythmbox" "Rhythmbox"
check_pkg "totem" "GNOME Videos (Totem)"
check_pkg "cheese" "Cheese (webcam booth)"
check_pkg "shotwell" "Shotwell (photo manager)"
check_pkg "simple-scan" "Simple Scan"
check_pkg "transmission-gtk" "Transmission (torrent client)"
check_pkg "hexchat" "HexChat (IRC client)"
check_pkg "deja-dup" "Deja Dup (backup tool)"
check_pkg "remmina" "Remmina (remote desktop client)"
check_pkg "gnome-boxes" "GNOME Boxes"
check_pkg "gnome-maps" "GNOME Maps"
check_pkg "gnome-weather" "GNOME Weather"
check_pkg "gnome-contacts" "GNOME Contacts"
check_pkg "gnome-clocks" "GNOME Clocks"
check_pkg "gnome-characters" "GNOME Character Map"
check_pkg "gnome-logs" "GNOME Logs"
check_pkg "seahorse" "Seahorse (password/keys manager)"
check_pkg "onboard" "Onboard (on-screen keyboard)"
if [[ ${#candidate_ids[@]} -eq 0 ]]; then
echo " None of the optional apps on the list are installed."
else
echo
echo "Optional apps found on this system:"
for i in "${!candidate_ids[@]}"; do
printf " [%d] %s\n" "$((i + 1))" "${candidate_labels[$i]}"
done
echo
read -r -p "Enter numbers to remove (space-separated), 'all', or press Enter to skip: " selection </dev/tty
indices=()
if [[ "$selection" == "all" ]]; then
for i in "${!candidate_ids[@]}"; do indices+=("$i"); done
elif [[ -n "$selection" ]]; then
for n in $selection; do
idx=$((n - 1))
if [[ $idx -ge 0 && $idx -lt ${#candidate_ids[@]} ]]; then
indices+=("$idx")
fi
done
fi
if [[ ${#indices[@]} -eq 0 ]]; then
echo " Nothing selected. Skipping."
else
for idx in "${indices[@]}"; do
id="${candidate_ids[$idx]}"
if [[ "$id" == "__libreoffice__" ]]; then
echo " Removing LibreOffice packages:"
echo "$lo_installed" | sed 's/^/ /'
sudo apt-get -y purge $lo_installed || true
else
echo " Removing $id"
sudo apt-get -y purge "$id" || true
fi
done
fi
fi
# 2. autoremove
echo
echo "-> Running apt autoremove --purge..."
sudo apt-get -y autoremove --purge
# 3. Clear apt cache
echo
echo "-> Clearing apt package cache..."
sudo apt-get clean
# 4. Optional Flatpak support (Ubuntu only - Mint ships Flatpak/Flathub by default)
is_mint=false
if [[ -f /etc/os-release ]] && grep -qi '^ID=linuxmint' /etc/os-release; then
is_mint=true
fi
if [[ "$is_mint" == true ]]; then
echo
echo "-> Skipping the Flatpak prompt - Linux Mint ships Flatpak and Flathub out of the box."
else
echo
read -r -p "Install Flatpak support and add the Flathub remote? [y/N] " flatpak_choice </dev/tty
if [[ "$flatpak_choice" =~ ^[Yy]$ ]]; then
if command -v flatpak >/dev/null 2>&1; then
echo " Flatpak is already installed."
else
echo " Installing flatpak..."
sudo apt-get -y install flatpak
fi
echo " Adding the Flathub remote..."
sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
if dpkg -s gnome-software >/dev/null 2>&1; then
echo " Installing the GNOME Software Flatpak plugin so Flatpak apps show up in the GUI store..."
sudo apt-get -y install gnome-software-plugin-flatpak || true
fi
echo " Done. You may need to log out and back in before Flatpak apps show up in your app menu."
else
echo " Skipped."
fi
fi
echo
echo "== Done. =="
rm -- "$0" 2>/dev/null || true
Warning
This script modifies your system
autoremove --purge deletes configuration files along with packages it removes. If you've customized a package you selected, check its config is backed up first.
- Self-deletion: this script removes its own temporary downloaded copy after it finishes. That's a cleanup step, not a security feature.
- Review the source above before running it, especially on a system you can't easily restore.