Compare commits

..

No commits in common. "3ca4225f7ccd2689682a28b24d9df2375a50162b" and "c2bbe6cf4a5568c4078f391944e1db4de320575f" have entirely different histories.

8 changed files with 147 additions and 208 deletions

View file

@ -24,11 +24,9 @@
manager: pacman manager: pacman
- import_tasks: 'tasks/aur.yml' - import_tasks: 'tasks/aur.yml'
- import_tasks: 'tasks/docker.yml' - import_tasks: 'tasks/docker.yml'
- name: setup python versions - name: setup python versions
include_tasks: 'tasks/python.yml' include_tasks: 'tasks/python.yml'
loop: '{{ python_versions }}' loop: '{{ python_versions }}'
- import_tasks: 'tasks/nvm.yml' - import_tasks: 'tasks/nvm.yml'
vars_files: vars_files:
- 'vars/main.yml' - 'vars/main.yml'

View file

@ -1,8 +1,7 @@
- name: Ensure neovim configuration directories exist - name: ensure neovim configuration directories exist
ansible.builtin.file: file:
path: '{{ item }}' path: '{{ item }}'
state: directory state: directory
mode: '0755'
loop: loop:
- '{{ xdg_config_dir }}/nvim/' - '{{ xdg_config_dir }}/nvim/'
- '{{ xdg_config_dir }}/nvim/lua' - '{{ xdg_config_dir }}/nvim/lua'
@ -13,8 +12,8 @@
- '{{ xdg_data_dir }}/nvim/site/pack/default' - '{{ xdg_data_dir }}/nvim/site/pack/default'
- '{{ xdg_data_dir }}/nvim/site/pack/default/start' - '{{ xdg_data_dir }}/nvim/site/pack/default/start'
- name: Remove old neovim packages - name: remove old neovim packages
ansible.builtin.file: file:
path: '{{ item }}' path: '{{ item }}'
state: absent state: absent
loop: loop:
@ -22,171 +21,185 @@
- '{{ xdg_data_dir }}/nvim/site/pack/default/start/vim-colors-xcode' - '{{ xdg_data_dir }}/nvim/site/pack/default/start/vim-colors-xcode'
# Note that helptags may need to be regenerated (see `:h helptags`) # Note that helptags may need to be regenerated (see `:h helptags`)
- name: Clone neovim packages - name: clone neovim packages
ansible.builtin.git: git:
repo: '{{ item.url }}' repo: '{{ item.url }}'
dest: '{{ xdg_data_dir }}/nvim/site/pack/default/start/{{ item.name }}' dest: '{{ xdg_data_dir }}/nvim/site/pack/default/start/{{ item.name }}'
update: true update: true
version: '{{ item.version | default("HEAD") }}' version: '{{ item.version|default("HEAD") }}'
force: true # some maintainers overwrite existing tags :/ force: true # some maintainers overwrite existing tags :/
loop: '{{ neovim_plugins }}' loop: '{{ neovim_plugins }}'
- name: Install neovim node package - name: install neovim node package
become: true become: true
community.general.npm: npm:
name: neovim name: neovim
global: true global: true
- name: Install language servers - name: install language servers
become: true become: true
ansible.builtin.package: package:
name: '{{ item }}' name: '{{ item }}'
state: present state: present
loop: '{{ language_servers | map(attribute="package") | list }}' loop: '{{ language_servers | map(attribute="package") | list }}'
when: ansible_facts['os_family'] == 'Archlinux' when: ansible_facts['os_family'] == 'Archlinux'
- name: Install language servers on debian hosts - name: install language servers on debian hosts
become: true become: true
community.general.npm: npm:
name: '{{ item }}' name: '{{ item }}'
global: true global: true
loop: '{{ language_servers | map(attribute="package") | list }}' loop: '{{ language_servers | map(attribute="package") | list }}'
when: ansible_facts['os_family'] == 'Debian' when: ansible_facts['os_family'] == 'Debian'
- name: Remove old neovim configuration file - name: remove old neovim configuration file
ansible.builtin.file: file:
path: '{{ xdg_config_dir }}/nvim/init.vim' path: '{{ xdg_config_dir }}/nvim/init.vim'
state: absent state: absent
- name: Remove coc.nvim extension - name: remove coc.nvim extension
ansible.builtin.file: file:
path: '{{ xdg_data_dir }}/nvim/site/pack/default/start/coc.nvim' path: '{{ xdg_data_dir }}/nvim/site/pack/default/start/coc.nvim'
state: absent state: absent
- name: Setup neovim configuration files - name: setup neovim configuration files
ansible.builtin.template: template:
dest: '{{ item.dest }}' dest: '{{ item.dest }}'
src: '{{ item.src }}' src: '{{ item.src }}'
mode: '0755'
loop: loop:
- src: 'templates/nvim/ftplugin/bash.lua.j2' - {
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/bash.lua' src: 'templates/nvim/ftplugin/bash.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/bash.lua',
}
- {
src: 'templates/nvim/ftplugin/css.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/css.lua',
}
- {
src: 'templates/nvim/ftplugin/html.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/html.lua',
}
- {
src: 'templates/nvim/ftplugin/htmldjango.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/htmldjango.lua',
}
- {
src: 'templates/nvim/ftplugin/javascript.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/javascript.lua',
}
- {
src: 'templates/nvim/ftplugin/json.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/json.lua',
}
- {
src: 'templates/nvim/ftplugin/lua.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/lua.lua',
}
- {
src: 'templates/nvim/ftplugin/python.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/python.lua',
}
- {
src: 'templates/nvim/ftplugin/scss.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/scss.lua',
}
- {
src: 'templates/nvim/ftplugin/sh.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/sh.lua',
}
- {
src: 'templates/nvim/ftplugin/yaml.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/yaml.lua',
}
- { src: 'templates/nvim/init.lua.j2', dest: '{{ xdg_config_dir }}/nvim/init.lua' }
- {
src: 'templates/nvim/lua/lsp.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/lsp.lua',
}
- {
src: 'templates/nvim/lua/options.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/options.lua',
}
- {
src: 'templates/nvim/lua/tree-sitter.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/tree-sitter.lua',
}
- {
src: 'templates/nvim/lua/git-signs.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/git-signs.lua',
}
- {
src: 'templates/nvim/lua/lua-line.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/lua-line.lua',
}
- {
src: 'templates/nvim/lua/telescope.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/_telescope.lua',
}
- {
src: 'templates/nvim/lua/indent-blankline.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/indent-blankline.lua',
}
- {
src: 'templates/nvim/lua/nvim-tree.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/_nvim-tree.lua',
}
- {
src: 'templates/nvim/lua/colorscheme.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/colorscheme.lua',
}
- {
src: 'templates/nvim/lua/source-link.lua.j2',
dest: '{{ xdg_config_dir }}/nvim/lua/_source-link.lua',
}
- src: 'templates/nvim/ftplugin/css.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/css.lua'
- src: 'templates/nvim/ftplugin/html.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/html.lua'
- src: 'templates/nvim/ftplugin/htmldjango.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/htmldjango.lua'
- src: 'templates/nvim/ftplugin/javascript.lua.j2' - block:
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/javascript.lua' - name: create neovim install directory
become: true
file:
state: directory
path: '{{ neovim.install_path }}'
owner: '{{ ansible_user_id }}'
group: '{{ ansible_user_gid }}'
- src: 'templates/nvim/ftplugin/json.lua.j2' - name: register the current neovim version
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/json.lua' command:
argv:
- '{{ neovim.install_path }}/bin/nvim'
- '--version'
register: neovim_stats
ignore_errors: true
- src: 'templates/nvim/ftplugin/lua.lua.j2' - name: parse the current neovim version
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/lua.lua' set_fact:
neovim_installed_version: neovim_stats.stdout_lines[0] | regex_search('(v\d+\.\d+\.\d+)')
when: neovim_stats.rc == 0
- src: 'templates/nvim/ftplugin/python.lua.j2' # TODO: verify checksum
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/python.lua' - 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
- src: 'templates/nvim/ftplugin/scss.lua.j2' - name: extract downloaded neovim version
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/scss.lua' unarchive:
src: /tmp/nvim-linux64.tar.gz
dest: '{{ neovim.install_path }}'
extra_opts:
- '--strip-components=1'
- '--show-stored-names'
- '--overwrite'
when: neovim_download.state == 'file' and
(neovim_installed_version is undefined or neovim_installed_version != neovim.version)
- src: 'templates/nvim/ftplugin/sh.lua.j2' - name: add neovim to PATH
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/sh.lua' become: true
template:
src: 'templates/nvim.profile.j2'
dest: '/etc/profile.d/neovim.sh'
- src: 'templates/nvim/ftplugin/yaml.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/after/ftplugin/yaml.lua'
- src: 'templates/nvim/init.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/init.lua'
- src: 'templates/nvim/lua/lsp.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/lsp.lua'
- src: 'templates/nvim/lua/options.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/options.lua'
- src: 'templates/nvim/lua/tree-sitter.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/tree-sitter.lua'
- src: 'templates/nvim/lua/git-signs.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/git-signs.lua'
- src: 'templates/nvim/lua/lua-line.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/lua-line.lua'
- src: 'templates/nvim/lua/telescope.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/_telescope.lua'
- src: 'templates/nvim/lua/indent-blankline.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/indent-blankline.lua'
- src: 'templates/nvim/lua/nvim-tree.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/_nvim-tree.lua'
- src: 'templates/nvim/lua/colorscheme.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/colorscheme.lua'
- src: 'templates/nvim/lua/source-link.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/_source-link.lua'
- src: 'templates/nvim/lua/filetype.lua.j2'
dest: '{{ xdg_config_dir }}/nvim/lua/_filetype.lua'
- name: Install neovim from archive
when: ansible_facts['os_family'] == 'Debian' when: ansible_facts['os_family'] == 'Debian'
block:
- name: Create neovim install directory
become: true
ansible.builtin.file:
state: directory
path: '{{ neovim.install_path }}'
owner: '{{ ansible_user_id }}'
group: '{{ ansible_user_gid }}'
mode: '0755'
- name: Register the current neovim version
ansible.builtin.command:
argv:
- '{{ neovim.install_path }}/bin/nvim'
- '--version'
register: neovim_stats
changed_when: false
ignore_errors: true
- name: Parse the current neovim version
ansible.builtin.set_fact:
neovim_installed_version: neovim_stats.stdout_lines[0] | regex_search('(v\d+\.\d+\.\d+)')
when: neovim_stats.rc == 0
# TODO: verify checksum
- name: Download neovim {{ neovim.version }}
ansible.builtin.get_url:
url: 'https://github.com/neovim/neovim/releases/download/{{ neovim.version }}/nvim-linux64.tar.gz'
dest: /tmp/nvim-linux64.tar.gz
mode: '0755'
when: neovim_stats.rc > 0 or neovim_installed_version != neovim.version
register: neovim_download
- name: Extract downloaded neovim version
ansible.builtin.unarchive:
src: /tmp/nvim-linux64.tar.gz
dest: '{{ neovim.install_path }}'
extra_opts:
- '--strip-components=1'
- '--show-stored-names'
- '--overwrite'
when: |
neovim_download.state == 'file'
and (neovim_installed_version is undefined or neovim_installed_version != neovim.version)
- name: Add neovim to PATH
become: true
ansible.builtin.template:
src: 'templates/nvim.profile.j2'
dest: '/etc/profile.d/neovim.sh'
mode: '0755'

View file

@ -1,8 +1,6 @@
-- {{ ansible_managed }} -- {{ ansible_managed }}
-- TODO: load environment vars from .env files
require('options') require('options')
require('_filetype')
require('colorscheme') require('colorscheme')
require('lsp') require('lsp')
require('tree-sitter') require('tree-sitter')

View file

@ -1,40 +0,0 @@
local ansible_keywords = {
'hosts',
'tasks',
'vars',
'vars_files',
'vars_prompt',
'handlers',
'roles',
'import_tasks',
'import_playbook',
'import_role',
}
vim.filetype.add {
pattern = {
['playbook*.y(a?)ml'] = 'yaml.ansible',
['site*.y(a?)ml'] = 'yaml.ansible',
['inventory*.y(a?)ml'] = 'yaml.ansible',
['task*.y(a?)ml'] = 'yaml.ansible',
['requirement*.y(a?)ml'] = 'yaml.ansible',
['.*/tasks/.*.y(a?)ml'] = 'yaml.ansible',
['.*/vars/.*.y(a?)ml'] = 'yaml.ansible',
['.*/playbooks/.*.y(a?)ml'] = 'yaml.ansible',
['*.ansible.y(a?)ml'] = 'yaml.ansible',
['.*.y(a?)ml'] = {
function(path, bufnr)
local content = vim.api.nvim_buf_get_lines(bufnr, 0, 1, false)[1] or ''
for _, keyword in pairs(ansible_keywords) do
local pattern = string.format('^- %s:', keyword)
if content:match(pattern) then return 'yaml.ansible' end
end
end,
},
},
}

View file

@ -156,29 +156,3 @@ vim.diagnostic.config({
border = border border = border
}, },
}) })
local enable_formatting = os.getenv("ENABLE_FORMATTING", False)
-- TODO: fix error message: [LSP] Format request failed, no matching language servers.
-- format buffers before saving for specific LSPs
if (enable_formatting) then
local excluded_clients = { 'pyright' }
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('lsp', { clear = true }),
callback = function(args)
vim.api.nvim_create_autocmd('BufWritePre', {
buffer = args.buf,
callback = function()
vim.lsp.buf.format {
filter = function(client)
return not vim.list_contains(excluded_clients, client.name)
end,
async = false,
id = args.data.client_id
}
end,
})
end
})
end

View file

@ -2,7 +2,6 @@
local lualine = require('lualine'); local lualine = require('lualine');
-- TODO: show attached LSP count
lualine.setup { lualine.setup {
sections = { sections = {
lualine_a = {'mode'}, lualine_a = {'mode'},

View file

@ -7,10 +7,8 @@ local tree_sitter_config = require('nvim-treesitter.configs')
tree_sitter_config.setup { tree_sitter_config.setup {
ensure_installed = { ensure_installed = {
'lua', 'yaml', 'bash', 'python', 'javascript', 'typescript', 'css', 'scss', 'lua', 'yaml', 'bash', 'python', 'javascript', 'css', 'scss', 'html',
'html', 'htmldjango', 'sql', 'json', 'dockerfile', 'markdown', 'rst', 'tmux', 'htmldjango', 'json', 'dockerfile', 'markdown',
'xml', 'toml', 'editorconfig', 'diff', 'gitcommit', 'git_config', 'gitignore',
'gitattributes', 'make', 'nginx', 'vim', 'vimdoc', 'passwd', 'regex'
}, },
auto_install = true, auto_install = true,
highlight = { highlight = {

View file

@ -102,7 +102,6 @@ language_servers:
python_download_url: 'https://www.python.org/ftp/python' python_download_url: 'https://www.python.org/ftp/python'
python_versions: python_versions:
- { version: 3.12.9, path: 'python3.12', binary: 'python3.12' }
- { version: 3.11.9, path: 'python3.11', binary: 'python3.11' } - { version: 3.11.9, path: 'python3.11', binary: 'python3.11' }
- { version: 3.10.0, path: 'python3.10', binary: 'python3.10' } - { version: 3.10.0, path: 'python3.10', binary: 'python3.10' }
- { version: 3.9.14, path: 'python3.9', binary: 'python3.9' } - { version: 3.9.14, path: 'python3.9', binary: 'python3.9' }