Git home config
Небольшая воскресная заметка про то, как я храню свои dotfiles.
Скорее всего, у вас осознание надобности резервных копий .config/* появилось, как и у меня, -
когда после очередного эксперимента vim начал не так радостно бибикать, а ⌘+z не помогает.
Первым делом после восстановления исходной версии конфигов вы наверняка побежите гуглить, какие есть способы хранения конфигов, чтоб больше ничего не проэтовать. И с большой степенью вероятности наткнетесь на кучу сложного софта по типу nix, gnu stow, dotbot и т. п. В целом это хорошие инструменты, но, как всегда, можно проще.
Скрывать не буду, подглядел этот метод у bobuk’а1 и atlassian2. Суть в том, что можно хранить все в привычном git-репозитории, который предварительно немного настроили.
Настройка #
Для начала надо инициализировать репу:
git init --bare $HOME/.cfg
.cfg используется специально, чтобы ничего случайно не закоммитить.
Так как git будет пытаться отслеживать все файлы в $HOME, лучше добавить настройку в конфиг
репозитория:
Теперь создаем самый главный alias:
alias home='git --work-tree=$HOME --git-dir=$HOME/.cfg'
Этот алиас делает две вещи. Во-первых, он указывает гиту использовать ваш домашний каталог как
рабочую директорию. Во-вторых, он указывает гиту использовать каталог .cfg в вашем домашнем
каталоге как каталог с репозиторием. Отслеживаться будут только файлы, которые вы явно добавите
через home add.
Но по умолчанию home status будет вываливать все неотслеживаемые файлы из $HOME, кроме
игнорируемых. Чтобы не смотреть на весь этот зоопарк, отключаем их показ:
home config --local status.showUntrackedFiles no
Для первого коммита, например, добавим конфиг fish:
home add "$HOME/.config/fish/config.fish"
home commit -m 'Add fish config'
На этом, собственно, все. Вы можете управлять добавленными конфигами в хомяке через гит,
используя привычные команды, только с home вместо git. Я для удобства сделал еще один alias для
lazygit:
function lazyhome --wraps='lazygit -g ~/.cfg -w ~' --description 'alias lazyhome lazygit -g ~/.cfg -w ~'
lazygit -g ~/.cfg -w ~ $argv
end
Правда, репа на том же диске не спасет, если диск умрет. Для резервной копии добавьте удаленный
репозиторий через home remote add origin <URL> и отправляйте туда коммиты через
home push -u origin HEAD.