Дотфайлы
С течением времени у меня всё чаще встаёт вопрос о доставке своих конфигураций CLI утилит на разные машины. Поэтому я решил скомпоновать свои дотфайлы в один репозиторий с более-менее удобной системой доставки.
Несмотря на то, что при переносе конфигов на другие дистрибутивы линукса возникают небольшие проблемы с установкой зависимостей и актуальных версий ПО, процесс доставки стал значительно более удобным, чем ручное копирование.
Репозиторий
Конфиги хранятся в репозитории на гитхабе. Чтобы установить их на текущую машину, я клонирую репозиторий в директорию ~/.dotfiles
, после чего создаю относительные ссылки на файлы из репозитория. Например, чтобы установить конфиг для tmux, я делаю
ln -sv "/home/poslegm/.dotfiles/tmux/.tmux.conf" ~
Таким образом, для того, чтобы обновить конфиги, мне надо просто сделать git pull
в репозитории, а все нужные файлы обновятся автоматически. Ещё одно преимущество такого подхода ― для редактирования какого-то конфига мне надо сделать привычное vim .tmux.conf
, и только потом, когда мне будет удобно, сделать соответствующие коммиты из директории .dotfiles
.
Для полной установки конфигурации надо установить при помощи пакетного менеджера зависимости из списка, выполнить make download-deps
, чтобы подгрузить оставшиеся зависимости с гитхаба, и создать относительные ссылки при помощи make install
. После этого руками править возникшие конфликты и исправлять проблемы, свойственные данному дистрибутиву.
Командная строка
В качестве оболочки командной строки я использую zsh. Самые важные для меня особенности по сравнению с башем:
- Автодополнение с возможностью выбирать альтернативы стрелками;
- Автодополнение аргументов команд с кратким описанием;
- Умное автодополнение путей в файловой системе (
cd ~/Y/P/E/B
=>cd ~/Yandex.Disk/Programming/Education/BMSTU/
);
Мой конфиг для zsh состоит из четырёх файлов: .alias
, .functions
, .zshrc
и .zshenv
. При этом ссылка из корневой директории создаётся только на .zshenv
, который содержит команду
for DOTFILE in `find /home/poslegm/.dotfiles/zsh -type f`
do
if [[ $DOTFILE != *"zshenv"* ]]; then
source $DOTFILE
fi
done
Таким образом, при выполнении source ~/.zshenv
или при перезагрузке zsh все остальные конфиги подтянутся из своего текущего местоположения.
Для установки плагинов я использую oh-my-zsh, а в качестве темы терминала ― powerline9k. Для полноценной работы последней требуется набор шрифтов nerdfont-complete или подобный им.
tmux
Я активно использую tmux как при подключении к удалённой машине, так и для разбиения экрана терминала на вкладки и панели.
Почти весь конфиг для tmux я позаимствовал. Отдельно были добавлены плагины для копирования текста и для отображения состояния батареи ноутбука. Кроме того были заданы более интуитивные биндинги кнопок разбиения окна на панели:
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
Обратите внимание на флаг -c
: благодаря нему новые панели будут открываться в текущей директории, а не в корневой.
Кроме того, в моём репозитории есть конфигурация git, которая пока слишком маленькая, чтобы о ней писать, и конфиг vim, о котором я уже рассказывал.