zsh
Проверено на Ubuntu 20.04, Ubuntu 22.04, Ubuntu 24.04, MacOS 14.4.
Проверено давно: Ubuntu 18.04, MacOS 10.12, CentOS 8
Для обновления с viasite-ansible.zsh 1.x, 2.x на 3.0 смотрите ниже.
Установка без предварительных знаний:
Если вы используете Ubuntu или Debian и не знакомы с Ansible, вы можете просто выполнить install.sh на целевой машине:
curl https://raw.githubusercontent.com/viasite-ansible/ansible-role-zsh/master/install.sh | bash
Это установит pip3, ansible и настроит zsh для root и текущего пользователя.
Установка без предварительных знаний для MacOS:
Требования: brew, python. Запрашивает пароль пользователя. install-macos.sh установит ansible и настроит zsh для текущего пользователя и, при необходимости, для root:
curl https://raw.githubusercontent.com/viasite-ansible/ansible-role-zsh/master/install-macos.sh | bash
Затем настройте терминальное приложение.
Включает:
- zsh
- antigen
- oh-my-zsh
- темы powerlevel9k
- zsh-autosuggestions
- подсветка синтаксиса zsh
- unixorn/autoupdate-antigen.zshplugin
- sorenson-axial/fzf-widgets
- urbainvaes/fzf-marks
Особенности
- настраивайте сегменты и цвета темы powerlevel9k
- протестированные цвета с темной схемой solarized и стандартным серым терминалом в putty
- добавляйте пользовательские элементы запроса из файла yml
- настраиваемый конфиг zsh с
~/.zshrc.local
или/etc/zshrc.local
- загружайте скрипты из
/etc/profile.d
- устанавливайте только плагины, которые полезны для вашей машины. Например, плагин
docker
не будет установлен, если у вас нет Docker.
Демонстрация за 1.5 минуты
Цветовые схемы
Темная тема Midnight Commander Solarized
Если вы используете схему Solarized Dark и mc
, вам нужно установить тему, затем установить zsh_mc_solarized_skin: yes
.
Демонстрационная установка в Vagrant
Вы можете протестировать работу роли перед установкой на реальную машину.
Просто выполните vagrant up
, затем vagrant ssh
, чтобы войти в виртуальную машину.
Примечание: вы не можете установить vagrant на VPS, таких как Digital Ocean или в Docker. Используйте локальную машину для этого. Скачайте и установите vagrant для вашей операционной системы.
Установка на реальную машину
Установка без предварительных знаний: смотрите выше.
Ручная установка
- Установите Ansible. Для Ubuntu:
sudo apt update
sudo apt install python3-pip -y
sudo pip3 install ansible
- Скачайте роль:
ansible-galaxy install viasite-ansible.zsh --force
- Напишите плейбук или используйте playbook.yml:
- hosts: all
vars:
zsh_antigen_bundles_extras:
- nvm
- joel-porquet/zsh-dircolors-solarized
zsh_autosuggestions_bind_key: "^U"
roles:
- viasite-ansible.zsh
- Выполните плейбук:
ansible-playbook -i "localhost," -c local -K playbook.yml
Если вы хотите настроить роль для пользователя root на macOS, вы должны установить пакеты вручную:
brew install zsh git wget
Это установит окружение zsh для удаленного пользователя ansible. Если вы хотите настроить zsh для других пользователей,
вы должны определить переменную zsh_user
:
Через плейбук:
- hosts: all
roles:
- { role: viasite-ansible.zsh, zsh_user: otheruser }
- { role: viasite-ansible.zsh, zsh_user: thirduser }
Или через команду:
ansible-playbook -i hosts zsh.yml -e zsh_user=otheruser
- Установите fzf без расширений для оболочки, скачайте двоичный файл
или выполните
brew install fzf
для macOS.
Примечание: я не использую tmux-fzf
и не проверял его работу.
Множественная установка для пользователей
Если у вас более 10 пользователей на хосте, вероятно, вы не хотите управлять десятками конфигураций и тысячами файлов.
В этом случае вы можете развернуть единую конфигурацию zsh и включить её для всех пользователей.
Это вызывает некоторые ограничения:
- У пользователей есть доступ только для чтения к zsh конфигам
- Пользователи не могут отключить глобально включенные пакеты
- Возможны ошибки, такие как отказ в разрешении на запись к кэшу
- Возможны ошибки с темами oh-my-zsh
Для установки общей конфигурации вы должны установить zsh_shared: yes
.
Конфигурация будет установлена в /usr/share/zsh-config
, затем вы просто можете включить её в конфигурации пользователей:
Установка для всех пользователей
Установите zsh_source_for_all_users: yes
source /usr/share/zsh-config/.zshrc
Вы все еще можете настроить пользовательские конфигурации для нескольких пользователей.
Настройка
Вам не следует редактировать ~/.zshrc
!
Добавьте вашу пользовательскую конфигурацию в ~/.zshrc.local
(для пользователя) или /etc/zshrc.local
(глобально).
.zshrc.local
никогда не будет изменен ansible.
Настройка терминального приложения
Скачайте шрифты powerline, установите шрифт по вашему выбору. Вы можете увидеть скриншоты здесь.
Установите цветовую схему.
Лично я предпочитаю темную цветовую схему Solarized, шрифт Droid Sans Mono для Powerline в iTerm и DejaVu Sans Mono в Putty.
iTerm
Профили - Текст - Изменить шрифт - выберите шрифт "для Powerline"
Профили - Цвета - Цветовые пресеты... - выберите Solarized Dark
Putty
Настройки - Окно - Внешний вид - Настройки шрифта
Вы можете скачать Solarized Dark для Putty.
Gnome Terminal
gnome-terminal имеет встроенный Solarized Dark, имейте в виду, что вы должны выбрать как цветовую схему фона, так и палитру.
Горячие клавиши
Вы можете просмотреть горячие клавиши в defaults/main.yml, zsh_hotkeys
.
Примеры определений горячих клавиш:
- { hotkey: '^r', action: 'fzf-history' }
# с зависимостью от пакета
- { hotkey: '`', action: autosuggest-accept, bundle: zsh-users/zsh-autosuggestions }
Полезно установить autosuggest-accept
на клавишу `, но это конфликтует с Midnight Commander (прерывает подпроцесс Ctrl+O).
Вы можете добавить ваши собственные горячие клавиши, не заменяя стандартные с переменной zsh_hotkeys_extras
:
zsh_hotkeys_extras:
- { hotkey: '^[^[[D', action: backward-word } # alt+left
- { hotkey: '^[^[[C', action: forward-word } # alt+right
# Пример <Ctrl+.><Ctrl+,> вставляет 2-й аргумент с конца предыдущей команды
- { hotkey: '^[,', action: copy-earlier-word } # ctrl+,
Псевдонимы
Вы можете использовать псевдонимы для своих команд с легким развертыванием. Конфигурация псевдонимов в основном такая же, как и конфигурация горячих клавиш:
zsh_aliases:
- { alias: 'dfh', action: 'df -h | grep -v docker' }
# с зависимостью от пакета и без замены стандартных псевдонимов
- zsh_aliases_extra
- { alias: 'dfh', action: 'df -h | grep -v docker', bundle: }
Стандартные горячие клавиши от плагинов:
- → - принять автозаполнение
- Ctrl+Z - переместить текущее приложение в фон, нажмите снова для возврата на передний план
- Ctrl+G - перейти к закладке. Используйте
mark
в директории, чтобы добавить в закладки - Ctrl+R - показать историю команд
- Ctrl+@ - показать все виджеты fzf
- Ctrl+@,C - fzf-change-dir, нажмите быстро!
- Ctrl+\ - fzf-change-recent-dir
- Ctrl+@,G - fzf-change-repository
- Ctrl+@,F - fzf-edit-files
- Ctrl+@,. - fzf-edit-dotfiles
- Ctrl+@,S - fzf-exec-ssh (используя ваш ~/.ssh/config)
- Ctrl+@,G,A - fzf-git-add-file
- Ctrl+@,G,B - fzf-git-checkout-branch
- Ctrl+@,G,D - fzf-git-delete-branches
Настройка пакетов
Вы можете проверить стандартные пакеты в defaults/main.yml.
Если вам нравятся стандартные пакеты, но вы хотите добавить свои, используйте переменную zsh_antigen_bundles_extras
(см. пример плейбука выше).
Если вы хотите удалить некоторые стандартные пакеты, вам следует использовать переменную zsh_antigen_bundles
.
Формат списка соответствует antigen. Все нижеуказанные варианты действительны:
- docker # oh-my-zsh плагин
- zsh-users/zsh-autosuggestions # плагин с github
- zsh-users/[email protected] # плагин с github с фиксированной версией
- ~/projects/zsh/my-plugin --no-local-clone # плагин из локальной директории
Обратите внимание, что пакеты могут использовать условия для загрузки. Существует два типа условий:
- Условия команд. Просто добавьте
command
к пакету:
- { name: docker, command: docker }
- name: docker-compose
command: docker-compose
Пакеты docker
и docker-compose
будут добавлены в конфигурацию только в том случае, если команды существуют в целевой системе.
- Условия при. Вы можете определить любые условия ansible так же, как вы определяете в
when
в задачах:
# загружать только для zsh >= 4.3.17
- name: zsh-users/zsh-syntax-highlighting
when: "{{ zsh_version is version_compare('4.3.17', '>=') }}"
# загружать только для macOS
- { name: brew, when: "{{ ansible_os_family != 'Darwin' }}" }
Примечание: вы должны обернуть условие в "{{ }}"
Пользовательская конфигурация
Вы можете добавить любой код в переменные zsh_custom_before
, zsh_custom_after
.
- zsh_custom_before - перед включением antigen.zsh
- zsh_custom_after - перед включением ~/.zshrc.local
Обновление
viasite-ansible.zsh v3.0 вводит antigen v2.0, которая не имеет обратной совместимости с antigen 1.x.
Я не потратил много времени на плавное обновление, поэтому вам, вероятно, придется выполнить некоторые действия вручную:
если запрос powerlevel9k не загружается после предоставления роли, вам следует выполнить antigen reset
.
После повторного открытия оболочки все должно заработать.
Понижение до antigen v1
Antigen v2 гораздо быстрее (в 2 раза быстрее загрузки), но если что-то пойдет не так, вы можете понизить версию до antigen v1, посмотрите примечание для пользователей zsh 4.3 ниже.
Для пользователей с zsh 4.x
Antigen v2 не работает на zsh < 5.0, если вы используете zsh 4.x, пожалуйста, добавьте в ваш плейбук:
zsh_antigen_version: v1.4.1
Известные ошибки
su username
вызвал ошибки
Смотрите проблему antigen.
Если и root, и su пользователь используют antigen, вам следует использовать su - username
вместо su username
.
Или вы можете использовать встроенный псевдоним suser
.
Вы также можете попробовать исправить это, добавив в ~/.zshrc.local
:
alias su='su -'
Но этот псевдоним может нарушить ваши скрипты, использующие su
.
ansible-galaxy install viasite-ansible/ansible-role-zsh