added toml formatter, split each language into lsp and format

This commit is contained in:
foxora 2026-03-05 05:50:50 +00:00
parent 56d2fe2922
commit 67c8d10658
4 changed files with 184 additions and 125 deletions

View file

@ -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

View file

@ -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,

View file

@ -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({

View file

@ -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;
};
};
};
};