Кастомизируем Bash, Zsh

На конференциях у некоторых докладчиков можно увидеть терминалы в очень красивой боевой раскраске, прям муа 😘. Выглядит очень сочно, стильно. Одним словом — по фронтендерски, модно, молодежно, хипстерня!

Стал разбираться что это и выяснил что продвинутую стилизацию поддерживает Zsh.


Если хочется чего-то такого, то по ссылке подробный мануал по кастомизации и настройке:

https://medium.freecodecamp.org/how-you-can-style-your-terminal-like-medium-freecodecamp-or-any-way-you-want-f499234d48bc

Если вы не хотите уходить с Bash и пересаживаться на Zsh, то вы можете получить терминал похожий на темизированный Zsh (как на скриншоте):


Но вам потребуются дополнительные скрипты, а конкретно установить Powerline — как я понял это что-то типа обертки, приложение написано на Python. Все подробности по ссылке:

https://medium.freecodecamp.org/how-you-can-style-your-terminal-like-medium-freecodecamp-or-any-way-you-want-f499234d48bc

Отдельный инструмент Powerline Git status: позволяет красиво выводить информацию о текущем проекте (если вы используете Git):

https://medium.freecodecamp.org/how-you-can-style-your-terminal-like-medium-freecodecamp-or-any-way-you-want-f499234d48bc

Native Vanilla Bash prompt

Не хочу сложностей и заморочек. Есть варианты? Да, я смог собрать себе стиль, отдаленно напоминающий то что описано выше. Без вспомогательных приложений и скриптов, просто настроив общие стили и прописав свой PS1. Что у меня получилось:

User mode


Вся эта красота описывается 1й строчкой в .bashrc:

PS1="n[e[48;5;28;1;5;33m]▶[e[48;5;28;97m]  A  [e[48;5;34;38;5;232m][e[1;5;33m]▶[e[38;5;232m]  u@h  [e[48;5;30m][e[1;5;33m]▶[e[38;5;15m] w [e[40;1;5;33m]▶  [e[40;32m][$txtcyn]$git_branch[$txtred]$git_dirty[$txtrst]n[e[1;5;33m]❱ [e[m][e[32m]"

Тут есть переменные, которые отвечают за индикацию состояния GIT:

function find_git_branch()
{
local branch
if branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null); then
if [[ "$branch" == "HEAD" ]]; then
branch='detached*'
fi
git_branch="($branch)"
else
git_branch=""
fi
}
function find_git_dirty()
{
local status=$(git status --porcelain 2> /dev/null)
if [[ "$status" != "" ]]; then
git_dirty='*'
else
git_dirty=''
fi
}
PROMPT_COMMAND="find_git_branch; find_git_dirty; $PROMPT_COMMAND"

Root mode

Для рута немного другой стиль:

PS1="n[e[0;31m]☰[e[0;33m]  t [e[0;31m]❱[e[m] u@h [e[0;31m]❱[e[0;33m] w [e[m][e[0;31m]❱n❱❱❱ [e[m][e[0;91m]"


Попроще и без git индикаторов.

У меня есть небольшая репка, в которой можно найти комплект скриптов для улучшения терминала:

https://medium.freecodecamp.org/how-you-can-style-your-terminal-like-medium-freecodecamp-or-any-way-you-want-f499234d48bc

Все это использую на своих девелоперских машинках.