English • 简体中文 (Simplified Chinese)
This is a project for managing personal dotfiles, adapted for Linux, Container, macOS, iPad, and Windows systems used in the past and present. It also includes some personal experiences and magical operations.
Prerequisites: Git and Python installed
dotbot makes everything simpler. I mean, just three commands.
git clone https://github.com/enihsyou/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./installIf on Windows, use the PowerShell script.
git clone https://github.com/enihsyou/dotfiles.git ~/.dotfiles
cd ~\.dotfiles
powershell -ExecutionPolicy Bypass -File install.ps1- Most configurations assume this project is located in the
~/.dotfilesdirectory. Plain text configuration files may not access environment variables, so it’s best to follow this convention. - Some files are generated by the
Makefileand should not be manually edited.
I have some requirements for dotfiles management tools:
- Usable across different systems, mainly Linux, macOS, and Windows
- Quickly editable in an editor and shareable via Git, with a clear directory layout
- Not only managing files under HOME but also CLI, GUI programs, and some experience-based configurations
- Does not require DRY; readability is preferred over conciseness, and file content should be WYSIWYG
The initial version was forked from holman/dotfiles. After comparing various implementations in the open-source community, I currently use dotbot as the dotfiles management tool.
I also learned about chezmoi, but I dislike its directory layout. Its additional features like encryption, dynamic templates, and install hooks are unnecessary for me. Instead, features like templates, terminal completion, and file initialization add complexity due to its software design. Although it brings flexibility and reusability, it sacrifices readability and maintainability.
You may notice that the dotbot directory in the repository is actually a Git submodule, which is a prerequisite for using this tool.
Here are some common commands for submodules, which are also included in the install script.
# Run when Git status indicates changes in submodules
git -C dotbot submodule sync --quiet --recursive
git submodule update --init --remote --recursive dotbot