Tested on Ubuntu 20.04, Ubuntu 22.04, Ubuntu 24.04, MacOS 14.4.
Tested long time ago: Ubuntu 18.04, MacOS 10.12, CentOS 8
For upgrade from viasite-ansible.zsh 1.x, 2.x to 3.0 see below.
If you are using Ubuntu or Debian and not familiar with Ansible, you can just execute install.sh on target machine:
curl https://raw.githubusercontent.com/viasite-ansible/ansible-role-zsh/master/install.sh | bash
It will install pip3, ansible and setup zsh for root and current user.
Requirements: brew, python. Asks user's password. install-macos.sh will install ansible, and setup zsh for current user and optionally for root:
curl https://raw.githubusercontent.com/viasite-ansible/ansible-role-zsh/master/install-macos.sh | bash
Then configure terminal application.
~/.zshrc.local
or /etc/zshrc.local
/etc/profile.d
scriptsdocker
will not install if you have not DockerIf you are using Solarized Dark scheme and mc
, you should want to install skin, then set zsh_mc_solarized_skin: yes
You can test work of role before install in real machine.
Just execute vagrant up
, then vagrant ssh
for enter in virtual machine.
Note: you cannot install vagrant on VPS like Digital Ocean or in Docker. Use local machine for it. Download and install vagrant for your operating system.
Zero-knowledge install: see above.
Install Ansible. For Ubuntu:
sudo apt update
sudo apt install python3-pip -y
sudo pip3 install ansible
Download role:
ansible-galaxy install viasite-ansible.zsh --force
Write playbook or use playbook.yml:
- hosts: all
vars:
zsh_antigen_bundles_extras:
- nvm
- joel-porquet/zsh-dircolors-solarized
zsh_autosuggestions_bind_key: "^U"
roles:
- viasite-ansible.zsh
Provision playbook:
ansible-playbook -i "localhost," -c local -K playbook.yml
If you want to provision role for root user on macOS, you should install packages manually:
brew install zsh git wget
It will install zsh environment for ansible remote user. If you want to setup zsh for other users,
you should define variable zsh_user
:
Via playbook:
- hosts: all
roles:
- { role: viasite-ansible.zsh, zsh_user: otheruser }
- { role: viasite-ansible.zsh, zsh_user: thirduser }
Or via command:
ansible-playbook -i hosts zsh.yml -e zsh_user=otheruser
brew install fzf
for macOS.Note: I don't use tmux-fzf
and don't tested work of it.
If you have 10+ users on host, probably you don't want manage tens of configurations and thousands of files.
In this case you can deploy single zsh config and include it to all users.
It causes some limitations:
For install shared configuration you should set zsh_shared: yes
.
Configuration will install to /usr/share/zsh-config
, then you just can include to user config:
Set zsh_source_for_all_users: yes
source /usr/share/zsh-config/.zshrc
You can still provision custom configs for several users.
You should not edit ~/.zshrc
!
Add your custom config to ~/.zshrc.local
(per user) or /etc/zshrc.local
(global).
.zshrc.local
will never touched by ansible.
Download powerline fonts, install font that you prefer. You can see screenshots here.
Set color scheme.
Personaly, I prefer Solarized Dark color sceme, Droid Sans Mono for Powerline in iTerm and DejaVu Sans Mono in Putty.
Profiles - Text - Change Font - select font "for Powerline"
Profiles - Colors - Color Presets... - select Solarized Dark
Settings - Window - Appearance - Font settings
You can download Solarized Dark for Putty.
gnome-terminal have built-in Solarized Dark, note that you should select both background color scheme and palette scheme.
You can view hotkeys in defaults/main.yml, zsh_hotkeys
.
Sample hotkey definitions:
- { hotkey: '^r', action: 'fzf-history' }
# with dependency of bundle
- { hotkey: '`', action: autosuggest-accept, bundle: zsh-users/zsh-autosuggestions }
Useful to set autosuggest-accept
to ` hotkey, but it conflicts with Midnight Commander (break Ctrl+O subshell).
You can add your custom hotkeys without replace default hotkeys with zsh_hotkeys_extras
variable:
zsh_hotkeys_extras:
- { hotkey: '^[^[[D', action: backward-word } # alt+left
- { hotkey: '^[^[[C', action: forward-word } # alt+right
# Example <Ctrl+.><Ctrl+,> inserts 2nd argument from end of prev. cmd
- { hotkey: '^[,', action: copy-earlier-word } # ctrl+,
You can use aliases for your command with easy deploy. Aliases config mostly same as hotkeys config:
zsh_aliases:
- { alias: 'dfh', action: 'df -h | grep -v docker' }
# with dependency of bundle and without replace default asiases
- zsh_aliases_extra
- { alias: 'dfh', action: 'df -h | grep -v docker', bundle: }
mark
in directory for add to bookmarksYou can check default bundles in defaults/main.yml.
If you like default bundles, but you want to add your bundles, use zsh_antigen_bundles_extras
variable (see example playbook above).
If you want to remove some default bundles, you should use zsh_antigen_bundles
variable.
Format of list matches antigen. All bellow variants valid:
- docker # oh-my-zsh plugin
- zsh-users/zsh-autosuggestions # plugin from github
- zsh-users/zsh-autosuggestions@v0.3.3 # plugin from github with fixed version
- ~/projects/zsh/my-plugin --no-local-clone # plugin from local directory
Note that bundles can use conditions for load. There are two types of conditions:
Command conditions. Just add command
to bundle:
- { name: docker, command: docker }
- name: docker-compose
command: docker-compose
Bundles docker
and docker-compose
will be added to config only if commands exists on target system.
When conditions. You can define any ansible conditions as you define in when
in tasks:
# load only for zsh >= 4.3.17
- name: zsh-users/zsh-syntax-highlighting
when: "{{ zsh_version is version_compare('4.3.17', '>=') }}"
# load only for macOS
- { name: brew, when: "{{ ansible_os_family != 'Darwin' }}" }
Note: you should wrap condition in "{{ }}"
You can add any code in variable zsh_custom_before
, zsh_custom_after
.
viasite-ansible.zsh v3.0 introduces antigen v2.0, it don't have backward compatibility to antigen 1.x.
I don't spent much time for smooth upgrade, therefore you probably should do some manual actions:
if powerlevel9k prompt don't loaded after provision role, you should execute antigen reset
.
After reopen shell all should be done.
Antigen v2 much faster (up to 2x more faster startup), but if something went wrong, you can downgrade to antigen v1, see note for zsh 4.3 users below.
Antigen v2 not work on zsh < 5.0, if you use zsh 4.x, please add to you playbook:
zsh_antigen_version: v1.4.1
su username
caused errorsSee antigen issue.
If both root and su user using antigen, you should use su - username
in place of su username
.
Or you can use bundled alias suser
.
Also, you can try to fix it, add to ~/.zshrc.local
:
alias su='su -'
But this alias can break you scripts, that using su
.