Managing Dotfiles With Git and Make
First published on
These steps will allow us to:
- Track changes to dotfiles.
- Backup dotfiles.
- Easily install dotfiles on a new machine.
Initial Setup
Let's start by tracking .bashrc
.
Set up a git repository for the dotfiles:
$ mkdir ~/dotfiles
$ cd ~/dotfiles && git init
Move .bashrc
to ~/dotfiles/
. Make sure to omit the .
so it's not
hidden in the repo:
$ mv ~/.bashrc ~/dotfiles/bashrc
Create a Makefile.
$ touch ~/dotfiles/Makefile
Put this inside ~/dotfiles/Makefile
:1
pwd := $(shell pwd -LP)
.PHONY: bash
all: bash
bash:
@ln -nfs "${pwd}/bashrc" ~/.bashrc
Install the dotfiles:
$ make all
After creating a new repo on GitHub, push the dotfiles:
$ git add .
$ git commit -m"Tracking my dotfiles."
$ git remote add origin <remote repository url>
$ git push -u origin master
Now, all changes to the dotfiles are tracked, and installing the dotfiles on a
new machine just requires cloning the dotfiles repo and running make all
.
Adding More Dotfiles
Let's add a Git config to the dotfiles:
Move .gitconfig
to ~/dotfiles/
. Again, make sure to omit the .
so it's
not hidden:
$ mv ~/.gitconfig ~/dotfiles/gitconfig
Update ~/dotfiles/Makefile
to be:
pwd := $(shell pwd -LP)
.PHONY: bash git
all: bash git
bash:
@ln -nfs "${pwd}/bashrc" ~/.bashrc
git:
@ln -nfs "${pwd}/gitconfig" ~/.gitconfig
Install the dotfiles:
$ make all
Installing Dotfiles on a New Machine
It's as easy as:
$ git clone <remote repository url> ~/dotfiles
$ cd ~/dotfiles && make all
Conclusion
Since we're using Make, we can have much more complex setup logic. For example, I have different installation paths for different operating systems and separate dedicated Makefiles for things like Vim. If you're curious, you can check out my dotfiles on GitHub.
Footnotes
-
Makefile syntax is finicky. Check out makefiletutorial.com. ↩