Extract neovim from prebuilt archives for debian hosts

This commit is contained in:
Sonny Bakker 2024-08-10 16:08:06 +02:00
parent b53e644f7e
commit deec1581c5
4 changed files with 126 additions and 22 deletions

View file

@ -27,14 +27,21 @@
name: neovim
global: true
# Note that the "python-lsp-server", "python-lsp-ruff" and "neovim" python
# packages should be installed to the corresponding virtualenv as well.
- name: install language servers
become: true
package:
name: '{{ item }}'
state: present
loop: '{{ language_servers }}'
loop: '{{ language_servers | map(attribute="package") | list }}'
when: ansible_facts['os_family'] == 'Archlinux'
- name: install language servers on debian hosts
become: true
npm:
name: '{{ item }}'
global: true
loop: '{{ language_servers | map(attribute="package") | list }}'
when: ansible_facts['os_family'] == 'Debian'
- name: remove old neovim configuration file
file:
@ -141,3 +148,45 @@
src: 'templates/nvim/lua/indent-blankline.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/indent-blankline.lua',
}
- block:
- name: register the current version
command:
argv:
- '{{ neovim.install_path }}/bin/nvim'
- '--version'
register: neovim_stats
- name: parse the current version
set_fact:
neovim_installed_version: neovim_stats.stdout_lines[0] | regex_search('(v\d+\.\d+\.\d+)')
when: neovim_stats.rc == 0
- name: download neovim {{ neovim.version }}
get_url:
url: 'https://github.com/neovim/neovim/releases/download/{{ neovim.version }}/nvim-linux64.tar.gz'
dest: /tmp/nvim-linux64.tar.gz
when: neovim_stats.rc > 0 or neovim_installed_version != neovim.version
register: neovim_download
- name: extract downloaded neovim version
unarchive:
src: /tmp/nvim-linux64.tar.gz
dest: '{{ neovim.install_path }}'
extra_opts:
- '--strip-components=1'
- '--show-stored-names'
when: neovim_download.rc == 0
- name: set updated PATH variable
set_fact:
neovim_new_path: '{{ neovim.install_path }}/bin'
- name: Update PATH to include {{ neovim_new_path }}
ansible.builtin.replace:
path: '~/.profile'
regexp: '^PATH="{{ ansible_env.PATH }}"'
replace: 'PATH="{{ ansible_env.PATH }}:{{ neovim_new_path }}"'
when: neovim_new_path not in ansible_env.PATH
when: ansible_facts['os_family'] == 'Debian'

View file

@ -23,8 +23,15 @@ end
--enable some language servers with the additional completion capabilities
--offered by nvim-cmp
-- TODO: use `.join`?
local servers = {
'ansiblels', 'yamlls', 'cssls', 'jsonls', 'tsserver', 'bashls', 'lua_ls'
{% for item in language_servers %}
{% if item.auto_setup and not loop.last %}
'{{ item.server_name }}',
{% elif item.auto_setup %}
'{{ item.server_name }}'
{% endif %}
{% endfor %}
}
--add additional capabilities supported by nvim-cmp
@ -42,6 +49,7 @@ end
local util = require('lspconfig/util')
{% if ansible_facts.os_family == 'Archlinux' %}
local python_root_dir = function(fname)
return util.root_pattern('.git', 'setup.cfg', 'requirements')(fname) or
util.path.dirname(fname)
@ -72,12 +80,14 @@ nvim_lsp.pyright.setup({
root_dir = python_root_dir
})
nvim_lsp.html.setup({
on_attach = on_attach,
capabilities = capabilities,
filetypes = { 'html', 'htmldjango' },
})
{% endif %}
local cmp = require('cmp')
local luasnip = require('luasnip')

View file

@ -32,15 +32,49 @@ aur_build_dir: '/usr/local/src'
python_build_dir: '/usr/local/src'
python_install_dir: '/opt'
# Note that the "python-lsp-server", "python-lsp-ruff" and "neovim" python
# packages should be installed to the corresponding virtualenv as well.
language_servers:
- ansible-language-server
- yaml-language-server
- typescript-language-server
- vscode-html-languageserver
- vscode-json-languageserver
- vscode-css-languageserver
- bash-language-server
- lua-language-server
- {
package: ansible-language-server,
server_name: 'ansiblels',
auto_setup: true
}
- {
package: yaml-language-server,
server_name: 'yamlls',
auto_setup: true
}
- {
package: typescript-language-server,
server_name: 'tsserver',
auto_setup: true
}
- {
package: vscode-html-languageserver,
server_name: 'html',
auto_setup: false
}
- {
package: vscode-json-languageserver,
server_name: 'jsonls',
auto_setup: true
}
- {
package: vscode-css-languageserver,
server_name: 'cssls',
auto_setup: true
}
- {
package: bash-language-server,
server_name: 'bashls',
auto_setup: true
}
- {
package: lua-language-server,
server_name: 'lua_ls',
auto_setup: true
}
python_download_url: 'https://www.python.org/ftp/python'
python_versions:

View file

@ -5,18 +5,29 @@ packages:
- python3
- git
- vim
- neovim
- npm
- tree-sitter
- ripgrep
# TODO: investigate available lsps
neovim:
version: 'v0.10.1'
install_path: '/opt/nvim'
download_checksum: 4867de01a17f6083f902f8aa5215b40b0ed3a36e83cc0293de3f11708f1f9793
# TODO: add lua language server, see https://github.com/LuaLS/lua-language-server?
language_servers:
- ansible-language-server
- yaml-language-server
- typescript-language-server
- vscode-html-languageserver
- vscode-json-languageserver
- vscode-css-languageserver
- bash-language-server
- lua-language-server
- {
package: '@ansible/ansible-language-server',
server_name: 'ansiblels',
auto_setup: true
}
- {
package: yaml-language-server,
server_name: 'yamlls',
auto_setup: true
}
- {
package: bash-language-server,
server_name: 'bashls',
auto_setup: true
}