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, но для моих задач он показался избыточным.