Skip to main content

Manage and edit $HOME dotfiles using Python + git = <3

Reason this release was yanked:

forgot to bump to v0.13.0

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

  1. Install dependencies:

    sudo apt install fzf git    # Ubuntu/Debian
    brew install fzf git        # MacOS/Homebrew
    
  2. Configure shell: At the bottom of your ~/.bashrc or ~/.zshrc add:

    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 --bare dotfiles repository
    • config: git alias to directly address the --bare dotfiles repository
  3. 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
    
  4. Install mydot and disable viewing of untracked files

    pip install --user mydot    # if using pip
    pipx install mydot          # if using pipx
    mydot git config --local status.showUntrackedFiles no
    
  5. 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

  6. Feel the power with mydot (and the pre-installed alias d.)

    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. cd           # navigate to a dotfile's directory in a subshell
    
    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, cd, 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

Customizing d. cd

By default d. cd lists the directory with ls -lA --color=auto before opening the subshell. Set MYDOT_CD_CMD to use a different listing command:

export MYDOT_CD_CMD="eza -la"   # use eza
export MYDOT_CD_CMD="tree -L 2" # use tree

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mydot-0.12.0.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

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

mydot-0.12.0-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file mydot-0.12.0.tar.gz.

File metadata

  • Download URL: mydot-0.12.0.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for mydot-0.12.0.tar.gz
Algorithm Hash digest
SHA256 015efe9b2cef83da839bfd97d536e07326cf166073ab8ef7efa0f1ca31f50d91
MD5 8f997d4574d3e40acc42a0c2b1564e38
BLAKE2b-256 4b49981f71bf862a36a8f138233c041ae98c05b72d778afc24e4e05bab78ceb7

See more details on using hashes here.

File details

Details for the file mydot-0.12.0-py3-none-any.whl.

File metadata

  • Download URL: mydot-0.12.0-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for mydot-0.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cc0ab12080a37072adcac362a2e710202750b0b98c37c8d9026842a8457c140c
MD5 ee34e98701bc4a74be2f2eaeb273a805
BLAKE2b-256 2ab0ac354103a361551364c82a3434e011dd4d995ebf4d1c12bc79e41b6fba07

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