VEET — Universal Linux App Uninstaller
[![CI](https://github.com/swadhinbiswas/veet/actions/workflows/ci.yml/badge.svg)](https://github.com/swadhinbiswas/veet/actions/workflows/ci.yml) [![Go Reference](https://pkg.go.dev/badge/github.com/swadhinbiswas/veet.svg)](https://pkg.go.dev/github.com/swadhinbiswas/veet) [![Go Version](https://img.shields.io/badge/Go-1.24+-00ADD8?style=flat-square&logo=go)](https://go.dev) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](LICENSE) [![Platform](https://img.shields.io/badge/Platform-Linux-FCC624?style=flat-square&logo=linux&logoColor=black)](#technical-overview) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](CONTRIBUTING.md)

Universal Linux Application Uninstaller & Deep-Clean Residual Purger
An interactive terminal system utility that detects installed software across package managers and automates complete removal of binaries, user caches, configuration files, and residual logs in one confirmed action.

--- ## Technical Overview When software is uninstalled using conventional Linux package managers (`pacman -R`, `apt remove`, `dnf remove`, `flatpak uninstall`), only package-managed system files (`/usr/bin`, `/usr/share`) are modified. User-space directories remain unmanaged: - `~/.config/` *(user configuration state)* - `~/.cache/` *(accumulated runtime caches, shader caches, webview stores)* - `~/.local/share/` *(local application data and databases)* - `~/.local/state/` *(session and state histories)* - `/var/log/` and systemd journal archives Over extended usage, unmanaged leftovers consume significant disk storage. Modern Linux distributions also feature package manager fragmentation across native repositories, universal formats, and language toolchains. **VEET** bridges this gap by scanning all installed targets concurrently, staging candidate residual paths for user verification, and executing atomic uninstalls with batched privilege elevation. --- ## Comparison Matrix | Feature | `pacman -R` / `apt remove` | `flatpak uninstall` | `bleachbit` | `veet` | |:---|:---:|:---:|:---:|:---:| | **Binary Removal** | Yes | Yes | No | **Yes** | | **User Configuration Cleanup (`~/.config`)** | No | No | Partial | **Yes (Inspected & Staged)** | | **User Cache Cleanup (`~/.cache`)** | No | No | Yes | **Yes (Inspected & Staged)** | | **Universal Multi-Source Aggregator** | No | No | No | **Yes (15+ package managers)** | | **Orphaned Dependencies Detection** | Manual query | No | No | **Yes (Live detection)** | | **AppImage & Portable Binary Scanner** | No | No | No | **Yes (Auto-discovered)** | | **Interactive Terminal UI (TUI)** | No | No | GTK Only | **Yes (Zero-latency Bubble Tea)** | | **Pre-execution Dry-run Inspection** | Partial | Partial | Yes | **Yes (Full path inspection)** | | **Batched Sudo Elevation** | Per command | N/A | Full root required | **Yes (Single prompt per batch)** | --- ## Core Capabilities

Multi-Source Parallel Detection

Concurrently queries system package managers (pacman/AUR, apt, dnf, zypper), sandboxed formats (Flatpak, Snap), portable bundles (AppImage), and language toolchains (npm -g, pipx, cargo, gem, go install) with zero-cost skipping for absent tools.

Deep Residual Cleanup

Automates residual discovery across user configurations, cached runtime stores, desktop integration entries, icons, and system paths, staging each candidate before disk execution.

Orphaned Dependency Pruning

Live detection of unneeded dependency packages across native package managers (pacman -Qdt, apt autoremove, dnf repoquery --unneeded) ready for safe reclamation.

System Log & Journal Vacuum

Identifies bloated systemd journal storage (/var/log/journal) and rotated compressed log archives (/var/log/*.gz) with integrated elevated vacuum routines.

Interactive Navigation & Telemetry

Instant category switching (1–6), four-mode list sorting (o) for rapid disk bloat identification, and in-place staged path inspection (p).

Sudo Batching & Anti-Brick Safety

Core system components (glibc, linux, systemd, active shell) are protected from selection. System paths are batched into a single elevated transaction.

--- ## Installation ### Option 1: Automated Script Installation (Recommended) Downloads, compiles with binary optimizations (`-ldflags="-s -w"`), installs to `~/.local/bin/veet`, and configures shell autocompletions: ```bash curl -sSL https://raw.githubusercontent.com/swadhinbiswas/veet/main/install.sh | bash ``` *Or from local clone:* ```bash ./install.sh ``` --- ### Option 2: Go Package Manager Install directly via the standard Go toolchain (requires Go 1.24+): ```bash go install github.com/swadhinbiswas/veet@latest ``` *Or install from local source:* ```bash go install . ``` --- ### Option 3: Manual Compilation via Makefile ```bash git clone https://github.com/swadhinbiswas/veet.git cd veet make build make install ``` > [!NOTE] > Ensure `~/.local/bin` is present in your environment `$PATH`. If not, add `export PATH="$PATH:$HOME/.local/bin"` to your `~/.bashrc` or `~/.zshrc`. --- ## Usage ### Interactive Terminal Dashboard Launch the zero-latency terminal user interface: ```bash veet ``` --- ### Command Line Interface VEET exposes non-interactive headless commands for automation, scripting, and CI auditing: ```bash # Output installed application inventory table to stdout veet scan # Export machine-readable JSON inventory veet scan --json # Non-interactive deep-clean removal with preview veet clean # Non-interactive removal scoped to specific source with confirmation veet clean --source flatpak --yes ``` --- ## Keybinding Reference
Keybinding Action
1 – 6 Jump to stat card category (All, Flatpak, Snap, Tools, Cache, Reclaim)
[ / ] or ← / → Cycle horizontally through top stat categories
↑ ↓ / j k Navigate table selection cursor
Space Toggle multi-select checkbox on active row
a Select / deselect all visible filtered rows (skips protected components)
o / O Cycle sort order (Size ↓, Name A-Z, Source, Date ↓)
p / P Toggle staged filesystem paths inspector in details panel
/ Focus fuzzy search-as-you-type filter input
Tab / Shift+Tab Cycle specific source filter dropdown (pacman, aur, flatpak, etc.)
Enter Stage selected applications and open confirmation preview modal
c 1-key quick purge for user cache & residual files
e Export audit inventory report to ~/.local/share/veet/apps-report.json
r Trigger background rescan across all detectors
l Open history audit log viewport
s Open settings and protected components registry
h / ? Toggle keybinding reference overlay
Esc Dismiss active modal / blur search input
q / Ctrl+C Quit VEET
--- ## Configuration
Custom Configuration (~/.config/veet/config.yaml)
VEET supports optional user configuration via YAML. Create `~/.config/veet/config.yaml` to declare custom protected packages: ```yaml # Packages that VEET will refuse to stage or select for deletion protected_packages: - custom-kernel-module - my-critical-service - proprietary-driver ```
System Architecture & Module Map
```text veet/ ├── main.go # Cobra CLI entrypoint (scan, clean, tui) ├── internal/ │ ├── model/ # Data types: AppInfo, RemovableFiles, Config, SourceMeta │ ├── detector/ # Parallel detector engine (15+ source handlers) │ ├── uninstaller/ # Staging engine, sudo batching & filesystem removal (Afero) │ ├── history/ # Append-only audit logger (~/.local/share/veet/history.log) │ └── ui/ # Bubble Tea & Lip Gloss TUI components ├── assets/ # Brand assets & custom vector icons ├── Makefile # Build automation targets ├── install.sh # Automated Bash installer └── uninstall.sh # Uninstaller script ```
--- ## Uninstallation ### From Cloned Source Repository ```bash ./uninstall.sh ``` ### Manual Removal (Binary & Shell Completions) If installed via `go install` or direct binary download: ```bash # Remove executable binary rm -f ~/.local/bin/veet # Remove shell autocompletions rm -f ~/.local/share/bash-completion/completions/veet rm -f ~/.local/share/zsh/site-functions/_veet rm -f ~/.config/fish/completions/veet.fish # Optionally remove audit logs and configurations rm -rf ~/.local/share/veet ~/.config/veet ``` --- ## Contributing Contributions are welcome. Please refer to [CONTRIBUTING.md](CONTRIBUTING.md) for local development setup, detector implementation guides, and testing protocols. --- ## License VEET is open-source software licensed under the [MIT License](LICENSE).