Дотфайлы

С течением времени у меня всё чаще встаёт вопрос о доставке своих конфигураций 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, о котором я уже рассказывал.

Результат