diff --git a/init.lua b/init.lua index 99c7c9c..4e49b43 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 @@ -156,6 +156,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()` @@ -639,6 +647,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 = { ... }, @@ -653,6 +682,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 @@ -682,6 +737,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, }, @@ -840,6 +922,7 @@ require('lazy').setup({ -- set group index to 0 to skip loading LuaLS completions as lazydev recommends it group_index = 0, }, + { name = 'supermavem' }, { name = 'nvim_lsp' }, { name = 'luasnip' }, { name = 'path' }, @@ -854,12 +937,19 @@ require('lazy').setup({ -- -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`. 'folke/tokyonight.nvim', + dependencies = { + 'drewxs/ash.nvim', + 'wnkz/monoglow.nvim', + 'rjshkhr/shadow.nvim' + }, priority = 1000, -- Make sure to load this before all the other start plugins. init = function() -- Load the colorscheme here. -- Like many other themes, this one has different styles, and you could load -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. - vim.cmd.colorscheme 'tokyonight-night' + -- For monoglow the following variants area available: + -- 'monoglow-z', 'monoglow-lack', or 'monoglow-void'. + vim.cmd.colorscheme 'shadow' -- You can configure highlights by doing something like: vim.cmd.hi 'Comment gui=none' @@ -912,7 +1002,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 = { @@ -942,17 +1064,17 @@ 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. - -- { import = 'custom.plugins' }, + { import = 'custom.plugins' }, -- -- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec` -- Or use telescope!