Skip to main content

A modern command-line snippet manager with Git synchronization, clipboard integration, and parameterized commands

Project description

pypet - Command Line Snippet Manager

pypet is a Python-based command-line snippet manager inspired by pet. It helps you organize and reuse command-line snippets efficiently, with a focus on simplicity and usability.

Features

  • Store command snippets with descriptions and tags
  • TOML-based storage (~/.config/pypet/snippets.toml)
  • List and search your snippets with rich terminal output
  • Interactive command execution with pre-execution editing
  • Copy snippets to clipboard for easy pasting into other applications
  • Git synchronization for backup and sharing across devices
  • Parameterized snippets with default values
  • Automatic backup and restore functionality
  • Tag-based organization
  • Modern Python implementation with type hints
  • Comprehensive test coverage

Installation

PyPI (Recommended)

pip install pypet-cli

Development Installation

# Clone repository
git clone https://github.com/fabiandistler/pypet.git
cd pypet

# Install with uv (recommended)
uv pip install -e .

# Or with pip
pip install -e .

Requirements

  • Python 3.10 or higher
  • Git (for synchronization features)

Usage

Basic Commands

# List all snippets
pypet list

# Add a new snippet
pypet new "git commit -m" -d "Create a git commit" -t "git,version-control"

# Search snippets
pypet search "git"

# Execute a snippet (interactive if no ID provided)
pypet exec [snippet-id]

# Execute with editing
pypet exec [snippet-id] -e

# Copy a snippet to clipboard
pypet copy [snippet-id]

# Execute with copy to clipboard option
pypet exec [snippet-id] --copy

# Edit a snippet
pypet edit <snippet-id>

# Delete a snippet
pypet delete <snippet-id>

# Git synchronization
pypet sync init                    # Initialize Git repository
pypet sync remote <repo-url>       # Add/update remote repository
pypet sync status                  # Show sync status
pypet sync commit -m "message"     # Commit changes
pypet sync pull                    # Pull from remote
pypet sync push                    # Push to remote
pypet sync sync                    # Full sync (commit + pull + push)

Parameterized Snippets

You can create snippets with customizable parameters:

# Create a snippet with parameters
pypet new "docker run -p {port}:80 -v {path}:/app -e NODE_ENV={env=development} {image}" \
    -d "Run a Docker container with custom settings" \
    -t "docker,container" \
    -p "port:Host port to bind,path:Volume path,env=development:Node environment,image:Docker image name"

# Execute with parameter values
pypet exec <snippet-id> -P port=3000 -P path=$PWD -P image=node:18-alpine

# Or execute interactively (will prompt for parameter values)
pypet exec <snippet-id>

Parameters can have:

  • Required values: {name}
  • Default values: {name=default}
  • Descriptions (shown when prompting)

Example TOML storage for a parameterized snippet:

[snippets.unique-id]
command = "docker run -p {port}:80 -v {path}:/app -e NODE_ENV={env=development} {image}"
description = "Run a Docker container with custom settings"
tags = ["docker", "container"]
created_at = "2025-06-17T10:00:00+00:00"
updated_at = "2025-06-17T10:00:00+00:00"

[snippets.unique-id.parameters.port]
name = "port"
description = "Host port to bind"

[snippets.unique-id.parameters.path]
name = "path"
description = "Volume path"

[snippets.unique-id.parameters.env]
name = "env"
default = "development"
description = "Node environment"

[snippets.unique-id.parameters.image]
name = "image"
description = "Docker image name"

Interactive Mode

When running pypet exec without a snippet ID, it enters interactive mode:

  1. Shows a table of all available snippets
  2. Lets you select a snippet by number
  3. Optionally allows editing the command before execution
  4. Asks for confirmation before running the command

Git Synchronization

pypet supports Git-based synchronization to backup and share your snippets across devices.

Setup

# Initialize Git repository for snippets
pypet sync init

# Initialize with remote repository
pypet sync init --remote https://github.com/username/pypet-snippets.git

# Or add remote to existing repository
pypet sync remote https://github.com/username/pypet-snippets.git

Basic Operations

# Check sync status
pypet sync status

# Commit current changes
pypet sync commit -m "Added new Docker snippets"

# Pull changes from remote
pypet sync pull

# Push changes to remote
pypet sync push

# Full sync (commit + pull + push)
pypet sync sync

Backup Management

# List available backups
pypet sync backups

# Restore from backup
pypet sync restore snippets_backup_20250101_120000.toml

Workflow

  1. Initial Setup: Run pypet sync init to create a Git repository
  2. Add Remote: Use --remote option or manually configure Git remote
  3. Regular Sync: Use pypet sync sync to keep snippets synchronized
  4. Automatic Backups: Backups are created before pull operations

Development

This project uses uv for dependency management and pytest for testing.

  1. Clone the repository:

    git clone https://github.com/yourusername/pypet.git
    cd pypet
    
  2. Set up the development environment:

    uv venv
    source .venv/bin/activate
    uv pip install -e ".[dev]"
    
  3. Run tests:

    pytest
    
  4. Try the CLI:

    pypet --help
    

Storage Format

Snippets are stored in TOML format at ~/.config/pypet/snippets.toml:

[snippets.unique-id]
command = "git status"
description = "Check git status"
tags = ["git", "status"]
created_at = "2025-06-17T10:00:00+00:00"
updated_at = "2025-06-17T10:00:00+00:00"

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License - see the LICENSE file for details

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypet_cli-0.1.1.tar.gz (61.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pypet_cli-0.1.1-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

File details

Details for the file pypet_cli-0.1.1.tar.gz.

File metadata

  • Download URL: pypet_cli-0.1.1.tar.gz
  • Upload date:
  • Size: 61.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pypet_cli-0.1.1.tar.gz
Algorithm Hash digest
SHA256 16efe1749856eec661b6b497335a0c6475565507dbf22acc8ca463052d28c998
MD5 7d15ba3bda1e19bb03eab1db90f84955
BLAKE2b-256 34e2b044b4e40c4dbbd846014d1d57f7f38186a410a2c4e12d9903360a12b126

See more details on using hashes here.

File details

Details for the file pypet_cli-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pypet_cli-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 15.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pypet_cli-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 73a24ae27d8cbf853a6bc86614af18945beee45d8b02dd0488364f79e81093f1
MD5 f5c56e125b74e70bf3080793c59c9768
BLAKE2b-256 e663d03e7fca1a56500a2dc43ef4f23f7d6b829654b40bc4e9a0711496c6607e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page