Skip to main content

Tools to distribute dotfiles to multiple locations when provisioning a new machine.

Project description

Project: License

Package: PyPI - Python Version PyPI - Version PyPI - Downloads

Development: uv ruff ty pytest CI Code Coverage GitHub commit activity

Contents

Overview

dbrownell_Dotter is a declarative dotfile management tool that helps you install, synchronize, and manage configuration files across your system. It supports:

  • File installation via copying, symlinking, or template rendering
  • Jinja2 templating for dynamic configuration files
  • Variable substitution from command-line arguments or environment variables
  • Regex-based substitutions for modifying existing files in-place
  • Reverse synchronization to push manual changes back to source files

Configuration is defined in YAML or JSON5 files, making it easy to version control and share your dotfile setup. See davidbrownell/dotfiles for an example of such a configuration.

How to use dbrownell_Dotter

Basic Commands

Install dotfiles:

uvx dbrownell_Dotter Install <config_file(s)> [OPTIONS]

Reverse sync changes back to source:

uvx dbrownell_Dotter ReverseSync <config_file(s)> [OPTIONS]

Common options:

  • --var key=value - Pass template variables (can be used multiple times)
  • --dry-run - Preview changes without modifying files
  • --verbose - Show verbose output
  • --debug - Show debug information

Variables

Variables can be used in configuration files and jinja templates.

Variable Type Format
Environment Variable ${VAR_NAME}
Command Line Variable {{ VAR_NAME }}

Configuration File Format

variable_definitions:
  username: "Your username (ex: `john`)"
  email: "Your email address (ex: `john@example.com`)"

entries:
  # Simple file copy/link
  - source: my_config.txt
    dest: ~/.config/myapp/config.txt

  # Jinja2 template (auto-detected by .jinja, .jinja2, or .j2 extension)
  - source: bashrc.jinja
    dest: ~/.bashrc

  # Regex substitution on existing file
  - source: null
    dest: /etc/myapp/config.conf
    substitutions:
      - pattern: "^EMAIL=.*$"
        replacement: "EMAIL={{ email }}"

Examples

Install with variables:

uvx dbrownell_Dotter Install config.yaml --var username=john --var email=john@example.com

Preview changes before installing:

uvx dbrownell_Dotter Install config.yaml --dry-run

Sync manual edits back to source files:

uvx dbrownell_Dotter ReverseSync config.yaml --var username=john

Installation

Note that these steps are not required when invoking dbrownell_Dotter via uvx.

Installation Method Command
Via uv uv add dbrownell_Dotter
Via pip pip install dbrownell_Dotter

Verifying Signed Artifacts

Artifacts are signed and verified using py-minisign and the public key in the file ./minisign_key.pub.

To verify that an artifact is valid, visit the latest release and download the .minisign signature file that corresponds to the artifact, then run the following command, replacing <filename> with the name of the artifact to be verified:

uv run --with py-minisign python -c "import minisign; minisign.PublicKey.from_file('minisign_key.pub').verify_file('<filename>'); print('The file has been verified.')"

Development

Please visit Contributing and Development for information on contributing to this project.

Additional Information

Additional information can be found at these locations.

Title Document Description
Code of Conduct CODE_OF_CONDUCT.md Information about the norms, rules, and responsibilities we adhere to when participating in this open source community.
Contributing CONTRIBUTING.md Information about contributing to this project.
Development DEVELOPMENT.md Information about development activities involved in making changes to this project.
Governance GOVERNANCE.md Information about how this project is governed.
Maintainers MAINTAINERS.md Information about individuals who maintain this project.
Security SECURITY.md Information about how to privately report security issues associated with this project.

License

dbrownell_Dotter is licensed under the MIT license.

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

dbrownell_dotter-0.6.5.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

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

dbrownell_dotter-0.6.5-py3-none-any.whl (11.6 kB view details)

Uploaded Python 3

File details

Details for the file dbrownell_dotter-0.6.5.tar.gz.

File metadata

  • Download URL: dbrownell_dotter-0.6.5.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dbrownell_dotter-0.6.5.tar.gz
Algorithm Hash digest
SHA256 fe652e76712322d6eac57a3e44ee20d35a8cee855113c5ff901535799ec883c8
MD5 180d3e2aa52b9f08619b87208a7bc3a5
BLAKE2b-256 817d5e1fa1e805c40b5f1d1dc4e1927d5df843118d43440c8efec4894323cf7b

See more details on using hashes here.

File details

Details for the file dbrownell_dotter-0.6.5-py3-none-any.whl.

File metadata

  • Download URL: dbrownell_dotter-0.6.5-py3-none-any.whl
  • Upload date:
  • Size: 11.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dbrownell_dotter-0.6.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e6abb75ff91cc44d05a26287494e84a344098079fb1bb376d3fbacc5c8d7f4e6
MD5 03d2bd0289c836cf1d83b645a5ee58bd
BLAKE2b-256 cac1f428c60ba396dc052a42248d3e9610790ff2bdae9461f4784991de2ebc31

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