Skip to main content

Dotfile farm manager

Project description

plowman: Dotfile farm manager

build lint tests license codecov readthedocs pypi downloads

plowman is a dotfile management tool that uses an agricultural metaphor to manage your configuration files. It deploys dotfiles from central repositories (called "granaries") to your home directory (where they become "crops"), tracking them in an "estate" file to manage their lifecycle.

Features

  • Template rendering: Use Jinja2 templates with custom variables for dynamic configurations
  • State tracking: Automatically track which files are managed via estate files
  • Smart updates: Skip unchanged files using SHA256 hashing for efficient deployments
  • Automatic cleanup: Remove orphaned files that are no longer in your configuration
  • Bidirectional sync: Deploy with sow, collect changes back with harvest
  • Dry-run mode: Preview changes before applying them with --dry-run
  • Colored diffs: See exactly what changed with syntax-highlighted diff output
  • Multiple granaries: Manage dotfiles from multiple source directories with different variables

Quick Start

Install plowman using uv:

$ uv tool install plowman

Create a basic configuration at ~/.config/plowman/config.yaml:

granaries:
  ~/dotfiles:
    granaries: ["bash", "nvim"]
    variables:
      username: myuser
      hostname: myhost

Deploy your dotfiles:

$ plm sow

Collect changes back from your home directory:

$ plm harvest -v

The Agricultural Metaphor

plowman uses an agricultural metaphor for managing dotfiles:

  • Granaries: Source directories containing your dotfile templates and files
  • Seeds: Individual source files in granaries (templates or plain files)
  • Crops: Deployed files in your home directory
  • Estate: State tracking file that records which crops are managed
  • Harvest: Collecting changed crops back to the granary

This metaphor represents the full lifecycle: planting (deploying with sow) configuration files from source granaries to your home directory where they grow into usable configuration files, and harvesting (collecting with harvest) changes back when you edit them manually.

Next Steps

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

plowman-0.4.0.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

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

plowman-0.4.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file plowman-0.4.0.tar.gz.

File metadata

  • Download URL: plowman-0.4.0.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for plowman-0.4.0.tar.gz
Algorithm Hash digest
SHA256 c1156db3d227d418b7e068ff5e9fde8a516aeb45edf5348085f9f870c1fad74e
MD5 3ae6bb713b724b27d0fd8e21f8360009
BLAKE2b-256 d6dba9c995f91a3687e3aa862e7d38c5940ede7c9a2f9452ad6ee10f097d2287

See more details on using hashes here.

File details

Details for the file plowman-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: plowman-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for plowman-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1aa0cd6512f947f18fb327a9a66746c00de3cdb57220338a892d81b59924f786
MD5 6ae5520d5f2edce5c73a584b988abc5c
BLAKE2b-256 349ad2b378f83d40901642240b3a6c3ee51e1c2b6cb4f67e71e8096d38b6c0db

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