Первичную настройку терминала я описал в предыдущей заметке. Теперь закончу дело, которое постоянно откладывал из-за нехватки времени — установку Powerline.

Для начала устанавливаю в систему шрифт Meslo LG M DZ Regular и устанавливаю его в iTerm2:

Дальше иду по документации по установке Powerline.

Предпочитаю поставить Python из brew:

$ brew install python

В ~/.zshrc прописываю путь к Python:

export PATH=$HOME/Library/Python/2.7/bin:$PATH

И перечитываю:

$ source ~/.zshrc
$ rehash

Ставлю “latest development version” (со стабильной пару раз были проблемы при установке):

$ pip install --user git+git://github.com/powerline/powerline

Проверяю, долюен выдасться путь к powerline:

$ python -c 'import pkgutil; print pkgutil.get_loader("powerline").filename'

    .../Library/Python/2.7/lib/python/site-packages/powerline

В ~/.zshrc добавляю секцию:

# Powerline
# https://powerline.readthedocs.org/en/latest/installation.html
powerline_path=$(python -c 'import pkgutil; print pkgutil.get_loader("powerline").filename' 2>/dev/null)
if [[ ! -z "$powerline_path" ]]; then
  source ${powerline_path}/bindings/zsh/powerline.zsh
fi

И перечитываю его:

$ source ~/.zshrc

Здесь shell prompt меняется с привычного

на новый

Копирую дефолтовые конфиг-файлы Powerline в каталог ~/.config/powerline:

$ mkdir -p ~/.config
$ cp -r ~/Library/Python/2.7/lib/python/site-packages/powerline/config_files ~/.config/powerline

Модифицирую файл темы, создаю свой файл на базе themes/shell/default.json (различия минимальны):

$ cd ~/.config/powerline
$ vi themes/shell/ctrld.json

{
    "segments": {
        "left": [
            {
                "function": "powerline.segments.shell.mode"
            },
            {
                "function": "powerline.segments.common.net.hostname",
                "priority": 10
            },
            {
                "function": "powerline.segments.common.env.user",
                "priority": 30
            },
            {
                "function": "powerline.segments.shell.cwd",
                "priority": 10
            },
            {
                "function": "powerline.segments.common.vcs.branch",
                "priority": 40
            },
            {
                "function": "powerline.segments.shell.last_pipe_status",
                "priority": 10
            }
        ],
        "right": [
        ]
    }
}

Указываю использовать новый файл темы в config.json и выставляю term_truecolor:

$ vi config.json

...
"common": {
    "term_truecolor": true
},
...
"ext": {
    ...
    "shell": {
        "colorscheme": "default",
        "theme": "ctrld",
        "local_themes": {
            "continuation": "continuation",
            "select": "select"
        }
    },
    ...
}

Изменения в powerline подхватываются автоматом при каждом нажатии на Enter в shell (при рендеринге PS1).

На выходе получается такой вид PS1:

Powerline интегрируется с vim и tmux. Отлично работает и в macOS, и в Linux. Гибко конфигурируется, можно придумывать любые конфигурации. Минус в том, что рендеринг PS1 может занимать ощутимое время (до секунды) на слабых рабочих станциях, особенно с отображением vcs info. На моём Mac mini Lion Server пришлось отключить vcs, чтобы такого не было. Вроде бы powerline может работать в режиме демона, быстро отдавая результат, но я не помню точно, как этого добивался, на какой версии и не ушло ли это в obsolete code.

Однако польза лично для меня есть, терминал выглядит гораздо информативнее, поэтому я всегда ставлю Powerline.