Files
dotfiles/README.adoc
Felix Nehrke f1ae24d120 Switch from the bare repository method to stow to manage my dotfiles
I finally made the switch from the bare-repository method to stow to
manage my dotfiles. This brings some nice benefits, e.g. I can savely
say what file is in my dotfiles and what is missing out. Furthermore the
usage is _way_ simpler the before. Though one downside is the more
complicated removal of files, but I've documented a way which feels nice
to me as well. Finally I removed my old setup-script since I switched to
an ansible-setup anyway. So this config will eventually be applied
ansible and I don't have to care about installed software in this repo
anymore!

Reference: https://www.gnu.org/software/stow/
Reference: https://news.ycombinator.com/item?id=11071754
Reference: https://gitea.nehrke.info/nemoinho/dev-machine/
2025-09-05 17:55:27 +02:00

1.7 KiB

Dotfiles

I use stow to sync my dotfiles between the OS and this repository.

Requirements

Install git and stow if not already present on the system.

Install via apt on Debian/Ubuntu
sudo apt install git stow
Install via brew on macos
brew install git stow

Usage

Checkout this repository into ~/dotfiles and apply run stow to sync the dotfiles.

The directory should be loacted directly in the HOME directory. Otherwise stow needs an additional flat -t $HOME everytime, which is a bit annoying!
git clone git@gitea.nehrke.info:nemoinho/dotfiles.git ~/dotfiles (1)
cd $_
stow --adopt . (2)
[ -n "$(git status --short)" ] && git restore . (3)
1 Clone this repository
2 Create symlinks for all files managed by this repository, so that the file in the $HOME points to the file in this repository
3 In case of differences between existing files and the ones from this repository keep the version of the repository

Removing files

If a file is going to be removed make sure to remove the linked file as well. Otherwise we end up with a bunch of dangling files in $HOME!

To automatically delete these dangling links we can use a git-hook as the following. That will remove the links pre-commit.

Setup git-hook to automatically remove links to deleted files
cat <<EOF > .git/hooks/pre-commit
#!/usr/bin/env bash
set -e
git status --short | grep -E '^D' | sed s/...// | while read f
do
  test -L "\$HOME/\$f" && rm "\$HOME/\$f"
done
EOF
chmod +x .git/hooks/pre-commit