bapao


Namebapao JSON
Version 0.0.6 PyPI version JSON
download
home_pagehttps://gitlab.com/bapao/bapao-sync
SummaryDeveloper Environment Sync Engine - Make your entire development environment portable
upload_time2025-10-24 12:20:14
maintainerNone
docs_urlNone
authorBAPAO Team
requires_python>=3.8
licenseProprietary
keywords development environment sync git ssh gpg devtools
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 1.31533s