Управление файлами конфигурации. Домашний каталог. Chezmoi
2022-10-28
·
8 мин. для прочтения
Использование chezmoi для управления файлами конфигурации домашнего каталога пользователя.
Содержание
1 Общая информация
- Сайт: https://www.chezmoi.io/
- Репозиторий: https://github.com/twpayne/chezmoi
2 Установка
- Установка бинарного файла. Скрипт определяет архитектуру процессора и операционную систему и скачивает необходимый файл:
с помощью
curl:sh -c "$(curl -fsLS chezmoi.io/get)"с помощью
wget:sh -c "$(wget -qO- chezmoi.io/get)"с помощью PowerShell:
(iwr -UseBasicParsing https://chezmoi.io/get.ps1).Content | powershell -c -
- Linux
- Gentoo
- overlay ace (https://github.com/ananace/overlay):
emerge chezmoi-bin
- overlay ace (https://github.com/ananace/overlay):
- Fedora
- Установка из COPR:
sudo dnf -y copr enable lihaohong/chezmoi sudo dnf -y install chezmoi - Установка через Snap:
- Установите Snap:
dnf install snapd - Либо выйдите из системы, либо снова войдите в нее, либо перезагрузите систему, чтобы убедиться, что пути snap обновлены правильно.
- Включите поддержку классического варианта snap:
ln -s /var/lib/snapd/snap /snap - Установите chezmoi:
snap install chezmoi --classic
- Установите Snap:
- Установка из COPR:
- Gentoo
- Windows
- установка посредством Chocolatey (см. Пакетный менеджер для Windows. Chocolatey):
choco install chezmoi
- установка посредством Chocolatey (см. Пакетный менеджер для Windows. Chocolatey):
3 Конфигурация chezmoi
3.1 Рабочие файлы
- Состояние файлов конфигурации сохраняется в каталоге
~/.local/share/chezmoi - Он является клоном вашего репозитория
dotfiles. - Файл конфигурации
~/.config/chezmoi/chezmoi.toml(можно использовать также JSON или YAML) специфичен для локальной машины. - Файлы, содержимое которых одинаково на всех ваших машинах, дословно копируются из исходного каталога.
- Файлы, которые варьируются от машины к машине, выполняются как шаблоны, обычно с использованием данных из файла конфигурации локальной машины для настройки конечного содержимого, специфичного для локальной машины.
- При запускевычисляется желаемое содержимое и разрешения для каждого файла, а затем вносит необходимые изменения, чтобы ваши файлы соответствовали этому состоянию.
chezmoi apply - По умолчанию chezmoi изменяет файлы только в рабочей копии.
3.2 Автоматически создавать файл конфигурации на новой машине
При выполнении
chezmoi initтакже может автоматически создать файл конфигурации, если он еще не существует.Если ваш репозиторий содержит файл с именем
.chezmoi.$FORMAT.tmpl, где$FORMATесть один из поддерживаемых форматов файла конфигурации (json,toml, илиyaml), тоchezmoi initвыполнит этот шаблон для создания исходного файла конфигурации.Например, пусть
~/.local/share/chezmoi/.chezmoi.toml.tmplвыглядит так:{{- $email := promptStringOnce . "email" "Email address" -}} [data] email = {{ $email | quote }}- При выполнении
chezmoi initбудет создан конфигурационный файл~/.config/chezmoi/chezmoi.toml. promptStringOnce— это специальная функция, которая запрашивает у пользователя значение, если оно еще не установлено в разделеdataконфигурационного файла.
- При выполнении
Чтобы протестировать этот шаблон, используйте
chezmoi execute-templateс флагами--initи--promptString, например:chezmoi execute-template --init --promptString email=me@home.org < ~/.local/share/chezmoi/.chezmoi.toml.tmpl
3.3 Пересоздание файл конфигурации
- Если вы измените шаблон файла конфигурации,
chezmoiпредупредит вас, если ваш текущий файл конфигурации не был сгенерирован из этого шаблона. - Вы можете повторно сгенерировать файл конфигурации, запустив:
chezmoi init
4 Шаблоны
4.1 Общая информация
- Шаблоны используются для изменения содержимого файла в зависимости от среды.
- Используется синтаксис шаблонов Go.
- Файл интерпретируется как шаблон, если выполняется одно из следующих условий:
- имя файла имеет суффикс
.tmpl; - файл находится в каталоге
.chezmoitemplates.
- имя файла имеет суффикс
4.2 Данные шаблона
- Полный список переменных шаблона:
chezmoi data - Источники переменных:
- файлы
.chezmoi, например,.chezmoi.os; - файлы конфигурации
.chezmoidata.$FORMAT. Форматы (json,jsonc,toml,yaml) читаются в алфавитном порядке; - раздел
dataконфигурационного файла.
- файлы
4.3 Способы создания файла шаблона
- При первом добавлении файла передайте аргумент
--template:chezmoi add --template ~/.zshrc - Если файл уже контролируется chezmoi, но не является шаблоном, можно сделать его шаблоном:
chezmoi chattr +template ~/.zshrc - Можно создать шаблон вручную в исходном каталоге, присвоив ему расширение
.tmpl:chezmoi cd $EDITOR dot_zshrc.tmpl - Шаблоны в каталоге
.chezmoitemplatesдолжны создаваться вручную:chezmoi cd mkdir -p .chezmoitemplates cd .chezmoitemplates $EDITOR mytemplate
4.4 Редактирование файла шаблона
- Используйте
chezmoi edit:chezmoi edit ~/.zshrc - Чтобы сделанные вами изменения сразу же применялись после выхода из редактора, используйте опцию
--apply:chezmoi edit --apply ~/.zshrc
4.5 Тестирование шаблонов
- Тестирование с помощью команды
chezmoi execute-template. - Тестирование небольших фрагментов шаблонов:
chezmoi execute-template '{{ .chezmoi.hostname }}' - Тестирование целых файлов:
chezmoi cd chezmoi execute-template < dot_zshrc.tmpl
4.6 Синтаксис шаблона
- Действия шаблона записываются внутри двойных фигурных скобок,
{{ }}. - Действия могут быть переменными, конвейерами или операторами управления.
- Текст вне действий копируется буквально.
- Переменные записываются буквально:
{{ .chezmoi.hostname }}
- Условные выражения могут быть записаны с использованием
if,else if,else,end:
{{ if eq .chezmoi.os "darwin" }}
# darwin
{{ else if eq .chezmoi.os "linux" }}
# linux
{{ else }}
# other operating system
{{ end }}
4.6.1 Удаление пробелов
- Для удаления проблем в шаблоне разместите знак минус и пробела рядом со скобками:
HOSTNAME={{- .chezmoi.hostname }} - В результате получим:
HOSTNAME=myhostname
4.6.2 Отладка шаблона
- Используется подкоманда
execute-template:chezmoi execute-template '{{ .chezmoi.os }}/{{ .chezmoi.arch }}' - Интерпретируются любые данные, поступающие со стандартного ввода или в конце команды.
- Можно передать содержимое файла этой команде:
cat foo.txt | chezmoi execute-template
4.6.3 Логические операции
- Возможно выполнение логических операций.
- Если имя хоста машины равно
work-laptop, текст междуifиendбудет включён в результат:# common config export EDITOR=vi # machine-specific configuration {{- if eq .chezmoi.hostname "work-laptop" }} # this will only be included in ~/.bashrc on work-laptop {{- end }}
Логические функции
eq: возвращаетtrue, если первый аргумент равен любому из остальных аргументов, может принимать несколько аргументов;not: возвращает логическое отрицание своего единственного аргумента;and: возвращает логическое И своих аргументов, может принимать несколько аргументов;or: возвращает логическое ИЛИ своих аргументов, может принимать несколько аргументов.
Целочисленные функции
len: возвращает целочисленную длину своего аргумента;eq: возвращает логическую истинуarg1 == arg2;ne: возвращает логическое значениеarg1 != arg2;lt: возвращает логическую истинуarg1 < arg2;le: возвращает логическую истинуarg1 <= arg2;gt: возвращает логическую истинуarg1 > arg2;ge: возвращает логическую истинуarg1 >= arg2.
4.7 Переменные шаблона
- Чтобы просмотреть переменные, доступные в вашей системе, выполните:
chezmoi data - Чтобы получить доступ к переменной
chezmoi.kernel.osreleaseв шаблоне, используйте:{{ .chezmoi.kernel.osrelease }}
5 Использование chezmoi
5.1 Первоначальная настройка на первичном хосте
- Инициализируйте
chezmoiкомандой:chezmoi init - Это создаст новый локальный репозиторий git в
~/.local/share/chezmoi. - Добавьте в репозиторий первый файл с помощью
chezmoi:chezmoi add ~/.bashrc - Команда скопирует
~/.bashrcв~/.local/share/chezmoi/dot_bashrc. - Можно отредактировать файл:
chezmoi edit ~/.bashrc - Откроется
~/.local/share/chezmoi/dot_bashrcв редакторе, заданном переменной$EDITOR. - Внесите некоторые изменения и сохраните файл.
- Посмотрите, какие изменения внес бы
chezmoi:chezmoi diff - Примените изменения:
chezmoi -v apply - Все команды
chezmoiпринимают флаг-v(подробная информация) и флаг-n(пробный запуск, демонстрирующий, но не вносящий изменения).
5.2 Репозиторий на github
- Создайте репозиторий
dotfilesдля хранения конфигурационных файлов. - Для определённости будем использовать https://github.com.
- Поддерживается хранение ваших конфигурационных файлов как в общедоступных, так и в частных репозиториях.
- Создать репозиторий можно вручную или из командной строки (см. github: утилиты командной строки):
gh repo create dotfiles --private - Откройте оболочку в исходном каталоге, чтобы зафиксировать изменения:
chezmoi cd git add . git commit -m "Initial commit" - Подключите репозиторий и выгрузите файлы:
git remote add origin git@github.com:username/dotfiles.git git push --set-upstream origin master git push -u origin - Выйдите из оболочки
chezmoi:exit
5.3 Использование chezmoi на нескольких машинах
- На второй машине инициализируйте
chezmoiс вашим репозиториемdotfiles:chezmoi init https://github.com/<username>/dotfiles.git - Или через ssh:
chezmoi init git@github.com:<username>/dotfiles.git - Проверьте, какие изменения внесёт
chezmoiв домашний каталог, запустив:chezmoi diff - Если вас устраивают изменения, внесённые
chezmoi, запустите:chezmoi apply -v - Если вас не устраивают изменения в файле, отредактируйте его с помощью:
chezmoi edit file_name - Также можно вызвать инструмент слияния, чтобы объединить изменения между текущим содержимым файла, файлом в вашей рабочей копии и измененным содержимым файла:
chezmoi merge file_name - При существующем каталоге
chezmoiможно получить и применить последние изменения из вашего репозитория:chezmoi update -v
5.4 Настройка новой машины с помощью одной команды
- Можно установить свои
dotfilesна новый компьютер с помощью одной команды:chezmoi init --apply https://github.com/<username>/dotfiles.git - Через ssh:
chezmoi init --apply git@github.com:<username>/dotfiles.git
5.5 Ежедневные операции c chezmoi
5.5.1 Извлеките последние изменения из репозитория и примените их
- Можно извлечь изменения из репозитория и применить их одной командой:
chezmoi update - Это запускается
git pull --autostash --rebaseв вашем исходном каталоге, а затемchezmoi apply.
5.5.2 Извлеките последние изменения из своего репозитория и посмотрите, что изменится, фактически не применяя изменения
- Выполните:
chezmoi git pull -- --autostash --rebase && chezmoi diff - Это запускается
git pull --autostash --rebaseв вашем исходном каталоге, аchezmoi diffзатем показывает разницу между целевым состоянием, вычисленным из вашего исходного каталога, и фактическим состоянием. - Если вы довольны изменениями, вы можете применить их:
chezmoi apply
5.5.3 Автоматически фиксируйте и отправляйте изменения в репозиторий
- Можно автоматически фиксировать и отправлять изменения в исходный каталог в репозиторий.
- Эта функция отключена по умолчанию.
- Чтобы включить её, добавьте в файл конфигурации
~/.config/chezmoi/chezmoi.tomlследующее:[git] autoCommit = true autoPush = true - Всякий раз, когда в исходный каталог вносятся изменения,
chezmoiфиксирует изменения с помощью автоматически сгенерированного сообщения фиксации и отправляет их в ваш репозиторий. - Будьте осторожны при использовании
autoPush. Если ваш репозиторийdotfilesявляется общедоступным, и вы случайно добавили секрет в виде обычного текста, этот секрет будет отправлен в ваш общедоступный репозиторий.