// Types
export type DistroId = 'ubuntu' | 'debian' | 'arch' | 'fedora' | 'opensuse' | 'nix' | 'flatpak' | 'snap' | 'homebrew';

export type Category =
    | 'Web Browsers'
    | 'Communication'
    | 'Dev: Languages'
    | 'Dev: Editors'
    | 'Dev: Tools'
    | 'Terminal'
    | 'CLI Tools'
    | 'Media'
    | 'Creative'
    | 'Gaming'
    | 'Office'
    | 'VPN & Network'
    | 'Security'
    | 'File Sharing'
    | 'System';

export interface Distro {
    id: DistroId;
    name: string;
    iconUrl: string;
    color: string;
    installPrefix: string;
}

export interface AppData {
    id: string;
    name: string;
    description: string;
    category: Category;
    iconUrl: string;
    targets: Partial<Record<DistroId, string>>;
    // Markdown shown when app unavailable (same for all distros)
    unavailableReason?: string;
}

// Icon helpers using Iconify API for comprehensive icon coverage
// Adding ?color=hex to colorize monochrome icons
const icon = (set: string, name: string, color?: string) =>
    `https://api.iconify.design/${set}/${name}.svg${color ? `?color=${encodeURIComponent(color)}` : ''}`;
const si = (name: string, color?: string) => icon('simple-icons', name, color);  // Simple Icons (brands)
const lo = (name: string) => icon('logos', name);         // Logos (already colorful)
const vs = (name: string) => icon('vscode-icons', name);  // VS Code Icons (colorful file types)
const mdi = (name: string, color?: string) => icon('mdi', name, color); // Material Design Icons

export const distros: Distro[] = [
    { id: 'ubuntu', name: 'Ubuntu', iconUrl: si('ubuntu', '#E95420'), color: '#E95420', installPrefix: 'sudo apt install -y' },
    { id: 'debian', name: 'Debian', iconUrl: si('debian', '#A81D33'), color: '#A81D33', installPrefix: 'sudo apt install -y' },
    { id: 'arch', name: 'Arch', iconUrl: si('archlinux', '#1793D1'), color: '#1793D1', installPrefix: 'sudo pacman -S --needed --noconfirm' },
    { id: 'fedora', name: 'Fedora', iconUrl: si('fedora', '#51A2DA'), color: '#51A2DA', installPrefix: 'sudo dnf install -y' },
    { id: 'opensuse', name: 'OpenSUSE', iconUrl: si('opensuse', '#73BA25'), color: '#73BA25', installPrefix: 'sudo zypper install -y' },
    { id: 'nix', name: 'Nix', iconUrl: si('nixos', '#5277C3'), color: '#5277C3', installPrefix: 'nix-env -iA nixpkgs.' },
    { id: 'flatpak', name: 'Flatpak', iconUrl: si('flatpak', '#4A90D9'), color: '#4A90D9', installPrefix: 'flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo && flatpak install flathub -y' },
    { id: 'snap', name: 'Snap', iconUrl: si('snapcraft', '#82BEA0'), color: '#82BEA0', installPrefix: 'sudo snap install' },
    { id: 'homebrew', name: 'Homebrew', iconUrl: si('homebrew', '#FBB040'), color: '#FBB040', installPrefix: 'brew install' },
];

export const apps: AppData[] = [
    // WEB BROWSERS
    { id: 'firefox', name: 'Firefox', description: 'Privacy-focused open-source browser by Mozilla', category: 'Web Browsers', iconUrl: si('firefox', '#FF7139'), targets: { ubuntu: 'firefox', debian: 'firefox-esr', arch: 'firefox', fedora: 'firefox', opensuse: 'MozillaFirefox', nix: 'firefox', flatpak: 'org.mozilla.firefox', snap: 'firefox', homebrew: '--cask firefox' } },
    { id: 'chromium', name: 'Chromium', description: 'Open-source browser that powers Google Chrome', category: 'Web Browsers', iconUrl: 'https://upload.wikimedia.org/wikipedia/commons/2/28/Chromium_Logo.svg', targets: { ubuntu: 'chromium-browser', debian: 'chromium', arch: 'chromium', fedora: 'chromium', opensuse: 'chromium', nix: 'chromium', flatpak: 'org.chromium.Chromium', snap: 'chromium', homebrew: '--cask chromium' } },
    { id: 'brave', name: 'Brave', description: 'Privacy browser with built-in ad/tracker blocker', category: 'Web Browsers', iconUrl: si('brave', '#FB542B'), targets: { arch: 'brave-bin', opensuse: 'brave-browser', nix: 'brave', flatpak: 'com.brave.Browser', snap: 'brave', homebrew: '--cask brave-browser' }, unavailableReason: 'Not in official repos. Use Flatpak/Snap or follow instructions at [brave.com/linux](https://brave.com/linux/).' },
    { id: 'librewolf', name: 'LibreWolf', description: 'Privacy-hardened Firefox fork with telemetry removed', category: 'Web Browsers', iconUrl: si('firefoxbrowser', '#0588D1'), targets: { arch: 'librewolf-bin', opensuse: 'librewolf', nix: 'librewolf', flatpak: 'io.gitlab.librewolf-community', homebrew: '--cask librewolf' }, unavailableReason: 'Not available in official repos. Use [Flatpak](https://flathub.org/en/apps/io.gitlab.librewolf-community) or follow instructions at [librewolf.net/installation](https://librewolf.net/installation/).' },
    { id: 'tor', name: 'Tor Browser', description: 'Anonymous browsing via the Tor network', category: 'Web Browsers', iconUrl: si('torbrowser', '#7D4698'), targets: { ubuntu: 'torbrowser-launcher', arch: 'torbrowser-launcher', fedora: 'torbrowser-launcher', opensuse: 'torbrowser-launcher', nix: 'tor-browser', flatpak: 'org.torproject.torbrowser-launcher', homebrew: '--cask tor-browser' }, unavailableReason: 'Debian requires editing /etc/apt/sources.list adding "contrib" to the end of the line that starts with "deb" or "deb-src" and `sudo apt update` before installing `sudo apt install -y torbrowser-launcher`. Or just download from [torproject.org](https://www.torproject.org/download/).' },
    { id: 'chrome', name: 'Google Chrome', description: 'Most popular web browser by Google', category: 'Web Browsers', iconUrl: lo('chrome'), targets: { arch: 'google-chrome', opensuse: 'google-chrome-stable', nix: 'google-chrome', flatpak: 'com.google.Chrome', homebrew: '--cask google-chrome' }, unavailableReason: 'Not in official repos for Debian/Ubuntu due to licensing. Install via [Flatpak](https://flathub.org/apps/com.google.Chrome), or download the .deb/.rpm directly from [google.com/chrome](https://www.google.com/chrome/).' },
    { id: 'zen', name: 'Zen Browser', description: 'Privacy-focused Firefox fork', category: 'Web Browsers', iconUrl: si('zenbrowser', '#FF7139'), targets: { arch: 'zen-browser-bin', flatpak: 'app.zen_browser.zen', homebrew: '--cask zen' }, unavailableReason: 'Not in most official repos. Use [Flatpak](https://flathub.org/apps/app.zen_browser.zen) or download from [zen-browser.app](https://zen-browser.app).' },
    { id: 'helium', name: 'Helium', description: 'Privacy-focused ungoogled-chromium browser', category: 'Web Browsers', iconUrl: si('googlechrome', '#00D4FF'), targets: { arch: 'helium-browser-bin', homebrew: '--cask helium' }, unavailableReason: 'Only available as AppImage or via AUR. Download from [helium.computer](https://helium.computer/).' },
    { id: 'vivaldi', name: 'Vivaldi', description: 'Highly customizable browser for power users', category: 'Web Browsers', iconUrl: si('vivaldi', '#EF3939'), targets: { arch: 'vivaldi', nix: 'vivaldi', flatpak: 'com.vivaldi.Vivaldi', snap: 'vivaldi', homebrew: '--cask vivaldi' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/apps/com.vivaldi.Vivaldi)/[Snap](https://snapcraft.io/vivaldi) or download from [vivaldi.com](https://vivaldi.com/download/).' },

    // COMMUNICATION
    { id: 'discord', name: 'Discord', description: 'Popular voice, video, and text chat platform', category: 'Communication', iconUrl: si('discord', '#5865F2'), targets: { arch: 'discord', opensuse: 'discord', nix: 'discord', flatpak: 'com.discordapp.Discord', snap: 'discord', homebrew: '--cask discord' }, unavailableReason: 'Not in official repos. Install via [Flatpak](https://flathub.org/en/apps/com.discordapp.Discord) or download from [discord.com/download](https://discord.com/download).' },
    { id: 'vesktop', name: 'Vesktop', description: 'Discord client with Vencord mods built-in', category: 'Communication', iconUrl: 'https://avatars.githubusercontent.com/u/113042587?s=200&v=4', targets: { arch: 'vesktop-bin', nix: 'vesktop', flatpak: 'dev.vencord.Vesktop', homebrew: '--cask vesktop' }, unavailableReason: 'Not available in official repos. Check it on [Flatpak](https://flathub.org/en/apps/dev.vencord.Vesktop) or Download from [vesktop.dev/install/linux](https://vesktop.dev/install/linux/).' },
    { id: 'telegram', name: 'Telegram', description: 'Fast cloud-based messaging with file sharing', category: 'Communication', iconUrl: si('telegram', '#26A5E4'), targets: { arch: 'telegram-desktop', opensuse: 'telegram-desktop', nix: 'telegram-desktop', flatpak: 'org.telegram.desktop', snap: 'telegram-desktop', homebrew: '--cask telegram' }, unavailableReason: 'Recommended to use [Flatpak](https://flathub.org/apps/org.telegram.desktop) for the latest version. Debian 12 (Bookworm) has an older version (4.6.5) via `sudo apt install -y telegram-desktop`. Debian 13 (Trixie) removed the package entirely. Ubuntu 24.04/25.04 repos have outdated versions — use Flatpak or Snap for current releases. Fedora requires [RPM Fusion](https://rpmfusion.org/) repos.' },
    { id: 'signal', name: 'Signal', description: 'Secure end-to-end encrypted messaging app', category: 'Communication', iconUrl: si('signal', '#3A76F0'), targets: { arch: 'signal-desktop', opensuse: 'signal-desktop', nix: 'signal-desktop', flatpak: 'org.signal.Signal', snap: 'signal-desktop', homebrew: '--cask signal' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/org.signal.Signal)/[Snap](https://snapcraft.io/signal-desktop) or follow instructions at [signal.org/download/linux](https://signal.org/download/linux/).' },
    { id: 'slack', name: 'Slack', description: 'Team collaboration and business messaging', category: 'Communication', iconUrl: si('slack', '#4A154B'), targets: { arch: 'slack-desktop', nix: 'slack', flatpak: 'com.slack.Slack', snap: 'slack', homebrew: '--cask slack' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/com.slack.Slack)/[Snap](https://snapcraft.io/slack) or download from [slack.com/downloads/linux](https://slack.com/downloads/linux).' },
    { id: 'zoom', name: 'Zoom', description: 'Popular video conferencing and meetings', category: 'Communication', iconUrl: si('zoom', '#0B5CFF'), targets: { arch: 'zoom', nix: 'zoom-us', flatpak: 'us.zoom.Zoom', snap: 'zoom-client', homebrew: '--cask zoom' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/us.zoom.Zoom)/[Snap](https://snapcraft.io/zoom-client) or download from [zoom.us/download/linux](https://zoom.us/download/linux).' },
    { id: 'thunderbird', name: 'Thunderbird', description: 'Free email client by Mozilla with calendar', category: 'Communication', iconUrl: si('thunderbird', '#0A84FF'), targets: { ubuntu: 'thunderbird', debian: 'thunderbird', arch: 'thunderbird', fedora: 'thunderbird', opensuse: 'MozillaThunderbird', nix: 'thunderbird', flatpak: 'org.mozilla.Thunderbird', snap: 'thunderbird', homebrew: '--cask thunderbird' } },
    { id: 'element', name: 'Element', description: 'Decentralized Matrix chat client with E2E encryption', category: 'Communication', iconUrl: si('element', '#0DBD8B'), targets: { arch: 'element-desktop', opensuse: 'element-desktop', nix: 'element-desktop', flatpak: 'im.riot.Riot', snap: 'element-desktop', homebrew: '--cask element' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/im.riot.Riot)/[Snap](https://snapcraft.io/element-desktop) or follow instructions at [element.io/download#linux](https://element.io/en/download#linux).' },

    // DEV LANGUAGES
    { id: 'python3', name: 'Python 3', description: 'Popular beginner-friendly programming language', category: 'Dev: Languages', iconUrl: si('python', '#3776AB'), targets: { ubuntu: 'python3', debian: 'python3', arch: 'python', fedora: 'python3', opensuse: 'python3', nix: 'python3', homebrew: 'python@3.12' }, unavailableReason: 'Python 3 is a system package and not available via Flatpak or Snap.' },
    { id: 'nodejs', name: 'Node.js', description: 'Server-side JavaScript runtime environment', category: 'Dev: Languages', iconUrl: si('nodedotjs', '#5FA04E'), targets: { ubuntu: 'nodejs', debian: 'nodejs', arch: 'nodejs', fedora: 'nodejs', opensuse: 'nodejs', nix: 'nodejs', snap: 'node --classic', homebrew: 'node' }, unavailableReason: 'Node.js is not available as a Flatpak or Snap.' },
    { id: 'go', name: 'Go', description: 'Fast compiled programming language by Google', category: 'Dev: Languages', iconUrl: si('go', '#00ADD8'), targets: { ubuntu: 'golang', debian: 'golang', arch: 'go', fedora: 'golang', opensuse: 'go', nix: 'go', snap: 'go --classic', homebrew: 'go' }, unavailableReason: 'Go is not available as a Flatpak package.' },
    { id: 'rust', name: 'Rust', description: 'Memory-safe systems programming language', category: 'Dev: Languages', iconUrl: si('rust', '#F74C00'), targets: { arch: 'rustup', fedora: 'rustup', opensuse: 'rustup', nix: 'rustup', snap: 'rustup --classic', homebrew: 'rust' }, unavailableReason: 'Install via [rustup.rs](https://rustup.rs) on Ubuntu and Debian.' },
    { id: 'ruby', name: 'Ruby', description: 'Dynamic language known for elegant syntax', category: 'Dev: Languages', iconUrl: si('ruby', '#CC342D'), targets: { ubuntu: 'ruby', debian: 'ruby', arch: 'ruby', fedora: 'ruby', opensuse: 'ruby', nix: 'ruby', snap: 'ruby --classic', homebrew: 'ruby' }, unavailableReason: 'Ruby is a system package and not available via Flatpak or Snap.' },
    { id: 'php', name: 'PHP', description: 'Popular web server-side scripting language', category: 'Dev: Languages', iconUrl: si('php', '#777BB4'), targets: { ubuntu: 'php', debian: 'php', arch: 'php', fedora: 'php', opensuse: 'php8', nix: 'php', homebrew: 'php' }, unavailableReason: 'PHP is a system package and not available via Flatpak or Snap.' },
    { id: 'openjdk', name: 'OpenJDK', description: 'Open-source Java Development Kit', category: 'Dev: Languages', iconUrl: si('openjdk', '#437291'), targets: { ubuntu: 'openjdk-21-jdk', debian: 'openjdk-17-jdk', arch: 'jdk-openjdk', fedora: 'java-21-openjdk', opensuse: 'java-21-openjdk', nix: 'openjdk', homebrew: 'openjdk' }, unavailableReason: 'System package — not available via Flatpak or Snap. Debian 12 (Bookworm) only has OpenJDK 17: `sudo apt install -y openjdk-17-jdk`. Debian 13 (Trixie) has OpenJDK 21 and 25: `sudo apt install -y openjdk-21-jdk`. Ubuntu 24.04 has versions 8, 11, 17, 21, and 25 available.' },
    { id: 'deno', name: 'Deno', description: 'Secure TypeScript/JavaScript runtime by Node creator', category: 'Dev: Languages', iconUrl: si('deno', '#70FFAF'), targets: { arch: 'deno', opensuse: 'deno', nix: 'deno', homebrew: 'deno' }, unavailableReason: 'Install via `curl -fsSL https://deno.land/install.sh | sh` on other distros.' },
    { id: 'bun', name: 'Bun', description: 'Ultra-fast JavaScript runtime and bundler', category: 'Dev: Languages', iconUrl: icon('logos', 'bun'), targets: { arch: 'bun', nix: 'bun', homebrew: 'bun' }, unavailableReason: 'Not in most package managers. Install via official script: `curl -fsSL https://bun.sh/install | bash`. More info at [bun.sh](https://bun.sh/).' },
    { id: 'npm', name: 'npm', description: 'JavaScript package manager', category: 'Dev: Languages', iconUrl: lo('npm'), targets: { ubuntu: 'npm', debian: 'npm', arch: 'npm', fedora: 'nodejs-npm', opensuse: 'npm24', nix: 'nodejs', snap: 'node --classic', homebrew: 'node' }, unavailableReason: 'Usually installed with Node.js. See [nodejs.org](https://nodejs.org/).' },
    { id: 'pnpm', name: 'pnpm', description: 'Fast, disk space efficient package manager', category: 'Dev: Languages', iconUrl: lo('pnpm'), targets: { arch: 'pnpm', fedora: 'pnpm', opensuse: 'pnpm', nix: 'pnpm', homebrew: 'pnpm' }, unavailableReason: 'Install via `curl -fsSL https://get.pnpm.io/install.sh | sh`. See [pnpm.io](https://pnpm.io/installation).' },
    { id: 'yarn', name: 'yarn', description: 'JavaScript package manager', category: 'Dev: Languages', iconUrl: lo('yarn'), targets: { ubuntu: 'yarnpkg', debian: 'yarnpkg', arch: 'yarn', fedora: 'yarnpkg', opensuse: 'yarn', nix: 'yarn', homebrew: 'yarn' }, unavailableReason: 'Install via `npm install --global yarn`. See [yarnpkg.com](https://yarnpkg.com/getting-started/install).' },

    // DEV EDITORS
    { id: 'vscode', name: 'VS Code', description: 'Most popular extensible code editor by Microsoft', category: 'Dev: Editors', iconUrl: lo('visual-studio-code'), targets: { arch: 'code', nix: 'vscode', flatpak: 'com.visualstudio.code', snap: 'code --classic', homebrew: '--cask visual-studio-code' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/com.visualstudio.code)/[Snap](https://snapcraft.io/code) or download from [code.visualstudio.com](https://code.visualstudio.com/Download).' },
    { id: 'vscodium', name: 'VSCodium', description: 'Community-built VS Code without Microsoft telemetry', category: 'Dev: Editors', iconUrl: si('vscodium', '#2F80ED'), targets: { arch: 'vscodium-bin', nix: 'vscodium', flatpak: 'com.vscodium.codium', snap: 'codium --classic', homebrew: '--cask vscodium' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/com.vscodium.codium)/[Snap](https://snapcraft.io/codium) or follow instructions at [vscodium.com](https://vscodium.com/#install).' },
    { id: 'vim', name: 'Vim', description: 'The classic modal text editor that started it all', category: 'Dev: Editors', iconUrl: si('vim', '#019733'), targets: { ubuntu: 'vim', debian: 'vim', arch: 'vim', fedora: 'vim-enhanced', opensuse: 'vim', nix: 'vim', flatpak: 'org.vim.Vim', snap: 'vim-editor', homebrew: 'vim' } },
    { id: 'neovim', name: 'Neovim', description: 'Modernized Vim with better extensibility', category: 'Dev: Editors', iconUrl: si('neovim', '#57A143'), targets: { ubuntu: 'neovim', debian: 'neovim', arch: 'neovim', fedora: 'neovim', opensuse: 'neovim', nix: 'neovim', flatpak: 'com.neovim.Neovim', snap: 'nvim --classic', homebrew: 'neovim' } },
    { id: 'helix', name: 'Helix', description: 'Modal editor with LSP and tree-sitter built-in', category: 'Dev: Editors', iconUrl: mdi('dna', '#4E2F7F'), targets: { arch: 'helix', fedora: 'helix', opensuse: 'helix', nix: 'helix', flatpak: 'com.helix-editor.Helix', snap: 'helix --classic', homebrew: 'helix' }, unavailableReason: 'Not in official Debian/Ubuntu repos. For Ubuntu, add the PPA: `sudo add-apt-repository ppa:maveonair/helix-editor && sudo apt update && sudo apt install helix`. For Debian, download .deb from [GitHub releases](https://github.com/helix-editor/helix/releases).' },
    { id: "micro", name: "Micro", description: "Easy-to-use terminal text editor like nano", category: "Dev: Editors", iconUrl: si("microeditor", "#2E3192"), targets: { arch: "micro", ubuntu: "micro", debian: "micro", fedora: "micro", opensuse: "micro-editor", nix: "micro-editor", flatpak: "io.github.zyedidia.micro", snap: "micro --classic", homebrew: 'micro' } },
    { id: 'zed', name: 'Zed', description: 'High-performance editor with real-time collaboration', category: 'Dev: Editors', iconUrl: si('zedindustries', '#084CCF'), targets: { arch: 'zed', nix: 'zed-editor', flatpak: 'dev.zed.Zed', homebrew: '--cask zed' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/dev.zed.Zed) or see [zed.dev/docs/linux](https://zed.dev/docs/linux#other-ways-to-install-zed-on-linux) for other methods.' },
    { id: 'sublime', name: 'Sublime Text', description: 'Lightning-fast proprietary text editor', category: 'Dev: Editors', iconUrl: si('sublimetext', '#FF9800'), targets: { arch: 'sublime-text-4', nix: 'sublime', flatpak: 'com.sublimetext.three', snap: 'sublime-text --classic', homebrew: '--cask sublime-text' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/com.sublimetext.three)/[Snap](https://snapcraft.io/sublime-text) or follow instructions at [sublimetext.com/docs/linux_repositories](https://www.sublimetext.com/docs/linux_repositories.html).' },
    { id: 'arduino', name: 'Arduino IDE', description: 'IDE for Arduino microcontroller development', category: 'Dev: Editors', iconUrl: si('arduino', '#00878F'), targets: { ubuntu: 'arduino', debian: 'arduino', arch: 'arduino', fedora: 'arduino', nix: 'arduino-ide', flatpak: 'cc.arduino.IDE2', snap: 'arduino', homebrew: '--cask arduino-ide' }, unavailableReason: 'Arduino IDE is not in official openSUSE repos. Use [Flatpak](https://flathub.org/en/apps/cc.arduino.IDE2) or [Snap](https://snapcraft.io/arduino) instead.' },
    { id: 'cursor', name: 'Cursor', description: 'AI-powered code editor based on VS Code', category: 'Dev: Editors', iconUrl: si('cursor', '#232020ff'), targets: { arch: 'cursor-bin', nix: 'code-cursor', homebrew: '--cask cursor' }, unavailableReason: 'Only available via [AUR](https://aur.archlinux.org/packages/cursor-bin) or Nix. Download from [cursor.com/download](https://cursor.com/download).' },
    { id: 'kate', name: 'Kate', description: 'Feature-rich text editor by KDE with syntax highlighting', category: 'Dev: Editors', iconUrl: si('kde', '#1D99F3'), targets: { ubuntu: 'kate', debian: 'kate', arch: 'kate', fedora: 'kate', opensuse: 'kate', nix: 'kdePackages.kate', flatpak: 'org.kde.kate', snap: 'kate --classic', homebrew: '--cask kate' } },
    { id: 'emacs', name: 'Emacs', description: 'Extensible, customizable, free/libre text editor', category: 'Dev: Editors', iconUrl: si('gnuemacs', '#7F5AB6'), targets: { ubuntu: 'emacs', debian: 'emacs', arch: 'emacs', fedora: 'emacs', opensuse: 'emacs', nix: 'emacs', flatpak: 'org.gnu.emacs', snap: 'emacs --classic', homebrew: '--cask emacs-app' } },

    // DEV TOOLS
    { id: 'git', name: 'Git', description: 'Industry-standard distributed version control', category: 'Dev: Tools', iconUrl: si('git', '#F05032'), targets: { ubuntu: 'git', debian: 'git', arch: 'git', fedora: 'git', opensuse: 'git', nix: 'git', homebrew: 'git' }, unavailableReason: 'Git is a system package and not available via Flatpak or Snap.' },
    { id: 'gitlfs', name: 'Git LFS', description: 'Git extension for versioning large files', category: 'Dev: Tools', iconUrl: si('git', '#F05032'), targets: { ubuntu: 'git-lfs', debian: 'git-lfs', arch: 'git-lfs', fedora: 'git-lfs', opensuse: 'git-lfs', nix: 'git-lfs', homebrew: 'git-lfs' }, unavailableReason: 'Git LFS is a system package and not available via Flatpak or Snap.' },
    { id: 'lazygit', name: 'LazyGit', description: 'Simple terminal UI for git commands', category: 'Dev: Tools', iconUrl: si('git', '#F05032'), targets: { ubuntu: 'lazygit', debian: 'lazygit', arch: 'lazygit', fedora: 'lazygit', opensuse: 'lazygit', nix: 'lazygit', homebrew: 'lazygit' } },
    { id: 'docker', name: 'Docker', description: 'Most popular container platform for app deployment', category: 'Dev: Tools', iconUrl: si('docker', '#2496ED'), targets: { ubuntu: 'docker.io', debian: 'docker.io', arch: 'docker', fedora: 'docker', opensuse: 'docker', nix: 'docker', snap: 'docker', homebrew: 'docker' }, unavailableReason: 'Docker is a system service and not available as a Flatpak.' },
    { id: 'podman', name: 'Podman', description: 'Rootless container engine, Docker alternative', category: 'Dev: Tools', iconUrl: si('podman', '#892CA0'), targets: { ubuntu: 'podman', debian: 'podman', arch: 'podman', fedora: 'podman', opensuse: 'podman', nix: 'podman', homebrew: 'podman' }, unavailableReason: 'Podman is a system package and not available via Flatpak or Snap.' },
    { id: 'kubectl', name: 'kubectl', description: 'Command-line tool for Kubernetes clusters', category: 'Dev: Tools', iconUrl: si('kubernetes', '#326CE5'), targets: { arch: 'kubectl', fedora: 'kubernetes-client', opensuse: 'kubectl', nix: 'kubectl', snap: 'kubectl --classic', homebrew: 'kubectl' }, unavailableReason: 'kubectl is not in official Ubuntu or Debian repos. Use Snap or install via [kubernetes.io](https://kubernetes.io/docs/tasks/tools/).' },
    { id: 'vagrant', name: 'Vagrant', description: 'Build and manage portable dev environments', category: 'Dev: Tools', iconUrl: si('vagrant', '#1868F2'), targets: { debian: 'vagrant', arch: 'vagrant', fedora: 'vagrant', opensuse: 'vagrant', nix: 'vagrant', homebrew: '--cask vagrant' }, unavailableReason: 'Vagrant is a system package and not available via Flatpak or Snap. Follow instructions at [developer.hashicorp.com/vagrant/install](https://developer.hashicorp.com/vagrant/install).' },
    { id: 'virtualbox', name: 'VirtualBox', description: 'Free cross-platform virtual machine manager', category: 'Dev: Tools', iconUrl: si('virtualbox', '#183A61'), targets: { ubuntu: 'virtualbox', arch: 'virtualbox', opensuse: 'virtualbox', nix: 'virtualbox', homebrew: '--cask virtualbox' }, unavailableReason: 'VirtualBox requires kernel modules and is not available via Flatpak or Snap. Debian user follow instructions at [wiki.debian.org/VirtualBox](https://wiki.debian.org/VirtualBox).' },
    { id: 'gnomeboxes', name: 'GNOME Boxes', description: 'Simple virtual machine app for GNOME', category: 'Dev: Tools', iconUrl: si('gnome', '#4A86CF'), targets: { ubuntu: 'gnome-boxes', debian: 'gnome-boxes', arch: 'gnome-boxes', fedora: 'gnome-boxes', opensuse: 'gnome-boxes', nix: 'gnome-boxes', flatpak: 'org.gnome.Boxes' }, unavailableReason: 'GNOME Boxes is not available as a Snap package.' },
    { id: 'dbeaver', name: 'DBeaver', description: 'Universal database management tool', category: 'Dev: Tools', iconUrl: si('dbeaver', '#382923'), targets: { arch: 'dbeaver', nix: 'dbeaver-bin', flatpak: 'io.dbeaver.DBeaverCommunity', homebrew: '--cask dbeaver-community' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/io.dbeaver.DBeaverCommunity) or download from [dbeaver.io/download](https://dbeaver.io/download/).' },
    { id: 'meld', name: 'Meld', description: 'Visual diff and merge tool for files', category: 'Dev: Tools', iconUrl: 'https://meldmerge.org/images/meld.svg', targets: { ubuntu: 'meld', debian: 'meld', arch: 'meld', fedora: 'meld', opensuse: 'meld', nix: 'meld', flatpak: 'org.gnome.meld', homebrew: '--cask meld' }, unavailableReason: 'Meld is not available as a Snap package.' },
    { id: 'wireshark', name: 'Wireshark', description: 'Network protocol analyzer and packet capture', category: 'Dev: Tools', iconUrl: si('wireshark', '#1679A7'), targets: { ubuntu: 'wireshark', debian: 'wireshark', arch: 'wireshark-qt', fedora: 'wireshark', opensuse: 'wireshark', nix: 'wireshark', flatpak: 'org.wireshark.Wireshark', homebrew: '--cask wireshark-app' }, unavailableReason: 'Wireshark is not available as a Snap package.' },
    { id: 'postman', name: 'Postman', description: 'Popular API testing and development platform', category: 'Dev: Tools', iconUrl: si('postman', '#FF6C37'), targets: { arch: 'postman-bin', nix: 'postman', flatpak: 'com.getpostman.Postman', snap: 'postman', homebrew: '--cask postman' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/com.getpostman.Postman)/[Snap](https://snapcraft.io/postman) or download from [postman.com/downloads](https://www.postman.com/downloads/).' },
    { id: 'bruno', name: 'Bruno', description: 'Offline-first open-source API client', category: 'Dev: Tools', iconUrl: mdi('api', '#F4A62A'), targets: { arch: 'bruno-bin', nix: 'bruno', flatpak: 'com.usebruno.Bruno', snap: 'bruno', homebrew: '--cask bruno' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/apps/com.usebruno.Bruno)/[Snap](https://snapcraft.io/bruno) or download from [usebruno.com](https://www.usebruno.com/downloads).' },
    { id: 'hoppscotch', name: 'Hoppscotch', description: 'Open-source API development ecosystem', category: 'Dev: Tools', iconUrl: si('hoppscotch', '#47C0A7'), targets: { arch: 'hoppscotch-bin', nix: 'hoppscotch', homebrew: '--cask hoppscotch' }, unavailableReason: 'Use [AUR](https://aur.archlinux.org/packages/hoppscotch-bin) or download from [hoppscotch.io](https://hoppscotch.io/download).' },
    { id: 'yaak', name: 'Yaak', description: 'Modern desktop API client for REST and GraphQL', category: 'Dev: Tools', iconUrl: 'https://avatars.githubusercontent.com/u/150165049?s=48&v=4', targets: { arch: 'yaak-bin', nix: 'yaak', homebrew: '--cask yaak' }, unavailableReason: 'Not in most official repos. Download .deb/.rpm or AppImage from [yaak.app](https://yaak.app/download).' },
    { id: 'virtmanager', name: 'Virt Manager', description: 'Desktop app for managing KVM virtual machines', category: 'Dev: Tools', iconUrl: si('qemu', '#FF6600'), targets: { ubuntu: 'virt-manager', debian: 'virt-manager', arch: 'virt-manager', fedora: 'virt-manager', opensuse: 'virt-manager', nix: 'virt-manager', homebrew: 'virt-manager' }, unavailableReason: 'Virt Manager requires system access and is not available via Flatpak or Snap.' },
    { id: 'imhex', name: 'ImHex', description: 'Feature-rich hex editor for reverse engineering', category: 'Dev: Tools', iconUrl: mdi('hexadecimal', '#4FC1E8'), targets: { arch: 'imhex-bin', fedora: 'imhex', nix: 'imhex', flatpak: 'net.werwolv.ImHex', homebrew: '--cask imhex' }, unavailableReason: 'Not in most repos. Use [Flatpak](https://flathub.org/apps/net.werwolv.ImHex) or download from [imhex.werwolv.net](https://imhex.werwolv.net/).' },
    { id: 'cmake', name: 'CMake', description: 'Cross-platform build system generator', category: 'Dev: Tools', iconUrl: vs('file-type-cmake'), targets: { ubuntu: 'cmake', debian: 'cmake', arch: 'cmake', fedora: 'cmake', opensuse: 'cmake', nix: 'cmake', snap: 'cmake --classic', homebrew: 'cmake' }, unavailableReason: 'CMake is not available as a Flatpak package.' },

    // TERMINAL
    { id: 'zsh', name: 'Zsh', description: 'Powerful shell with advanced completion features', category: 'Terminal', iconUrl: si('zsh', '#F15A24'), targets: { ubuntu: 'zsh', debian: 'zsh', arch: 'zsh', fedora: 'zsh', opensuse: 'zsh', nix: 'zsh', homebrew: 'zsh' }, unavailableReason: 'Zsh is a system shell and not available via Flatpak or Snap.' },
    { id: 'ohmyzsh', name: 'Oh My Zsh', description: 'Zsh configuration framework with plugins/themes', category: 'Terminal', iconUrl: si('zsh', '#F15A24'), targets: { nix: 'oh-my-zsh' }, unavailableReason: 'Install via `sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"`. See [ohmyzsh wiki](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH).' },
    { id: 'fish', name: 'Fish', description: 'Smart and user-friendly interactive shell', category: 'Terminal', iconUrl: vs('file-type-shell'), targets: { ubuntu: 'fish', debian: 'fish', arch: 'fish', fedora: 'fish', opensuse: 'fish', nix: 'fish', homebrew: 'fish' }, unavailableReason: 'Fish is a system shell and not available via Flatpak or Snap.' },
    { id: 'starship', name: 'Starship', description: 'Cross-shell customizable command prompt', category: 'Terminal', iconUrl: si('starship', '#DD0B78'), targets: { ubuntu: 'starship', debian: 'starship', arch: 'starship', opensuse: 'starship', nix: 'starship', homebrew: 'starship' }, unavailableReason: 'Not in Fedora repos. Install via `curl -sS https://starship.rs/install.sh | sh` or see [starship.rs](https://starship.rs/).' },
    { id: 'alacritty', name: 'Alacritty', description: 'Blazing fast GPU-accelerated terminal emulator', category: 'Terminal', iconUrl: si('alacritty', '#F46D01'), targets: { ubuntu: 'alacritty', debian: 'alacritty', arch: 'alacritty', fedora: 'alacritty', opensuse: 'alacritty', nix: 'alacritty', snap: 'alacritty --classic', homebrew: '--cask alacritty' }, unavailableReason: 'Alacritty is not available as a Flatpak package.' },
    { id: 'kitty', name: 'Kitty', description: 'Fast GPU-based terminal with advanced features', category: 'Terminal', iconUrl: mdi('cat', '#ea5e5e'), targets: { ubuntu: 'kitty', debian: 'kitty', arch: 'kitty', fedora: 'kitty', opensuse: 'kitty', nix: 'kitty', homebrew: '--cask kitty' }, unavailableReason: 'Kitty is not available via Flatpak or Snap.' },
    { id: 'wezterm', name: 'WezTerm', description: 'GPU-accelerated terminal with Lua configuration', category: 'Terminal', iconUrl: si('wezterm', '#4E49EE'), targets: { arch: 'wezterm', opensuse: 'wezterm', nix: 'wezterm', flatpak: 'org.wezfurlong.wezterm', homebrew: '--cask wezterm' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/en/apps/org.wezfurlong.wezterm) or follow instructions at [wezfurlong.org/wezterm/install](https://wezfurlong.org/wezterm/install/linux.html).' },
    { id: 'foot', name: 'Foot', description: 'Lightweight Wayland-native terminal emulator', category: 'Terminal', iconUrl: si('wayland', '#FFBC00'), targets: { ubuntu: 'foot', debian: 'foot', arch: 'foot', fedora: 'foot', opensuse: 'foot', nix: 'foot', homebrew: 'foot' }, unavailableReason: 'Foot is a Wayland-only terminal and not available via Flatpak or Snap.' },
    { id: 'ghostty', name: 'Ghostty', description: 'Native GPU-accelerated terminal by Mitchell Hashimoto', category: 'Terminal', iconUrl: mdi('ghost-outline', '#6E56CF'), targets: { arch: 'ghostty', nix: 'ghostty', homebrew: '--cask ghostty' }, unavailableReason: 'Not in most repos. See [official binaries](https://ghostty.org/docs/install/binary#linux-(official)) or build from source.' },

    // CLI TOOLS
    { id: 'btop', name: 'btop', description: 'Beautiful terminal resource monitor with graphs', category: 'CLI Tools', iconUrl: mdi('monitor-dashboard', '#FF6B6B'), targets: { ubuntu: 'btop', debian: 'btop', arch: 'btop', fedora: 'btop', opensuse: 'btop', nix: 'btop', homebrew: 'btop' }, unavailableReason: 'btop is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'htop', name: 'htop', description: 'Interactive process viewer and system monitor', category: 'CLI Tools', iconUrl: mdi('chart-bar', '#4CE026'), targets: { ubuntu: 'htop', debian: 'htop', arch: 'htop', fedora: 'htop', opensuse: 'htop', nix: 'htop', snap: 'htop', homebrew: 'htop' }, unavailableReason: 'htop is a CLI tool and not available as a Flatpak.' },
    { id: 'fastfetch', name: 'fastfetch', description: 'Fast neofetch-like system info tool', category: 'CLI Tools', iconUrl: mdi('console', '#57F287'), targets: { ubuntu: 'fastfetch', debian: 'fastfetch', fedora: 'fastfetch', arch: 'fastfetch', opensuse: 'fastfetch', nix: 'fastfetch', homebrew: 'fastfetch' }, unavailableReason: 'CLI-only (no Flatpak/Snap).' },
    { id: 'eza', name: 'eza', description: 'Modern ls replacement with colors and icons', category: 'CLI Tools', iconUrl: mdi('format-list-bulleted', '#F9E64F'), targets: { ubuntu: 'eza', debian: 'eza', arch: 'eza', opensuse: 'eza', nix: 'eza', homebrew: 'eza' }, unavailableReason: 'Unmaintained on Fedora; removed from repos. CLI-only (no Flatpak/Snap).' },
    { id: 'bat', name: 'bat', description: 'Cat clone with syntax highlighting and git integration', category: 'CLI Tools', iconUrl: mdi('file-code-outline', '#A6E22E'), targets: { ubuntu: 'bat', debian: 'bat', arch: 'bat', fedora: 'bat', opensuse: 'bat', nix: 'bat', homebrew: 'bat' }, unavailableReason: 'bat is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'fzf', name: 'fzf', description: 'Lightning-fast command-line fuzzy finder', category: 'CLI Tools', iconUrl: mdi('magnify', '#FF0055'), targets: { ubuntu: 'fzf', debian: 'fzf', arch: 'fzf', fedora: 'fzf', opensuse: 'fzf', nix: 'fzf', homebrew: 'fzf' }, unavailableReason: 'fzf is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'ripgrep', name: 'ripgrep', description: 'Ultra-fast recursive search respecting .gitignore', category: 'CLI Tools', iconUrl: mdi('text-search', '#C0C0C0'), targets: { ubuntu: 'ripgrep', debian: 'ripgrep', arch: 'ripgrep', fedora: 'ripgrep', opensuse: 'ripgrep', nix: 'ripgrep', homebrew: 'ripgrep' }, unavailableReason: 'ripgrep is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'zoxide', name: 'zoxide', description: 'Smart cd that learns your habits', category: 'CLI Tools', iconUrl: mdi('folder-move-outline', '#FF9F43'), targets: { ubuntu: 'zoxide', debian: 'zoxide', arch: 'zoxide', fedora: 'zoxide', opensuse: 'zoxide', nix: 'zoxide', homebrew: 'zoxide' }, unavailableReason: 'zoxide is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'tldr', name: 'tldr', description: 'Simplified community-driven man pages', category: 'CLI Tools', iconUrl: mdi('book-open-page-variant-outline', '#2D9CDB'), targets: { arch: 'tldr', fedora: 'tldr', nix: 'tldr', homebrew: 'tldr' }, unavailableReason: 'tldr is a CLI tool and not available on openSUSE, Flatpak, or Snap. For Debian 12 (Bookworm) or older and Ubuntu 24.04 or older use `sudo apt install -y tldr`' },
    { id: 'wget', name: 'wget', description: 'Command-line file downloader for HTTP/FTP', category: 'CLI Tools', iconUrl: mdi('download', '#3FA75E'), targets: { ubuntu: 'wget', debian: 'wget', arch: 'wget', fedora: 'wget', opensuse: 'wget', nix: 'wget', homebrew: 'wget' }, unavailableReason: 'wget is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'curl', name: 'curl', description: 'Command-line tool for transferring data via URLs', category: 'CLI Tools', iconUrl: si('curl', '#073551'), targets: { ubuntu: 'curl', debian: 'curl', arch: 'curl', fedora: 'curl', opensuse: 'curl', nix: 'curl', homebrew: 'curl' }, unavailableReason: 'curl is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'aria2', name: 'aria2', description: 'Multi-protocol, multi-source download accelerator', category: 'CLI Tools', iconUrl: mdi('download-multiple', '#F94144'), targets: { ubuntu: 'aria2', debian: 'aria2', arch: 'aria2', fedora: 'aria2', opensuse: 'aria2', nix: 'aria2', homebrew: 'aria2' }, unavailableReason: 'aria2 is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'yazi', name: 'yazi', description: 'Blazing fast terminal file manager in Rust', category: 'CLI Tools', iconUrl: mdi('folder-table-outline', '#F3B329'), targets: { arch: 'yazi', opensuse: 'yazi', nix: 'yazi', homebrew: 'yazi' }, unavailableReason: 'Not in most repos. Install via [cargo](https://crates.io/crates/yazi) or download from [github.com/sxyazi/yazi](https://github.com/sxyazi/yazi/releases).' },
    { id: 'ranger', name: 'ranger', description: 'Vim-inspired terminal file manager with previews', category: 'CLI Tools', iconUrl: mdi('folder-key-outline', '#FFFFFF'), targets: { ubuntu: 'ranger', debian: 'ranger', arch: 'ranger', fedora: 'ranger', opensuse: 'ranger', nix: 'ranger', homebrew: 'ranger' }, unavailableReason: 'ranger is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'ncdu', name: 'ncdu', description: 'NCurses-based disk usage analyzer', category: 'CLI Tools', iconUrl: mdi('chart-arc', '#00ADEE'), targets: { ubuntu: 'ncdu', debian: 'ncdu', arch: 'ncdu', fedora: 'ncdu', opensuse: 'ncdu', nix: 'ncdu', homebrew: 'ncdu' }, unavailableReason: 'ncdu is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'fd', name: 'fd', description: 'Simple, fast alternative to find command', category: 'CLI Tools', iconUrl: mdi('file-search-outline', '#56BE89'), targets: { ubuntu: 'fd-find', debian: 'fd-find', arch: 'fd', fedora: 'fd-find', opensuse: 'fd', nix: 'fd', homebrew: 'fd' }, unavailableReason: 'fd is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'tmux', name: 'tmux', description: 'Terminal session manager and multiplexer', category: 'CLI Tools', iconUrl: si('tmux', '#1BB91F'), targets: { ubuntu: 'tmux', debian: 'tmux', arch: 'tmux', fedora: 'tmux', opensuse: 'tmux', nix: 'tmux', homebrew: 'tmux' }, unavailableReason: 'tmux is a CLI tool and not available via Flatpak or Snap.' },

    { id: 'zellij', name: 'Zellij', description: 'Modern terminal multiplexer with layout system', category: 'CLI Tools', iconUrl: mdi('view-split-vertical', '#A48CF4'), targets: { ubuntu: 'zellij', arch: 'zellij', fedora: 'zellij', opensuse: 'zellij', nix: 'zellij', homebrew: 'zellij' }, unavailableReason: 'Not in Debian repos. Install via `cargo install zellij` or see [zellij.dev](https://zellij.dev/documentation/installation.html).' },
    { id: 'superfile', name: 'Superfile', description: 'Modern terminal file manager with TUI', category: 'CLI Tools', iconUrl: mdi('folder-multiple', '#FFD93D'), targets: { arch: 'superfile', nix: 'superfile', homebrew: 'superfile' }, unavailableReason: 'Install via `go install` or see [superfile.dev](https://superfile.dev/getting-started/installation/).' },
    { id: 'rsync', name: 'rsync', description: 'Fast incremental file transfer and sync tool', category: 'CLI Tools', iconUrl: mdi('sync', '#2ECC71'), targets: { ubuntu: 'rsync', debian: 'rsync', arch: 'rsync', fedora: 'rsync', opensuse: 'rsync', nix: 'rsync', homebrew: 'rsync' }, unavailableReason: 'rsync is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'uv', name: 'uv', description: 'Fast Python package manager', category: 'Dev: Languages', iconUrl: si('astral', '#5C4EE5'), targets: { arch: 'uv', nix: 'uv', homebrew: 'uv' }, unavailableReason: 'Install via `curl -LsSf https://astral.sh/uv/install.sh | sh`. See [installation guide](https://docs.astral.sh/uv/getting-started/installation/).' },

    // MEDIA
    { id: 'vlc', name: 'VLC', description: 'Universal media player that plays any format', category: 'Media', iconUrl: si('vlcmediaplayer', '#FF8800'), targets: { ubuntu: 'vlc', debian: 'vlc', arch: 'vlc', fedora: 'vlc', opensuse: 'vlc', nix: 'vlc', flatpak: 'org.videolan.VLC', snap: 'vlc', homebrew: '--cask vlc' } },
    { id: 'mpv', name: 'mpv', description: 'Lightweight and highly configurable media player', category: 'Media', iconUrl: si('mpv', '#691F69'), targets: { ubuntu: 'mpv', debian: 'mpv', arch: 'mpv', fedora: 'mpv', opensuse: 'mpv', nix: 'mpv', flatpak: 'io.mpv.Mpv', snap: 'mpv', homebrew: 'mpv' } },
    { id: 'celluloid', name: 'Celluloid', description: 'Simple GTK frontend for the mpv player', category: 'Media', iconUrl: si('gnome', '#4A86CF'), targets: { ubuntu: 'celluloid', debian: 'celluloid', arch: 'celluloid', fedora: 'celluloid', opensuse: 'celluloid', nix: 'celluloid', flatpak: 'io.github.celluloid_player.Celluloid' }, unavailableReason: 'Celluloid is not available as a Snap package.' },
    { id: 'strawberry', name: 'Strawberry', description: 'Music player for local audio collection', category: 'Media', iconUrl: 'https://www.strawberrymusicplayer.org/pictures/strawberry64.png', targets: { ubuntu: 'strawberry', debian: 'strawberry', arch: 'strawberry', fedora: 'strawberry', opensuse: 'strawberry', nix: 'strawberry', flatpak: 'org.strawberrymusicplayer.strawberry' }, unavailableReason: 'Strawberry is not available as a Snap package.' },
    { id: 'spotify', name: 'Spotify', description: 'Popular music streaming service', category: 'Media', iconUrl: si('spotify', '#1DB954'), targets: { arch: 'spotify', nix: 'spotify', flatpak: 'com.spotify.Client', snap: 'spotify', homebrew: '--cask spotify' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/apps/details/com.spotify.Client) or [Snap](https://snapcraft.io/spotify) or follow instructions at [spotify.com/download/linux](https://www.spotify.com/download/linux/).' },
    { id: 'audacity', name: 'Audacity', description: 'Free open-source audio editor and recorder', category: 'Media', iconUrl: si('audacity', '#0000CC'), targets: { ubuntu: 'audacity', debian: 'audacity', arch: 'audacity', fedora: 'audacity', opensuse: 'audacity', nix: 'audacity', flatpak: 'org.audacityteam.Audacity', snap: 'audacity', homebrew: '--cask audacity' } },
    { id: 'kdenlive', name: 'Kdenlive', description: 'Powerful open-source video editor by KDE', category: 'Media', iconUrl: si('kdenlive', '#527EB2'), targets: { ubuntu: 'kdenlive', debian: 'kdenlive', arch: 'kdenlive', fedora: 'kdenlive', opensuse: 'kdenlive', nix: 'kdenlive', flatpak: 'org.kde.kdenlive', snap: 'kdenlive', homebrew: '--cask kdenlive' } },
    { id: 'obs', name: 'OBS Studio', description: 'Industry-standard streaming and recording software', category: 'Media', iconUrl: si('obsstudio', '#A3A3A3'), targets: { ubuntu: 'obs-studio', debian: 'obs-studio', arch: 'obs-studio', fedora: 'obs-studio', opensuse: 'obs-studio', nix: 'obs-studio', flatpak: 'com.obsproject.Studio', snap: 'obs-studio', homebrew: '--cask obs' } },
    { id: 'ffmpeg', name: 'FFmpeg', description: 'Swiss army knife of video/audio processing', category: 'Media', iconUrl: si('ffmpeg', '#007808'), targets: { ubuntu: 'ffmpeg', debian: 'ffmpeg', arch: 'ffmpeg', fedora: 'ffmpeg', opensuse: 'ffmpeg', nix: 'ffmpeg', homebrew: 'ffmpeg' }, unavailableReason: 'FFmpeg is a system library and not available via Flatpak or Snap.' },
    { id: 'handbrake', name: 'HandBrake', description: 'Open-source video transcoder for any format', category: 'Media', iconUrl: mdi('video-vintage', '#F83262'), targets: { ubuntu: 'handbrake', debian: 'handbrake', arch: 'handbrake', opensuse: 'handbrake', nix: 'handbrake', flatpak: 'fr.handbrake.ghb', snap: 'handbrake-jz', homebrew: 'handbrake' }, unavailableReason: 'HandBrake is not in official Fedora repos. Use [Flatpak](https://flathub.org/apps/details/fr.handbrake.ghb) or [Snap](https://snapcraft.io/handbrake-jz) instead.' },
    { id: 'stremio', name: 'Stremio', description: 'Modern media center with streaming addons', category: 'Media', iconUrl: si('stremio', '#8A5AAB'), targets: { arch: 'stremio', nix: 'stremio', flatpak: 'com.stremio.Stremio', homebrew: '--cask stremio' }, unavailableReason: 'Only available via [AUR](https://aur.archlinux.org/packages/stremio) or [Flatpak](https://flathub.org/apps/details/com.stremio.Stremio), see [stremio.com/downloads](https://www.stremio.com/downloads) for more info.' },
    { id: 'kodi', name: 'Kodi', description: 'Open-source home theater and media center', category: 'Media', iconUrl: si('kodi', '#17B2E7'), targets: { ubuntu: 'kodi', debian: 'kodi', arch: 'kodi', fedora: 'kodi', opensuse: 'kodi', nix: 'kodi', flatpak: 'tv.kodi.Kodi', snap: 'kodi', homebrew: '--cask kodi' } },
    { id: 'haruna', name: 'Haruna', description: 'Modern Qt/QML video player powered by mpv', category: 'Media', iconUrl: si('hevy', '#A3A3A3'), targets: { ubuntu: 'haruna', debian: 'haruna', arch: 'haruna', fedora: 'haruna', opensuse: 'haruna', nix: 'haruna', flatpak: 'org.kde.haruna', snap: 'haruna' } },
    { id: 'shortwave', name: 'Shortwave', description: 'Listen to internet radio stations worldwide', category: 'Media', iconUrl: si('playerfm', '#478ECC'), targets: { ubuntu: 'shortwave', debian: 'shortwave', arch: 'shortwave', fedora: 'shortwave', opensuse: 'shortwave', nix: 'shortwave', flatpak: 'de.haeckerfelix.Shortwave', snap: 'shortwave', homebrew: '--cask shortwave' } },
    { id: 'parabolic', name: 'Parabolic', description: 'Simple YouTube video and audio downloader', category: 'Media', iconUrl: 'https://dl.flathub.org/media/org/nickvision/tubeconverter/fdcc995607100afabed728e47cfd5d99/icons/128x128/org.nickvision.tubeconverter.png', targets: { nix: 'parabolic', flatpak: 'org.nickvision.tubeconverter', snap: 'tube-converter' }, unavailableReason: 'Not in most official repos. Use [Flatpak](https://flathub.org/apps/org.nickvision.tubeconverter) or [Snap](https://snapcraft.io/tube-converter).' },

    // CREATIVE
    { id: 'blender', name: 'Blender', description: 'Industry-grade 3D creation suite', category: 'Creative', iconUrl: si('blender', '#E87D0D'), targets: { ubuntu: 'blender', debian: 'blender', arch: 'blender', fedora: 'blender', opensuse: 'blender', nix: 'blender', flatpak: 'org.blender.Blender', snap: 'blender --classic', homebrew: '--cask blender' } },
    { id: 'gimp', name: 'GIMP', description: 'Powerful free image editor, Photoshop alternative', category: 'Creative', iconUrl: si('gimp', '#5C5543'), targets: { ubuntu: 'gimp', debian: 'gimp', arch: 'gimp', fedora: 'gimp', opensuse: 'gimp', nix: 'gimp', flatpak: 'org.gimp.GIMP', snap: 'gimp', homebrew: '--cask gimp' } },
    { id: 'inkscape', name: 'Inkscape', description: 'Professional vector graphics editor', category: 'Creative', iconUrl: 'https://media.inkscape.org/static/images/inkscape-logo.svg', targets: { ubuntu: 'inkscape', debian: 'inkscape', arch: 'inkscape', fedora: 'inkscape', opensuse: 'inkscape', nix: 'inkscape', flatpak: 'org.inkscape.Inkscape', snap: 'inkscape', homebrew: '--cask inkscape' } },
    { id: 'krita', name: 'Krita', description: 'Professional digital painting application', category: 'Creative', iconUrl: si('krita', '#337FCC'), targets: { ubuntu: 'krita', debian: 'krita', arch: 'krita', fedora: 'krita', opensuse: 'krita', nix: 'krita', flatpak: 'org.kde.krita', snap: 'krita', homebrew: '--cask krita' } },
    { id: 'darktable', name: 'Darktable', description: 'Professional photography workflow application', category: 'Creative', iconUrl: 'https://www.svgrepo.com/show/378112/darktable.svg', targets: { ubuntu: 'darktable', debian: 'darktable', arch: 'darktable', fedora: 'darktable', opensuse: 'darktable', nix: 'darktable', flatpak: 'org.darktable.Darktable', snap: 'darktable', homebrew: '--cask darktable' } },
    { id: 'freecad', name: 'FreeCAD', description: 'Open-source parametric 3D CAD modeler', category: 'Creative', iconUrl: si('freecad', '#CB333B'), targets: { ubuntu: 'freecad', debian: 'freecad', arch: 'freecad', fedora: 'freecad', opensuse: 'freecad', nix: 'freecad', flatpak: 'org.freecad.FreeCAD', snap: 'freecad', homebrew: '--cask freecad' } },
    { id: 'kicad', name: 'KiCad', description: 'Professional PCB and schematic design suite', category: 'Creative', iconUrl: si('kicad', '#314CB6'), targets: { ubuntu: 'kicad', debian: 'kicad', arch: 'kicad', fedora: 'kicad', opensuse: 'kicad', nix: 'kicad', flatpak: 'org.kicad.KiCad', snap: 'kicad', homebrew: '--cask kicad' } },
    { id: 'cura', name: 'UltiMaker Cura', description: 'Popular 3D printer slicing application', category: 'Creative', iconUrl: 'https://dl.flathub.org/media/com/ultimaker/cura.desktop/9eeed6dfd5a5ec2c8e5c8917012db5ad/icons/128x128/com.ultimaker.cura.desktop.png', targets: { arch: 'cura', fedora: 'cura', opensuse: 'cura', nix: 'cura', flatpak: 'com.ultimaker.cura', snap: 'cura-slicer', homebrew: '--cask ultimaker-cura' }, unavailableReason: 'Available through snap, flatpak and appimage. For Debian 13 or newer; Ubuntu 25.04 or newer it is available through `sudo apt install -y cura`.' },
    { id: 'godot', name: 'Godot Engine', description: 'Feature-packed, cross-platform game engine', category: 'Creative', iconUrl: si('godotengine', '#478CBF'), targets: { ubuntu: 'godot', debian: 'godot', arch: 'godot', fedora: 'godot', nix: 'godot', flatpak: 'org.godotengine.Godot', snap: 'godot-4', homebrew: '--cask godot' }, unavailableReason: 'Installs latest Godot 4. For older distros: Ubuntu 24.04 and Debian 12 (Bookworm) only have `godot3` available use `sudo apt install -y godot3` for Godot 3.x instead.' },
    { id: 'kolourpaint', name: 'KolourPaint', description: 'Easy-to-use paint program by KDE', category: 'Creative', iconUrl: 'https://dl.flathub.org/media/org/kde/kolourpaint.desktop/4b7fa92785a1338b7cb179451347a4e2/icons/128x128/org.kde.kolourpaint.desktop.png', targets: { ubuntu: 'kolourpaint', debian: 'kolourpaint', arch: 'kolourpaint', fedora: 'kolourpaint', opensuse: 'kolourpaint', nix: 'kdePackages.kolourpaint', flatpak: 'org.kde.kolourpaint', snap: 'kolourpaint' } },
    { id: 'orcaslicer', name: 'OrcaSlicer', description: 'Advanced 3D printer slicer based on BambuStudio', category: 'Creative', iconUrl: mdi('printer-3d-nozzle', '#00AE42'), targets: { arch: 'orca-slicer-bin', nix: 'orca-slicer', homebrew: '--cask orcaslicer' }, unavailableReason: 'Download the AppImage or distribution-specific package from the official [GitHub Releases](https://github.com/OrcaSlicer/OrcaSlicer/releases).' },
    { id: 'davinci-resolve', name: 'DaVinci Resolve', description: 'Professional video editing, color grading, and VFX software', category: 'Creative', iconUrl: si('davinciresolve', '#E52222'), targets: { nix: 'davinci-resolve' }, unavailableReason: 'Not in most official repos. Arch requires manually downloading installer and placing in PKGBUILD before installing `yay -S --needed --noconfirm davinci-resolve` see [wiki.archlinux.org](https://wiki.archlinux.org/title/DaVinci_Resolve) for more info. Or download from [blackmagicdesign.com](https://www.blackmagicdesign.com/products/davinciresolve).' },

    // GAMING
    { id: 'steam', name: 'Steam', description: 'Largest PC gaming platform and store', category: 'Gaming', iconUrl: si('steam', '#00ADEE'), targets: { ubuntu: 'steam', fedora: 'steam', opensuse: 'steam', nix: 'steam', flatpak: 'com.valvesoftware.Steam', snap: 'steam', homebrew: '--cask steam' }, unavailableReason: 'Debian requires editing /etc/apt/sources.list adding "contrib" to the end of the line that starts with "deb" or "deb-src" and `sudo apt update` before installing `sudo apt install -y steam-installer`. Arch requires [multilib](https://wiki.archlinux.org/title/Official_repositories#multilib) enabled first: uncomment `[multilib]` section in `/etc/pacman.conf`, then run `sudo pacman -Syu`, then `sudo pacman -S steam`.' },
    { id: 'lutris', name: 'Lutris', description: 'Open gaming platform for all your games', category: 'Gaming', iconUrl: si('lutris', '#FF8F00'), targets: { ubuntu: 'lutris', arch: 'lutris', fedora: 'lutris', opensuse: 'lutris', nix: 'lutris', flatpak: 'net.lutris.Lutris' }, unavailableReason: 'Debian requires editing /etc/apt/sources.list adding "contrib" to the end of the line that starts with "deb" or "deb-src" and `sudo apt update` before installing `sudo apt install -y lutris`. Lutris is not available as a Snap package.' },
    { id: 'heroic', name: 'Heroic', description: 'Open-source Epic Games and GOG launcher', category: 'Gaming', iconUrl: si('heroicgameslauncher', '#7B62E8'), targets: { arch: 'heroic-games-launcher-bin', nix: 'heroic', flatpak: 'com.heroicgameslauncher.hgl', homebrew: '--cask heroic' }, unavailableReason: 'Only available via [AUR](https://aur.archlinux.org/packages/heroic-games-launcher-bin) or [Flatpak](https://flathub.org/apps/details/com.heroicgameslauncher.hgl). see [heroicgameslauncher.com](https://heroicgameslauncher.com/downloads) for more info.' },
    { id: 'prism', name: 'Prism Launcher', description: 'Open-source Minecraft launcher with mod support', category: 'Gaming', iconUrl: 'https://raw.githubusercontent.com/PrismLauncher/PrismLauncher/develop/program_info/org.prismlauncher.PrismLauncher.logo.svg', targets: { arch: 'prismlauncher', nix: 'prismlauncher', flatpak: 'org.prismlauncher.PrismLauncher', homebrew: '--cask prismlauncher' }, unavailableReason: 'Only available via [AUR](https://aur.archlinux.org/packages/prismlauncher) or [Flatpak](https://flathub.org/apps/details/org.prismlauncher.PrismLauncher). see [prismlauncher.org](https://prismlauncher.org/download/) for more info.' },
    { id: 'retroarch', name: 'RetroArch', description: 'All-in-one emulator frontend for retro gaming', category: 'Gaming', iconUrl: si('retroarch', '#A0A0A0'), targets: { ubuntu: 'retroarch', debian: 'retroarch', arch: 'retroarch', fedora: 'retroarch', opensuse: 'retroarch', nix: 'retroarch', flatpak: 'org.libretro.RetroArch', snap: 'retroarch', homebrew: '--cask retroarch' } },
    { id: 'mangohud', name: 'MangoHud', description: 'Vulkan/OpenGL overlay for monitoring FPS and hardware', category: 'Gaming', iconUrl: si('gamejolt', '#FF9900'), targets: { ubuntu: 'mangohud', debian: 'mangohud', arch: 'mangohud', fedora: 'mangohud', opensuse: 'mangohud', nix: 'mangohud' }, unavailableReason: 'MangoHud is a system overlay and not available via Flatpak or Snap.' },
    { id: 'gamemode', name: 'GameMode', description: 'Optimizes Linux system performance for gaming', category: 'Gaming', iconUrl: 'https://www.svgrepo.com/show/411187/game.svg', targets: { ubuntu: 'gamemode', debian: 'gamemode', arch: 'gamemode', fedora: 'gamemode', opensuse: 'gamemode', nix: 'gamemode' }, unavailableReason: 'GameMode is a system service and not available via Flatpak or Snap.' },
    { id: 'protonup', name: 'ProtonUp-Qt', description: 'Install and manage Proton-GE for Steam games', category: 'Gaming', iconUrl: si('protondb', '#8B0000'), targets: { arch: 'protonup-qt-bin', nix: 'protonup-qt', flatpak: 'net.davidotek.pupgui2' }, unavailableReason: 'Only available via [AUR](https://aur.archlinux.org/packages/protonup-qt-bin) or [Flatpak](https://flathub.org/apps/net.davidotek.pupgui2).' },
    { id: 'antimicrox', name: 'AntiMicroX', description: 'Map gamepad buttons to keyboard/mouse actions', category: 'Gaming', iconUrl: mdi('controller', '#007BFF'), targets: { ubuntu: 'antimicrox', debian: 'antimicrox', arch: 'antimicrox', fedora: 'antimicrox', opensuse: 'antimicrox', nix: 'antimicrox', flatpak: 'io.github.antimicrox.antimicrox' }, unavailableReason: 'Not available as a Snap package.' },
    { id: 'goverlay', name: 'GOverlay', description: 'GUI for MangoHud, vkBasalt, and ReplaySorcery', category: 'Gaming', iconUrl: mdi('dock-window', '#6366F1'), targets: { ubuntu: 'goverlay', debian: 'goverlay', arch: 'goverlay', fedora: 'goverlay', opensuse: 'goverlay', nix: 'goverlay', flatpak: 'io.github.benjamimgois.goverlay' }, unavailableReason: 'Not available as a Snap package.' },

    // OFFICE
    { id: 'libreoffice', name: 'LibreOffice', description: 'Full-featured open-source office suite', category: 'Office', iconUrl: si('libreoffice', '#0369A1'), targets: { ubuntu: 'libreoffice', debian: 'libreoffice', arch: 'libreoffice-fresh', fedora: 'libreoffice', opensuse: 'libreoffice', nix: 'libreoffice', flatpak: 'org.libreoffice.LibreOffice', snap: 'libreoffice', homebrew: '--cask libreoffice' } },
    { id: 'onlyoffice', name: 'OnlyOffice', description: 'Modern office suite with MS Office compatibility', category: 'Office', iconUrl: si('onlyoffice', '#FF6F3D'), targets: { arch: 'onlyoffice-bin', nix: 'onlyoffice-bin', flatpak: 'org.onlyoffice.desktopeditors', snap: 'onlyoffice-desktopeditors', homebrew: '--cask onlyoffice' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/apps/details/org.onlyoffice.desktopeditors) or [Snap](https://snapcraft.io/onlyoffice-desktopeditors) or download from [onlyoffice.com/desktop](https://www.onlyoffice.com/desktop.aspx).' },
    { id: 'obsidian', name: 'Obsidian', description: 'Popular Markdown-based knowledge management app', category: 'Office', iconUrl: si('obsidian', '#7C3AED'), targets: { arch: 'obsidian', nix: 'obsidian', flatpak: 'md.obsidian.Obsidian', snap: 'obsidian --classic', homebrew: '--cask obsidian' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/apps/details/md.obsidian.Obsidian) or [Snap](https://snapcraft.io/obsidian) or download from [obsidian.md/download](https://obsidian.md/download).' },
    { id: 'logseq', name: 'Logseq', description: 'Open-source outliner for knowledge management', category: 'Office', iconUrl: si('logseq', '#06D5D5'), targets: { arch: 'logseq-desktop-bin', nix: 'logseq', flatpak: 'com.logseq.Logseq', snap: 'logseq', homebrew: '--cask logseq' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/apps/details/com.logseq.Logseq) or [Snap](https://snapcraft.io/logseq) or download from [logseq.com](https://logseq.com/downloads).' },
    { id: 'joplin', name: 'Joplin', description: 'Open-source note-taking with sync and encryption', category: 'Office', iconUrl: si('joplin', '#1471B7'), targets: { arch: 'joplin-appimage', nix: 'joplin-desktop', flatpak: 'net.cozic.joplin_desktop', snap: 'joplin-desktop', homebrew: '--cask joplin' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/apps/details/net.cozic.joplin_desktop) or [Snap](https://snapcraft.io/joplin-desktop) or install from [joplinapp.org](https://joplinapp.org/help/install/).' },
    { id: 'okular', name: 'Okular', description: 'Universal document viewer by KDE', category: 'Office', iconUrl: si('kde', '#338BDB'), targets: { ubuntu: 'okular', debian: 'okular', arch: 'okular', fedora: 'okular', opensuse: 'okular', nix: 'okular', flatpak: 'org.kde.okular', snap: 'okular' } },
    { id: 'zathura', name: 'Zathura', description: 'Vim-style minimal PDF/document viewer', category: 'Office', iconUrl: 'https://raw.githubusercontent.com/TrixieUA/MoreWaita-copr-trixieua/e5bed029d63d4c14f1aba811152f3f0bf473a4bc/scalable/apps/zathura.svg', targets: { ubuntu: 'zathura', debian: 'zathura', arch: 'zathura', fedora: 'zathura', opensuse: 'zathura', nix: 'zathura' }, unavailableReason: 'Zathura is not available via Flatpak or Snap.' },
    { id: 'calibre', name: 'Calibre', description: 'Complete e-book library management solution', category: 'Office', iconUrl: si('calibreweb', '#ECA315'), targets: { ubuntu: 'calibre', debian: 'calibre', arch: 'calibre', fedora: 'calibre', opensuse: 'calibre', nix: 'calibre', flatpak: 'com.calibre_ebook.calibre', homebrew: '--cask calibre' }, unavailableReason: 'Calibre is not available as a Snap package.' },
    { id: 'xournalpp', name: 'Xournal++', description: 'Handwriting and PDF annotation app', category: 'Office', iconUrl: vs('file-type-pdf2'), targets: { ubuntu: 'xournalpp', debian: 'xournalpp', arch: 'xournalpp', fedora: 'xournalpp', opensuse: 'xournalpp', nix: 'xournalpp', flatpak: 'com.github.xournalpp.xournalpp', homebrew: '--cask xournal++' }, unavailableReason: 'Xournal++ is not available as a Snap package.' },
    { id: 'zotero', name: 'Zotero', description: 'Research reference manager and citation tool', category: 'Office', iconUrl: si('zotero', '#CC2936'), targets: { arch: 'zotero-bin', opensuse: 'zotero', nix: 'zotero', flatpak: 'org.zotero.Zotero', snap: 'zotero-snap', homebrew: '--cask zotero' }, unavailableReason: 'Not in official Ubuntu/Debian repos. Use [Flatpak](https://flathub.org/apps/org.zotero.Zotero)/[Snap](https://snapcraft.io/zotero-snap) or download from [zotero.org](https://www.zotero.org/download/).' },
    { id: 'trilium', name: 'Trilium Notes', description: 'Hierarchical note-taking app with powerful features', category: 'Office', iconUrl: si('trilium', '#51A52D'), targets: { arch: 'trilium-bin', nix: 'trilium-desktop', flatpak: 'com.github.zadam.trilium', homebrew: '--cask trilium-notes' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/apps/com.github.zadam.trilium) or download from [github.com/zadam/trilium](https://github.com/zadam/trilium/releases).' },

    // VPN & NETWORK
    { id: 'protonvpn', name: 'Proton VPN', description: 'Secure VPN by the makers of ProtonMail', category: 'VPN & Network', iconUrl: si('protonvpn', '#6D4AFF'), targets: { arch: 'proton-vpn-gtk-app', nix: 'protonvpn-gui', flatpak: 'com.protonvpn.www', homebrew: '--cask protonvpn' }, unavailableReason: 'Not in official repos. Use Flatpak or follow instructions at [protonvpn.com/support/linux-vpn-setup](https://protonvpn.com/support/linux-vpn-setup/).' },
    { id: 'mullvad', name: 'Mullvad VPN', description: 'Privacy-focused VPN with no-logging policy', category: 'VPN & Network', iconUrl: si('mullvad', '#44AD4D'), targets: { arch: 'mullvad-vpn-bin', nix: 'mullvad-vpn', homebrew: '--cask mullvad-vpn' }, unavailableReason: 'Not in official repos. Use [AUR](https://aur.archlinux.org/packages/mullvad-vpn-bin) or see [official install guide](https://mullvad.net/en/help/install-mullvad-app-linux).' },
    { id: 'tailscale', name: 'Tailscale', description: 'Zero-config mesh VPN using WireGuard', category: 'VPN & Network', iconUrl: si('tailscale', '#797878'), targets: { arch: 'tailscale', fedora: 'tailscale', opensuse: 'tailscale', nix: 'tailscale', homebrew: 'tailscale' }, unavailableReason: 'Not in Debian or Ubuntu repos. Follow instructions at [tailscale.com/download/linux](https://tailscale.com/download/linux).' },
    { id: 'wireguard', name: 'WireGuard', description: 'Fast, modern, secure VPN tunnel protocol', category: 'VPN & Network', iconUrl: si('wireguard', '#88171A'), targets: { ubuntu: 'wireguard', debian: 'wireguard', arch: 'wireguard-tools', fedora: 'wireguard-tools', opensuse: 'wireguard-tools', nix: 'wireguard-tools', homebrew: 'wireguard-tools' }, unavailableReason: 'WireGuard is a kernel module and not available via Flatpak or Snap.' },
    { id: 'openvpn', name: 'OpenVPN', description: 'Full-featured SSL VPN solution', category: 'VPN & Network', iconUrl: si('openvpn', '#EA7E20'), targets: { ubuntu: 'openvpn', debian: 'openvpn', arch: 'openvpn', fedora: 'openvpn', opensuse: 'openvpn', nix: 'openvpn', homebrew: 'openvpn' }, unavailableReason: 'OpenVPN is a system package and not available via Flatpak or Snap.' },
    { id: 'nmap', name: 'Nmap', description: 'Network discovery and security auditing tool', category: 'VPN & Network', iconUrl: 'https://raw.githubusercontent.com/bwks/vendor-icons-svg/702f2ac88acc71759ce623bc5000a596195e9db3/nmap-logo.svg', targets: { ubuntu: 'nmap', debian: 'nmap', arch: 'nmap', fedora: 'nmap', opensuse: 'nmap', nix: 'nmap', homebrew: 'nmap' }, unavailableReason: 'Nmap is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'openssh', name: 'OpenSSH', description: 'Secure remote login and file transfer via SSH', category: 'VPN & Network', iconUrl: mdi('ssh', '#F5A623'), targets: { ubuntu: 'openssh-client', debian: 'openssh-client', arch: 'openssh', fedora: 'openssh-clients', opensuse: 'openssh', nix: 'openssh', homebrew: 'openssh' }, unavailableReason: 'OpenSSH is a system package and not available via Flatpak or Snap.' },

    // SECURITY
    { id: 'bitwarden', name: 'Bitwarden', description: 'Open-source password manager with cloud sync', category: 'Security', iconUrl: si('bitwarden', '#175DDC'), targets: { arch: 'bitwarden', nix: 'bitwarden', flatpak: 'com.bitwarden.desktop', snap: 'bitwarden', homebrew: '--cask bitwarden' }, unavailableReason: 'Not in official repos. Use [Flatpak](https://flathub.org/apps/details/com.bitwarden.desktop) or [Snap](https://snapcraft.io/bitwarden) or download from [bitwarden.com/download](https://bitwarden.com/download/).' },
    { id: 'keepassxc', name: 'KeePassXC', description: 'Secure offline-first password manager', category: 'Security', iconUrl: si('keepassxc', '#65B726'), targets: { ubuntu: 'keepassxc', debian: 'keepassxc', arch: 'keepassxc', fedora: 'keepassxc', opensuse: 'keepassxc', nix: 'keepassxc', flatpak: 'org.keepassxc.KeePassXC', snap: 'keepassxc', homebrew: '--cask keepassxc' } },
    { id: 'veracrypt', name: 'VeraCrypt', description: 'Free disk encryption based on TrueCrypt', category: 'Security', iconUrl: 'https://raw.githubusercontent.com/PapirusDevelopmentTeam/papirus-icon-theme/3390a630b535d1c1ccca04881b3959e262264116/Papirus/64x64/apps/veracrypt.svg', targets: { arch: 'veracrypt', opensuse: 'veracrypt', nix: 'veracrypt', homebrew: '--cask veracrypt' }, unavailableReason: 'Not in official Debian/Ubuntu/Fedora repos. Download from [veracrypt.fr/en/Downloads](https://veracrypt.fr/en/Downloads.html).' },
    { id: 'gnupg', name: 'GnuPG', description: 'GNU Privacy Guard for encryption and signing', category: 'Security', iconUrl: si('gnuprivacyguard', '#0093DD'), targets: { ubuntu: 'gnupg', debian: 'gnupg', arch: 'gnupg', fedora: 'gnupg2', opensuse: 'gnupg', nix: 'gnupg', homebrew: 'gnupg' }, unavailableReason: 'GnuPG is a system package and not available via Flatpak or Snap.' },
    { id: 'firejail', name: 'Firejail', description: 'SUID sandbox for restricting app environments', category: 'Security', iconUrl: 'https://linux.fi/w/images/1/1f/Firejail-logo.png', targets: { ubuntu: 'firejail', debian: 'firejail', arch: 'firejail', fedora: 'firejail', opensuse: 'firejail', nix: 'firejail' }, unavailableReason: 'Firejail is a system security tool and not available via Flatpak or Snap.' },
    { id: 'clamav', name: 'ClamAV', description: 'Open-source antivirus engine for malware detection', category: 'Security', iconUrl: 'https://raw.githubusercontent.com/ivangabriele/clamav-desktop/f60bfafdd23bb455f0468abe5f877d2b76eddfba/assets/icons/icon.svg', targets: { ubuntu: 'clamav', debian: 'clamav', arch: 'clamav', fedora: 'clamav', opensuse: 'clamav', nix: 'clamav', homebrew: 'clamav' }, unavailableReason: 'ClamAV is a system package and not available via Flatpak or Snap.' },

    // FILE SHARING
    { id: 'syncthing', name: 'Syncthing', description: 'Decentralized peer-to-peer file synchronization', category: 'File Sharing', iconUrl: si('syncthing', '#0CB7E4'), targets: { ubuntu: 'syncthing', debian: 'syncthing', arch: 'syncthing', fedora: 'syncthing', opensuse: 'syncthing', nix: 'syncthing', flatpak: 'me.kozec.syncthingtk', homebrew: 'syncthing' }, unavailableReason: 'Syncthing GTK is available on [Flatpak](https://flathub.org/apps/me.kozec.syncthingtk). Not available as Snap.' },
    { id: 'qbittorrent', name: 'qBittorrent', description: 'Open-source BitTorrent client, uTorrent alternative', category: 'File Sharing', iconUrl: si('qbittorrent', '#2F67BA'), targets: { ubuntu: 'qbittorrent', debian: 'qbittorrent', arch: 'qbittorrent', fedora: 'qbittorrent', opensuse: 'qbittorrent', nix: 'qbittorrent', flatpak: 'org.qbittorrent.qBittorrent', snap: 'qbittorrent-desktop-tak', homebrew: '--cask qbittorrent' } },
    { id: 'transmission', name: 'Transmission', description: 'Lightweight BitTorrent client', category: 'File Sharing', iconUrl: si('transmission', '#D70000'), targets: { ubuntu: 'transmission', debian: 'transmission', arch: 'transmission-gtk', fedora: 'transmission', opensuse: 'transmission', nix: 'transmission_4-gtk', flatpak: 'com.transmissionbt.Transmission', homebrew: '--cask transmission' }, unavailableReason: 'Transmission is not available as a Snap package. Use [Flatpak](https://flathub.org/apps/com.transmissionbt.Transmission).' },
    { id: 'localsend', name: 'LocalSend', description: 'Cross-platform AirDrop alternative for local sharing', category: 'File Sharing', iconUrl: si('localsend', '#FCA73C'), targets: { arch: 'localsend-bin', nix: 'localsend', flatpak: 'org.localsend.localsend_app', homebrew: '--cask localsend' }, unavailableReason: 'Only available via [AUR](https://aur.archlinux.org/packages/localsend-bin) or [Flatpak](https://flathub.org/apps/org.localsend.localsend_app). Download from [localsend.org](https://localsend.org/download).' },
    { id: 'filezilla', name: 'FileZilla', description: 'Cross-platform FTP, FTPS and SFTP client', category: 'File Sharing', iconUrl: si('filezilla', '#BF0000'), targets: { ubuntu: 'filezilla', debian: 'filezilla', arch: 'filezilla', fedora: 'filezilla', opensuse: 'filezilla', nix: 'filezilla', flatpak: 'org.filezillaproject.Filezilla' }, unavailableReason: 'FileZilla is not available as a Snap package.' },
    { id: 'nextcloud', name: 'Nextcloud', description: 'Self-hosted cloud storage sync client', category: 'File Sharing', iconUrl: si('nextcloud', '#0082C9'), targets: { ubuntu: 'nextcloud-desktop', debian: 'nextcloud-desktop', arch: 'nextcloud-client', fedora: 'nextcloud-client', opensuse: 'nextcloud-desktop', nix: 'nextcloud-client', flatpak: 'com.nextcloud.desktopclient.nextcloud', snap: 'nextcloud-desktop-client', homebrew: '--cask nextcloud' } },
    { id: 'dropbox', name: 'Dropbox', description: 'Popular cloud file storage and sync service', category: 'File Sharing', iconUrl: si('dropbox', '#0061FF'), targets: { arch: 'dropbox', nix: 'dropbox', flatpak: 'com.dropbox.Client', homebrew: '--cask dropbox' }, unavailableReason: 'Only available via [AUR](https://aur.archlinux.org/packages/dropbox) or [Flatpak](https://flathub.org/apps/com.dropbox.Client). See [dropbox.com/install-linux](https://www.dropbox.com/install-linux) for other methods.' },
    { id: 'abdownloadmanager', name: 'AB Download Manager', description: 'Modern download manager with browser integration', category: 'File Sharing', iconUrl: mdi('download-box', '#4CAF50'), targets: { arch: 'ab-download-manager-bin' }, unavailableReason: 'Only available via [AUR](https://aur.archlinux.org/packages/ab-download-manager-bin). Download from [abdownloadmanager.com](https://abdownloadmanager.com/).' },
    { id: 'fdm', name: 'Free Download Manager', description: 'Feature-rich download manager with BitTorrent', category: 'File Sharing', iconUrl: mdi('progress-download', '#3481FE'), targets: { arch: 'freedownloadmanager-bin', homebrew: '--cask free-download-manager' }, unavailableReason: 'Not in official repos. See [freedownloadmanager.org](https://www.freedownloadmanager.org/) for other methods.' },

    // SYSTEM
    { id: 'gparted', name: 'GParted', description: 'GNOME partition editor for disk management', category: 'System', iconUrl: si('gnome', '#E95420'), targets: { ubuntu: 'gparted', debian: 'gparted', arch: 'gparted', fedora: 'gparted', opensuse: 'gparted', nix: 'gparted' }, unavailableReason: 'GParted requires root access and is not available via Flatpak or Snap.' },
    { id: 'kde-partition-manager', name: 'KDE Partition Manager', description: 'Utility for management of disk devices, partitions and file systems', category: 'System', iconUrl: si('kde', '#1D99F3'), targets: { ubuntu: 'partitionmanager', debian: 'partitionmanager', arch: 'partitionmanager', fedora: 'kde-partitionmanager', opensuse: 'partitionmanager', nix: 'partitionmanager', flatpak: 'org.kde.partitionmanager' }, unavailableReason: 'Not available as a Snap package.' },
    { id: 'kdeconnect', name: 'KDE Connect', description: 'Connect your phone to your Linux desktop', category: 'System', iconUrl: si('kde', '#338BDB'), targets: { ubuntu: 'kdeconnect', debian: 'kdeconnect', arch: 'kdeconnect', fedora: 'kdeconnectd', opensuse: 'kdeconnect-kde', nix: 'kdeconnect' }, unavailableReason: 'KDE Connect is not available via Flatpak or Snap.' },
    { id: 'timeshift', name: 'Timeshift', description: 'System snapshot and restore tool like Time Machine', category: 'System', iconUrl: mdi('backup-restore', '#D9534F'), targets: { ubuntu: 'timeshift', debian: 'timeshift', arch: 'timeshift', fedora: 'timeshift', opensuse: 'timeshift', nix: 'timeshift' }, unavailableReason: 'Requires root filesystem access; not available as Flatpak or Snap.' },
    { id: 'bleachbit', name: 'BleachBit', description: 'Free disk space and maintain privacy', category: 'System', iconUrl: 'https://raw.githubusercontent.com/chocolatey-community/chocolatey-packages/782707302851e7935c4a5a3e48e27140c774fa78/icons/bleachbit.svg', targets: { ubuntu: 'bleachbit', debian: 'bleachbit', arch: 'bleachbit', fedora: 'bleachbit', opensuse: 'bleachbit', nix: 'bleachbit', flatpak: 'org.bleachbit.BleachBit' }, unavailableReason: 'BleachBit is not available as a Snap package.' },
    { id: 'flameshot', name: 'Flameshot', description: 'Powerful screenshot tool with annotation', category: 'System', iconUrl: 'https://raw.githubusercontent.com/flameshot-org/flameshot/master/data/img/app/flameshot.svg', targets: { ubuntu: 'flameshot', debian: 'flameshot', arch: 'flameshot', fedora: 'flameshot', opensuse: 'flameshot', nix: 'flameshot', flatpak: 'org.flameshot.Flameshot', homebrew: '--cask flameshot' }, unavailableReason: 'Flameshot is not available as a Snap package.' },
    { id: 'gnometweaks', name: 'GNOME Tweaks', description: 'Advanced settings and customization for GNOME', category: 'System', iconUrl: si('gnome', '#4A86CF'), targets: { ubuntu: 'gnome-tweaks', debian: 'gnome-tweaks', arch: 'gnome-tweaks', fedora: 'gnome-tweaks', opensuse: 'gnome-tweaks', nix: 'gnome-tweaks' }, unavailableReason: 'GNOME Tweaks is not available via Flatpak or Snap.' },
    { id: 'dconf', name: 'dconf Editor', description: 'Low-level configuration editor for GNOME', category: 'System', iconUrl: si('gnome', '#4A86CF'), targets: { ubuntu: 'dconf-editor', debian: 'dconf-editor', arch: 'dconf-editor', fedora: 'dconf-editor', opensuse: 'dconf-editor', nix: 'dconf-editor' }, unavailableReason: 'dconf Editor is not available via Flatpak or Snap.' },
    { id: 'borgbackup', name: 'BorgBackup', description: 'Deduplicating backup program with compression', category: 'System', iconUrl: si('borgbackup', '#00B041'), targets: { ubuntu: 'borgbackup', debian: 'borgbackup', arch: 'borg', fedora: 'borgbackup', opensuse: 'borgbackup', nix: 'borgbackup', homebrew: 'borgbackup' }, unavailableReason: 'BorgBackup is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'restic', name: 'Restic', description: 'Fast, secure, efficient backup program', category: 'System', iconUrl: mdi('cloud-sync', '#00B4AB'), targets: { ubuntu: 'restic', debian: 'restic', arch: 'restic', fedora: 'restic', opensuse: 'restic', nix: 'restic', homebrew: 'restic' }, unavailableReason: 'Restic is a CLI tool and not available via Flatpak or Snap.' },
    { id: 'flatpaksupport', name: 'Flatpak', description: 'Universal app packaging and sandboxing framework', category: 'System', iconUrl: si('flatpak', '#4A90D9'), targets: { ubuntu: 'flatpak', debian: 'flatpak', arch: 'flatpak', fedora: 'flatpak', opensuse: 'flatpak', nix: 'flatpak' }, unavailableReason: 'Flatpak is a system package manager and not available via Flatpak or Snap.' },
    { id: 'filelight', name: 'Filelight', description: 'Interactive disk usage visualization by KDE', category: 'System', iconUrl: si('kde', '#338BDB'), targets: { ubuntu: 'filelight', debian: 'filelight', arch: 'filelight', fedora: 'filelight', opensuse: 'filelight', nix: 'filelight', flatpak: 'org.kde.filelight', snap: 'filelight' } },
    { id: 'conky', name: 'Conky', description: 'Highly configurable desktop system monitor', category: 'System', iconUrl: mdi('monitor-dashboard', '#FFFFFF'), targets: { ubuntu: 'conky-all', debian: 'conky-all', arch: 'conky', fedora: 'conky', opensuse: 'conky', nix: 'conky' }, unavailableReason: 'Conky is a system tool and not available via Flatpak or Snap.' },
    { id: 'fsearch', name: 'FSearch', description: 'Fast file search utility, inspired by Everything', category: 'System', iconUrl: 'https://dl.flathub.org/media/io/github/cboxdoerfer.FSearch/5dfcd05a3d0147745dccd8477b238210/icons/128x128/io.github.cboxdoerfer.FSearch.png', targets: { ubuntu: 'fsearch', debian: 'fsearch', arch: 'fsearch', opensuse: 'fsearch', nix: 'fsearch', flatpak: 'com.github.cboxdoerfer.FSearch' }, unavailableReason: 'Not in Fedora official repos. Available via [COPR](https://copr.fedorainfracloud.org/coprs/cboxdoerfer/fsearch/) but may have dependency issues on Fedora 41+.' },
    { id: 'resources', name: 'Resources', description: 'Modern system resource monitor', category: 'System', iconUrl: 'https://dl.flathub.org/media/net/nokyan/Resources/4f0373aa103995c3e7197228fdb3d21c/icons/128x128/net.nokyan.Resources.png', targets: { arch: 'resources', nix: 'resources', flatpak: 'net.nokyan.Resources' } },
    { id: 'cpux', name: 'CPU-X', description: 'System profiling and monitoring (CPU-Z alternative)', category: 'System', iconUrl: 'https://dl.flathub.org/media/io/github/thetumultuousunicornofdarkness.cpu-x/80c9c5c5b9f72bd79cbe28b1c3d662da/icons/128x128/io.github.thetumultuousunicornofdarkness.cpu-x.png', targets: { ubuntu: 'cpu-x', debian: 'cpu-x', arch: 'cpu-x', fedora: 'cpu-x', nix: 'cpu-x', flatpak: 'io.github.thetumultuousunicornofdarkness.cpu-x' } },
    { id: 'missioncenter', name: 'Mission Center', description: 'Fast, modern system monitor with GPU support', category: 'System', iconUrl: 'https://gitlab.com/mission-center-devs/mission-center/-/raw/main/data/icons/hicolor/scalable/apps/io.missioncenter.MissionCenter.svg', targets: { arch: 'mission-center', nix: 'mission-center', flatpak: 'io.missioncenter.MissionCenter', snap: 'mission-center' }, unavailableReason: 'Not in most official repos. Use [Flatpak](https://flathub.org/apps/io.github.MissionCenter.MissionCenter) or see [Mission Center](https://gitlab.com/mission-center-devs/mission-center/) for more information.' },
];

// Categories in display order - beginner-friendly (popular first), balanced heights
// Popular/Consumer first, then Developer/Power-user categories
export const categories: Category[] = [
    // Row 1: Most popular consumer categories
    'Web Browsers',    // 9  - everyone needs this first
    'Communication',   // 8  - Discord, Telegram, etc.
    'Media',           // 14 - VLC, Spotify, etc.
    'Gaming',          // 10 - Steam, etc.
    'Office',          // 11 - LibreOffice, etc.
    // Row 2: Creative & System
    'Creative',        // 10 - Blender, GIMP, etc.
    'System',          // 13 - Utilities
    'File Sharing',    // 9  - Syncthing, torrents
    'Security',        // 6  - Passwords, VPN
    'VPN & Network',   // 7  - ProtonVPN, etc.
    // Row 3: Developer categories (larger, go last to fill columns)
    'Dev: Editors',    // 9  - VS Code, etc.
    'Dev: Languages',  // 10 - Python, Node, etc.
    'Dev: Tools',      // 18 - Docker, Git, etc.
    'Terminal',        // 9  - Alacritty, etc.
    'CLI Tools',       // 21 - btop, fzf, etc.
];

// Get apps by category
export const getAppsByCategory = (category: Category): AppData[] => {
    return apps.filter(app => app.category === category);
};

// Check if app is available for distro
export const isAppAvailable = (app: AppData, distro: DistroId): boolean => {
    return distro in app.targets;
};

// Note: For command generation, use useLinuxInit().generatedCommand or generateInstallScript()
