viasite-ansible.zsh
Probado en Ubuntu 20.04, Ubuntu 22.04, Ubuntu 24.04, MacOS 14.4.
Probado hace tiempo: Ubuntu 18.04, MacOS 10.12, CentOS 8
Para actualizar de viasite-ansible.zsh 1.x, 2.x a 3.0, vea abajo.
Instalación sin conocimiento previo:
Si estás usando Ubuntu o Debian y no estás familiarizado con Ansible, puedes simplemente ejecutar install.sh en la máquina destino:
curl https://raw.githubusercontent.com/viasite-ansible/ansible-role-zsh/master/install.sh | bash
Esto instalará pip3, ansible y configurará zsh para el usuario root y el usuario actual.
Instalación sin conocimiento previo en MacOS:
Requisitos: brew, python. Pide la contraseña del usuario. install-macos.sh instalará ansible y configurará zsh para el usuario actual y opcionalmente para root:
curl https://raw.githubusercontent.com/viasite-ansible/ansible-role-zsh/master/install-macos.sh | bash
Luego configura la aplicación de terminal.
Incluye:
- zsh
- antigen
- oh-my-zsh
- tema powerlevel9k
- sugerencias automáticas de zsh
- resaltado de sintaxis de zsh
- unixorn/autoupdate-antigen.zshplugin
- sorenson-axial/fzf-widgets
- urbainvaes/fzf-marks
Características
- Personaliza los segmentos y colores del tema powerlevel9k
- Colores predeterminados probados con terminal solarized dark y gris predeterminado en putty
- Agrega elementos de prompt personalizados desde yml
- Configuración de zsh personalizada con
~/.zshrc.local
o/etc/zshrc.local
- Carga scripts de
/etc/profile.d
- Instala solo plugins útiles para tu máquina. Por ejemplo, el plugin
docker
no se instalará si no tienes Docker.
Demo de 1.5 mins
Esquemas de color
Piel Solarized Dark para Midnight Commander
Si estás usando el esquema Solarized Dark y mc
, deberías instalar la piel, luego establece zsh_mc_solarized_skin: yes
.
Instalación de demo en Vagrant
Puedes probar el funcionamiento del rol antes de instalar en una máquina real.
Simplemente ejecuta vagrant up
, luego vagrant ssh
para entrar en la máquina virtual.
Nota: no puedes instalar vagrant en VPS como Digital Ocean o en Docker. Usa una máquina local para ello. Descarga e instala vagrant para tu sistema operativo.
Instalación en máquina real
Instalación sin conocimiento previo: consulta arriba.
Instalación manual
- Instala Ansible. Para Ubuntu:
sudo apt update
sudo apt install python3-pip -y
sudo pip3 install ansible
- Descarga el rol:
ansible-galaxy install viasite-ansible.zsh --force
- Escribe un playbook o usa playbook.yml:
- hosts: all
vars:
zsh_antigen_bundles_extras:
- nvm
- joel-porquet/zsh-dircolors-solarized
zsh_autosuggestions_bind_key: "^U"
roles:
- viasite-ansible.zsh
- Provisión del playbook:
ansible-playbook -i "localhost," -c local -K playbook.yml
Si deseas proporcionar el rol para el usuario root en macOS, debes instalar los paquetes manualmente:
brew install zsh git wget
Esto instalará el entorno zsh para el usuario remoto de ansible. Si deseas configurar zsh para otros usuarios, debes definir la variable zsh_user
:
A través del playbook:
- hosts: all
roles:
- { role: viasite-ansible.zsh, zsh_user: otrousuario }
- { role: viasite-ansible.zsh, zsh_user: tercerusuario }
O a través del comando:
ansible-playbook -i hosts zsh.yml -e zsh_user=otrousuario
- Instala fzf sin extensiones de shell, descarga el binario
o
brew install fzf
para macOS.
Nota: no uso tmux-fzf
y no he probado su funcionamiento.
Instalación compartida para múltiples usuarios
Si tienes más de 10 usuarios en el host, probablemente no quieras gestionar decenas de configuraciones y miles de archivos.
En este caso, puedes implementar una configuración zsh única e incluirla en todos los usuarios.
Esto causa algunas limitaciones:
- Los usuarios tienen acceso solo de lectura a la configuración de zsh
- Los usuarios no pueden desactivar bundles habilitados globalmente
- Posibles errores como permiso denegado para escribir en la caché
- Posibles errores con temas de oh-my-zsh
Para instalar la configuración compartida debes establecer zsh_shared: yes
.
La configuración se instalará en /usr/share/zsh-config
, luego solo puedes incluirla en la configuración de usuario:
Instalación para todos los usuarios
Establece zsh_source_for_all_users: yes
source /usr/share/zsh-config/.zshrc
Aún puedes provisionar configuraciones personalizadas para varios usuarios.
Configurar
¡No deberías editar ~/.zshrc
!
Agrega tu configuración personalizada a ~/.zshrc.local
(por usuario) o /etc/zshrc.local
(global).
.zshrc.local
nunca será tocado por ansible.
Configurar la aplicación de terminal
Descarga fuentes powerline, instala la fuente que prefieras. Puedes ver capturas de pantalla aquí.
Establece el esquema de color.
Personalmente, prefiero el esquema de color Solarized Dark, Droid Sans Mono para Powerline en iTerm y DejaVu Sans Mono en Putty.
iTerm
Perfiles - Texto - Cambiar fuente - seleccionar fuente "para Powerline"
Perfiles - Colores - Predeterminados de color... - seleccionar Solarized Dark
Putty
Configuraciones - Ventana - Apariencia - Configuraciones de fuente
Puedes descargar Solarized Dark para Putty.
Terminal de Gnome
El terminal de gnome tiene Solarized Dark incorporado, ten en cuenta que debes seleccionar tanto el esquema de color de fondo como el esquema de paleta.
Atajos de teclado
Puedes ver los atajos de teclado en defaults/main.yml, zsh_hotkeys
.
Definiciones de atajos de teclado de ejemplo:
- { hotkey: '^r', action: 'fzf-history' }
# con dependencia de bundle
- { hotkey: '`', action: autosuggest-accept, bundle: zsh-users/zsh-autosuggestions }
Es útil establecer autosuggest-accept
para `, pero entra en conflicto con Midnight Commander (rompe Ctrl+O subshell).
Puedes agregar tus atajos personalizados sin reemplazar los atajos predeterminados con la variable zsh_hotkeys_extras
:
zsh_hotkeys_extras:
- { hotkey: '^[^[[D', action: backward-word } # alt+izquierda
- { hotkey: '^[^[[C', action: forward-word } # alt+derecha
# Ejemplo <Ctrl+.><Ctrl+,> inserta el 2do argumento desde el final del comando previo
- { hotkey: '^[,', action: copy-earlier-word } # ctrl+,
Alias
Puedes usar alias para tu comando con fácil implementación. La configuración de alias es casi la misma que la configuración de atajos de teclado:
zsh_aliases:
- { alias: 'dfh', action: 'df -h | grep -v docker' }
# con dependencia de bundle y sin reemplazar los alias predeterminados
- zsh_aliases_extra
- { alias: 'dfh', action: 'df -h | grep -v docker', bundle: }
Atajos predeterminados de los plugins:
- → - aceptar sugerencia automática
- Ctrl+Z - mover la aplicación actual al fondo, presiona de nuevo para volver al primer plano
- Ctrl+G - saltar a un directorio marcado. Usa
mark
en el directorio para agregarlo a los marcadores - Ctrl+R - mostrar el historial de comandos
- Ctrl+@ - mostrar todos los widgets fzf
- Ctrl+@,C - fzf-change-dir, ¡presiona rápido!
- Ctrl+\ - fzf-change-recent-dir
- Ctrl+@,G - fzf-change-repository
- Ctrl+@,F - fzf-edit-files
- Ctrl+@,. - fzf-edit-dotfiles
- Ctrl+@,S - fzf-exec-ssh (usando tu ~/.ssh/config)
- Ctrl+@,G,A - fzf-git-add-file
- Ctrl+@,G,B - fzf-git-checkout-branch
- Ctrl+@,G,D - fzf-git-delete-branches
Configurar bundles
Puedes revisar los bundles predeterminados en defaults/main.yml.
Si te gustan los bundles predeterminados pero deseas agregar tus propios bundles, usa la variable zsh_antigen_bundles_extras
(consulta el ejemplo de playbook arriba).
Si deseas eliminar algunos bundles predeterminados, debes usar la variable zsh_antigen_bundles
.
El formato de la lista coincide con antigen. Todas las variantes a continuación son válidas:
- docker # plugin de oh-my-zsh
- zsh-users/zsh-autosuggestions # plugin de github
- zsh-users/[email protected] # plugin de github con versión fija
- ~/projects/zsh/my-plugin --no-local-clone # plugin desde un directorio local
Ten en cuenta que los bundles pueden usar condiciones para cargar. Hay dos tipos de condiciones:
- Condiciones de comando. Solo agrega
command
al bundle:
- { name: docker, command: docker }
- name: docker-compose
command: docker-compose
Los bundles docker
y docker-compose
se agregarán a la configuración solo si los comandos existen en el sistema objetivo.
- Condiciones de "cuando". Puedes definir cualquier condición de ansible como lo harías al definir
when
en las tareas:
# cargar solo para zsh >= 4.3.17
- name: zsh-users/zsh-syntax-highlighting
when: "{{ zsh_version is version_compare('4.3.17', '>=') }}"
# cargar solo para macOS
- { name: brew, when: "{{ ansible_os_family != 'Darwin' }}" }
Nota: debes envolver la condición en "{{ }}"
Configuración personalizada
Puedes agregar cualquier código en la variable zsh_custom_before
, zsh_custom_after
.
- zsh_custom_before - antes de incluir antigen.zsh
- zsh_custom_after - antes de incluir ~/.zshrc.local
Actualización
La versión v3.0 de viasite-ansible.zsh introduce antigen v2.0, que no es compatible con versiones anteriores a antigen 1.x.
No pasé mucho tiempo en una actualización suave, por lo tanto, probablemente debas hacer algunas acciones manuales:
si el prompt powerlevel9k no se carga después de provisionar el rol, deberías ejecutar antigen reset
.
Tras reabrir la shell, todo debería estar listo.
Degradar a antigen v1
Antigen v2 es mucho más rápido (hasta 2 veces más rápido al iniciar), pero si algo sale mal, puedes degradar a antigen v1, consulta la nota para usuarios de zsh 4.3 a continuación.
Para usuarios con zsh 4.x
Antigen v2 no funciona en zsh < 5.0, si estás usando zsh 4.x, por favor agrega a tu playbook:
zsh_antigen_version: v1.4.1
Bugs conocidos
su username
causa errores
Consulta el problema de antigen.
Si tanto el root como el usuario su están usando antigen, deberías usar su - username
en lugar de su username
.
O puedes usar el alias incluido suser
.
Además, puedes intentar solucionarlo agregando a ~/.zshrc.local
:
alias su='su -'
Pero este alias puede romper tus scripts que usan su
.
oh-my-zsh with powerlevel10k theme, fzf and other plugins
ansible-galaxy install viasite-ansible.zsh