A modular Linux software installer and workstation builder that lets users install exactly what they need.
envkit transforms workstation setup on Linux into a seamless, data-driven experience engineered specifically for Linux power users, developers, students, and security researchers.
Instead of forcing users to install giant monolithic software bundles, envkit enables you to:
- Launch
envkitvia a modern Qt6 desktop GUI or interactive CLI. - Browse a centralized, data-driven application catalog across 8 categories.
- Automatically detect already-installed applications and view their exact presence.
- Pick and choose individual applications or select a curated profile.
- Review estimated package changes and skipped software.
- Install missing software with live streaming progress, non-blocking logs, and automatic cross-distro package resolution.
- Save your environment as a custom profile, export it to YAML, and reconstruct your exact workstation on a fresh install or different Linux distribution in minutes.
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ envkit 2.0 — Workstation Setup - □ × │
├───────────────┬────────────────────────────────────────────────────────────────────────┤
│ 🏠 Home │ Welcome to envkit │
│ 📦 Applications│ Fedora Linux 44 (KDE Plasma) • dnf5 • x86_64 │
│ 📋 Profiles │ │
│ ✓ Installed │ ┌──────────────────────────────┐ ┌──────────────────────────────┐ │
│ ⚙️ Settings │ │ 💻 Development │ │ ⚡ Terminal Powerhouse │ │
│ ℹ️ About │ │ Compilers, IDEs, databases │ │ Shells, prompts, modern CLI │ │
│ │ └──────────────────────────────┘ └──────────────────────────────┘ │
│ │ │
│ │ 70 Applications Available • 63 Installed • [Browse Catalog →] │
└───────────────┴────────────────────────────────────────────────────────────────────────┘
(Place screenshots of the Catalog, Review, and Real-Time Installation views in assets/screenshots/)
- Effortless Modular Setup: Select what you want, review what's missing, click Install, and you're done.
- Unified Core Engine: The PySide6 Qt6 GUI and the CLI (
envkit) share 100% of the backend logic, catalog loader, detector, and installer runner. - Cross-Distro Abstraction: Automatically detects and uses
dnf/dnf5(Fedora/RHEL),pacman/yay(Arch),apt(Debian/Ubuntu), andzypper(openSUSE). - Universal Flatpak Integration: Fallback and native support for sandboxed Flathub packages.
- Intelligent Detection Engine: High-speed detection across binary
$PATH, package manager queries (rpm,dpkg,pacman), Flatpak registries, and dotfiles/toolchain paths (~/.nvm,~/.cargo). - Data-Driven Catalog: Over 70+ applications organized into structured YAML files. Add new applications in under 2 minutes without modifying installer code.
- Curated & Custom Profiles: Built-in profiles for Developers, Students, Security Researchers, Creators, and Minimalists, plus local custom profile creation, export, and import.
- Real-Time Asynchronous Installation: Live per-app status indicators, non-blocking Qt worker thread, stdout/stderr streaming log console, and retry for failed packages.
- Strict Installation Safety: No shell
eval, structured command argument arrays, non-root execution, targeted privilege escalation only when required, and XDG-compliant state/logging (~/.local/state/envkit/logs/). - Desktop Guard: Explicit confirmation before pinning any application to GNOME Dash or KDE Plasma taskbars.
| Family | Supported Distributions | Default Package Manager | Secondary / Fallback |
|---|---|---|---|
| Fedora / RHEL | Fedora, Nobara, RHEL, Rocky Linux, AlmaLinux, CentOS Stream | dnf / dnf5 |
Flatpak (Flathub) |
| Arch Linux | Arch Linux, EndeavourOS, CachyOS, Manjaro, Garuda, BlackArch | pacman |
yay / paru (AUR), Flatpak |
| Debian / Ubuntu | Debian, Ubuntu, Linux Mint, Pop!_OS, Kali Linux, Parrot OS, Zorin | apt |
Flatpak (Flathub) |
| openSUSE | openSUSE Tumbleweed, openSUSE Leap, SUSE Linux Enterprise | zypper |
Flatpak (Flathub) |
Clone the repository and run the setup bootstrapper:
git clone https://github.com/rushdv/envkit.git
cd envkit
chmod +x setup.sh
./setup.shThe bootstrapper checks runtime dependencies (Python 3, PyYAML, PySide6) and registers the envkit command in ~/.local/bin/.
After setup, simply run:
envkit- If running in a graphical desktop session (X11 / Wayland) with PySide6,
envkitlaunches the modern Qt6 GUI. - If running in a headless environment, SSH session, or without GUI libraries,
envkitseamlessly falls back to the interactive CLI menu.
- Sidebar Navigation: Switch easily between Home, Applications, Profiles, Installed, Settings, and About.
- Browsing & Search: In the Applications tab, search instantly across names, descriptions, tags, and commands. Filter by category pills or toggle Hide installed.
- Selection: Click any card or the
+ Selectbutton to queue it. The bottom action bar tracks your total selection count in real time. - Review & Confirm: Click Review & Install → to see a clean breakdown of what is already installed vs what will be installed. Optionally enable desktop taskbar pinning.
- Real-time Installation: Watch live progress with per-app indicators (
⟳ Installing,✓ Installed,✕ Failed). Expand the live log console to view output in real time.
The CLI provides full scriptability and automation for terminal users and headless servers:
| Command | Description |
|---|---|
envkit |
Launch graphical interface (or interactive CLI in terminal) |
envkit --gui |
Force launch the PySide6 Qt6 GUI |
envkit --cli |
Force launch the interactive CLI menu |
envkit doctor |
Run system diagnostics (distro, package manager, sudo, network, flatpak, DE) |
envkit list [-c <category>] |
List catalog applications with install status |
envkit search <query> |
Instant fuzzy search across catalog applications |
envkit installed |
List all applications detected as installed on the system |
envkit install <id...> |
Install one or more applications by ID |
envkit install <id...> --dry-run |
Simulate installation without making any system changes |
envkit install <id...> -y |
Non-interactive install (auto-accept confirmation) |
envkit profiles |
List all built-in and custom profiles |
envkit install-profile <name_or_file> |
Install all software defined in a profile |
envkit export <file.yaml> |
Export detected workstation setup into a profile YAML |
envkit export <file.yaml> -p <id> |
Export a specific profile to an external YAML file |
# Diagnostic check
envkit doctor
# Search for container tools
envkit search docker
# Install developer tools non-interactively
envkit install git vscode docker nodejs -y
# Simulate installation without changes
envkit install postgresql bruno --dry-run
# Install a predefined profile
envkit install-profile developer
# Export your workstation setup after a fresh install
envkit export my-workstation.yaml
# Reinstall on a new machine using the exported profile
envkit install-profile my-workstation.yamlenvkit includes a curated catalog of 70+ applications organized across 8 categories:
- Browsers: Firefox, Brave, Chromium, Zen Browser, Tor Browser
- Development: Visual Studio Code, Git, GitHub CLI, Docker, Docker Compose, Node.js, NVM, Python 3, Rust, Go, Java (OpenJDK), GCC, Clang, CMake, PostgreSQL, SQLite, Redis, DBeaver Community, Bruno API Client, Android Studio
- Terminal: Zsh, Starship Prompt, Kitty, tmux, fzf, ripgrep (
rg), fd, bat, eza, zoxide, btop, fastfetch, jq, tree, JetBrains Mono Nerd Font - Security: Nmap, Wireshark, tcpdump, Burp Suite Community, OWASP ZAP, NSA Ghidra, JADX, Hashcat, John the Ripper, socat, whois, ncat
- Student & Academic: Obsidian, Zotero, LibreOffice, Xournal++, Okular, Evince, Draw.io
- Media & Creative: OBS Studio, VLC Media Player, GIMP, Shotcut, Spotify
- Communication: Telegram Desktop, Discord
- Utilities: Bitwarden, AnyDesk, Flatseal, qBittorrent
Predefined profiles are located in profiles/:
- Minimal Essentials (
minimal.yaml): Git, Firefox. - Developer Suite (
developer.yaml): Git, GitHub CLI, VS Code, Node.js, Python, Docker, Docker Compose, PostgreSQL, SQLite, Redis, Bruno, DBeaver. - Student & Academic (
student.yaml): Firefox, Obsidian, Zotero, LibreOffice, Okular, Xournal++, Draw.io. - Security Researcher (
security.yaml): Nmap, Wireshark, tcpdump, Burp Suite, OWASP ZAP, Ghidra, JADX, Hashcat, John the Ripper, socat, whois, ncat. - Content Creator & Media (
creator.yaml): OBS Studio, VLC, GIMP, Shotcut, Spotify. - Complete Workstation (
workstation.yaml): Curated daily-driver collection spanning productivity, dev tools, and utilities.
Custom profiles are stored locally in ~/.config/envkit/profiles/ and can be managed directly in the GUI or via envkit export / envkit install-profile.
envkit decouples presentation, catalog data, and system execution into distinct modular layers:
┌─────────────────────────┐
│ User Interfaces │
│ PySide6 GUI / CLI │
└────────────┬────────────┘
│
┌────────────▼────────────┐
│ Core Engine │
│ (InstallRunner) │
└──────┬───────────┬──────┘
│ │
┌──────────────▼──┐ ┌──▼──────────────┐
│ YAML Catalog │ │ Installed State │
│ 70+ App Configs│ │ Detector │
└──────────────┬──┘ └──┬──────────────┘
│ │
┌──────▼───────────▼──────┐
│ Package Manager Layer │
└──────┬───────────┬──────┘
│ │
┌────────────┬────┴─────┬─────┴──────┬────────────┐
│ │ │ │ │
apt-get dnf pacman zypper flatpak
(Debian) (Fedora) (Arch) (openSUSE) (Flathub)
envkit/
├── bin/
│ └── envkit # Main CLI & GUI executable
├── envkit # Root wrapper symlink
├── setup.sh # Dependency installer & setup wizard
│
├── core/ # Shared Python Core Backend
│ ├── catalog.py # YAML catalog loader, schema, and search
│ ├── config.py # Git, SSH, dotfiles, and desktop pinning
│ ├── detector.py # Application detection engine
│ ├── distro.py # Cross-distro and desktop detection
│ ├── installer.py # Asynchronous runner with real-time logs
│ ├── logger.py # XDG-compliant file and console logging
│ ├── package_manager.py # Package manager abstraction layer
│ ├── privilege.py # Privilege checks and sudo guards
│ └── profiles.py # Profile loader, manager, export/import
│
├── catalog/ # Modular Application Definitions
│ ├── browsers/
│ ├── communication/
│ ├── development/
│ ├── media/
│ ├── security/
│ ├── student/
│ ├── terminal/
│ └── utilities/
│
├── profiles/ # Built-in YAML Profiles
│ ├── creator.yaml
│ ├── developer.yaml
│ ├── minimal.yaml
│ ├── security.yaml
│ ├── student.yaml
│ └── workstation.yaml
│
├── gui/ # Modern PySide6 Qt6 GUI
│ ├── app.py # Qt application entrypoint
│ ├── main_window.py # Sidebar & view routing
│ ├── theme.py # Modern dark theme styling
│ ├── views/ # Views (Home, Catalog, Review, Install, etc.)
│ └── widgets/ # Reusable widgets (AppCard, LogConsole)
│
├── distro/ # Distro base configuration scripts
├── config/ # Dotfiles (gitconfig, kitty.conf, starship, zshrc)
├── modules/ # Legacy module entrypoints
├── scripts/ # Preserved setup scripts
├── tests/ # Automated unit tests
└── README.md
Adding software to envkit requires zero code changes to installer logic. Simply drop a new .yaml file into catalog/<category>/<app_id>.yaml:
id: myapp
name: My Cool App
description: A high-performance utility for Linux
category: development
tags:
- utility
- dev
homepage: https://example.com/myapp
icon: myapp
source_preference: native
packages:
fedora: myapp
arch: myapp
debian: myapp-cli
opensuse: myapp
flatpak:
id: com.example.MyApp
detection:
commands:
- myapp
flatpak: com.example.MyAppenvkit automatically indexes the file, adds it to the catalog and search index, and resolves the correct package on whatever distribution the user runs.
Run envkit doctor to verify your environment, active package manager, and required tools:
envkit doctorInstallation logs are stored with session timestamps in:
~/.local/state/envkit/logs/If PySide6 dependencies are missing:
- Fedora:
sudo dnf install python3-pyside6 - Arch:
sudo pacman -S pyside6 - Ubuntu/Debian:
sudo apt install python3-pyside6 - pip:
pip install --user PySide6 PyYAML
Alternatively, envkit runs fully in interactive CLI mode:
envkit --cli- Fork the repository (
https://github.com/rushdv/envkit). - Create your feature branch (
git checkout -b feature/new-app). - Add or update application YAML files in
catalog/or core logic incore/. - Run automated tests to verify everything passes:
python3 -m unittest discover -s tests -p "test_*.py" -v - Commit your changes and submit a Pull Request.
Released under the MIT License. Built with ❤️ for the Linux community.