diff --git a/init.lua b/init.lua index ea86b79..7323a7f 100644 --- a/init.lua +++ b/init.lua @@ -91,7 +91,7 @@ vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' -- Set to true if you have a Nerd Font installed and selected in the terminal -vim.g.have_nerd_font = false +vim.g.have_nerd_font = true -- [[ Setting options ]] -- See `:help vim.opt` @@ -102,10 +102,10 @@ vim.g.have_nerd_font = false vim.opt.number = true -- You can also add relative line numbers, to help with jumping. -- Experiment for yourself to see if you like it! --- vim.opt.relativenumber = true +vim.opt.relativenumber = true -- Enable mouse mode, can be useful for resizing splits for example! -vim.opt.mouse = 'a' +vim.opt.mouse = '' -- Don't show the mode, since it's already in the status line vim.opt.showmode = false @@ -157,6 +157,14 @@ vim.opt.cursorline = true -- Minimal number of screen lines to keep above and below the cursor. vim.opt.scrolloff = 10 +-- Set foldmethod +-- See `:help foldmethod` +vim.opt.foldcolumn = '1' +vim.opt.foldlevel = 99 +vim.opt.foldlevelstart = 99 +vim.opt.foldenable = true +vim.opt.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]] + -- [[ Basic Keymaps ]] -- See `:help vim.keymap.set()` @@ -618,6 +626,27 @@ require('lazy').setup({ -- ts_ls = {}, -- + cuelsp = {}, + elixirls = { + elixirLS = { + dialyzerEnabled = true, + dialyzerFormat = 'dialyxir_long', + fetchDeps = false, + mixEnv = 'test', + }, + }, + gopls = {}, + helm_ls = {}, + html = { filetypes = { 'html', 'twig', 'hbs' } }, + jsonls = { + settings = { + json = { + -- schemas = { + -- ["https://raw.githubusercontent.com/woodpecker-ci/woodpecker/main/pipeline/frontend/yaml/linter/schema/schema.json"] = "renovate.json", + -- }, + }, + }, + }, lua_ls = { -- cmd = {...}, -- filetypes = { ...}, @@ -632,6 +661,32 @@ require('lazy').setup({ }, }, }, + pyright = {}, + templ = {}, + terraformls = {}, + ts_ls = {}, + yamlls = { + settings = { + yaml = { + schemas = { + ["https://json.schemastore.org/chart.json"] = "Chart.{yml,yaml}", + ["https://json.schemastore.org/drone.json"] = ".drone.{yml,yaml}", + ["https://json.schemastore.org/github-action.json"] = ".github/action.{yml,yaml}", + ["https://json.schemastore.org/github-workflow.json"] = ".github/workflows/*", + ["https://json.schemastore.org/kustomization.json"] = "kustomization.{yml,yaml}", + ["https://json.schemastore.org/prettierrc.json"] = ".prettierrc.{yml,yaml}", + ["https://json.schemastore.org/circleciconfig.json"] = ".circleci/config.{yml,yaml}", + ["https://json.schemastore.org/dependabot-v2"] = ".github/dependabot.{yml,yaml}", + ["https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.1/schema.json"] = "*api*.{yml,yaml}", + ["https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/ansible.json#/$defs/playbook"] = "*play*.{yml,yaml}", + ["https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/ansible.json#/$defs/tasks"] = "roles/tasks/*.{yml,yaml}", + ["https://raw.githubusercontent.com/argoproj/argo-workflows/master/api/jsonschema/schema.json"] = "*flow*.{yml,yaml}", + ["https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json"] = "*docker-compose*.{yml,yaml}", + -- kubernetes = "*.{yml,yaml}", + } + } + } + } } -- Ensure the servers and tools above are installed @@ -658,6 +713,33 @@ require('lazy').setup({ -- by the server configuration above. Useful when disabling -- certain features of an LSP (for example, turning off formatting for ts_ls) server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {}) + -- overwrite elixirls for older versions of elixir + -- * elixir 1.11 use version 0.12.0 + -- * elixir 1.12 use verions 0.14.6 + if server_name == 'elixirls' then + local version = vim.fn.system('mise current elixir') or '' + local elixir_servers = { + { version = '^1.11', path = '/elixir-ls/release/v0.12.0/language_server.sh' }, + { version = '^1.12', path = '/elixir-ls/release/v0.14.6/language_server.sh' }, + } + for _, ex_server in ipairs(elixir_servers) do + if string.match(version, ex_server.version) == nil then goto continue end + server = vim.tbl_extend('keep', server, { cmd = { vim.fn.expand('$LOCAL_SRC_HOME') .. ex_server.path } }) + ::continue:: + end + elseif server_name == 'pyright' then + local python_paths = { + { name = 'poetry', cmd = { 'poetry', 'env', 'info', '--executable' }}, + { name = 'system', cmd = { 'which', 'python' }}, + } + for _, py_server in ipairs(python_paths) do + local cmd = vim.system(py_server.cmd, { text = true }):wait() + if (cmd.code > 0) then goto continue end + local python_path = string.gsub(cmd.stdout, '\n', '') + server = vim.tbl_extend('keep', server, { settings = { python = { pythonPath = python_path } } }) + ::continue:: + end + end require('lspconfig')[server_name].setup(server) end, }, @@ -888,7 +970,39 @@ require('lazy').setup({ main = 'nvim-treesitter.configs', -- Sets main module to use for opts -- [[ Configure Treesitter ]] See `:help nvim-treesitter` opts = { - ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc' }, + ensure_installed = { + 'bash', + 'c', + 'css', + 'diff', + 'dockerfile', + 'eex', + 'elixir', + 'erlang', + 'gitcommit', + 'go', + 'heex', + 'html', + 'http', + 'javascript', + 'json', + 'jsonc', + 'lua', + 'luadoc', + 'markdown', + 'markdown_inline', + 'python', + 'query', + 'sql', + 'templ', + 'terraform', + 'toml', + 'tsx', + 'typescript', + 'vim', + 'vimdoc', + 'yaml', + }, -- Autoinstall languages that are not installed auto_install = true, highlight = { @@ -918,18 +1032,18 @@ require('lazy').setup({ -- Uncomment any of the lines below to enable them (you will need to restart nvim). -- -- require 'kickstart.plugins.debug', - -- require 'kickstart.plugins.indent_line', + require 'kickstart.plugins.indent_line', -- require 'kickstart.plugins.lint', -- require 'kickstart.plugins.autopairs', -- require 'kickstart.plugins.neo-tree', - -- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps + require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` -- This is the easiest way to modularize your config. -- -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. -- For additional information, see `:help lazy.nvim-lazy.nvim-structuring-your-plugins` - -- { import = 'custom.plugins' }, + { import = 'custom.plugins' }, }, { ui = { -- If you are using a Nerd Font: set icons to an empty table which will use the