Мои dotfiles, которые наконец стали удобными
Лет десять я возил свои конфиги между машинами в архиве
«configs.zip». Несколько раз пробовал dotfiles-репозитории,
но каждый раз останавливался на том, что не понимал, как
чисто подключить.
Главная идея, до которой я дошёл
Никаких скриптов копирования. Только символические ссылки
из репозитория в $HOME.
Тогда правка конфига = коммит, синхронизация на новой машине =
git pull. Всё.
Структура
~/dev/dotfiles/
├── README.md
├── install.sh # создаёт ссылки
├── home/
│ ├── .gitconfig
│ ├── .tmux.conf
│ ├── .zshrc
│ └── .config/
│ ├── nvim/
│ └── starship.toml
└── machine/
├── work.zsh # подгружается из .zshrc, если есть
└── home.zsh
install.sh
#!/usr/bin/env bash
set -e
DOT="$(cd "$(dirname "$0")" && pwd)"
link() {
local src="$DOT/home/$1"
local dst="$HOME/$1"
mkdir -p "$(dirname "$dst")"
[ -L "$dst" ] && rm "$dst"
[ -e "$dst" ] && mv "$dst" "$dst.bak.$(date +%s)"
ln -s "$src" "$dst"
echo "linked $dst"
}
link .gitconfig
link .tmux.conf
link .zshrc
link .config/nvim
link .config/starship.toml
Машинно-зависимые куски
В .zshrc на самом верху:
HOSTKEY="$(hostname -s)"
[ -f "$HOME/dev/dotfiles/machine/$HOSTKEY.zsh" ] \
&& source "$HOME/dev/dotfiles/machine/$HOSTKEY.zsh"
На рабочей машине лежит work.zsh с прокси-переменными
и алиасами под корпоративные инструменты, на личной — другое.
В Git коммичу обе версии, машина выбирает свою.
Что это дало
- На новой машине я ставлю окружение за две минуты:
git clone … && ./install.sh. - История правок видна — больше нет загадок про «когда я добавил этот алиас».
- Спокойно правлю прямо в
~/.zshrc: это и есть рабочая копия в репо.
Ничего нового я не открыл. Просто наконец уговорил себя положить всё это в одно место.