diff --git a/files/nvim.conform.lua b/files/nvim.conform.lua deleted file mode 100644 index 801df29..0000000 --- a/files/nvim.conform.lua +++ /dev/null @@ -1,14 +0,0 @@ --- example of a project specific nvim configuration file using :exrc and conform - -local conform = require 'conform'; - -conform.setup { - formatters_by_ft = { - python = { 'isort', 'black' }, - javascript = { 'prettier', }, - }, - - format_on_save = { - lsp_format = 'never', - } -} diff --git a/files/nvim.lsp.lua b/files/nvim.lsp.lua deleted file mode 100644 index ff06a44..0000000 --- a/files/nvim.lsp.lua +++ /dev/null @@ -1,33 +0,0 @@ --- example of a project specific nvim configuration file using :exrc and lsp formatting - -local format_clients = { - 'ruff', - 'lua_ls', - 'bashls', - 'jsonls', - 'ts_ls', - 'ansiblels', - 'yamlls', - 'cssls', - 'html', -} - -vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('lsp', { clear = true }), - callback = function(args) - local client = vim.lsp.get_client_by_id(args.data.client_id) - - if client:supports_method('textDocument/formatting') - and vim.tbl_contains(format_clients, client.name) then - vim.api.nvim_create_autocmd('BufWritePre', { - buffer = args.buf, - callback = function() - vim.lsp.buf.format { - async = false, - id = args.data.client_id - } - end, - }) - end - end -}) diff --git a/files/tmux.sh b/files/tmux.sh index d98c41b..01e0223 100755 --- a/files/tmux.sh +++ b/files/tmux.sh @@ -2,6 +2,7 @@ session_name=${PWD##*/} project_directory="$HOME/development/$session_name" +enable_formatting="false" tmux has-session -t $session_name @@ -10,7 +11,8 @@ then tmux new-session \ -c $project_directory \ -ds $session_name \ - -e "project_dir=$project_directory" + -e "project_dir=$project_directory" \ + -e "enable_formatting=$enable_formatting" # FIRST WINDOW tmux send-keys -t $session_name:0 'source ./env/bin/activate' C-m diff --git a/group_vars/all/neovim.yml b/group_vars/all/neovim.yml index e67edd3..2e1e9ab 100644 --- a/group_vars/all/neovim.yml +++ b/group_vars/all/neovim.yml @@ -21,7 +21,6 @@ neovim_plugins: name: 'cmp-nvim-lua' - url: 'https://github.com/nvim-treesitter/nvim-treesitter' name: 'nvim-treesitter' - version: master # main seems broken? - url: 'https://github.com/nvim-lua/plenary.nvim' name: 'plenary.nvim' - url: 'https://github.com/nvim-telescope/telescope-fzf-native.nvim' @@ -43,8 +42,5 @@ neovim_plugins: - url: 'https://github.com/projekt0n/github-nvim-theme.git' name: 'github-colors' version: 'v1.1.2' - - url: 'https://github.com/stevearc/conform.nvim.git' - name: 'conform.nvim' - version: 'v9.0.0' language_servers: [] diff --git a/group_vars/arch/system.yml b/group_vars/arch/system.yml index 3bab5fb..ae21d6d 100644 --- a/group_vars/arch/system.yml +++ b/group_vars/arch/system.yml @@ -14,10 +14,4 @@ packages: - slirp4netns - tree-sitter - ripgrep - - fd - uv - - fakeroot - - debugedit - - which - - gcc - - make diff --git a/group_vars/debian/neovim.yml b/group_vars/debian/neovim.yml index af2c892..c5e5319 100644 --- a/group_vars/debian/neovim.yml +++ b/group_vars/debian/neovim.yml @@ -1,18 +1,18 @@ # TODO: add lua language server, see https://github.com/LuaLS/lua-language-server? language_servers: - - package: "@ansible/ansible-language-server" - server_name: "ansiblels" + - package: '@ansible/ansible-language-server' + server_name: 'ansiblels' auto_setup: true - package: yaml-language-server - server_name: "yamlls" + server_name: 'yamlls' auto_setup: false - package: bash-language-server - server_name: "bashls" + server_name: 'bashls' auto_setup: true neovim: - version: "v0.11.4" - install_path: "/opt/nvim" - download_checksum: sha256:a74740047e73b2b380d63a474282814063d10650cd6cc95efa16d1713c7e616c + version: 'v0.10.4' + install_path: '/opt/nvim' + download_checksum: sha256:95aaa8e89473f5421114f2787c13ae0ec6e11ebbd1a13a1bd6fcf63420f8073f diff --git a/inventory.yml b/inventory.yml index 7ebdbcf..438697a 100644 --- a/inventory.yml +++ b/inventory.yml @@ -6,9 +6,6 @@ personal: desktop: &desktop ansible_connection: local ansible_become_method: community.general.run0 - htpc: &htpc - ansible_connection: local - ansible_become_method: community.general.run0 fudiggity: &fudiggity ansible_connection: local @@ -23,5 +20,3 @@ arch: <<: *xps desktop: <<: *desktop - htpc: - <<: *htpc diff --git a/playbook.yml b/playbook.yml index 8ab70f7..2c644c2 100644 --- a/playbook.yml +++ b/playbook.yml @@ -1,8 +1,8 @@ - name: Development provisioning hosts: - - personal - - arch - - debian + - xps + - desktop + - fudiggity pre_tasks: - name: Verifying that a limit is set ansible.builtin.fail: diff --git a/requirements.yml b/requirements.yml index b20eeb6..ba54c45 100644 --- a/requirements.yml +++ b/requirements.yml @@ -1,4 +1,4 @@ -- src: git+https://forgejo.fudiggity.nl/sonny/common-ansible.git +- src: git+https://git.fudiggity.nl/ansible/common.git name: common version: master scm: git diff --git a/tasks/dotfiles.yml b/tasks/dotfiles.yml index b8c40e6..44445b2 100644 --- a/tasks/dotfiles.yml +++ b/tasks/dotfiles.yml @@ -38,15 +38,9 @@ - src: '{{ ansible_env.HOME }}/dotfiles/.profile' dest: '{{ ansible_env.HOME }}/.profile' - - src: '{{ ansible_env.HOME }}/dotfiles/tmux/tmux.conf' + - src: '{{ ansible_env.HOME }}/dotfiles/.tmux.conf' dest: '{{ xdg_config_dir }}/tmux/tmux.conf' - - src: '{{ ansible_env.HOME }}/dotfiles/tmux/light.conf' - dest: '{{ xdg_config_dir }}/tmux/light.conf' - - - src: '{{ ansible_env.HOME }}/dotfiles/tmux/dark.conf' - dest: '{{ xdg_config_dir }}/tmux/dark.conf' - - src: '{{ ansible_env.HOME }}/dotfiles/.gitignore' dest: '{{ xdg_config_dir }}/git/ignore' @@ -55,15 +49,3 @@ src: 'templates/gitconfig.j2' dest: '{{ xdg_config_dir }}/git/config' mode: '0755' - -- name: Create script directory - ansible.builtin.file: - path: '{{ ansible_env.HOME }}/.local/bin' - state: directory - mode: '0755' - -- name: Copy tmux toggle script - ansible.builtin.template: - src: 'templates/tmux-toggle.j2' - dest: '{{ ansible_env.HOME }}/.local/bin/tmux-toggle.sh' - mode: '0755' diff --git a/tasks/neovim.yml b/tasks/neovim.yml index e7de9d5..f6e0696 100644 --- a/tasks/neovim.yml +++ b/tasks/neovim.yml @@ -121,5 +121,5 @@ - src: 'templates/nvim/lua/filetype.lua.j2' dest: '{{ xdg_config_dir }}/nvim/lua/_filetype.lua' - - src: 'templates/nvim/lua/diagnostic.lua.j2' - dest: '{{ xdg_config_dir }}/nvim/lua/diagnostic.lua' + - src: 'templates/nvim/lua/formatting.lua.j2' + dest: '{{ xdg_config_dir }}/nvim/lua/formatting.lua' diff --git a/templates/nvim/init.lua.j2 b/templates/nvim/init.lua.j2 index a18b81c..309c912 100644 --- a/templates/nvim/init.lua.j2 +++ b/templates/nvim/init.lua.j2 @@ -11,4 +11,4 @@ require('indent-blankline') require('_nvim-tree') require('lua-line') require('_source-link') -require('diagnostic') +require('formatting') diff --git a/templates/nvim/lua/colorscheme.lua.j2 b/templates/nvim/lua/colorscheme.lua.j2 index 9ae709f..4cbea41 100644 --- a/templates/nvim/lua/colorscheme.lua.j2 +++ b/templates/nvim/lua/colorscheme.lua.j2 @@ -4,7 +4,7 @@ local background_callback = function() if vim.o.background == 'dark' then vim.cmd('colorscheme github_dark_dimmed') else - vim.cmd('colorscheme github_light_tritanopia') + vim.cmd('colorscheme github_light') end -- force a full redraw: @@ -29,7 +29,7 @@ Use the `Introspect` option to inspect available options: dbus-send \ --session \ ---print-reply \ +--print-reply ] --reply-timeout=2000 \ --type=method_call \ --dest=org.freedesktop.portal.Desktop \ diff --git a/templates/nvim/lua/diagnostic.lua.j2 b/templates/nvim/lua/diagnostic.lua.j2 deleted file mode 100644 index 97baa9e..0000000 --- a/templates/nvim/lua/diagnostic.lua.j2 +++ /dev/null @@ -1,11 +0,0 @@ --- {{ ansible_managed }} - -vim.diagnostic.config { - float = { - suffix = function(diagnostic) - return (' %s | [%s]'):format(diagnostic.code, diagnostic.source) - end - }, - - virtual_text = { current_line = true } -} diff --git a/templates/nvim/lua/formatting.lua.j2 b/templates/nvim/lua/formatting.lua.j2 new file mode 100644 index 0000000..36a4279 --- /dev/null +++ b/templates/nvim/lua/formatting.lua.j2 @@ -0,0 +1,39 @@ +-- {{ ansible_managed }} + +local enable_formatting = vim.env.enable_formatting == 'true'; +local legacy_formatting = nil; + +-- TODO: move to utils file +-- TODO: add efm-languageserver to lsp.lua +if vim.env.VIRTUAL_ENV ~= nil and enable_formatting == true then + local formatters = vim.fs.find( + { 'isort', 'black' }, + { limit = 1, type = 'file', path = vim.fs.joinpath(vim.env.VIRTUAL_ENV, 'bin') } + ) + + legacy_formatting = #formatters > 0; +end + +if (enable_formatting) then + vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('lsp', { clear = true }), + callback = function(args) + local client = vim.lsp.get_client_by_id(args.data.client_id) + + if client.server_capabilities.documentFormattingProvider then + vim.api.nvim_create_autocmd('BufWritePre', { + buffer = args.buf, + callback = function() + vim.lsp.buf.format { + async = false, + id = args.data.client_id, + filter = function(format_client) + return format_client.name ~= 'ruff' or not legacy_formatting + end + } + end, + }) + end + end + }) +end diff --git a/templates/nvim/lua/lsp.lua.j2 b/templates/nvim/lua/lsp.lua.j2 index 1da3fdc..78fd62f 100644 --- a/templates/nvim/lua/lsp.lua.j2 +++ b/templates/nvim/lua/lsp.lua.j2 @@ -7,29 +7,29 @@ local on_attach = function(client, bufnr) vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) - vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) - vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) - vim.keymap.set('n', 'la', vim.lsp.buf.code_action, opts) - vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) vim.keymap.set('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) - + vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) vim.keymap.set('n', 'e', vim.diagnostic.open_float, opts) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) vim.keymap.set('n', 'q', vim.diagnostic.setloclist, opts) + vim.keymap.set('n', 'la', vim.lsp.buf.code_action, opts) + end + --enable some language servers with the additional completion capabilities --offered by nvim-cmp -local auto_setup_servers = { +local servers = { {% for item in language_servers %} {% if item.auto_setup and not loop.last %} '{{ item.server_name }}', @@ -43,8 +43,10 @@ local auto_setup_servers = { local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) -for _, lsp in ipairs(auto_setup_servers) do - vim.lsp.config[lsp] = { +local nvim_lsp = require('lspconfig') + +for _, lsp in ipairs(servers) do + nvim_lsp[lsp].setup { on_attach = on_attach, capabilities = capabilities, } @@ -58,49 +60,42 @@ local python_root_dir = function(fname) util.path.dirname(fname) end -vim.lsp.config['ruff'] = { +nvim_lsp.ruff.setup { on_attach = on_attach, capabilities = capabilities, root_dir = python_root_dir } -vim.lsp.config['pyright'] = { +nvim_lsp.pyright.setup { settings = { pyright = { -- Using Ruff's import organizer - disableOrganizeImports = true, + disableOrganizeImports = true, }, - } + }, } local snippet_capabilities = vim.deepcopy(capabilities); snippet_capabilities.textDocument.completion.completionItem.snippetSupport = true -vim.lsp.config['html'] = { +nvim_lsp.html.setup { on_attach = on_attach, capabilities = snippet_capabilities, filetypes = { 'html', 'htmldjango' }, - settings = { - html = { - format = { - templating = true - } - } - } } -vim.lsp.config['cssls'] = { +nvim_lsp.cssls.setup { on_attach = on_attach, capabilities = snippet_capabilities, } -vim.lsp.config['jsonls'] = { +nvim_lsp.jsonls.setup { on_attach = on_attach, capabilities = snippet_capabilities, } -vim.lsp.config['lua_ls'] = { +nvim_lsp.lua_ls.setup { on_attach = on_attach, capabilities = snippet_capabilities, settings = { @@ -113,24 +108,12 @@ vim.lsp.config['lua_ls'] = { } {% endif %} -vim.lsp.config['yamlls'] = { +nvim_lsp.yamlls.setup { on_attach = on_attach, capabilities = capabilities, filetypes = { 'yaml', 'yaml.ansible', 'yaml.docker-compose', 'yaml.gitlab' } } -local servers = { - {% for item in language_servers %} - {% if not loop.last %} - '{{ item.server_name }}', - {% else %} - '{{ item.server_name }}' - {% endif %} - {% endfor %} -} - -vim.lsp.enable { unpack(servers) } - local cmp = require('cmp') local luasnip = require('luasnip') @@ -196,3 +179,11 @@ cmp.setup { end, }, } + +vim.diagnostic.config { + float = { + suffix = function(diagnostic) + return (' %s | [%s]'):format(diagnostic.code, diagnostic.source) + end + }, +} diff --git a/templates/nvim/lua/options.lua.j2 b/templates/nvim/lua/options.lua.j2 index fe35a80..36bbe52 100644 --- a/templates/nvim/lua/options.lua.j2 +++ b/templates/nvim/lua/options.lua.j2 @@ -55,12 +55,5 @@ vim.o.termguicolors = true vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 --- load project specific configuration files -vim.o.exrc = true -vim.o.secure = true - --- disable mouse options -vim.opt.mouse = '' - -- python interpreter vim.g.python3_host_prog = '/usr/bin/python3' diff --git a/templates/nvim/lua/telescope.lua.j2 b/templates/nvim/lua/telescope.lua.j2 index 4de57a6..b74a42f 100644 --- a/templates/nvim/lua/telescope.lua.j2 +++ b/templates/nvim/lua/telescope.lua.j2 @@ -5,33 +5,20 @@ local builtin = require('telescope.builtin') local opts = { noremap = true, silent = true } -local find_files_unignored = function() - builtin.find_files { hidden = true, no_ignore = true } -end - -local live_grep_unignored = function() - builtin.live_grep { additional_args = { '--unrestricted', '--unrestricted' } } -end - vim.keymap.set('n', 'ff', builtin.find_files, opts) -vim.keymap.set('n', 'fF', find_files_unignored, opts) vim.keymap.set('n', 'fg', builtin.live_grep, opts) -vim.keymap.set('n', 'fG', live_grep_unignored, opts) -vim.keymap.set('n', 'fb', builtin.current_buffer_fuzzy_find, opts) -vim.keymap.set('n', 'fB', builtin.buffers, opts) +vim.keymap.set('n', 'fb', builtin.buffers, opts) vim.keymap.set('n', 'fh', builtin.help_tags, opts) vim.keymap.set('n', 'fj', builtin.jumplist, opts) vim.keymap.set('n', 'fl', builtin.loclist, opts) vim.keymap.set('n', 'fq', builtin.quickfix, opts) vim.keymap.set('n', 'fm', builtin.marks, opts) -vim.keymap.set('n', 'ft', builtin.treesitter, opts) telescope.setup({ defaults = { layout_strategy = 'vertical', layout_config = { - prompt_position = 'bottom', - vertical = { width = 0.8, height = 0.9 } + vertical = { width = 0.5, height = 0.7 } }, }, }) diff --git a/templates/tmux-toggle.j2 b/templates/tmux-toggle.j2 deleted file mode 100644 index 3a2bda6..0000000 --- a/templates/tmux-toggle.j2 +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env sh -# -# {{ ansible_managed }} -# -# Toggle the current window (all panes) between light and dark themes. - -set -e - -current_window_style=$(tmux show -Av window-style) - -case $current_window_style in - 'fg=#000000,bg=#eff0f1') - tmux source-file ~/.config/tmux/dark.conf - ;; - *) - # Change back to the default window style. - tmux source-file ~/.config/tmux/light.conf - ;; -esac