diff --git a/nvim/lua/dzu/lsp/.gitignore b/nvim/lua/dzu/lsp/.gitignore deleted file mode 100644 index abe8258..0000000 --- a/nvim/lua/dzu/lsp/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.lua_ diff --git a/nvim/lua/dzu/lsp/dockerls.lua b/nvim/lua/dzu/lsp/dockerls.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/nvim/lua/dzu/lsp/dockerls.lua @@ -0,0 +1 @@ +return {} diff --git a/nvim/lua/dzu/lsp/hls.lua b/nvim/lua/dzu/lsp/hls.lua index 944266f..9bbaabd 100644 --- a/nvim/lua/dzu/lsp/hls.lua +++ b/nvim/lua/dzu/lsp/hls.lua @@ -18,4 +18,28 @@ return { }, } } + -- cmd = { "haskell-language-server-wrapper", "--lsp", "-Wall" } + -- formattingProvider = "hls-stylish-haskell-plugin", + -- CRED: https://github.com/haskell/haskell-language-server/issues/4363 -- does not + -- work + --[[ + settings = { + plugin = { + -- CRED: https://github.com/haskell/haskell-language-server/issues/680 -- + -- does not work too! + ['ghcide'] = { + completionOn = false, + }, + ['pramas'] = { + completionOn = false, + }, + ['ghcide-completions'] = { + config = { + snippetsOn = false, + autoExtendOn = true + } + } + } + } + ]] -- } diff --git a/nvim/lua/dzu/lsp/init.lua b/nvim/lua/dzu/lsp/init.lua index 916aec8..4e08259 100644 --- a/nvim/lua/dzu/lsp/init.lua +++ b/nvim/lua/dzu/lsp/init.lua @@ -5,15 +5,14 @@ if not is_ok then return end --- -- format code on save --- vim.api.nvim_create_autocmd({ "BufWritePre" }, { --- pattern = { --- "*.rs", -- rust sources --- "*.py", -- python sources --- "*.js", -- javascript sources --- "*.html", -- html files --- }, --- callback = function(ev) --- vim.lsp.buf.format() --- end, --- }) +-- format code on save +vim.api.nvim_create_autocmd({ "BufWritePre" }, { + pattern = { + "*.rs", -- rust sources + "*.py", -- python sources + "*.js", -- javascript sources + }, + callback = function(ev) + vim.lsp.buf.format() + end, +}) diff --git a/nvim/lua/dzu/lsp/jdtls.lua b/nvim/lua/dzu/lsp/jdtls.lua new file mode 100644 index 0000000..4b61ecf --- /dev/null +++ b/nvim/lua/dzu/lsp/jdtls.lua @@ -0,0 +1,7 @@ +return { + settings = { + java = { + classPath = { "*.jar" } + } + } +} diff --git a/nvim/lua/dzu/lsp/mason.lua b/nvim/lua/dzu/lsp/mason.lua index a4fb402..630a19d 100644 --- a/nvim/lua/dzu/lsp/mason.lua +++ b/nvim/lua/dzu/lsp/mason.lua @@ -1,3 +1,22 @@ +local servers = { + "rust_analyzer", -- rust + "pyright", -- has no code formatting + -- "marksman", -- markdown + "ts_ls", -- js, ts, tsx + "clangd", -- C + "lua_ls", + "hls", + "nil_ls", + "tinymist", + "dockerls", + "html", + -- "jdtls", + -- "xmlformatter" +} +local nvimlsp_only_servers = { + "nushell", +} + local settings = { ui = { border = "none", @@ -10,47 +29,14 @@ local settings = { log_level = vim.log.levels.INFO, max_concurrent_installers = 4, } + require("mason").setup(settings) - -local servers = { - { "rust_analyzer", "rust_analyzer" }, - { "pyright", "pyright", }, - { "ts_ls", nil }, - { "biome", nil }, - { "clangd", nil }, - { "lua_ls", "lua_ls" }, - -- { "hls", "hls" }, - { "nil_ls", nil }, - { "tinymist", "tinymist" }, - { "jdtls", nil }, - -- { "nushell", nil }, -- TODO what IS the lspconfig name? - { "html", nil }, - { "dockerls", nil }, -} -local lspconfig_servers = {} -for _, s in pairs(servers) do - local s0 = s[1] - if s0 ~= nil then - table.insert(lspconfig_servers, s0) - vim.lsp.enable(s0, true) - end -end - require("mason-lspconfig").setup({ - ensure_installed = lspconfig_servers, - automatic_enable = true, + ensure_installed = servers, + automatic_enable = false, automatic_installation = true, }) -local config_servers = {} -for _, s in pairs(servers) do - local s1 = s[2] - if s1 ~= nil then - table.insert(config_servers, s1) - end -end - - local is_ok, handlers = pcall(require, "dzu.lsp.handlers") if not is_ok then vim.notify("failed to initialize LSP handlers") @@ -58,21 +44,31 @@ if not is_ok then end handlers.setup() -local opts = { - capabilities = handlers.capabilities, -} +local opts = {} + +local nvim_lsp_servers = {} +for _, nlsp_s in pairs(nvimlsp_only_servers) do + table.insert(nvim_lsp_servers, nlsp_s) +end +for _, s in pairs(servers) do + table.insert(nvim_lsp_servers, s) +end + +for _, server in pairs(nvim_lsp_servers) do + opts = { + -- on_attach = handlers.on_attach, + capabilities = handlers.capabilities, + } -for _, server in pairs(config_servers) do server = vim.split(server, "@")[1] local is_ok, conf_opts = pcall(require, "dzu.lsp." .. server) - if not is_ok then + if is_ok then + opts = vim.tbl_deep_extend("force", conf_opts, opts) + else vim.notify("Failed to initialize config for " .. server) - goto continue end - local opts0 = vim.tbl_deep_extend("force", conf_opts, opts) - vim.lsp.config(server, opts0) + vim.lsp.config(server, opts) vim.lsp.enable(server, true) - ::continue:: end diff --git a/nvim/lua/dzu/lsp/nil_ls.lua b/nvim/lua/dzu/lsp/nil_ls.lua new file mode 100644 index 0000000..452cb9b --- /dev/null +++ b/nvim/lua/dzu/lsp/nil_ls.lua @@ -0,0 +1,4 @@ +-- (nix lsp) + +return { +} diff --git a/nvim/lua/dzu/lsp/nushell.lua b/nvim/lua/dzu/lsp/nushell.lua new file mode 100644 index 0000000..9c25ff0 --- /dev/null +++ b/nvim/lua/dzu/lsp/nushell.lua @@ -0,0 +1,6 @@ +return { + cmd = { "nu", "--plugins", "[~/.cargo/bin/nu_plugin_polars]", "--lsp", }, + filetypes = { "nu" }, + root_dir = require("lspconfig.util").find_git_ancestor, + single_file_support = true, +} diff --git a/nvim/lua/dzu/lsp/ts_ls.lua b/nvim/lua/dzu/lsp/ts_ls.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/nvim/lua/dzu/lsp/ts_ls.lua @@ -0,0 +1 @@ +return {} diff --git a/nvim/lua/dzu/plugins/formatting.lua b/nvim/lua/dzu/plugins/formatting.lua index 9564951..11425d1 100644 --- a/nvim/lua/dzu/plugins/formatting.lua +++ b/nvim/lua/dzu/plugins/formatting.lua @@ -8,13 +8,16 @@ local function config() -- js/ts fomatters local web_fmt = { "biome" }; local fomatters_by_ft = { - lua = { "stylua" }, + -- lua = { "stylua" }, python = { "black" }, javascript = web_fmt, javascriptreact = web_fmt, typescript = web_fmt, typescriptreact = web_fmt, json = web_fmt, + haskell = { "fourmolu" }, + lhaskell = { "fourmolu" }, + cabal = { "fourmolu" }, -- nix = { "nixfmt" }, cpp = { "clang-format" }, xml = { "xmlformatter" }, diff --git a/nvim/lua/dzu/plugins/img-clip.lua b/nvim/lua/dzu/plugins/img-clip.lua new file mode 100644 index 0000000..70f663c --- /dev/null +++ b/nvim/lua/dzu/plugins/img-clip.lua @@ -0,0 +1,15 @@ +return { + "HakonHarnes/img-clip.nvim", + event = "VeryLazy", + opts = { + default = { + -- file and directory options + dir_path = "/home/dzu/.wiki/attachments/", ---@type string + extension = "png", ---@type string + file_name = "%Y-%m-%d-%H-%M-%S", ---@type string + use_absolute_path = false, ---@type boolean + relative_to_current_file = false, ---@type boolean + } + }, + lazy = false, +} diff --git a/nvim/lua/dzu/plugins/lint.lua b/nvim/lua/dzu/plugins/lint.lua index 3cc2db0..f7b7d87 100644 --- a/nvim/lua/dzu/plugins/lint.lua +++ b/nvim/lua/dzu/plugins/lint.lua @@ -25,12 +25,10 @@ local function config() typescript = web_linters, typescriptreact = web_linters, json = web_linters, - -- haskell = { 'hlint' }, - -- lhaskell = { 'hlint' }, - -- cabal = { 'hlint' }, - -- dockerfile = { "hadolint" }, -- kinda broken? - gitcommit = { 'gitlint' }, - html = { 'htmlhint' }, + haskell = { 'hlint' }, + lhaskell = { 'hlint' }, + cabal = { 'hlint' }, + dockerfile = { "hadolint" }, } -- add to tool list for _, lints in pairs(names(linters_by_ft, "mason")) do @@ -43,7 +41,7 @@ local function config() -- autolint on save vim.api.nvim_create_autocmd({ "BufWritePost", "BufReadPost" }, { - pattern = { "*.js", "*.ts", "*.jsx", "*.tsx", "*.json", "*.hs", "*.html", "*COMMIT_EDITMSG" }, + pattern = { "*.js", "*.ts", "*.jsx", "*.tsx", "*.json", "*.hs", "*Dockerfile*" }, callback = function(_) lint.try_lint() end, diff --git a/nvim/lua/dzu/plugins/lsp.lua b/nvim/lua/dzu/plugins/lsp.lua index a34cbdc..fca30c1 100644 --- a/nvim/lua/dzu/plugins/lsp.lua +++ b/nvim/lua/dzu/plugins/lsp.lua @@ -1,3 +1,4 @@ +-- CRED: nvim from scratch - https://github.com/LunarVim/Neovim-from-scratch/blob/06-LSP/lua/user/lsp/handlers.lua local function config() local is_ok, _ = pcall(require, 'dzu.lsp') if not is_ok then @@ -7,13 +8,16 @@ local function config() end return { - "mason-org/mason-lspconfig.nvim", - opts = {}, + "neovim/nvim-lspconfig", dependencies = { - "mason-org/mason.nvim", - "neovim/nvim-lspconfig", - -- lsp completions - "hrsh7th/cmp-nvim-lsp", + "williamboman/mason.nvim", + "williamboman/mason-lspconfig.nvim", + { + "hrsh7th/cmp-nvim-lsp", + lazy = false, + }, -- lsp suggestions + -- "jose-elias-alvarez/null-ls.nvim", + -- "jay-babu/mason-null-ls.nvim", }, config = config, lazy = false, diff --git a/nvim/lua/dzu/plugins/mason.lua b/nvim/lua/dzu/plugins/mason.lua deleted file mode 100644 index 08a7e84..0000000 --- a/nvim/lua/dzu/plugins/mason.lua +++ /dev/null @@ -1,4 +0,0 @@ -return { - "mason-org/mason.nvim", - opts = {} -} diff --git a/nvim/lua/dzu/plugins/nvim-jdtls.lua b/nvim/lua/dzu/plugins/nvim-jdtls.lua new file mode 100644 index 0000000..eaf0c7e --- /dev/null +++ b/nvim/lua/dzu/plugins/nvim-jdtls.lua @@ -0,0 +1,13 @@ +local function config() + local is_ok, jdtls = pcall(require, "jdtls") + if not is_ok then + vim.notify "Couldn't load jdtls (java additional LSP plugin)" + return + end +end + +return { + "mfussenegger/nvim-jdtls", + config = config, + lazy = true, +} diff --git a/nvim/lua/dzu/plugins/tree-sitter.lua b/nvim/lua/dzu/plugins/tree-sitter.lua index c1e9739..7578ab5 100644 --- a/nvim/lua/dzu/plugins/tree-sitter.lua +++ b/nvim/lua/dzu/plugins/tree-sitter.lua @@ -17,9 +17,7 @@ local function config() "dockerfile", -- oh yeah. I should probably figure docker out... "fish", "gitignore", - "diff", - "git_rebase", - "gitcommit", + -- "git_commit", "haskell", "html", "javascript", @@ -41,13 +39,12 @@ local function config() "vimdoc", "xml", "nu", - "java", }, sync_install = false, - ignore_install = {}, -- List of parsers to ignore installing + ignore_install = { "" }, -- List of parsers to ignore installing highlight = { - enable = true, -- false will disable the whole extension - disable = {}, -- list of language that will be disabled + enable = true, -- false will disable the whole extension + disable = { "" }, -- list of language that will be disabled additional_vim_regex_highlighting = true, }, @@ -55,6 +52,38 @@ local function config() } configs.setup(config_opts) + -- latex parser + local is_ok, parsers = pcall(require, 'nvim-treesitter.parsers') + if not is_ok then + vim.notify("couldn't find tree sitter parsers") + return + end + local parser_configs = parsers.get_parser_configs() + parser_configs.latex = { + install_info = { + url = "https://github.com/latex-lsp/tree-sitter-latex", + files = { "src/parser.c", "src/scanner.c" }, -- note that some parsers also require src/scanner.c or src/scanner.cc + -- optional entries: + -- branch = "master", -- default branch in case of git repo if different from master + generate_requires_npm = false, -- if stand-alone parser without npm dependencies + requires_generate_from_grammar = true, -- if folder contains pre-generated src/parser.c + }, + filetype = "tex", -- if filetype does not match the parser name + } + + -- git commit parser + parser_configs.git_commit = { + install_info = { + url = "~/Repositories/random/tree-sitter-git-commit/", + files = { "src/parser.c" }, -- note that some parsers also require src/scanner.c or src/scanner.cc + -- optional entries: + -- branch = "master", -- default branch in case of git repo if different from master + generate_requires_npm = false, -- if stand-alone parser without npm dependencies + requires_generate_from_grammar = false, -- if folder contains pre-generated src/parser.c + }, + filetype = "gitcommit", -- if filetype does not match the parser name + } + vim.cmd.TSUpdate() end diff --git a/nvim/lua/dzu/plugins/url-open.lua b/nvim/lua/dzu/plugins/url-open.lua index a14261c..edbe048 100644 --- a/nvim/lua/dzu/plugins/url-open.lua +++ b/nvim/lua/dzu/plugins/url-open.lua @@ -4,7 +4,7 @@ local function config() return end url_open.setup({ - open_app = 'default', + open_app = 'librewolf', }) end