Dot_Files/roles/nvim/tasks/install-nvim.yml

102 lines
3.3 KiB
YAML

---
- name: Check if nvim is installed
ansible.builtin.command: which nvim
changed_when: false
register: nvim_installed
failed_when: nvim_installed.rc > 1
- name: Request nvim install if nvim missing
ansible.builtin.set_fact:
nvim_install_needed: "{{ nvim_install_needed | default(true) }}"
when: nvim_installed.rc == 1
- name: Check if nvim needs update
# noqa risky-shell-pipe
ansible.builtin.shell: |
set pipefail
nvim --version | head -n 1 | awk -F '-' '{ print $NF }' | cut -d '+' -f2 | cut -c2-
changed_when: false
register: nvim_installed_version
when: nvim_installed.rc == 0
- name: Get nvim remote version
# noqa risky-shell-pipe
ansible.builtin.shell: |
set pipefail
# yamllint disable-line rule:line-length
NVIM_HEAD_VER="$(git ls-remote --tags https://github.com/neovim/neovim.git nightly \
| awk '{ print $1 }' \
| head -c 9)"
echo $NVIM_HEAD_VER >&2
printf "%s\n" "${NVIM_HEAD_VER}"
changed_when: false
register: nvim_remote_version
when: nvim_installed.rc == 0
- name: Request nvim install if nvim update needed
ansible.builtin.set_fact:
nvim_install_needed: "{{ nvim_install_needed | default(true) }}"
when: nvim_installed.rc == 0 and nvim_remote_version.stdout | default() != nvim_installed_version.stdout | default()
- name: Install neovim for MacOS
community.general.homebrew:
name: neovim
state: head
when: ansible_facts.distribution == 'MacOSX'
- name: Handle neovim install for non-macos systems
when: ansible_facts.distribution != 'MacOSX' and nvim_install_needed is defined and nvim_install_needed is true
block:
- name: Create working directory
ansible.builtin.tempfile:
state: directory
register: nvim_work_dir
- name: Set nvim url
ansible.builtin.set_fact:
# yamllint disable-line rule:line-length
nvim_url: "{{ 'https://github.com/neovim/neovim/releases/download/nightly/nvim-' + nvim_platform | default('linux64') + '.tar.gz' }}"
- name: Set nvim archive variables
ansible.builtin.set_fact:
nvim_checksum: "{{ 'sha256:' + nvim_url + '.sha256sum' }}"
nvim_archive_dest: "{{ nvim_work_dir.path + '/nvim.tar.gz' }}"
nvim_unpacked_dest: "{{ nvim_work_dir.path + '/nvim-unpacked' }}"
- name: Download neovim archive from releases
become: true
ansible.builtin.get_url:
url: "{{ nvim_url }}"
checksum: "{{ nvim_checksum }}"
dest: "{{ nvim_archive_dest }}"
mode: "0644"
- name: Create unpack directory
ansible.builtin.file:
state: directory
mode: "0644"
path: "{{ nvim_unpacked_dest }}"
- name: Extract neovim archive
become: true
ansible.builtin.unarchive:
src: "{{ nvim_archive_dest }}"
dest: "{{ nvim_unpacked_dest }}"
remote_src: true
when: nvim_install_needed is defined and nvim_install_needed is true
- name: Copy neovim files into place
become: true
# noqa command-instead-of-module
ansible.builtin.command:
argv:
- rsync
- -avPr
- "{{ nvim_unpacked_dest }}/nvim-{{ nvim_platform | default('linux64') }}/{{ item }}"
- "{{ nvim_sync_dest_dir | default('/usr/') }}"
changed_when: true
loop:
- bin
- lib
- share