Делаем красивую консоль

Командная строка в Windows - это уныло. Я решил потратить вечер, но настроить себе такую консоль, с которой приятно работать.

Сетап для Windows

  • Устанавливаем Терминал Windows с Microsoft Store. Это официальная тулза от Microsoft, которая станет нашей главной оболочкой.
  • Устанавливаем Git для Windows. От него нам понадобится Git Bash. При установке лучше выбрать оболочку не MinTTY, а cmd, иначе вы рискуете получить визуальные косяки на Windows. Но вроде это поправимо, так что если сильно хочется MinTTY, то можно и его. Ещё при установке можно сразу выбрать интеграцию с Windows Terminal. Зачем нам вообще Git Bash? Дело в том, что кастомизировать промпт-строку в cmd нельзя, а трогать PowerShell я не хотел, поэтому я решил использовать Git Bash как полную замену для cmd.
  • Ставим Oh My Posh. Это не самостоятельная тулза, а как раз кастомизатор промпта, который будет украшать консоль. Темы для Oh My Posh обычно устанавливаются в папку C:/Users/пользователь/AppData/Local/Programs/oh-my-posh/themes/ После того как всё установлено, можно сразу создать конфиг C:/Users/пользователь/.bashrc. Мой конфиг выглядит так:
Запоминаем последний открытый путь
cd "$(cat /tmp/last_dir 2>/dev/null || echo "$HOME")"
PROMPT_COMMAND='pwd > /tmp/last_dir'
# Заменяем синий цвет в терминале на бирюзовый (синий я не вижу)
# Цвета ANSI:
# 31 — красный
# 32 — зелёный
# 33 — жёлтый
# 34 — синий
# 35 — фиолетовый
# 36 — бирюзовый
# 37 — белый
export LS_COLORS="di=36"
# Подключаем Oh My Posh с желаемой темой
eval "$(oh-my-posh init bash --config 'C:/Users/пользователь/AppData/Local/Programs/oh-my-posh/themes/sim-web.omp.json')"

Если вы всё-таки выбрали MinTTY при установке Git Bash, то можно ещё создать конфиг C:/Users/пользователь/.inputrc, где прописать set bell-style none. Эта опция уберёт один неприятный визуальный баг с мерцанием.

После этого остаётся только настроить Терминал Windows. Здесь всё просто - есть визуальный GUI для настройки всего. Ставим Git Bash нашей консолью по умолчанию. Потом в профиле Git Bash задаём фон, убавляем ему непрозрачность, выбираем шрифт с поддержкой Nerd Fonts (я выбрал Cascadia Mono NF). Можно ещё скачать более интересную иконку в PNG с techicons. Профит.

Терминал Windows вместо Putty

Как это работает. В Терминале Windows можно добавлять профили для ваших VDS-серверов. Вот только SHH-ключи не будут тянуться из Pageant, как в случае с Putty или WinSCP. Pageant не работает для OpenSSH. Поэтому, ключи придётся либо хранить в папке C:/Users/пользователь/.ssh/, либо настраивать конфиг C:/Users/пользователь/.ssh/config, где прописывать путь к SSH-ключу для каждого VDS-сервера. Пример:

Host myserver
    HostName 192.168.1.10
    User root
    IdentityFile D:/Work/SSH keys/heavylogic/id_rsa

После этого можно будет использовать псевданим при запуске, например ssh myserver. Но, я нашёл вариант лучше, чтобы не переносить SSH-ключи и не возиться с конфигами - просто прописать путь к ключам прямо в командной строке профиля в терминале Windows:

"D:/Work/Git/bin/bash.exe" -c "ssh -i '/d/Work/SSH keys/heavylogic/id_rsa' root@192.168.1.10"

Сетап для Ubuntu

Здесь начинается самое интересное, потому что Oh My Posh на Linux даёт не только визуальную красоту, но и функциональность. Естественно, кастомизация промпта настраивается на сервере. Так что, если у вас несколько VDS, то эту настройку надо будет провести на каждом сервере.

  • Заливаем файл oh-my-posh в /usr/local/bin (этот путь по-умолчанию прописан в $PATH, поэтому oh-my-posh будет доступен сразу всем пользователям).
  • Заливаем темы в /etc/oh-my-posh/themes (конфиги принято хранить в etc).
  • Далее идём в файл /etc/bash.bashrc и подключаем в конце Oh My Posh. У меня конфиг такой:
# Oh My Posh global init
if command -v oh-my-posh >/dev/null 2>&1; then
    if [ "$USER" = "root" ]; then
        eval "$(oh-my-posh init bash --config '/etc/oh-my-posh/themes/sim-web.omp.json')"
    else
        eval "$(oh-my-posh init bash --config '/etc/oh-my-posh/themes/amro.omp.json')"
    fi
fi

Из моего конфига сразу становится понятен профит. Я поставил разные темы на root и на других пользователей. Это даёт визуальное различие, в итоге я перестал ошибаться под каким я сейчас пользователем.

Нюанс: в новых версиях Ubuntu заменяет SHELL на sh вместо bash. Типа, он быстрее. Но, он не такой визуально комфортный. Выставить bash по умолчанию всем новым пользователям:

useradd -D -s /bin/bash

Проверить текущий дефолт:

useradd -D

Также мне нравится добавлять визуальное разделение между серверами при логине. Это добавляется в файле etc/profile:

if [ -n "$SSH_CONNECTION" ]; then
  echo -e ""
  echo -e "\e[1;30m█░█ █▀▀ ▄▀█ █░█ █▄█ █░░ █▀█ █▀▀ █ █▀▀\e[0m"
  echo -e "\e[1;30m█▀█ ██▄ █▀█ ▀▄▀ ░█░ █▄▄ █▄█ █▄█ █ █▄▄\e[0m"
fi

Сгенерировать название сервера в ASCII можно по любому запросу в гугле типа ascii font generator. Вот удобный вариант, там есть кнопка test all.

Итог моей возни:

  • Img 2025 07 28 20 05 39
  • Img 2025 07 28 20 01 49
  • Img 2025 07 28 22 30 03