Skip to main content

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
  • Command execution for install steps that cannot be expressed as file content
  • Reverse synchronization to push manual changes back to source files
  • Post-install instructions displayed once the install process completes without errors

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
  - dest: /etc/myapp/config.conf
    substitutions:
      - pattern: "^EMAIL=.*$"
        replacement: "EMAIL={{ email }}"

  # Set the execute flag on the destination (only valid when the destination is a file)
  - source: my_script.sh
    dest: ~/bin/my_script.sh
    make_executable: true

  # Commands run when the entry is encountered, so entries that follow may rely on the changes
  # that they make
  - name: Configuring git
    commands:
      - git config --global user.name "{{ username }}"
      - git config --global user.email "{{ email }}"
      - git config --global core.autocrlf input

  # Instructions displayed once the install process completes without errors
  - post_install_instructions: |
      Run `chsh -s $(which zsh)` to make zsh the default shell for {{ username }}.

The commands associated with an entry are written to a single temporary script that runs when the entry is encountered, so state established by one command is visible to those that follow it. The entry fails as soon as one of its commands fails.

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.

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.10.1.tar.gz (14.5 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.10.1-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dbrownell_dotter-0.10.1.tar.gz
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","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.10.1.tar.gz
Algorithm Hash digest
SHA256 61007754817b759ebb1d2d50282ea883c9bf30b008aa39de4aa352b9e303f9a3
MD5 cfeee77958db4dff8f79f3cec07fbcf0
BLAKE2b-256 89a656ace45ddfc58938163200b09338ca2849a0ee0882975104f8d09b6ddea3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dbrownell_dotter-0.10.1-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","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.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 60f3c6731783abd0b631cd03aea4329fe1b68ae79a63a7cba35c57b63713a4b9
MD5 429e5f0b251f7fd5fdd4123b30f70422
BLAKE2b-256 15db6d210e119bc2eb8a64611101d755ad26fb6cd4d8600a56c7d4e1fc7efa4e

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.10.1 This release

2 files

0.9.0

2 files

0.8.0

2 files

0.7.5

2 files

0.7.4

2 files

0.7.3

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.6

2 files

0.6.5

2 files

0.6.4

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.0

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page