Дотфайлы

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

Таким образом, при выполнении source ~/.zshenv или при перезагрузке zsh все остальные конфиги подтянутся из своего текущего местоположения.

Для установки плагинов я использую oh-my-zsh, а в качестве темы терминала — powerline9k. Для полноценной работы последней требуется набор шрифтов nerdfont-complete или подобный им.

tmux

Я активно использую tmux как при подключении к удалённой машине, так и для разбиения экрана терминала на вкладки и панели.

Почти весь конфиг для tmux я позаимствовал. Отдельно были добавлены плагины для копирования текста и для отображения состояния батареи ноутбука. Кроме того были заданы более интуитивные биндинги кнопок разбиения окна на панели:

Обратите внимание на флаг -c: благодаря нему новые панели будут открываться в текущей директории, а не в корневой.

Кроме того, в моём репозитории есть конфигурация git, которая слишком скучна, чтобы о ней писать, и конфиг vim, о котором я уже рассказывал.

Результат

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade