{"id":28338023,"url":"https://github.com/bernardoamorimalvarenga/envforge","last_synced_at":"2026-04-01T20:43:25.698Z","repository":{"id":295176879,"uuid":"989390196","full_name":"bernardoamorimalvarenga/EnvForge","owner":"bernardoamorimalvarenga","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-02T15:05:26.000Z","size":254,"stargazers_count":30,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-09T10:17:42.326Z","etag":null,"topics":["automation","backup","cli","developer-tools","development-enviroment","devops","git","linux","python","sync"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bernardoamorimalvarenga.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-24T02:16:43.000Z","updated_at":"2025-11-14T19:51:47.000Z","dependencies_parsed_at":"2025-05-30T03:00:50.322Z","dependency_job_id":"e2c6c447-2619-4622-a0bc-8d39a935ab6e","html_url":"https://github.com/bernardoamorimalvarenga/EnvForge","commit_stats":null,"previous_names":["bernardoamorimalvarenga/devenv-manager","bernardoamorimalvarenga/envforge"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bernardoamorimalvarenga/EnvForge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardoamorimalvarenga%2FEnvForge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardoamorimalvarenga%2FEnvForge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardoamorimalvarenga%2FEnvForge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardoamorimalvarenga%2FEnvForge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bernardoamorimalvarenga","download_url":"https://codeload.github.com/bernardoamorimalvarenga/EnvForge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardoamorimalvarenga%2FEnvForge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291778,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","backup","cli","developer-tools","development-enviroment","devops","git","linux","python","sync"],"created_at":"2025-05-27T00:15:27.512Z","updated_at":"2026-04-01T20:43:25.675Z","avatar_url":"https://github.com/bernardoamorimalvarenga.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🔥 EnvForge\n\n**Forge, sync and restore complete development environments in minutes**\n\n![Python](https://img.shields.io/badge/python-v3.8+-blue.svg)\n![Platform](https://img.shields.io/badge/platform-Linux-green.svg)\n![License](https://img.shields.io/badge/license-MIT-blue.svg)\n![Status](https://img.shields.io/badge/status-stable-brightgreen.svg)\n\n---\n\n## 🎯 **What is it?**\n\nEnvForge is a CLI tool that solves one of developers' biggest problems: **reconfiguring development environments from scratch**.\n\nInstead of spending days installing packages, setting up dotfiles and extensions every time you:\n- 💻 Get a new laptop\n- 🔄 Format your system\n- 👥 Need to standardize your team\n- 🏠 Want to sync home/work setups\n\n**You simply restore everything automatically with EnvForge!**\n\n---\n\n## 🆚 **EnvForge vs Other Tools**\n\n| | EnvForge | Git/GitHub | Docker | Dotfiles Repos |\n|---|---|---|---|---|\n| **What it manages** | 🖥️ **Complete environment** | 📝 Source code | 📦 Isolated containers | 📄 Config files only |\n| **Installs packages** | ✅ 271 APT packages | ❌ | ❌ | ❌ |\n| **System configuration** | ✅ Dotfiles + extensions | ❌ | ❌ | ✅ Configs only |\n| **Synchronization** | ✅ Bidirectional Git | ✅ Code only | ❌ | ✅ Configs only |\n| **Use case** | 🛠️ Complete personal setup | 📂 Code projects | 🚀 App deployment | ⚙️ Basic configs |\n\n### **Practical Example:**\n\n**❌ Current Situation (2 days of work):**\n```bash\n# New/reformatted laptop:\nsudo apt update \u0026\u0026 sudo apt install git curl vim...    # 271 packages manually\ncode --install-extension ms-python.python...          # 15+ VS Code extensions  \ncp dotfiles/.bashrc ~/.bashrc                         # Configure terminal\ngit config --global user.name...                      # Git configs\n# ... hundreds of manual steps\n```\n\n**✅ With EnvForge (30 minutes):**\n```bash\npip install envforge\nenvforge restore \"my-complete-environment\"\n# ☕ Go grab a coffee - everything automated!\n```\n\n---\n\n## 🚀 **Installation**\n\n### **Method 1: Direct Installation (Recommended)**\n```bash\n# Install via PyPI\npip install envforge\n```\n\n### **Method 2: Manual Installation**\n```bash\n# Clone the repository\ngit clone https://github.com/bernardoamorimalvarenga/envforge.git\ncd envforge\n\n# Create virtual environment\npython -m venv .venv\nsource .venv/bin/activate\n\n# Install dependencies\npip install -e .\n\n# Test installation\nenvforge --help\n```\n\n### **System Requirements:**\n- 🐧 **Linux** (Ubuntu 20.04+, Debian 10+, Arch, Fedora)\n- 🐍 **Python 3.8+**\n- 🔑 **sudo** (for package installation)\n- 📦 **git** (for synchronization)\n\n---\n\n## 📋 **Complete Usage Guide**\n\n### **1. Initial Setup**\n\n```bash\n# Initialize EnvForge\nenvforge init\n\n# ✅ Output:\n# 🔥 EnvForge initialized successfully!\n# Config stored in: /home/user/.envforge\n```\n\n### **2. Capture Your Current Environment**\n\n```bash\n# Capture everything installed and configured\nenvforge capture \"my-setup-$(date +%Y%m%d)\"\n\n# ✅ Example output:\n# 🔥 Capturing environment: my-setup-20241201\n# ✓ Detecting system configuration...\n# \n# ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓\n# ┃ Component          ┃ Count ┃\n# ┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━┩\n# │ APT Packages       │ 271   │\n# │ Snap Packages      │ 26    │\n# │ Flatpak Packages   │ 3     │\n# │ PIP Packages       │ 45    │\n# │ Dotfiles           │ 8     │\n# │ VS Code Extensions │ 23    │\n# └────────────────────┴───────┘\n# ✓ Environment 'my-setup-20241201' captured successfully!\n```\n\n### **3. List Saved Environments**\n\n```bash\n# List all captured environments\nenvforge list\n\n# ✅ Example output:\n# ┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓\n# ┃ Name                 ┃ Created         ┃ File                ┃\n# ┡━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩\n# │ my-setup-20241201    │ 2024-12-01 14:30│ my-setup-20241201.json │\n# │ work-environment     │ 2024-11-28 09:15│ work-environment.json  │\n# │ complete-setup       │ 2024-11-25 16:45│ complete-setup.json    │\n# └──────────────────────┴─────────────────┴─────────────────────────┘\n```\n\n### **4. View Environment Details**\n\n```bash\n# See what a specific environment contains\nenvforge show \"my-setup-20241201\"\n\n# ✅ Example output:\n# 📋 Environment Details: my-setup-20241201\n# \n# ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n# ┃ Property           ┃ Value                        ┃\n# ┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n# │ Os                 │ Linux                        │\n# │ Kernel             │ 5.15.0-91-generic           │\n# │ Architecture       │ x86_64                       │\n# │ Python Version     │ 3.12.3                      │\n# │ Shell              │ /bin/bash                    │\n# └────────────────────┴─────────────────────────────┘\n# \n# ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓\n# ┃ Type               ┃ Count ┃\n# ┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━┩\n# │ APT                │ 271   │\n# │ SNAP               │ 26    │\n# │ FLATPAK            │ 3     │\n# │ PIP                │ 45    │\n# └────────────────────┴───────┘\n```\n\n### **5. Restore an Environment**\n\n#### **Safe Preview (Dry Run):**\n```bash\n# See what will be done WITHOUT applying changes\nenvforge restore \"my-setup-20241201\" --dry-run\n\n# ✅ Example output:\n# 🔍 DRY RUN MODE - No changes will be made\n# 📦 Restoring packages...\n# Would install 45 new APT packages\n# Would install: git vim curl nodejs python3-pip code...\n# 📝 Would restore 8 dotfiles\n# 🔌 Would install 12 new VS Code extensions\n# ✓ Dry run completed successfully!\n```\n\n#### **Actual Restoration:**\n```bash\n# Restore the environment (WILL INSTALL PACKAGES)\nenvforge restore \"my-setup-20241201\"\n\n# ✅ Interactive process:\n# 🔥 Restoring environment: my-setup-20241201\n# \n# ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓\n# ┃ Type               ┃ Count ┃\n# ┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━┩\n# │ APT                │ 45    │\n# │ SNAP               │ 8     │\n# │ PIP                │ 12    │\n# └────────────────────┴───────┘\n# \n# ⚠️  This will install 65 packages and may modify your system.\n# Do you want to continue? [y/N]: y\n# \n# 📦 Installing APT packages...\n# ✓ APT packages installed successfully\n# 📝 Restoring dotfiles...\n# Backed up existing .bashrc to .bashrc.envforge-backup\n# ✓ Restored .bashrc\n# ✓ Restored .vimrc\n# 🔌 Installing VS Code extensions...\n# ✓ VS Code extensions installed successfully\n# ✓ Environment restored successfully!\n```\n\n---\n\n## 🔄 **Git Synchronization (Multi-machine)**\n\n### **Initial Setup (Once)**\n\n```bash\n# Configure synchronization with private repository\nenvforge sync setup git@github.com:your-user/envforge-private.git\n\n# ✅ Output:\n# 🔧 Setting up git sync with git@github.com:your-user/envforge-private.git\n# \n# ╭─ Sync Ready ─╮\n# │ Git sync setup complete! │\n# │                          │\n# │ Repository: git@github.com:your-user/envforge-private.git │\n# │ Branch: main             │\n# │                          │\n# │ Use 'envforge sync push' to upload environments │\n# │ Use 'envforge sync pull' to download environments │\n# ╰──────────────╯\n```\n\n### **Pushing Environments**\n\n```bash\n# Send all environments to repository\nenvforge sync push\n\n# Send only a specific environment\nenvforge sync push -e \"my-setup-20241201\"\n\n# Send multiple environments\nenvforge sync push -e \"environment1\" -e \"environment2\"\n\n# ✅ Example output:\n# 📤 Pushing specific environments: my-setup-20241201\n# ✓ Successfully pushed 1 specific environments\n```\n\n### **Downloading Environments**\n\n```bash\n# Download environments from repository\nenvforge sync pull\n\n# ✅ Example output:\n# 📥 Pulling environments from remote...\n# ✓ Imported work-environment\n# ✓ Imported home-setup\n# ✓ Successfully imported 2 environments\n```\n\n### **Synchronization Status**\n\n```bash\n# View sync status\nenvforge sync status\n\n# ✅ Example output:\n# ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n# ┃ Property           ┃ Value                                               ┃\n# ┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n# │ Status             │ ✓ Enabled                                          │\n# │ Remote URL         │ git@github.com:your-user/envforge-private.git     │\n# │ Branch             │ main                                               │\n# │ Uncommitted Changes │ No                                                │\n# │ Last Commit        │ abc123 - Sync 2 environments                      │\n# └────────────────────┴────────────────────────────────────────────────────┘\n```\n\n---\n\n## 💼 **Practical Use Cases**\n\n### **🆕 Case 1: New Laptop**\n```bash\n# On old machine:\nenvforge capture \"my-complete-setup\"\nenvforge sync push\n\n# On new machine:\npip install envforge\nenvforge init\nenvforge sync setup git@github.com:your-user/envforge-private.git\nenvforge sync pull\nenvforge restore \"my-complete-setup\"\n# ☕ 30 minutes later: identical environment!\n```\n\n### **👥 Case 2: Team Onboarding**\n```bash\n# Company setup (done once by tech lead):\nenvforge capture \"company-dev-env-2024\"  \nenvforge sync push\n\n# New developer:\nenvforge sync pull\nenvforge restore \"company-dev-env-2024\"\n# 🎉 Standardized environment automatically!\n```\n\n### **🏠 Case 3: Home/Work Synchronization**\n```bash\n# At work:\nenvforge capture \"work-setup\"\nenvforge sync push\n\n# At home:\nenvforge sync pull\nenvforge restore \"work-setup\" \n# 🔄 Same environment at home!\n```\n\n### **🔄 Case 4: Backup/Disaster Recovery**\n```bash\n# Regular backup:\nenvforge capture \"backup-$(date +%Y%m%d)\"\nenvforge sync push\n\n# After problem/reformatting:\nenvforge sync pull\nenvforge list  # View available backups\nenvforge restore \"backup-20241201\"\n# 🛡️ Environment restored!\n```\n\n---\n\n## 📊 **Available Commands**\n\n### **Basic Commands:**\n```bash\nenvforge init                    # Initialize EnvForge\nenvforge capture \"name\"          # Capture current environment\nenvforge list                    # List saved environments\nenvforge show \"name\"             # Show environment details  \nenvforge restore \"name\"          # Restore environment\nenvforge delete \"name\"           # Delete environment\nenvforge status                  # Current system status\n```\n\n### **Sync Commands:**\n```bash\nenvforge sync setup \u003crepo-url\u003e   # Configure Git synchronization\nenvforge sync push               # Send all environments\nenvforge sync push -e \"name\"     # Send specific environment\nenvforge sync pull               # Download environments from repository\nenvforge sync status             # Synchronization status\n```\n\n### **Utility Commands:**\n```bash\nenvforge export \"name\" file.json    # Export to file\nenvforge import-env file.json       # Import from file\nenvforge diff \"env1\" \"env2\"         # Compare environments\nenvforge clean                      # Clean old backups\n```\n\n### **Useful Options:**\n```bash\nenvforge restore \"name\" --dry-run     # Preview without applying changes\nenvforge restore \"name\" --force       # Skip confirmations\nenvforge delete \"name\" --force        # Delete without confirmation\n```\n\n---\n\n## 🎯 **What Gets Captured**\n\n### **📦 System Packages:**\n- **APT packages** (manually installed only)\n- **Snap packages** \n- **Flatpak packages**\n- **PIP packages** (global)\n\n### **⚙️ Configurations:**\n- **Important dotfiles**: `.bashrc`, `.bash_profile`, `.zshrc`, `.profile`\n- **Tool configs**: `.vimrc`, `.gitconfig`\n- **SSH config**: `.ssh/config` (optional, disabled by default)\n\n### **🔌 Extensions and Tools:**\n- **VS Code**: All installed extensions\n- **System info**: OS, kernel, architecture, Python version\n\n### **Example Snapshot (JSON):**\n```json\n{\n  \"metadata\": {\n    \"name\": \"my-setup-20241201\",\n    \"created_at\": \"2024-12-01T14:30:00\",\n    \"version\": \"0.1.0\"\n  },\n  \"system_info\": {\n    \"os\": \"Linux\",\n    \"kernel\": \"5.15.0-91-generic\",\n    \"architecture\": \"x86_64\",\n    \"python_version\": \"3.12.3\"\n  },\n  \"packages\": {\n    \"apt\": [\"git\", \"vim\", \"curl\", \"nodejs\", \"python3-pip\"],\n    \"snap\": [\"code\", \"discord\", \"telegram-desktop\"],\n    \"pip\": [\"requests\", \"flask\", \"django\"]\n  },\n  \"dotfiles\": {\n    \".bashrc\": \"# .bashrc content...\",\n    \".vimrc\": \"# Vim configurations...\"\n  },\n  \"vscode_extensions\": [\n    \"ms-python.python\",\n    \"ms-vscode.vscode-json\"\n  ]\n}\n```\n\n---\n\n## 🔒 **Security**\n\n### **✅ Secure Settings:**\n- **SSH keys** are not captured by default\n- **Automatic backups** of existing files before replacement\n- **Dry-run mode** for safe previews\n- **Confirmations** before important changes\n- **Private repositories** recommended for sync\n\n### **⚠️ Important Considerations:**\n- **Use private repositories** for sensitive data\n- **Review snapshots** before sharing\n- **Dotfiles may contain personal information**\n- **Always test with --dry-run** first\n\n### **🛡️ Best Practices:**\n```bash\n# ✅ Use private repository\nenvforge sync setup git@github.com:your-user/envforge-PRIVATE.git\n\n# ✅ Always preview first\nenvforge restore \"environment\" --dry-run\n\n# ✅ Manual backup before major changes\ncp ~/.bashrc ~/.bashrc.backup-$(date +%s)\n\n# ✅ Review what will be installed\nenvforge show \"environment\"\n```\n\n---\n\n## 🚀 **Performance**\n\n### **Typical Times:**\n- **Capture**: ~30 seconds (271 packages + configs)\n- **Restore APT**: ~15 minutes (271 packages)\n- **Restore Snap**: ~5 minutes (26 packages)\n- **Dotfiles**: ~1 second\n- **VS Code extensions**: ~2 minutes\n\n### **Sizes:**\n- **Snapshot JSON**: ~16KB per environment\n- **Sync repository**: ~1MB (10 environments)\n\n---\n\n## 🐛 **Troubleshooting**\n\n### **Common Issues:**\n\n#### **\"Permission denied\" during restore:**\n```bash\n# Make sure you have sudo\nsudo echo \"test\"\n\n# Execute with confirmation\nenvforge restore \"environment\" --force\n```\n\n#### **\"Git sync failed\":**\n```bash\n# Check if repository is private and you have access\ngit clone git@github.com:your-user/envforge-private.git\n\n# Reconfigure if necessary\nenvforge sync setup git@github.com:your-user/envforge-private.git\n```\n\n#### **\"VS Code extensions failed\":**\n```bash\n# Make sure VS Code is installed\ncode --version\n\n# Install manually if necessary\nenvforge show \"environment\"  # View extension list\n```\n\n### **Logs and Debug:**\n```bash\n# View detailed status\nenvforge status\n\n# Check config files\nls -la ~/.envforge/\n\n# Preview before applying\nenvforge restore \"environment\" --dry-run\n```\n\n---\n\n## 🤝 **Contributing**\n\nContributions are welcome! \n\n### **How to Contribute:**\n1. **Fork** the repository\n2. **Create** a branch for your feature (`git checkout -b feature/new-functionality`)\n3. **Commit** your changes (`git commit -am 'Add new functionality'`)\n4. **Push** to the branch (`git push origin feature/new-functionality`)\n5. **Open** a Pull Request\n\n### **Areas That Need Help:**\n- **Support for other distros** (CentOS, OpenSUSE)\n- **Additional package managers** (brew, chocolatey)\n- **Automated testing**\n- **Documentation**\n- **Graphical interface**\n\n---\n\n## 🗺️ **Roadmap**\n\n### **v0.2.0 - Security** (Implemented)\n- [✅] Snapshot encryption\n- [✅] Safe package list (whitelist)\n- [✅] Sensitive data filtering\n- [✅] Integrity verification\n\n### **v0.3.0 - Multi-OS** (8 weeks)\n- [ ] Windows support (WSL)\n- [ ] macOS support\n- [ ] Homebrew support\n- [ ] Chocolatey support\n\n### **v1.0.0 - GUI and Cloud** (12 weeks)\n- [ ] Graphical interface (PyQt6)\n- [ ] Cloud storage (Google Drive, Dropbox)\n- [ ] Community templates\n- [ ] Pro version with advanced features\n\n---\n\n## 📄 **License**\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n## 👨‍💻 **Author**\n\n**Bernardo**\n- GitHub: [@bernardoamorimalvarenga](https://github.com/bernardoamorimalvarenga)\n- Email: amorimbernardogame@gmail.com\n\n---\n\n## 🙏 **Acknowledgments**\n\n- **Click** - Fantastic CLI framework\n- **Rich** - Beautiful colored interface  \n- **Git** - Robust sync system\n- **Python Community** - Amazing tools\n\n---\n\n## ⭐ **Like the Project?**\n\nIf EnvForge helped you, consider:\n- ⭐ **Give it a star** on GitHub\n- 🐛 **Report bugs** or **suggest improvements**\n- 📢 **Share** with other developers\n- 🤝 **Contribute** with code or documentation\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**🔥 Stop manually reconfiguring environments - forge with EnvForge! 🔥**\n\n [🇧🇷 Português](README.pt-br.md) | [🇺🇸 English](README.md)\n\n\u003c/div\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbernardoamorimalvarenga%2Fenvforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbernardoamorimalvarenga%2Fenvforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbernardoamorimalvarenga%2Fenvforge/lists"}