прикрашання терміналу за допомогою powerline

| щоденник, linux, bash, підказка

колись я вже грався в прикрашання командного рядка bash, і результату мені вистачає. але нещодавно я встановлював свіжий реліз manjaro на черговий домашній ноутбук, побачив гарненьке оформлення терміналу і зацікавився. виявилося, що новий manjaro використовує powerline (із темою powerlevel10k та додатковим шрифтом, які мені не потрібні), і його досить просто налаштувати собі для bash/zsh/fish (є непогана, хоч і не вичерпна підказка на readthedocs.io).

встановлення

встановлюємо powerline (на прикладі arch/manjaro):

pacman -S powerline
## або, якщо встановлено «обгортку» pamac:
pamac install powerline

перевіряємо, куди встановилося:

ls -l /usr/share/powerline/
lrwxrwxrwx 1 root root 52 гру  2 19:51 bindings -> /usr/lib/python3.10/site-packages/powerline/bindings

отже, налаштування, кольорові схеми й теми треба шукати в /usr/lib/python3.10/site-package/powerline/config_files/ ― це знадобиться згодом.

bash

щоби прикрасити bash, треба додати декілька рядків до ~/.bashrc, десь наприкінці файлу:

## Launch powerline for bash
powerline-daemon -q
POWERLINE_BASH_CONTINUATION=1
POWERLINE_BASH_SELECT=1
. /usr/share/powerline/bindings/bash/powerline.sh

…і перезавантажити конфігурацію bash:

source ~/.bashrc

bash: звичайно (ліворуч) і з powerline (праворуч)

zsh

майже те саме, що для bash, але достатньо двох рядків наприкінці файлу ~/.zshrc:

# Launch powerline for zsh
powerline-daemon -q
. /usr/share/powerline/bindings/zsh/powerline.zsh

…і перезавантажити профіль:

source ~/.zshrc
fish

не користувався рибкою до цього часу, але спробую, тож чому не налаштувати одразу гарненьке запрошення? два рядки до файлу ~/.config/fish/config.fish:

if status is-interactive
    # Launch powerline for fish
    powerline-daemon -q
    set fish_function_path $fish_function_path "/usr/share/powerline/bindings/fish"
    powerline-setup
end
vim

це ще не все: від початку, powerline задумано як покращувач статусного рядка vim, тож чому не налаштувати й це? вікі arch, як завше, дуже детальна і точна. для початку — знадобиться сам vim (з коробки в manjaro йде, здається, лише vi?) і пакунок powerline-vim:

pacman -S vim powerline-vim
## або, якщо встановлено pamac
pamac install vim powerline-vim

до файлу ~/.vimrc також треба додати один рядочок:

set laststatus=2

готово, можна насолоджуватися?

vim: звичайно (ліворуч) і з powerline (праворуч)

не зовсім: кудись пропала підсвітка синтаксису. повертається двома додатковими рядками у тому ж таки ~/.vimrc:

filetype plugin indent on
syntax on
set laststatus=2
tmux

ну, як вже гуляти, то на повну ногу — лишився tmux (для тих, хто в темі термінальних мультиплексорів); для нього знадобиться створити (якщо немає) файл ~/.tmux.conf і додати один рядок:

source /usr/share/powerline/bindings/tmux/powerline.conf

але в налаштуваннях tmux за замовчуванням вилізе дві проблеми: втрата кольорів в консольних додатках, і базові налаштування оболонки користувача (bash у більшости випадків, я хочу поміняти на fish), лікуються двома додатковими рядками в тому ж файлі:

set -g default-terminal xterm-256color
set -g default-shell /bin/fish

tmux: звичайно (ліворуч) і з powerline (праворуч)

налаштування

на етапі встановлення я згадав, що всі налаштування powerline (включно з кольорами й моделями) знаходяться (принаймні на arch linux і похідних) в теці /usr/lib/python3.10/site-package/powerline/config_files/. лізти туди руками — непрофесійно, тож робимо собі копію там, куди powerline прийде шукати локальні налаштування:

mkdir -p ~/.config/powerline/
sudo cp -r /usr/lib/python3.10/site-package/powerline/config_files/* ~/.config/powerline/
sudo chown -r $USER:$USER ~/.config/powerline

основні налаштування — у файлі ~/.config/powerline/config.json. нввіщо копіювати все, якщо можна було б забрати лише config.json, і згодом копіювати лише потрібне для модифікації кольорів та моделей? коротко: для простоти.

кольори

найпростіше, що можна налаштувати — вибрати іншу колірну палітру; в комплекті йде дві: default та (темна) solarized; щоби поміняти, достатньо виправити всі "colorscheme": "default" у файлі config.json на "colorscheme": "solarized" (або не всі — а лише для консолі (shell), чи для редактора (vim) тощо.

не забути перезавантажити демона, щоби застосувати зміни:

powerline-daemon --replace

кольори powerline: default (ліворуч) і solarized (праворуч)

насправді ж реалізація палітри solarized для powerline мені категорично не подобається: надто лізе в очі яскравим тлом і часто недостатньо контрастна для читання. default трохи краща, але і в ній хочеться щось поміняти. можливо, проблема ще й у тому, що кольори powerline накладаються на модифіковану палітру maia, що її використовує konsole.

кольори konsole: maia (ліворуч) і linux colors (праворуч)

мабуть, треба зробити свою колірну схему на основі materia dark (стандартна для нового manjaro), але то розвага на інший день.

модель

модель (theme) визначає компонування запрошення: які елементи відображати, в якому порядку, і якими символами їх розділяти. про символи: стандартно, powerline використовує додаткові символи, яких немає в таблиці unicode, і тому вимагає модифікованих шрифтів. це не завжди зручно: в linux шрифти встановлюються разом із основним пакунком, але у wsl2 буде проблема; її можна вирішити, завантаживши модифікований шрифт безпосередньо для windows, або ж змінити модель з powerline на unicode або навіть àscii, додавши один рядок "default_top_theme" до файлу ~/.config/powerline/config.json:

"common": {
        "term_truecolor": false,
        "default_top_theme": "unicode"
},

знову доведеться перезапустити демона:

powerline-daemon --replace

модель: стандартна powerline (ліворуч) або unicode (праворуч)

остання невеличка зміна — хочу прибрати непотрібні uptime, навантаження процесора, дату й час зі статусного рядка tmux, щоби звільнити місце для термінальних вкладок; для цього досить видалити декілька рядків з моделі tmux, у файлі ~/.config/powerline/themes/tmux/default.json.

останній штрих: скорочення рядка tmux

на цім, мабуть, все. коментуйте.