# BAPAO - Developer Environment Sync Engine
**Make your entire development environment portable.**
BAPAO is a command-line tool that manages multiple developer identities and configurations, allowing you to seamlessly switch between different projects, clients, or organizations without configuration conflicts.
## Features
- **Profile Management**: Create isolated developer profiles for different contexts
- **🔐 Passkey Protection**: 64-character secure passphrases for SSH and GPG keys
- **Key Generation**: Automatic SSH (Ed25519) and GPG key generation with encryption
- **Smart Configuration**: Git and SSH configuration with directory-based switching
- **Host Aliases**: Automatic SSH host alias generation (e.g., `gitlab.com-myprofile`)
- **Health Verification**: Comprehensive profile health checks with security status
- **Interactive Cleanup**: Forensic removal of profiles with zero traces left behind
## Installation
```bash
pip install bapao
```
## Quick Start
### 1. Create a Profile
```bash
bapao init work --name "John Doe" --email "john@company.com" --base-dir "~/code/work"
```
### 2. Generate Passkey-Protected Keys
```bash
bapao forge work
# Generates 64-character passkey, displays securely for password manager storage
# Creates SSH and GPG keys protected with the passkey
```
### 3. Configure Git & SSH
```bash
bapao wire work
```
### 4. Verify Everything Works
```bash
bapao verify work
```
## Commands
| Command | Description |
|---------|-------------|
| `bapao init <profile_name> [options]` | Initialize a new BAPAO profile with Git identity |
| `bapao forge <profile_name>` | Generate SSH Ed25519 and GPG keys for a profile |
| `bapao wire <profile_name> [--force]` | Configure Git and SSH settings for a profile |
| `bapao verify <profile_name>` | Verify profile setup and show health status |
| `bapao list [--verbose]` | List all configured profiles with status |
| `bapao cleanup [profile_name] [options]` | Remove all traces of a profile (interactive if no name) |
| `bapao banner` | Display the BAPAO ASCII art banner |
## How It Works
### Directory-Based Identity Switching
BAPAO uses Git's `includeIf` feature to automatically switch your identity based on your current directory:
```bash
# Working in ~/code/client-a/ automatically uses client-a profile
cd ~/code/client-a/
git config user.name # Returns: "Client A Developer"
# Working in ~/code/personal/ automatically uses personal profile
cd ~/code/personal/
git config user.name # Returns: "Personal Projects"
```
### SSH Host Aliases
Each profile gets unique SSH host aliases to prevent key conflicts:
```bash
# Instead of: git clone git@gitlab.com:user/repo.git
# Use: git clone git@gitlab.com-myprofile:user/repo.git
```
### Profile Isolation
Each profile maintains:
- 🔐 **Passkey-protected SSH keys** (`~/.ssh/id_ed25519_profilename`)
- 🔐 **Passkey-protected GPG keys** for commit signing
- 📁 **Separate Git configuration** (`~/.gitconfig-profilename`)
- 🌐 **Isolated SSH host configurations**
- 💾 **Secure passkey hints** (actual passkey stored in your password manager)
## Typical Workflow
1. **Setup**: Create profiles for different contexts (work, personal, clients)
2. **Generate**: Create SSH and GPG keys for each profile
3. **Configure**: Wire up Git and SSH configurations
4. **Work**: Cd into any project directory and your identity switches automatically
5. **Cleanup**: Remove profiles completely when no longer needed
## Example: Multi-Client Setup
```bash
# Client A setup
bapao init client-a --name "Client A Dev" --email "dev@client-a.com" --base-dir "~/code/client-a"
bapao forge client-a
bapao wire client-a
# Client B setup
bapao init client-b --name "Client B Developer" --email "developer@client-b.com" --base-dir "~/code/client-b"
bapao forge client-b
bapao wire client-b
# Personal projects
bapao init personal --name "Your Name" --email "you@personal.com" --base-dir "~/code/personal"
bapao forge personal
bapao wire personal
# List all profiles
bapao list --verbose
# Interactive cleanup when done
bapao cleanup
```
Now when you work in any directory, your Git identity, SSH keys, and GPG signing automatically match the appropriate profile.
## Command Details
### Init Command Options
The `bapao init` command supports several options for customization:
```bash
bapao init <profile_name> [OPTIONS]
Options:
--name TEXT Git name for commits
--email TEXT Git email for commits
--base-dir TEXT Base working directory for this profile
--host-alias TEXT Custom Git host alias (auto-generated if not provided)
```
**Example with all options:**
```bash
bapao init work-gitlab \
--name "John Doe" \
--email "john.doe@company.com" \
--base-dir "~/projects/work" \
--host-alias "gitlab.company.com-work"
```
### Cleanup Command Features
The `bapao cleanup` command offers flexible profile removal:
```bash
# Interactive selection - shows table of all profiles
bapao cleanup
# Remove specific profile with confirmation
bapao cleanup work-profile
# Force removal without confirmation
bapao cleanup work-profile --force
# Interactive mode (same as no arguments)
bapao cleanup --interactive
```
**What gets removed:**
- SSH private and public keys
- GPG secret and public keys
- Git configuration files
- SSH host configuration entries
- Profile entry from `~/.config/bapao/profiles.yaml`
- Empty base directory (if specified and empty)
## Configuration
BAPAO stores profiles in `~/.config/bapao/profiles.yaml`. Each profile contains:
- Base directory path
- SSH key paths
- Git configuration file path
- GPG key fingerprint
- SSH host alias
## Security Features
- **🔐 Passkey Protection**: 64-character cryptographically secure passphrases
- **Ed25519 SSH Keys**: Modern, secure SSH key generation with encryption
- **GPG Integration**: Automatic GPG key creation and Git signing setup with passphrase
- **Zero Trust**: Keys are useless without the passkey from your password manager
- **Forensic Cleanup**: Complete profile removal with zero traces
- **Key Isolation**: Each profile uses dedicated keys to prevent conflicts
## 🔐 Passkey Security Model
### How It Works
1. **Generate**: BAPAO creates a 64-character cryptographically secure passkey
2. **Display**: Passkey shown once in a secure, highlighted format
3. **Store**: User saves passkey to password manager with suggested label
4. **Protect**: Both SSH and GPG keys encrypted with the same passkey
5. **Use**: When Git operations need keys, user enters saved passkey
### Security Benefits
- ✅ **Zero Trust**: Stolen key files are useless without passkey
- ✅ **Single Passkey**: Same 64-char key protects both SSH and GPG
- ✅ **Never Stored**: BAPAO never stores the actual passkey
- ✅ **Password Manager Integration**: Works with existing secure storage
- ✅ **Cross-Platform**: Same security model on all operating systems
## Platform Support
BAPAO works on **Linux**, **macOS**, and **Windows** with the following requirements:
### All Platforms
- Python 3.8+
- Git 2.13+ (for `includeIf` support)
### Platform-Specific Requirements
**Linux/macOS:**
- OpenSSH client (usually pre-installed)
- GPG/GnuPG (usually pre-installed or available via package manager)
**Windows:**
- Git for Windows (includes SSH client)
- GPG4Win or similar GPG implementation
- Windows Subsystem for Linux (WSL) recommended for best compatibility
### Key Features by Platform
| Feature | Linux | macOS | Windows | Notes |
|---------|-------|-------|---------|--------|
| SSH Key Generation | ✅ | ✅ | ✅ | Uses Python cryptography library |
| GPG Key Generation | ✅ | ✅ | ⚠️ | Requires GPG installation |
| Git Configuration | ✅ | ✅ | ✅ | Cross-platform paths handled |
| SSH Config | ✅ | ✅ | ✅ | Standard SSH config format |
| Directory Switching | ✅ | ✅ | ✅ | Git `includeIf` works everywhere |
**Windows Notes:**
- Use forward slashes (`/`) or double backslashes (`\\`) in paths
- WSL provides the most Unix-like experience
- PowerShell and Command Prompt are supported
## License
Proprietary software - All rights reserved.
## Support
For support, feature requests, or bug reports, please contact the development team directly through PyPI or the package maintainer.
Raw data
{
"_id": null,
"home_page": "https://gitlab.com/bapao/bapao-sync",
"name": "bapao",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "KankerBapao <4duxjx7x9jr7covy0sv7@kubehub.eu>",
"keywords": "development, environment, sync, git, ssh, gpg, devtools",
"author": "BAPAO Team",
"author_email": "KankerBapao <4duxjx7x9jr7covy0sv7@kubehub.eu>",
"download_url": "https://files.pythonhosted.org/packages/4a/17/f1870fb866ef2026ac74ba4e04cb527900a11496c840799024a8a0937962/bapao-0.0.6.tar.gz",
"platform": null,
"description": "# BAPAO - Developer Environment Sync Engine\n\n**Make your entire development environment portable.**\n\nBAPAO is a command-line tool that manages multiple developer identities and configurations, allowing you to seamlessly switch between different projects, clients, or organizations without configuration conflicts.\n\n## Features\n\n- **Profile Management**: Create isolated developer profiles for different contexts\n- **\ud83d\udd10 Passkey Protection**: 64-character secure passphrases for SSH and GPG keys\n- **Key Generation**: Automatic SSH (Ed25519) and GPG key generation with encryption\n- **Smart Configuration**: Git and SSH configuration with directory-based switching \n- **Host Aliases**: Automatic SSH host alias generation (e.g., `gitlab.com-myprofile`)\n- **Health Verification**: Comprehensive profile health checks with security status\n- **Interactive Cleanup**: Forensic removal of profiles with zero traces left behind\n\n## Installation\n\n```bash\npip install bapao\n```\n\n## Quick Start\n\n### 1. Create a Profile\n\n```bash\nbapao init work --name \"John Doe\" --email \"john@company.com\" --base-dir \"~/code/work\"\n```\n\n### 2. Generate Passkey-Protected Keys\n\n```bash\nbapao forge work\n# Generates 64-character passkey, displays securely for password manager storage\n# Creates SSH and GPG keys protected with the passkey\n```\n\n### 3. Configure Git & SSH\n\n```bash\nbapao wire work\n```\n\n### 4. Verify Everything Works\n\n```bash\nbapao verify work\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `bapao init <profile_name> [options]` | Initialize a new BAPAO profile with Git identity |\n| `bapao forge <profile_name>` | Generate SSH Ed25519 and GPG keys for a profile |\n| `bapao wire <profile_name> [--force]` | Configure Git and SSH settings for a profile |\n| `bapao verify <profile_name>` | Verify profile setup and show health status |\n| `bapao list [--verbose]` | List all configured profiles with status |\n| `bapao cleanup [profile_name] [options]` | Remove all traces of a profile (interactive if no name) |\n| `bapao banner` | Display the BAPAO ASCII art banner |\n\n## How It Works\n\n### Directory-Based Identity Switching\nBAPAO uses Git's `includeIf` feature to automatically switch your identity based on your current directory:\n\n```bash\n# Working in ~/code/client-a/ automatically uses client-a profile\ncd ~/code/client-a/\ngit config user.name # Returns: \"Client A Developer\"\n\n# Working in ~/code/personal/ automatically uses personal profile \ncd ~/code/personal/\ngit config user.name # Returns: \"Personal Projects\"\n```\n\n### SSH Host Aliases\nEach profile gets unique SSH host aliases to prevent key conflicts:\n\n```bash\n# Instead of: git clone git@gitlab.com:user/repo.git\n# Use: git clone git@gitlab.com-myprofile:user/repo.git\n```\n\n### Profile Isolation\nEach profile maintains:\n\n- \ud83d\udd10 **Passkey-protected SSH keys** (`~/.ssh/id_ed25519_profilename`)\n- \ud83d\udd10 **Passkey-protected GPG keys** for commit signing\n- \ud83d\udcc1 **Separate Git configuration** (`~/.gitconfig-profilename`) \n- \ud83c\udf10 **Isolated SSH host configurations**\n- \ud83d\udcbe **Secure passkey hints** (actual passkey stored in your password manager)\n\n## Typical Workflow\n\n1. **Setup**: Create profiles for different contexts (work, personal, clients)\n2. **Generate**: Create SSH and GPG keys for each profile\n3. **Configure**: Wire up Git and SSH configurations\n4. **Work**: Cd into any project directory and your identity switches automatically\n5. **Cleanup**: Remove profiles completely when no longer needed\n\n## Example: Multi-Client Setup\n\n```bash\n# Client A setup\nbapao init client-a --name \"Client A Dev\" --email \"dev@client-a.com\" --base-dir \"~/code/client-a\"\nbapao forge client-a \nbapao wire client-a\n\n# Client B setup \nbapao init client-b --name \"Client B Developer\" --email \"developer@client-b.com\" --base-dir \"~/code/client-b\"\nbapao forge client-b\nbapao wire client-b\n\n# Personal projects\nbapao init personal --name \"Your Name\" --email \"you@personal.com\" --base-dir \"~/code/personal\"\nbapao forge personal\nbapao wire personal\n\n# List all profiles\nbapao list --verbose\n\n# Interactive cleanup when done\nbapao cleanup\n```\n\nNow when you work in any directory, your Git identity, SSH keys, and GPG signing automatically match the appropriate profile.\n\n## Command Details\n\n### Init Command Options\n\nThe `bapao init` command supports several options for customization:\n\n```bash\nbapao init <profile_name> [OPTIONS]\n\nOptions:\n --name TEXT Git name for commits\n --email TEXT Git email for commits \n --base-dir TEXT Base working directory for this profile\n --host-alias TEXT Custom Git host alias (auto-generated if not provided)\n```\n\n**Example with all options:**\n```bash\nbapao init work-gitlab \\\n --name \"John Doe\" \\\n --email \"john.doe@company.com\" \\\n --base-dir \"~/projects/work\" \\\n --host-alias \"gitlab.company.com-work\"\n```\n\n### Cleanup Command Features\n\nThe `bapao cleanup` command offers flexible profile removal:\n\n```bash\n# Interactive selection - shows table of all profiles\nbapao cleanup\n\n# Remove specific profile with confirmation\nbapao cleanup work-profile\n\n# Force removal without confirmation \nbapao cleanup work-profile --force\n\n# Interactive mode (same as no arguments)\nbapao cleanup --interactive\n```\n\n**What gets removed:**\n- SSH private and public keys\n- GPG secret and public keys \n- Git configuration files\n- SSH host configuration entries\n- Profile entry from `~/.config/bapao/profiles.yaml`\n- Empty base directory (if specified and empty)\n\n## Configuration\n\nBAPAO stores profiles in `~/.config/bapao/profiles.yaml`. Each profile contains:\n- Base directory path\n- SSH key paths \n- Git configuration file path\n- GPG key fingerprint\n- SSH host alias\n\n## Security Features\n\n- **\ud83d\udd10 Passkey Protection**: 64-character cryptographically secure passphrases\n- **Ed25519 SSH Keys**: Modern, secure SSH key generation with encryption\n- **GPG Integration**: Automatic GPG key creation and Git signing setup with passphrase\n- **Zero Trust**: Keys are useless without the passkey from your password manager\n- **Forensic Cleanup**: Complete profile removal with zero traces\n- **Key Isolation**: Each profile uses dedicated keys to prevent conflicts\n\n## \ud83d\udd10 Passkey Security Model\n\n### How It Works\n1. **Generate**: BAPAO creates a 64-character cryptographically secure passkey\n2. **Display**: Passkey shown once in a secure, highlighted format\n3. **Store**: User saves passkey to password manager with suggested label\n4. **Protect**: Both SSH and GPG keys encrypted with the same passkey\n5. **Use**: When Git operations need keys, user enters saved passkey\n\n### Security Benefits\n- \u2705 **Zero Trust**: Stolen key files are useless without passkey\n- \u2705 **Single Passkey**: Same 64-char key protects both SSH and GPG\n- \u2705 **Never Stored**: BAPAO never stores the actual passkey\n- \u2705 **Password Manager Integration**: Works with existing secure storage\n- \u2705 **Cross-Platform**: Same security model on all operating systems\n\n## Platform Support\n\nBAPAO works on **Linux**, **macOS**, and **Windows** with the following requirements:\n\n### All Platforms\n- Python 3.8+\n- Git 2.13+ (for `includeIf` support)\n\n### Platform-Specific Requirements\n\n**Linux/macOS:**\n- OpenSSH client (usually pre-installed)\n- GPG/GnuPG (usually pre-installed or available via package manager)\n\n**Windows:**\n- Git for Windows (includes SSH client)\n- GPG4Win or similar GPG implementation\n- Windows Subsystem for Linux (WSL) recommended for best compatibility\n\n### Key Features by Platform\n\n| Feature | Linux | macOS | Windows | Notes |\n|---------|-------|-------|---------|--------|\n| SSH Key Generation | \u2705 | \u2705 | \u2705 | Uses Python cryptography library |\n| GPG Key Generation | \u2705 | \u2705 | \u26a0\ufe0f | Requires GPG installation |\n| Git Configuration | \u2705 | \u2705 | \u2705 | Cross-platform paths handled |\n| SSH Config | \u2705 | \u2705 | \u2705 | Standard SSH config format |\n| Directory Switching | \u2705 | \u2705 | \u2705 | Git `includeIf` works everywhere |\n\n**Windows Notes:**\n- Use forward slashes (`/`) or double backslashes (`\\\\`) in paths\n- WSL provides the most Unix-like experience\n- PowerShell and Command Prompt are supported\n\n## License\n\nProprietary software - All rights reserved.\n\n## Support\n\nFor support, feature requests, or bug reports, please contact the development team directly through PyPI or the package maintainer.\n",
"bugtrack_url": null,
"license": "Proprietary",
"summary": "Developer Environment Sync Engine - Make your entire development environment portable",
"version": "0.0.6",
"project_urls": {
"Homepage": "https://example.com"
},
"split_keywords": [
"development",
" environment",
" sync",
" git",
" ssh",
" gpg",
" devtools"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "fd11eda37d59d5af95e87413620bee83acaebaf276aab37a91f74607fad51373",
"md5": "698737a70cfbea0550ba575323ef52ad",
"sha256": "99e34532ea5f75adad0027b5e5ac1a387879b090fe1866dee22c8ee1cf417ac8"
},
"downloads": -1,
"filename": "bapao-0.0.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "698737a70cfbea0550ba575323ef52ad",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 25000,
"upload_time": "2025-10-24T12:20:10",
"upload_time_iso_8601": "2025-10-24T12:20:10.979356Z",
"url": "https://files.pythonhosted.org/packages/fd/11/eda37d59d5af95e87413620bee83acaebaf276aab37a91f74607fad51373/bapao-0.0.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4a17f1870fb866ef2026ac74ba4e04cb527900a11496c840799024a8a0937962",
"md5": "7aade8befc9aa9e519bd323004869213",
"sha256": "87baf365e24ed4c5e85eb3cb7f40e6c83c1dc84b0cd8cc153b22b6d99a64495b"
},
"downloads": -1,
"filename": "bapao-0.0.6.tar.gz",
"has_sig": false,
"md5_digest": "7aade8befc9aa9e519bd323004869213",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 37508,
"upload_time": "2025-10-24T12:20:14",
"upload_time_iso_8601": "2025-10-24T12:20:14.033332Z",
"url": "https://files.pythonhosted.org/packages/4a/17/f1870fb866ef2026ac74ba4e04cb527900a11496c840799024a8a0937962/bapao-0.0.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-24 12:20:14",
"github": false,
"gitlab": true,
"bitbucket": false,
"codeberg": false,
"gitlab_user": "bapao",
"gitlab_project": "bapao-sync",
"lcname": "bapao"
}