Приглашение командной строки обновляется после каждой команды, поэтому именно оно задаёт ощущение от работы в терминале. Starship собирает подсказку из модулей: путь, ветка и состояние Git, длительность последней команды, версии языков, контекст Kubernetes, заряд батареи. Программа написана на Rust, работает как один бинарник и поддерживает bash, zsh, fish, PowerShell и другие оболочки. Конфигурация хранится в одном TOML-файле и не зависит от синтаксиса конкретного shell. Ниже — установка, разбор формата, рабочий конфиг и диагностика, если подсказка стала медленной.

Установка и подключение

Starship есть в репозиториях не всех дистрибутивов, поэтому сначала проверьте пакет, а уже потом тяните установочный скрипт. Скрипт ставит бинарник в /usr/local/bin и при необходимости просит sudo; для домашней установки укажите каталог, который принадлежит пользователю.

apt-cache policy starship
curl -fsSLO https://starship.rs/install.sh
less install.sh
sh install.sh -b "$HOME/.local/bin" -y

Скачивать и сразу выполнять текст из сети — плохая привычка, даже с официального сайта: сохраните файл, просмотрите его и только затем запускайте. После установки подключите инициализацию в конец файла конфигурации оболочки. Для bash это ~/.bashrc, для zsh — ~/.zshrc, для fish — ~/.config/fish/config.fish.

# ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"
eval "$(starship init bash)"

# ~/.zshrc
eval "$(starship init zsh)"

# fish
starship init fish | source

Строка инициализации должна идти после настройки PATH, но до интерактивных дополнений, которые переопределяют приглашение. Проверьте версию командой starship --version и откройте новый терминал: старый сеанс не перечитает конфиг. Для обновления достаточно заменить бинарник и перезапустить оболочку; настройки в starship.toml при этом сохраняются.

Как устроен формат приглашения

Формат — это строка из переменных вида $directory, литерального текста и стилей в квадратных скобках: [текст](bold blue). Модуль выводится только тогда, когда для него есть данные: у каталога без Git не будет ветки, у простой команды не будет длительности. Переменная $all подставляет все модули, которые не перечислены явно, а $fill растягивает пустоту и прижимает правую часть к краю экрана.

Символы вроде стрелок и разделителей обычно берут из Nerd Font. Если вместо них видны квадраты, проверьте локаль UTF-8 и шрифт терминала. Быстрый тест: echo -e "\xee\x82\xa0" должен показать символ ветки, а не ромб с вопросом. Готовые наборы настроек можно посмотреть командой starship preset --list, но лучше собрать свой формат: пресеты меняются от версии к версии.

starship preset --list
starship preset tokyo-night -o ~/.config/starship.toml
starship explain

starship explain расшифровывает, какие модули сейчас показаны и почему. Это быстрее, чем искать в документации значение каждого символа.

Рабочий конфиг

Начните с короткого формата: каталог, Git, длительность команды и символ приглашения. Такой набор даёт почти всю полезную информацию и не перегружает строку. Цвета вынесите в палитру, чтобы менять тему в одном месте.

# ~/.config/starship.toml
add_newline = false
command_timeout = 800
palette = "base16"

format = """
$directory\
$git_branch$git_status\
$fill\
$cmd_duration\
$line_break\
$character"""

[palettes.base16]
blue = "#61afef"
green = "#98c379"
yellow = "#e5c07b"
red = "#e06c75"

[directory]
truncation_length = 3
truncate_to_repo = true
style = "bold blue"

[git_branch]
format = "on [$branch]($style) "
style = "bold green"

[git_status]
format = "([$all_status$ahead_behind]($style) )"
style = "bold yellow"

[cmd_duration]
min_time = 2_000
format = "took [$duration]($style) "
style = "bold yellow"

[character]
success_symbol = "[>](bold green)"
error_symbol = "[>](bold red)"

truncation_length = 3 оставляет в пути три последних компонента, а truncate_to_repo не даёт обрезать путь внутри репозитория. min_time = 2_000 показывает длительность только для команд дольше двух секунд: иначе подсказка пестрит цифрами после каждого ls. Порог задаётся в миллисекундах, не в секундах.

Если в репозитории тысячи файлов, модуль git_status может заметно тормозить: он запускает git и разбирает статус. В таком случае отключите его для конкретных каталогов или увеличьте command_timeout осознанно, понимая, что подсказка будет ждать дольше.

Свои модули и правый промпт

Custom-модуль выполняет команду и вставляет её вывод. Это удобно для индикатора локального сервиса, версии проекта или статуса контейнера. Команда запускается в shell, поэтому не полагайтесь на переменные окружения интерактивного сеанса: прописывайте абсолютные пути.

[custom.nginx]
command = "systemctl is-active nginx 2>/dev/null"
when = "test -f /etc/nginx/nginx.conf"
symbol = "nginx"
style = "bold red"
format = "[$symbol $output]($style) "

when — отдельная команда-условие: модуль появится только при нулевом коде возврата. Вывод команды стоит держать коротким, иначе он сломает вёрстку строки. Правый промпт задаётся через right_format; в bash для него нужен ble.sh или flyline, в zsh и fish он работает из коробки.

Диагностика и ускорение

Если после открытия терминала заметна задержка, сначала измерьте вклад модулей, а не отключайте всё подряд. starship timings показывает модули, которые выполнялись дольше миллисекунды, а трассировка объясняет, какая внешняя команда тормозит.

STARSHIP_LOG=trace starship timings
STARSHIP_LOG=trace starship module git_status 2>&1 | tail -20
starship config directory.truncation_length 2

Типичные виновники — git в огромном репозитории, менеджеры версий вроде pyenv и вызовы облачных CLI. Лечится это отключением модуля, уменьшением command_timeout или настройкой scan_timeout. Кэш Starship лежит в ~/.cache/starship; переменная STARSHIP_CACHE позволяет перенести его, например, в tmpfs. Предупреждения о таймаутах на этапе настройки не скрывайте: они указывают, какой именно модуль не успел ответить.

Чек-лист внедрения

  • Бинарник установлен из проверенного источника, скрипт установки просмотрен.
  • Инициализация стоит в конце конфига оболочки, после PATH.
  • Шрифт Nerd Font и локаль UTF-8 проверены тестовыми символами.
  • Конфиг хранится в репозитории dotfiles и версионируется.
  • Тяжёлые модули отключены или ограничены по времени.
  • starship timings укладывается в комфортные 50–100 мс.

Итог

Starship даёт информативную подсказку без привязки к конкретной оболочке: один TOML-файл, предсказуемые модули и понятная диагностика. Начните с минимального формата, добавляйте модули по одному и измеряйте задержку после каждого шага. Тогда приглашение будет помогать, а не отвлекать, и не превратится в главный тормоз терминала.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте