linux
August 4, 2022

Мои настройки Linux

Введение

Я в очередной раз сменил дистрибутив (на этот раз Fedora с KDE) и пересобрал с нуля конфигурационные файлы многих программ. Мне нравятся минималистичные интерфейсы, но жертвовать удобством ради этого я не хочу. О том, что в итоге получилось — под катом.

Шелл

В разное время я несколько раз прыгал от zsh к fish и обратно, но в текущей итерации вернулся на z-shell. Получилась ультимативная штука, которой очень удобно пользоваться. Вот такой набор плагинов я накидал:

  • enhancd — Плагин, который запоминает последние посещённые директории и позволяет переходить по ним по ключевым словам или с помощью fzf
  • fast-syntax-highlighting — Быстрая подсветка синтаксиса. Альтернатива к решению от zsh-users, которым я пользовался долгое время, но лишённый его проблем. Уж не знаю, насколько быстрее, но точно красивее.
  • zsh-history-substring-search — Плагин который добавляет виджет поиска по подстроке в истории команд. По факту это работает просто — вводится часть команды и стрелками вверх-вниз выбирается нужная команда из истории
  • zsh-autosuggestions — Плагин, который генерирует подсказки автодополнения, основываясь на истории запущенных команд
  • powerlevel10k — красивая тема с множеством настроек и подключаемых виджетов
Так выглядит шелл в папке с моим сайтом-портфолио, написанном на Javascript — текущая папка, ветка в Git, версия node.js и количество активных задач в консольном таск-менеджере
  • fzf-tab — Плагин, заменяющий стандартный механизм отрисовки автоподсказок на fzf. Работает с огромным множеством команд, и даже может показать описание флагов некоторых команд
Подскажет директории, куда можно перейти, если нажать <Tab> после команды `cd`
Подскажет флаги команды `git branch`, если нажать <Tab> после команды и знака "-"
  • autopair — Плагин, который автоматически закрывает парные скобки при вводе открывающей. Прямо как взрослые IDE!
  • fzf-history-search — И еще один плагин для работы с историей. Этот открывает fzf со историей запуска команд. Благодаря ему можно быстро по неточному поиску найти нужную команду, вместо того, чтобы вечность тыкать стрелку вверх

Управляет всем этим великолепием Sheldon — универсальный менеджер плагинов, который работает как с bash, так и с zsh. Кстати, написан на Rust.

Менеджер конфигов

Все конфиги у меня лежат на гитхабе. Ими нужно как-то управлять, и чтобы не держать в домашней папке гитовый репозиторий (неудобно, есть риск добавить лишнее), я использую chezmoi. Он даёт возможность в одну команду без установки сторонних программ быстро перенести все конфиги на новую машину (потому что распространяется маленьким бинарником, который легко скачать), запустить все скрипты и получить готовую систему.

sh -c "$(curl -fsLS https://chezmoi.io/get)" -- init --apply dadyarri

(Сработает только на федоре, потому что там есть автоматически запускаемый скрипт, который устанавливает кучу пакетов через dnf)

Скрипты

Последнее время пишу разные скриптики разной степени замороченности, чтобы упростить себе жизнь (и заодно не скиснуть от безделия).

ex

Скрипт, изначально стыренный с реддита, но немного докрученный для повышения удобства. Автоматически определяет тип архива и распаковывывает его нужной программой. Опционально можно указать путь назначения, и, если программа поддерживает такое колдунство содержимое архива попадёт в указанную папку.

fdups

Самописный скрипт, ищущий дубликаты файлов в указанной директории (имя не имеет значения, поиск ведётся по хеш-сумме)

upd

Самописный скрипт, автоматизирующий обновление системы и всевозможных пакетов из кучи разных источников (сейчас доступен dnf, flatpak, neovim, мои бинарники и глобальные npm пакеты)

addpath

Переменную $PATH я не храню статически в конфиге, а держу все нужные мне пути в отдельном файлике и специальным скриптом читаю оттуда и передаю в .zshrc. Этот скрипт (в отличие от всех предыдущих, написанный на nim) записывает новый путь в указанный файл (примерно как fish_add_path только текущий шел не изменяется).

getpath

Тот скрипт, который собирает все пути из файла .paths и печатает их в формате, необходимом для $PATH, заодно проверяя, существует ли путь, чтобы лишнее не копилось в переменных окружения.

dotversion

Еще один самописный скрипт на nim. Я тут начал активно переходить на .NET и оказалось, что у них нет встроенного инструмента для управления версиями приложений (типа npm version). В итоге я потратил пару вечеров и написал свой такой инструмент, в чём-то даже превосходящий упомянутый джаваскриптовый.

В основе находится semver, поддерживается генерация мажор, минор, патч, альфа, бета, релиз-кандидат, альфа-{мажор, минор, патч}, бета-{мажор, минор, патч}, релиз-кандидат-{мажор, минор, патч} версий. Приложение автоматически найдёт файл csproj возьмет оттуда версию и запишет новую (есть флаг, запускающий вычисление новой версии, без перезаписи файла)

Ну, вроде бы и всё. Stay in touch!