dotfiles
У меня есть набор конфигов, которые хочется синхронизировать между ПК и бэкапить. Конфиги лежат в $HOME и выглядят так:
exa --tree --all
.
├── .config
│ ├── alacritty
│ │ └── alacritty.yml
│ ├── fish
│ │ └── config.fish
│ └── nvim
│ └── init.lua
└── .gitconfig
git
Для синхронизации и бэкапов буду использовать git. Создал репозиторий dotfiles и перенёс туда все нужные конфиги с сохранением структуры. Теперь можно вручную копировать изменения из репозитория в домашнюю директорию, но это быстро надоедает. Решение нашлось — утилита stow. Она автоматизирует создание симлинков, именно это мне и нужно.
stow
В корне репозитория выполняем команду:
stow -n -v2 -t $HOME .
Разберём опции:
-n
— dry-run, чтобы ничего не сломать.-v2
— уровень логирования для детального вывода.-t $HOME
— целевая директория (в моём случае — домашняя)..
— исходная директория (корень репозитория).
Вывод команды:
Planning stow of: . ...
Planning stow of package ....
level of .config is 0
level of .config/alacritty is 1
level of .config/alacritty/alacritty.yml is 2
LINK: .config/alacritty/alacritty.yml => ../../dotfiles/.config/alacritty/alacritty.yml
level of .config/chromium-flags.conf is 1
LINK: .config/chromium-flags.conf => ../dotfiles/.config/chromium-flags.conf
level of .config/fish is 1
level of .config/fish/config.fish is 2
LINK: .config/fish/config.fish => ../../dotfiles/.config/fish/config.fish
level of .config/nvim is 1
LINK: .config/nvim => ../dotfiles/.config/nvim
level of .gitconfig is 0
LINK: .gitconfig => dotfiles/.gitconfig
Planning stow of package .... done
WARNING: in simulation mode so not modifying filesystem.
Ошибок нет - вызываю команду уже без -n
, чтобы применить изменения.
P.S.
В документации stow описывается режим --dotfiles
, но для моих задач он показался избыточным.