An open API service indexing awesome lists of open source software.

https://github.com/bernardoamorimalvarenga/envforge


https://github.com/bernardoamorimalvarenga/envforge

automation backup cli developer-tools development-enviroment devops git linux python sync

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

          

# ๐Ÿ”ฅ EnvForge

**Forge, sync and restore complete development environments in minutes**

![Python](https://img.shields.io/badge/python-v3.8+-blue.svg)
![Platform](https://img.shields.io/badge/platform-Linux-green.svg)
![License](https://img.shields.io/badge/license-MIT-blue.svg)
![Status](https://img.shields.io/badge/status-stable-brightgreen.svg)

---

## ๐ŸŽฏ **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):**
```bash
# 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):**
```bash
pip install envforge
envforge restore "my-complete-environment"
# โ˜• Go grab a coffee - everything automated!
```

---

## ๐Ÿš€ **Installation**

### **Method 1: Direct Installation (Recommended)**
```bash
# Install via PyPI
pip install envforge
```

### **Method 2: Manual Installation**
```bash
# 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**

```bash
# Initialize EnvForge
envforge init

# โœ… Output:
# ๐Ÿ”ฅ EnvForge initialized successfully!
# Config stored in: /home/user/.envforge
```

### **2. Capture Your Current Environment**

```bash
# 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**

```bash
# 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**

```bash
# 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):**
```bash
# 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:**
```bash
# 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)**

```bash
# 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**

```bash
# 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**

```bash
# 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**

```bash
# 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**
```bash
# 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**
```bash
# 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**
```bash
# 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**
```bash
# 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:**
```bash
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:**
```bash
envforge sync setup # 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:**
```bash
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:**
```bash
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):**
```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:**
```bash
# โœ… 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:**
```bash
# Make sure you have sudo
sudo echo "test"

# Execute with confirmation
envforge restore "environment" --force
```

#### **"Git sync failed":**
```bash
# 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":**
```bash
# Make sure VS Code is installed
code --version

# Install manually if necessary
envforge show "environment" # View extension list
```

### **Logs and Debug:**
```bash
# 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:**
1. **Fork** the repository
2. **Create** a branch for your feature (`git checkout -b feature/new-functionality`)
3. **Commit** your changes (`git commit -am 'Add new functionality'`)
4. **Push** to the branch (`git push origin feature/new-functionality`)
5. **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** (Implemented)
- [โœ…] 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](LICENSE) file for details.

---

## ๐Ÿ‘จโ€๐Ÿ’ป **Author**

**Bernardo**
- GitHub: [@bernardoamorimalvarenga](https://github.com/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! ๐Ÿ”ฅ**

[๐Ÿ‡ง๐Ÿ‡ท Portuguรชs](README.pt-br.md) | [๐Ÿ‡บ๐Ÿ‡ธ English](README.md)