EnvForge - Forge, sync and restore complete development environments in minutes
Project description
๐ฅ EnvForge
Forge, sync and restore complete development environments in minutes
๐ฏ What is it?
EnvForge is a CLI tool that solves one of developers' biggest problems: reconfiguring development environments from scratch.
Instead of spending days installing packages, setting up dotfiles and extensions every time you:
- ๐ป Get a new laptop
- ๐ Format your system
- ๐ฅ Need to standardize your team
- ๐ Want to sync home/work setups
You simply restore everything automatically with EnvForge!
๐ EnvForge vs Other Tools
| EnvForge | Git/GitHub | Docker | Dotfiles Repos | |
|---|---|---|---|---|
| What it manages | ๐ฅ๏ธ Complete environment | ๐ Source code | ๐ฆ Isolated containers | ๐ Config files only |
| Installs packages | โ 271 APT packages | โ | โ | โ |
| System configuration | โ Dotfiles + extensions | โ | โ | โ Configs only |
| Synchronization | โ Bidirectional Git | โ Code only | โ | โ Configs only |
| Use case | ๐ ๏ธ Complete personal setup | ๐ Code projects | ๐ App deployment | โ๏ธ Basic configs |
Practical Example:
โ Current Situation (2 days of work):
# New/reformatted laptop:
sudo apt update && sudo apt install git curl vim... # 271 packages manually
code --install-extension ms-python.python... # 15+ VS Code extensions
cp dotfiles/.bashrc ~/.bashrc # Configure terminal
git config --global user.name... # Git configs
# ... hundreds of manual steps
โ With EnvForge (30 minutes):
pip install envforge
envforge restore "my-complete-environment"
# โ Go grab a coffee - everything automated!
๐ Installation
Method 1: Direct Installation (Recommended)
# Install via PyPI
pip install envforge
Method 2: Manual Installation
# Clone the repository
git clone https://github.com/bernardoamorimalvarenga/envforge.git
cd envforge
# Create virtual environment
python -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -e .
# Test installation
envforge --help
System Requirements:
- ๐ง Linux (Ubuntu 20.04+, Debian 10+, Arch, Fedora)
- ๐ Python 3.8+
- ๐ sudo (for package installation)
- ๐ฆ git (for synchronization)
๐ Complete Usage Guide
1. Initial Setup
# Initialize EnvForge
envforge init
# โ
Output:
# ๐ฅ EnvForge initialized successfully!
# Config stored in: /home/user/.envforge
2. Capture Your Current Environment
# Capture everything installed and configured
envforge capture "my-setup-$(date +%Y%m%d)"
# โ
Example output:
# ๐ฅ Capturing environment: my-setup-20241201
# โ Detecting system configuration...
#
# โโโโโโโโโโโโโโโโโโโโโโณโโโโโโโโ
# โ Component โ Count โ
# โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
# โ APT Packages โ 271 โ
# โ Snap Packages โ 26 โ
# โ Flatpak Packages โ 3 โ
# โ PIP Packages โ 45 โ
# โ Dotfiles โ 8 โ
# โ VS Code Extensions โ 23 โ
# โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโ
# โ Environment 'my-setup-20241201' captured successfully!
3. List Saved Environments
# List all captured environments
envforge list
# โ
Example output:
# โโโโโโโโโโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโโโโโโโโโ
# โ Name โ Created โ File โ
# โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
# โ my-setup-20241201 โ 2024-12-01 14:30โ my-setup-20241201.json โ
# โ work-environment โ 2024-11-28 09:15โ work-environment.json โ
# โ complete-setup โ 2024-11-25 16:45โ complete-setup.json โ
# โโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโ
4. View Environment Details
# See what a specific environment contains
envforge show "my-setup-20241201"
# โ
Example output:
# ๐ Environment Details: my-setup-20241201
#
# โโโโโโโโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# โ Property โ Value โ
# โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
# โ Os โ Linux โ
# โ Kernel โ 5.15.0-91-generic โ
# โ Architecture โ x86_64 โ
# โ Python Version โ 3.12.3 โ
# โ Shell โ /bin/bash โ
# โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
#
# โโโโโโโโโโโโโโโโโโโโโโณโโโโโโโโ
# โ Type โ Count โ
# โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
# โ APT โ 271 โ
# โ SNAP โ 26 โ
# โ FLATPAK โ 3 โ
# โ PIP โ 45 โ
# โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโ
5. Restore an Environment
Safe Preview (Dry Run):
# See what will be done WITHOUT applying changes
envforge restore "my-setup-20241201" --dry-run
# โ
Example output:
# ๐ DRY RUN MODE - No changes will be made
# ๐ฆ Restoring packages...
# Would install 45 new APT packages
# Would install: git vim curl nodejs python3-pip code...
# ๐ Would restore 8 dotfiles
# ๐ Would install 12 new VS Code extensions
# โ Dry run completed successfully!
Actual Restoration:
# Restore the environment (WILL INSTALL PACKAGES)
envforge restore "my-setup-20241201"
# โ
Interactive process:
# ๐ฅ Restoring environment: my-setup-20241201
#
# โโโโโโโโโโโโโโโโโโโโโโณโโโโโโโโ
# โ Type โ Count โ
# โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
# โ APT โ 45 โ
# โ SNAP โ 8 โ
# โ PIP โ 12 โ
# โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโ
#
# โ ๏ธ This will install 65 packages and may modify your system.
# Do you want to continue? [y/N]: y
#
# ๐ฆ Installing APT packages...
# โ APT packages installed successfully
# ๐ Restoring dotfiles...
# Backed up existing .bashrc to .bashrc.envforge-backup
# โ Restored .bashrc
# โ Restored .vimrc
# ๐ Installing VS Code extensions...
# โ VS Code extensions installed successfully
# โ Environment restored successfully!
๐ Git Synchronization (Multi-machine)
Initial Setup (Once)
# Configure synchronization with private repository
envforge sync setup git@github.com:your-user/envforge-private.git
# โ
Output:
# ๐ง Setting up git sync with git@github.com:your-user/envforge-private.git
#
# โญโ Sync Ready โโฎ
# โ Git sync setup complete! โ
# โ โ
# โ Repository: git@github.com:your-user/envforge-private.git โ
# โ Branch: main โ
# โ โ
# โ Use 'envforge sync push' to upload environments โ
# โ Use 'envforge sync pull' to download environments โ
# โฐโโโโโโโโโโโโโโโฏ
Pushing Environments
# Send all environments to repository
envforge sync push
# Send only a specific environment
envforge sync push -e "my-setup-20241201"
# Send multiple environments
envforge sync push -e "environment1" -e "environment2"
# โ
Example output:
# ๐ค Pushing specific environments: my-setup-20241201
# โ Successfully pushed 1 specific environments
Downloading Environments
# Download environments from repository
envforge sync pull
# โ
Example output:
# ๐ฅ Pulling environments from remote...
# โ Imported work-environment
# โ Imported home-setup
# โ Successfully imported 2 environments
Synchronization Status
# View sync status
envforge sync status
# โ
Example output:
# โโโโโโโโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# โ Property โ Value โ
# โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
# โ Status โ โ Enabled โ
# โ Remote URL โ git@github.com:your-user/envforge-private.git โ
# โ Branch โ main โ
# โ Uncommitted Changes โ No โ
# โ Last Commit โ abc123 - Sync 2 environments โ
# โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ผ Practical Use Cases
๐ Case 1: New Laptop
# On old machine:
envforge capture "my-complete-setup"
envforge sync push
# On new machine:
pip install envforge
envforge init
envforge sync setup git@github.com:your-user/envforge-private.git
envforge sync pull
envforge restore "my-complete-setup"
# โ 30 minutes later: identical environment!
๐ฅ Case 2: Team Onboarding
# Company setup (done once by tech lead):
envforge capture "company-dev-env-2024"
envforge sync push
# New developer:
envforge sync pull
envforge restore "company-dev-env-2024"
# ๐ Standardized environment automatically!
๐ Case 3: Home/Work Synchronization
# At work:
envforge capture "work-setup"
envforge sync push
# At home:
envforge sync pull
envforge restore "work-setup"
# ๐ Same environment at home!
๐ Case 4: Backup/Disaster Recovery
# Regular backup:
envforge capture "backup-$(date +%Y%m%d)"
envforge sync push
# After problem/reformatting:
envforge sync pull
envforge list # View available backups
envforge restore "backup-20241201"
# ๐ก๏ธ Environment restored!
๐ Available Commands
Basic Commands:
envforge init # Initialize EnvForge
envforge capture "name" # Capture current environment
envforge list # List saved environments
envforge show "name" # Show environment details
envforge restore "name" # Restore environment
envforge delete "name" # Delete environment
envforge status # Current system status
Sync Commands:
envforge sync setup <repo-url> # Configure Git synchronization
envforge sync push # Send all environments
envforge sync push -e "name" # Send specific environment
envforge sync pull # Download environments from repository
envforge sync status # Synchronization status
Utility Commands:
envforge export "name" file.json # Export to file
envforge import-env file.json # Import from file
envforge diff "env1" "env2" # Compare environments
envforge clean # Clean old backups
Useful Options:
envforge restore "name" --dry-run # Preview without applying changes
envforge restore "name" --force # Skip confirmations
envforge delete "name" --force # Delete without confirmation
๐ฏ What Gets Captured
๐ฆ System Packages:
- APT packages (manually installed only)
- Snap packages
- Flatpak packages
- PIP packages (global)
โ๏ธ Configurations:
- Important dotfiles:
.bashrc,.bash_profile,.zshrc,.profile - Tool configs:
.vimrc,.gitconfig - SSH config:
.ssh/config(optional, disabled by default)
๐ Extensions and Tools:
- VS Code: All installed extensions
- System info: OS, kernel, architecture, Python version
Example Snapshot (JSON):
{
"metadata": {
"name": "my-setup-20241201",
"created_at": "2024-12-01T14:30:00",
"version": "0.1.0"
},
"system_info": {
"os": "Linux",
"kernel": "5.15.0-91-generic",
"architecture": "x86_64",
"python_version": "3.12.3"
},
"packages": {
"apt": ["git", "vim", "curl", "nodejs", "python3-pip"],
"snap": ["code", "discord", "telegram-desktop"],
"pip": ["requests", "flask", "django"]
},
"dotfiles": {
".bashrc": "# .bashrc content...",
".vimrc": "# Vim configurations..."
},
"vscode_extensions": [
"ms-python.python",
"ms-vscode.vscode-json"
]
}
๐ Security
โ Secure Settings:
- SSH keys are not captured by default
- Automatic backups of existing files before replacement
- Dry-run mode for safe previews
- Confirmations before important changes
- Private repositories recommended for sync
โ ๏ธ Important Considerations:
- Use private repositories for sensitive data
- Review snapshots before sharing
- Dotfiles may contain personal information
- Always test with --dry-run first
๐ก๏ธ Best Practices:
# โ
Use private repository
envforge sync setup git@github.com:your-user/envforge-PRIVATE.git
# โ
Always preview first
envforge restore "environment" --dry-run
# โ
Manual backup before major changes
cp ~/.bashrc ~/.bashrc.backup-$(date +%s)
# โ
Review what will be installed
envforge show "environment"
๐ Performance
Typical Times:
- Capture: ~30 seconds (271 packages + configs)
- Restore APT: ~15 minutes (271 packages)
- Restore Snap: ~5 minutes (26 packages)
- Dotfiles: ~1 second
- VS Code extensions: ~2 minutes
Sizes:
- Snapshot JSON: ~16KB per environment
- Sync repository: ~1MB (10 environments)
๐ Troubleshooting
Common Issues:
"Permission denied" during restore:
# Make sure you have sudo
sudo echo "test"
# Execute with confirmation
envforge restore "environment" --force
"Git sync failed":
# Check if repository is private and you have access
git clone git@github.com:your-user/envforge-private.git
# Reconfigure if necessary
envforge sync setup git@github.com:your-user/envforge-private.git
"VS Code extensions failed":
# Make sure VS Code is installed
code --version
# Install manually if necessary
envforge show "environment" # View extension list
Logs and Debug:
# View detailed status
envforge status
# Check config files
ls -la ~/.envforge/
# Preview before applying
envforge restore "environment" --dry-run
๐ค Contributing
Contributions are welcome!
How to Contribute:
- Fork the repository
- Create a branch for your feature (
git checkout -b feature/new-functionality) - Commit your changes (
git commit -am 'Add new functionality') - Push to the branch (
git push origin feature/new-functionality) - Open a Pull Request
Areas That Need Help:
- Support for other distros (CentOS, OpenSUSE)
- Additional package managers (brew, chocolatey)
- Automated testing
- Documentation
- Graphical interface
๐บ๏ธ Roadmap
v0.2.0 - Security (Next 4 weeks)
- Snapshot encryption
- Safe package list (whitelist)
- Sensitive data filtering
- Integrity verification
v0.3.0 - Multi-OS (8 weeks)
- Windows support (WSL)
- macOS support
- Homebrew support
- Chocolatey support
v1.0.0 - GUI and Cloud (12 weeks)
- Graphical interface (PyQt6)
- Cloud storage (Google Drive, Dropbox)
- Community templates
- Pro version with advanced features
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐จโ๐ป Author
Bernardo
- GitHub: @bernardoamorimalvarenga
- Email: amorimbernardogame@gmail.com
๐ Acknowledgments
- Click - Fantastic CLI framework
- Rich - Beautiful colored interface
- Git - Robust sync system
- Python Community - Amazing tools
โญ Like the Project?
If EnvForge helped you, consider:
- โญ Give it a star on GitHub
- ๐ Report bugs or suggest improvements
- ๐ข Share with other developers
- ๐ค Contribute with code or documentation
๐ฅ Stop manually reconfiguring environments - forge with EnvForge! ๐ฅ
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file envforge-0.1.2.tar.gz.
File metadata
- Download URL: envforge-0.1.2.tar.gz
- Upload date:
- Size: 26.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a077b5ccb641d81f39f6104d66f2a028b47c770962a54f8039e7e49c87043078
|
|
| MD5 |
ef29c654d3b9ae09fedf3a1e11b0319d
|
|
| BLAKE2b-256 |
a4f5e4e6385c311b289439ff061088ea16f4b0ecb18a2d52716212e0ddeccad6
|
File details
Details for the file envforge-0.1.2-py3-none-any.whl.
File metadata
- Download URL: envforge-0.1.2-py3-none-any.whl
- Upload date:
- Size: 21.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4842e55144cb1cf2208c5a67258a6164dd7f16a25950f5cdd34e0aa482e59232
|
|
| MD5 |
3649932fd31a4ef28fecbe66122a1973
|
|
| BLAKE2b-256 |
2a3a923ab81ee08926af948b169377eedfa1d6a75fa96b9a719a54a8fb73cc27
|