2023-10-08 15:14:50 +00:00
|
|
|
{ pkgs, lib, config, dsl, ... }: {
|
|
|
|
|
|
|
|
# Terraform optional because non-free
|
2023-11-06 01:40:18 +00:00
|
|
|
options.terraform = lib.mkEnableOption "Whether to enable Terraform LSP";
|
|
|
|
options.github = lib.mkEnableOption "Whether to enable GitHub features";
|
|
|
|
options.kubernetes =
|
|
|
|
lib.mkEnableOption "Whether to enable Kubernetes features";
|
2023-10-08 15:14:50 +00:00
|
|
|
|
2024-02-11 02:04:37 +00:00
|
|
|
config = {
|
|
|
|
plugins = [
|
|
|
|
pkgs.vimPlugins.nvim-lspconfig
|
|
|
|
pkgs.vimPlugins.conform-nvim
|
|
|
|
pkgs.vimPlugins.fidget-nvim
|
|
|
|
pkgs.vimPlugins.nvim-lint
|
|
|
|
];
|
|
|
|
|
|
|
|
setup.fidget = { };
|
|
|
|
|
|
|
|
use.lspconfig.lua_ls.setup = dsl.callWith {
|
|
|
|
settings = { Lua = { diagnostics = { globals = [ "vim" "hs" ]; }; }; };
|
|
|
|
capabilities =
|
|
|
|
dsl.rawLua "require('cmp_nvim_lsp').default_capabilities()";
|
|
|
|
cmd = [ "${pkgs.lua-language-server}/bin/lua-language-server" ];
|
|
|
|
};
|
2023-10-08 15:14:50 +00:00
|
|
|
|
2024-02-11 02:04:37 +00:00
|
|
|
use.lspconfig.nil_ls.setup = dsl.callWith {
|
|
|
|
cmd = [ "${pkgs.nil}/bin/nil" ];
|
|
|
|
capabilities =
|
|
|
|
dsl.rawLua "require('cmp_nvim_lsp').default_capabilities()";
|
|
|
|
};
|
2023-10-08 15:14:50 +00:00
|
|
|
|
2024-02-11 02:04:37 +00:00
|
|
|
use.lspconfig.pyright.setup = dsl.callWith {
|
|
|
|
cmd = [ "${pkgs.pyright}/bin/pyright-langserver" "--stdio" ];
|
|
|
|
};
|
|
|
|
|
|
|
|
use.lspconfig.terraformls.setup = dsl.callWith {
|
|
|
|
cmd = if config.terraform then [
|
|
|
|
"${pkgs.terraform-ls}/bin/terraform-ls"
|
|
|
|
"serve"
|
|
|
|
] else
|
|
|
|
[ "echo" ];
|
|
|
|
};
|
2023-10-08 15:14:50 +00:00
|
|
|
|
2024-02-11 02:04:37 +00:00
|
|
|
use.lspconfig.rust_analyzer.setup = dsl.callWith {
|
|
|
|
cmd = [ "${pkgs.rust-analyzer}/bin/rust-analyzer" ];
|
|
|
|
settings = {
|
2024-02-11 21:20:23 +00:00
|
|
|
"['rust-analyzer']" = {
|
|
|
|
check = { command = "clippy"; };
|
|
|
|
files = { excludeDirs = [ ".direnv" ]; };
|
|
|
|
};
|
2023-10-08 15:14:50 +00:00
|
|
|
};
|
2024-02-11 02:04:37 +00:00
|
|
|
};
|
2023-10-08 15:14:50 +00:00
|
|
|
|
2024-02-11 02:04:37 +00:00
|
|
|
setup.conform = {
|
|
|
|
format_on_save = {
|
|
|
|
# These options will be passed to conform.format()
|
|
|
|
timeout_ms = 500;
|
|
|
|
lsp_fallback = true;
|
|
|
|
};
|
|
|
|
formatters_by_ft = {
|
|
|
|
lua = [ "stylua" ];
|
|
|
|
python = [ "black" ];
|
|
|
|
fish = [ "fish_indent" ];
|
|
|
|
nix = [ "nixfmt" ];
|
|
|
|
rust = [ "rustfmt" ];
|
|
|
|
sh = [ "shfmt" ];
|
|
|
|
terraform = if config.terraform then [ "terraform_fmt" ] else [ ];
|
|
|
|
hcl = if config.terraform then [ "terraform_fmt" ] else [ ];
|
|
|
|
};
|
|
|
|
formatters = {
|
|
|
|
lua.command = "${pkgs.stylua}/bin/stylua";
|
|
|
|
black.command = "${pkgs.black}/bin/black";
|
|
|
|
fish_indent.command = "${pkgs.fish}/bin/fish_indent";
|
|
|
|
nixfmt.command = "${pkgs.nixfmt}/bin/nixfmt";
|
|
|
|
rustfmt = {
|
|
|
|
command = "${pkgs.rustfmt}/bin/rustfmt";
|
|
|
|
prepend_args = [ "--edition" "2021" ];
|
|
|
|
};
|
|
|
|
shfmt = {
|
|
|
|
command = "${pkgs.shfmt}/bin/shfmt";
|
|
|
|
prepend_args = [ "-i" "4" "-ci" ];
|
2023-11-05 13:12:07 +00:00
|
|
|
};
|
2024-02-11 02:04:37 +00:00
|
|
|
terraform_fmt.command =
|
|
|
|
if config.terraform then "${pkgs.terraform}/bin/terraform" else "";
|
2023-11-05 13:12:07 +00:00
|
|
|
};
|
2024-02-11 02:04:37 +00:00
|
|
|
};
|
2023-11-04 17:49:23 +00:00
|
|
|
|
2024-02-11 02:04:37 +00:00
|
|
|
use.lint = {
|
|
|
|
linters_by_ft = dsl.toTable {
|
|
|
|
python = [ "ruff" ];
|
|
|
|
sh = [ "shellcheck" ];
|
|
|
|
};
|
2023-10-08 15:14:50 +00:00
|
|
|
};
|
2022-11-28 02:11:41 +00:00
|
|
|
|
2024-02-11 02:04:37 +00:00
|
|
|
vim.api.nvim_create_autocmd = dsl.callWith [
|
|
|
|
(dsl.toTable [ "BufEnter" "BufWritePost" ])
|
|
|
|
(dsl.rawLua "{ callback = function() require('lint').try_lint() end }")
|
|
|
|
];
|
|
|
|
|
|
|
|
lua = ''
|
|
|
|
${builtins.readFile ./lsp.lua}
|
|
|
|
|
|
|
|
local ruff = require('lint').linters.ruff; ruff.cmd = "${pkgs.ruff}/bin/ruff"
|
|
|
|
local shellcheck = require('lint').linters.shellcheck; shellcheck.cmd = "${pkgs.shellcheck}/bin/shellcheck"
|
|
|
|
|
|
|
|
-- Prevent infinite log size (change this when debugging)
|
|
|
|
vim.lsp.set_log_level("off")
|
|
|
|
'';
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2022-11-28 02:11:41 +00:00
|
|
|
}
|