dotfiles-drift
Detect drift between your dotfiles repo and $HOME.
Answer the question: "What changed on my machine that's not in my dotfiles repo, and vice versa?"
Why
You keep your dotfiles in a git repo. You clone it onto a new machine. But which files did you forget to add? Which files exist in $HOME but not in the repo? Which files have been modified locally without being committed?
dotfiles-drift tells you:
| Status | Meaning |
|---|---|
| synced | Repo and home have identical content |
| missing | File exists in repo but not in home (need to symlink/copy) |
| modified | File exists in both but content differs |
| orphaned | File exists in home but not in repo |
Install
pip install git+https://github.com/yunaremaia/dotfiles-drift.git
Not yet on PyPI. Install from git with the line above. A PyPI release is pending; the distribution name
dotfiles-driftis currently free.
Usage
# Check drift status
dotfiles-drift status ~/dotfiles
# Export as JSON
dotfiles-drift status ~/dotfiles --format json
# Sync missing/modified files from repo to home (dry run)
dotfiles-drift sync ~/dotfiles --dry-run
# Actually sync
dotfiles-drift sync ~/dotfiles --force
# Only check git-tracked files
dotfiles-drift status ~/dotfiles --only-tracked
Example Output
Dotfiles Drift — /root/dotfiles
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ File ┃ Status ┃ Details ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ .bashrc │ synced │ │
│ .gitconfig │ modified │ repo=2026-09-12 home=2026-08-30 │
│ .vimrc │ missing │ exists in repo, not in $HOME │
│ .zshrc │ orphaned │ exists in $HOME, not in repo │
└──────────────┴──────────────┴────────────────────────────────────┘
Summary: 1 synced | 1 missing | 1 modified | 1 orphaned
Features
- SHA256 content comparison (not just size/mtime)
- Detects orphaned files (exist in
$HOMEbut not in repo) - Git-tracked-only mode
- JSON output for scripting
- Dry-run sync mode
- Ignores
.git,README.md,LICENSE,Makefile,*.bak,*.swpby default
Alternatives
- GNU Stow — symlink manager, not drift detector
- yadm — dotfiles manager with git, but no drift reporting
- chezmoi — has
chezmoi diffbut heavier tool - rcm — rc file management, no content diff
dotfiles-drift is a read-only detector — it reports what's out of sync. You decide whether to symlink, copy, or use a full dotfiles manager.
Sponsoring
dotfiles-drift is MIT licensed and free to use. If it earns a permanent place in your setup, you can support continued maintenance via GitHub Sponsors or by sending SOL to the project treasury wallet:
Eeztv1nCYUt1fwGWpzKC948gaWfjejYCAuLtUMgzDWbW
Funding platforms are configured in .github/FUNDING.yml.
If this tool is useful to you, a star helps other people find it.
Related tools
- driftcheck — detect version drift between docs and toolchain files
- license-drift — detect license drift across a monorepo
- cli-shim — shim CLI flags across tools with different syntax
- sandbox-ffi-layers — layer FFI calls behind a sandbox boundary
Part of a family of focused, single-purpose developer tools — each one does one thing and does it well.
License
MIT
Metadata
Release files for dotfiles-drift 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dotfiles_drift-0.2.0.tar.gz | 14.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dotfiles_drift-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.4 kB
Release files / dotfiles_drift-0.2.0.tar.gz
| Download URL | dotfiles_drift-0.2.0.tar.gz |
|---|---|
| Size | 14.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f6b2735d94325f6beb7e4729178bcf84f186e6e34c1695a5d6234e15db857148
|
|
BLAKE2b-256 checksum How to use checksums |
e467c8722e048158859a84b46d3aab965f1472fdb4bb4a9bb3821bd2f573411e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.
Transparency logRelease files / dotfiles_drift-0.2.0-py3-none-any.whl
| Download URL | dotfiles_drift-0.2.0-py3-none-any.whl |
|---|---|
| Size | 9.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
23d9318df41559078a9b68c147059cd169a730a88f0f0fdf373c638305854939
|
|
BLAKE2b-256 checksum How to use checksums |
a871e074774ec703308c81244af8399e473986397abf9fb0c051085a81235c67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.
Transparency logSecurity for dotfiles-drift 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for dotfiles_drift-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.