# WHERE - Universal System File and Package Mapper A command-line tool that provides comprehensive observability into your Linux system's package installations and file ownership. Built in Rust for performance and reliability. ## Features - **Universal Package Manager Support** - Works with DNF, APT, Flatpak, Snap, and more - **File Ownership Tracking** - Instantly identify which package owns any file - **Package Tree Visualization** - See all files installed by a package in tree format - **Cross-Distribution Compatibility** - Single tool that works across Linux distributions - **High Performance** - Memory-mapped binary format for fast queries ## Installation ```bash git clone cd where cargo build --release ``` ## Usage ### Show Package File Tree Display all files installed by a specific package in a hierarchical tree structure: ```bash # Show files installed by bash package cargo run -- tree --package bash # Show files for Flatpak application cargo run -- tree --package "Signal Desktop (org.signal.Signal)" # Show trees for first 5 packages (demo mode) cargo run -- tree ``` ### Package Information Get detailed information about a specific package: ```bash # Show package details and file tree cargo run -- package bash ``` ### File Ownership Find out which package owns a specific file: ```bash # Check who owns /usr/bin/bash cargo run -- file /usr/bin/bash ``` ### List All Packages Display all installed packages from all managers: ```bash # List all packages from all managers cargo run -- packages # List only DNF packages cargo run -- packages --source dnf # List only Flatpak packages cargo run -- packages --source flatpak ``` ### Find Files Search for files within packages: ```bash # Find all files in bash package cargo run -- find --package bash # Find all files in Flatpak application cargo run -- find --package "Signal Desktop (org.signal.Signal)" ``` ## Example Output ### Package Tree ``` bash 5.2.15-6.fc41 ├── usr/ │ ├── bin/ │ │ └── bash │ └── share/ │ ├── doc/ │ │ └── bash/ │ │ ├── CHANGES │ │ ├── README │ │ └── NEWS │ └── man/ │ └── man1/ │ └── bash.1.gz └── etc/ └── skel/ └── .bashrc Signal Desktop (org.signal.Signal) 7.63.0 ├── /var/lib/flatpak/app/org.signal.Signal/ ├── /var/lib/flatpak/exports/share/applications/org.signal.Signal.desktop └── ~/.var/app/org.signal.Signal/ ``` ### File Ownership ``` /usr/bin/bash is owned by package: bash ~/.var/app/org.signal.Signal is owned by package: org.signal.Signal ``` ### Package Listing ``` DNF packages (1,847 total): bash 5.2.15-6.fc41 glibc 2.37-4.fc38 kernel 6.8.5-301.fc40 Flatpak packages (7 total): Zen (app.zen_browser.zen) 1.14.9b Signal Desktop (org.signal.Signal) 7.63.0 GIMP (org.gimp.GIMP) 3.0.4 ``` ## Architecture The tool is designed with a modular architecture supporting multiple package managers: - **Package Manager Abstraction** - Common interface for DNF, Flatpak, and future managers - **Universal File Tracking** - Track files across traditional packages and sandboxed applications - **Source-Aware Filtering** - Filter by package manager type (DNF, Flatpak, etc.) - **Binary Database Format** - High-performance storage for file metadata (planned) - **CLI Interface** - Clean command-line interface built with Clap - **Tree Visualization** - Hierarchical display of package contents ## Supported Package Managers - ✅ **DNF/RPM** (Fedora, RHEL, CentOS) - Full support - ✅ **Flatpak** (Universal) - Full support - 🚧 **APT** (Debian, Ubuntu) - Coming Soon - 🚧 **Snap** - Coming Soon - 🚧 **Pacman** (Arch Linux) - Coming Soon ## Development Philosophy This tool is part of the **IntentOS** project, focused on creating systems where every component has clear provenance and purpose. The core principle is "know where everything is" - eliminating the entropy and "shrapnel" that accumulates in traditional Linux installations. ## Contributing Built with Rust 2021 edition. Key dependencies: - `clap` - Command line argument parsing - `memmap2` - Memory-mapped file access - `chrono` - Date/time handling ## License [Add your license here] ## Roadmap - [x] DNF/RPM support with file ownership tracking - [x] Flatpak support with sandboxed application tracking - [x] Universal package listing with source filtering - [x] Package file tree visualization - [ ] Snap support - [ ] APT support for Debian/Ubuntu systems - [ ] Real-time filesystem monitoring - [ ] Binary database format for fast queries - [ ] GUI interface - [ ] Integration with IntentOS package manager - [ ] Package installation profiles - [ ] System entropy analysis tools --- *WHERE gives you complete visibility into your system's package installations - because you should know where everything comes from.*