ProxyForge

Заметки о разработке, инструментах и работе с данными.

Мои 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 коммичу обе версии, машина выбирает свою.

Что это дало

Ничего нового я не открыл. Просто наконец уговорил себя положить всё это в одно место.