Командная строка в 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.
Итог моей возни:


