diff --git a/homes/modules/programs/neovim/lua/lsp/lsp.lua b/homes/modules/programs/neovim/lua/lsp/lsp.lua index d115a00..230033a 100644 --- a/homes/modules/programs/neovim/lua/lsp/lsp.lua +++ b/homes/modules/programs/neovim/lua/lsp/lsp.lua @@ -1,92 +1,110 @@ local servers = {} -servers.lua_ls = { - settings = { - Lua = { - formatters = { - ignoreComments = false, +if nixCats("lang.lua.lsp") then + servers.lua_ls = { + settings = { + Lua = { + formatters = { + ignoreComments = false, + }, + signatureHelp = { enable = true }, + diagnostics = { + globals = { "nixCats", "vim" }, + -- disable = { 'missing-fields' }, + }, + workspace = { + -- make the server aware of the neovim runtime files + library = vim.api.nvim_get_runtime_file("", true), + checkThirdParty = false, + }, + }, + telemetry = { enabled = false }, + }, + } +end + +if nixCats("lang.nix.lsp") then + servers.nil_ls = { + settings = {}, + } +end + +if nixCats("lang.rust.lsp") then + local rust_analyzer_cmd = os.getenv("RUST_ANALYZER_CMD") + servers.rust_analyzer = { + cmd = { rust_analyzer_cmd }, + settings = { + server = { + -- For debugging rust-analyzer, to see log location do :LspInfo in neovim + -- extraEnv = { {["RA_LOG"]="project_model=debug"} }, + }, + cargo = { + allFeatures = false, + allTargets = false, + buildScripts = { enable = true }, + target = "x86_64-unknown-linux-gnu", }, - signatureHelp = { enable = true }, diagnostics = { - globals = { "nixCats", "vim" }, - -- disable = { 'missing-fields' }, - }, - workspace = { - -- make the server aware of the neovim runtime files - library = vim.api.nvim_get_runtime_file("", true), - checkThirdParty = false, + enable = true, }, }, - telemetry = { enabled = false }, - }, -} + } +end -servers.nil_ls = { - settings = {}, -} +if nixCats("lang.zig.lsp") then + servers.zls = { + settings = {}, + } +end -local rust_analyzer_cmd = os.getenv("RUST_ANALYZER_CMD") -servers.rust_analyzer = { - cmd = { rust_analyzer_cmd }, - settings = { - server = { - -- For debugging rust-analyzer, to see log location do :LspInfo in neovim - -- extraEnv = { {["RA_LOG"]="project_model=debug"} }, - }, - cargo = { - allFeatures = false, - allTargets = false, - buildScripts = { enable = true }, - target = "x86_64-unknown-linux-gnu", - }, - diagnostics = { - enable = true, - }, - }, -} +if nixCats("lang.elixir.lsp") then + local elixir_ls_cmd = os.getenv("ELIXIR_LS_CMD") + servers.elixirls = { + cmd = { elixir_ls_cmd }, + settings = {}, + } +end -servers.zls = { - settings = {}, -} +if nixCats("lang.gleam.lsp") then + servers.gleam = { + settings = {}, + } +end -local elixir_ls_cmd = os.getenv("ELIXIR_LS_CMD") -servers.elixirls = { - cmd = { elixir_ls_cmd }, - settings = {}, -} +if nixCats("lang.haskell.lsp") then + servers.hls = { + settings = {}, + } +end -servers.gleam = { - settings = {}, -} - -servers.hls = { - settings = {}, -} - -local java_home = os.getenv("JAVA_HOME") -servers.jdtls = { - settings = { - java = { - contentProvider = { preferred = "fernflower" }, - configuration = { - runtimes = { - { - name = "OpenJDK 17", - path = os.getenv("OPENJDK_17"), - }, - { - name = "OpenJDK 21", - path = os.getenv("OPENJDK_21"), +if nixCats("lang.java.lsp") then + local java_home = os.getenv("JAVA_HOME") + servers.jdtls = { + settings = { + java = { + contentProvider = { preferred = "fernflower" }, + configuration = { + runtimes = { + { + name = "OpenJDK 17", + path = os.getenv("OPENJDK_17"), + }, + { + name = "OpenJDK 21", + path = os.getenv("OPENJDK_21"), + }, }, }, }, }, - }, -} + } +end -servers.protols = { - settings = {}, -} +if nixCats("lang.protobuf.lsp") then + servers.protols = { + settings = {}, + } +end -- Taken from nixCats example: -- If you were to comment out this autocommand diff --git a/homes/modules/programs/neovim/lua/plugins/format.lua b/homes/modules/programs/neovim/lua/plugins/format.lua index 5ca4e27..c3f85e2 100644 --- a/homes/modules/programs/neovim/lua/plugins/format.lua +++ b/homes/modules/programs/neovim/lua/plugins/format.lua @@ -56,11 +56,12 @@ return { conform.setup({ formatters_by_ft = { - lua = nixCats("lang.lua") and { "stylua" } or nil, - nix = nixCats("lang.nix") and { "alejandra" } or nil, - rust = nixCats("lang.rust") and { "rustfmt", lsp_format = "fallback" } or nil, - haskell = nixCats("lang.haskell") and { "ormolu" } or nil, - proto = nixCats("lang.protobuf") and { "buf" } or nil, + lua = nixCats("lang.lua.format") and { "stylua" } or nil, + nix = nixCats("lang.nix.format") and { "alejandra" } or nil, + rust = nixCats("lang.rust.format") and { "rustfmt", lsp_format = "fallback" } or nil, + haskell = nixCats("lang.haskell.format") and { "ormolu" } or nil, + proto = nixCats("lang.protobuf.format") and { "buf" } or nil, + toml = nixCats("lang.toml.format") and { "taplo" } or nil, }, format_on_save = { timeout_ms = 500, diff --git a/homes/modules/programs/neovim/lua/plugins/git.lua b/homes/modules/programs/neovim/lua/plugins/git.lua index 61d413d..c2250cc 100644 --- a/homes/modules/programs/neovim/lua/plugins/git.lua +++ b/homes/modules/programs/neovim/lua/plugins/git.lua @@ -1,12 +1,12 @@ return { { "vim-fugitive", - for_cat = "git", + enabled = nixCats("git") or false, cmd = { "Git", "Gvdiffsplit" }, }, { "resolve-nvim", - for_cat = "git", + enabled = nixCats("git") or false, event = { "BufReadPre", "BufNewFile" }, after = function(plugin) require("resolve").setup({ diff --git a/homes/modules/programs/neovim/nixcats.nix b/homes/modules/programs/neovim/nixcats.nix index 91d3763..564b652 100644 --- a/homes/modules/programs/neovim/nixcats.nix +++ b/homes/modules/programs/neovim/nixcats.nix @@ -55,43 +55,51 @@ in { tree-sitter ]; lang = { - lua = [ - lua-language-server - stylua - ]; - nix = [ - nil - nix-doc # TODO: i forgot what this is for - alejandra - ]; - rust = [ - cargo - mpkgs.rust-analyzer + lua = { + lsp = [lua-language-server]; + format = [stylua]; + }; + nix = { + lsp = [nil]; + format = [alejandra]; + docs = [nix-doc]; # TODO: i forgot how to integrate this into neovim + }; + rust = { + lsp = [cargo mpkgs.rust-analyzer]; # nightly rustfmt has nicer features :3 - inputs.fenix.packages.${system}.complete.rustfmt - ]; - zig = [ - zls - ]; - elixir = [ - elixir-ls - ]; - gleam = [ - gleam - ]; - haskell = [ - haskell-language-server - ormolu - ]; - java = [ - jdt-language-server - javaPackages.compiler.openjdk17 - javaPackages.compiler.openjdk21 - ]; - protobuf = [ - protols - buf - ]; + format = [inputs.fenix.packages.${system}.complete.rustfmt]; + }; + zig = { + lsp = [zls]; + # TODO: needs formatter field + }; + elixir = { + lsp = [elixir-ls]; + # TODO: needs formatter field + }; + gleam = { + lsp = [gleam]; + # TODO: needs formatter field + }; + haskell = { + lsp = [haskell-language-server]; + format = [ormolu]; + }; + java = { + lsp = [ + jdt-language-server + javaPackages.compiler.openjdk17 + javaPackages.compiler.openjdk21 + ]; + # TODO: needs formatter field + }; + protobuf = { + lsp = [protols]; + format = [buf]; + }; + toml = { + format = [taplo]; + }; }; }; @@ -239,15 +247,47 @@ in { git = false; # not really setup yet lang = { - lua = true; - nix = true; - rust = true; - zig = true; - elixir = true; - gleam = true; - haskell = true; - java = true; - protobuf = true; + lua = { + lsp = true; + format = true; + }; + nix = { + lsp = true; + format = true; + docs = true; + }; + rust = { + lsp = true; + format = true; + }; + zig = { + lsp = true; + format = true; + }; + elixir = { + lsp = true; + format = true; + }; + gleam = { + lsp = true; + format = true; + }; + haskell = { + lsp = true; + format = true; + }; + java = { + lsp = true; + format = true; + }; + protobuf = { + lsp = true; + format = true; + }; + toml = { + lsp = true; + format = true; + }; }; }; };