Швидше за все, ви бачили в інтернеті знімки екрана сучасних командних оболонок, таких як Fish або Zsh з OhMyZsh, чи навіть використовували одну з них. Вони мають багато налаштувань, а також запрошення вводу команд з дуже детальною інформацією, включно з активною гілкою Git.
Частину з того, що є в Zsh, можна отримати і в Bash, використавши для генерації запрошення вводу утиліту Starship Prompt. Вона підтримує багато модулів виведення інформації, зокрема для git, різних мов програмування та сервісів. У цій статті ми розглянемо як налаштувати Starship для Bash в Ubuntu 24.04 або Fedora 42.
Зміст
Налаштування шрифту
Для того щоб все це нормально запрацювало і у вас відображалися всі символи, ваш термінал повинен використовувати шрифт із сімейства Nerd. Якщо коротко, то це шрифти, які містять не лише цифри та літери, але й різноманітні іконки. Сюди входить Font Awesome, Hack, JetBrains Mono, Source Code Pro та багато інших, назви яких можна знайти тут. У Fedora можна встановити Source Code Pro виконавши таку команду:
sudo dnf install adobe-source-code-pro-fonts
А шрифт Hack можна встановити такою командою:
sudo dnf install source-foundry-hack-fonts
Після цього цей шрифт потрібно активувати в налаштуваннях вашого емулятора терміналу. Наприклад, у Pyxis потрібно відкрити Preferences, далі треба вимкнути перемикач Use System Font:
І вибрати шрифт Hack у полі Custom Font:
Встановлення Starship Prompt
Програма написана на Rust і постачається у вигляді готового виконуваного файлу, тому дистрибутив великого значення не має. І навіть більше того, у програми є скомпільовані файли не тільки для Linux, але й для Windows та MacOS.
Вам достатньо завантажити виконуваний файл програми зі сторінки релізів GitHub репозиторію програми та розмістити його в /usr/local/bin або будь-якому іншому зручному місці. Або можна використати скрипт встановлення, який зробить все за вас:
curl -sS https://starship.rs/install.sh | sh
Після цього залишається додати запуск програми в ~/.bashrc:
eval "$(starship init bash)"
Це все. Далі ви можете відкрити нове вікно терміналу та переконатись що програма працює. Тепер можна переходити до її налаштування.
Налаштування Starship Prompt
Конфігурація програми знаходиться в ~/.config/starship.toml. Якщо такого файлу немає, то його можна створити:
touch ~/.config/starship.toml
У самому верху файлу можна додати наступний рядок:
"$schema" = 'https://starship.rs/config-schema.json'
Цей рядок не відповідає за конфігурацію програми безпосередньо, але описує схему конфігураційного файлу та покращує автодоповнення, якщо ви використовуєте якесь IDE для редагування файлу. До того ж у файлі, на який посилається ця директива, ви зможете знайти налаштування за замовчуванням для більшості модулів Starship. Одразу після встановлення запрошення вводу виглядатиме ось так:
Основна ідея Starship - відображати інформацію тільки там, де вона потрібна, тому тут відображається лише поточна директорія та символ очікування введення команди.
1. Формат запрошення
Оскільки програма відповідає за запрошення вводу, то формат цього самого запрошення є однією з найважливіших частин. За замовчуванням формат включає всі змінні з усіх модулів, що підтримуються програмою:
format = """
$username\\
$hostname\\
$localip\\
$shlvl\\
$singularity\\
$kubernetes\\
$directory\\
$vcsh\\
$fossil_branch\\
$fossil_metrics\\
$git_branch\\
$git_commit\\
$git_state\\
$git_metrics\\
$git_status\\
$hg_branch\\
$pijul_channel\\
$docker_context\\
$package\\
$c\\
$cmake\\
$cobol\\
$daml\\
$dart\\
$deno\\
$dotnet\\
$elixir\\
$elm\\
$erlang\\
$fennel\\
$gleam\\
$golang\\
$guix_shell\\
$haskell\\
$haxe\\
$helm\\
$java\\
$julia\\
$kotlin\\
$gradle\\
$lua\\
$nim\\
$nodejs\\
$ocaml\\
$opa\\
$perl\\
$php\\
$pulumi\\
$purescript\\
$python\\
$quarto\\
$raku\\
$rlang\\
$red\\
$ruby\\
$rust\\
$scala\\
$solidity\\
$swift\\
$terraform\\
$typst\\
$vlang\\
$vagrant\\
$zig\\
$buf\\
$nix_shell\\
$conda\\
$meson\\
$spack\\
$memory_usage\\
$aws\\
$gcloud\\
$openstack\\
$azure\\
$nats\\
$direnv\\
$env_var\\
$mise\\
$crystal\\
$custom\\
$sudo\\
$cmd_duration\\
$line_break\\
$jobs\\
$battery\\
$time\\
$status\\
$os\\
$container\\
$netns\\
$shell\\
$character
"""
Ось змінні, які вас будуть цікавити:
- $username - ім'я користувача
- $hostname - ім'я хоста
- $directory - поточна директорія
- $line_break - перехід на новий рядок
- $cmd_duration - виводить час виконання команди
- $character - виводить символ, що відображається перед введенням команди, наприклад $.
Незважаючи на те, що тут перелічені всі модулі, не всі з них виводяться за замовчуванням, тому що в налаштуваннях кожного модуля можна змінювати чи буде виводитись з нього будь-яка інформація. Тому я рекомендую цей формат взагалі не чіпати, а налаштовувати потрібні модулі окремо. Вам може знадобитися змінювати значення цього налаштування, тільки якщо ви захочете поміняти змінні місцями.
Наприклад, можна перенести директорію на новий рядок, розмістивши її в кінці, після $line_break. Для цього не обов'язково вказувати повністю стандартний формат, можна використовувати змінну $all. Нові значення перевизначать попередні, наприклад:
format = '$all$directory$character'
Це буде виглядати ось так:
3. Додатковий порожній рядок
За замовчуванням після виведення команди буде виводитись порожній рядок. Для того щоб це вимкнути достатньо додати в конфігураційний файл таке налаштування:
add_newline = false
4. Повний шлях до поточної папки
За замовчуванням, у Starship досить нестандартна поведінка для папок. По-перше, шлях до папки обрізається до трьох останніх папок у шляху, по-друге, якщо ви знаходитесь у репозиторії, то шлях буде обрізано відносно початку репозиторію.
Для того щоб показувати весь шлях незалежно ні від чого додайте такі рядки конфігурації для модуля directory:
[directory]
truncate_to_repo=false
truncation_length = 0
5. Запрошення командного рядка
За замовчуванням перед полем введення команди виводиться символ "❯". Він буде зеленим, якщо команда виконана успішно, та червоним, якщо сталася помилка. Якщо ви хочете використовувати звичний знак долара, вам потрібно буде перевизначити налаштування модуля character. Наприклад, так:
success_symbol = '[\\$](bold green)'
error_symbol = '[\\$](bold red)'
У квадратних дужках тут вказується сам символ, а в круглих стиль та колір. Для успішно виконаної команди та команди з помилкою символ задається окремо.
Цей спосіб налаштування формату є загальним для всіх модулів. Ви можете вказати символи або змінну у квадратних дужках, а потім у круглих дужках вказати для них стиль. Все звичайним текстом, без будь-яких кодів та Escape-послідовностей.
6. Ім'я користувача та хоста
За замовчуванням ім'я хоста відображається тільки для SSH підключень, аналогічно з іменем користувача. Якщо ви хочете щоб ці дані відображались постійно, додайте такі рядки конфігурації:
[hostname]
ssh_only = false
style = 'bold green'
format = '[$hostname$ssh_symbol]($style) '
ssh_symbol = ' 🌐'
[username]
show_always = true
format = '[$user]($style)[@]($style)'
style_user = 'bold green'
7. Стан git
Якщо поточна папка містить git репозиторій, то утиліта відображає інформацію про цей репозиторій. А саме активну гілку, а також інформацію про зміни.
Усі позначення можна знайти в схемі конфігураційного файлу, але ось основні з них:
- ✘ - містить видалені файли
- » - містить перейменовані файли
- ! - містить будь-які зміни
- $ - містить сховані (stashed) зміни
Ця інформація відображається в дужках червоним кольором. Ви можете налаштувати символи та їх стиль за допомогою модулів git_status та git_branch:
[git_branch]
style = 'bold yellow'
[git_status]
style = 'bold yellow'
8. Вимкнення непотрібних модулів
За замовчуванням Starship має багато модулів для мов програмування та сервісів. Частина цих модулів активується, якщо в системі є певний конфігураційний файл, частина - якщо в поточній папці є файли з певним розширенням. Наприклад, модуль php показує версію PHP в системі, якщо в поточній папці є php файли, що ви могли бачити на знімках екрана в попередньому розділі.
Це не завжди потрібно і такі модулі можна вимкнути. Синтаксис доволі простий. Пишете ім'я модуля у квадратних дужках, а далі параметр disabled зі значенням true. Наприклад, цей код вимикає більшість не мов програмування:
[bun]
disabled = true
[buf]
disabled = true
[cmake]
disabled = true
[cobol]
disabled = true
[crystal]
disabled = true
[daml]
disabled = true
[dart]
disabled = true
[deno]
disabled = true
[dotnet]
disabled = true
[elixir]
disabled = true
[elm]
disabled = true
[erlang]
disabled = true
[fennel]
disabled = true
[gleam]
disabled = true
[golang]
[gradle]
disabled = true
[haxe]
disabled = true
[helm]
disabled = true
[java]
disabled = true
[julia]
disabled = true
[kotlin]
disabled = true
[lua]
disabled = true
[meson]
disabled = true
[nim]
disabled = true
[nodejs]
[ocaml]
disabled = true
[opa]
disabled = true
[perl]
disabled = true
[pulumi]
disabled = true
[purescript]
disabled = true
[python]
[quarto]
disabled = true
[raku]
disabled = true
[red]
disabled = true
[rlang]
disabled = true
[ruby]
disabled = true
[rust]
disabled = true
[solidity]
disabled = true
[typst]
disabled = true
[swift]
disabled = true
[vagrant]
disabled = true
[vlang]
disabled = true
[zig]
disabled = true
[php]
disabled = true
Я залишив увімкненими тільки nodejs, golang та python. Після всіх налаштувань, описаних вище, запрошення вводу команди виглядатиме ось так:
Висновки
У цій невеликій статті ми розглянули як налаштувати Starship Prompt для Bash в Ubuntu або Fedora. Як бачите, це може бути досить корисно, якщо ви хочете отримувати додаткову інформацію про поточну директорію та оточення, але не хочете використовувати Zsh.