Manage and edit $HOME dotfiles using Python + git = <3
Project description
mydot -- A Python module for managing dotfiles
Super-charged version of the Atlassian approach to managing
dotfiles using a bare git repo + fzf magic! Quickly edit files, add
changes, run scripts, grep through dotfiles, or discard work-tree changes with
ease.
Quick Start
-
Install dependencies:
sudo apt install fzf git # Ubuntu/Debian brew install fzf git # MacOS/Homebrew
-
Configure shell: At the bottom of your
~/.bashrcor~/.zshrcadd:export DOTFILES="$HOME/.config/dotfiles" alias config='/usr/bin/git --git-dir=$DOTFILES --work-tree=$HOME'
what and why?:
DOTFILES: variable pointing to your local--baredotfiles repositoryconfig: git alias to directly address the--baredotfiles repository
-
Initialize dotfiles repository:
# reload shell configu source ~/.bashrc # if using bash source ~/.zshrc # if using zsh mkdir -pv $DOTFILES # create directory git init --bare $DOTFILES # initialize --bare git repository
-
Install
mydotand disable viewing of untracked filespip install --user mydot # if using pip pipx install mydot # if using pipx mydot git config --local status.showUntrackedFiles no
-
Add files to your dotfiles repo
mydot git add ~/.vimrc ~/.tmux.conf ~/.bashrc ~/.bash_aliases ~/.zshrc mydot git commit -m "the journey of a thousand miles begins with one step"
protip: You can use all your regular git commands, including aliases, when calling
mydot git -
Feel the power with
mydot(and the pre-installed aliasd.)d. edit # modify tracked files in your $EDITOR (tab in fzf for multiselect) d. add # choose which modified files to stage for commit d. git commit # commit changes d. grep zfs # find all files with lines containing the string zfs d. grep zfs$ # works with regex too! e.g, zfs$ something.*var ^$ d. grep -E "zfs|ext4" # extended regexp d. run # run any executable script in your dotfiles repo d. status # see the state of your repo d. ls # list all files under version control d. export # make a tarball of your dotfiles + bare git repo d. clip # put file paths into the clipboard d. restore # remove files from staging area d. discard # discard unstaged changes from work tree d. fzf # select files and print paths to stdout (for piping) d. history # browse and compare file history d. # see the help message detailing available commands
Submodule Support
If your dotfiles repo contains git submodules (e.g., ~/.config/tmux), mydot
will include their tracked files in edit, fzf, clip, grep, ls, and
export (up to 2 levels deep).
Known limitation: d. history will list submodule files but cannot show
their per-file commit history. The outer repo only tracks the submodule pointer,
not individual file changes within the submodule.
Going Deeper
Useful aliases
alias es="mydot edit" # quick select a file to edit
alias rs="mydot run" # quick select a script to run
Source of Truth
This project is available on GitHub and GitLab. Each push
to master automatically goes to both so choose whichever platform you prefer.
All releases are published to PyPi
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mydot-0.9.2.tar.gz.
File metadata
- Download URL: mydot-0.9.2.tar.gz
- Upload date:
- Size: 22.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74835253c2106b526a818cce81fc30a1ded19b9869765548cdcc2e632dfba501
|
|
| MD5 |
627222bc1b5fba167b42510f8cb8e1a8
|
|
| BLAKE2b-256 |
26e5a592fe1684dd7178e022d93487be95b4a819617b700bd0baf4e331afba27
|
File details
Details for the file mydot-0.9.2-py3-none-any.whl.
File metadata
- Download URL: mydot-0.9.2-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76a48f1f8a58a383166c28c0cb2e111af6fc2a47bd3177b7328460e891b8a27d
|
|
| MD5 |
5c75a3dddb210f1a3bca03619edea09f
|
|
| BLAKE2b-256 |
c0d8d58212ddf3bbc6b243c562f8cefc111eed0e72d66668768cd9104b46ff71
|