nixos-configs/homeManagerModules/neovim/langs/web/default.nix

216 lines
6.6 KiB
Nix
Raw Permalink Normal View History

self: {
config,
lib,
pkgs,
...
}: let
inherit (self.inputs) vimplugin-ts-error-translator-src;
inherit (self.lib.${pkgs.system}) buildPlugin;
inherit (lib) mkIf;
cfg = config.programs.neovim;
2024-12-22 03:12:45 -05:00
flakeEnv = config.programs.bash.sessionVariables.FLAKE;
in {
config = mkIf cfg.enable {
programs = {
neovim = {
withNodeJs = true;
extraLuaConfig =
2024-06-09 22:49:30 -04:00
# lua
''
2024-12-22 14:49:17 -05:00
local lsp = require('lspconfig');
local tsserver = require('typescript-tools');
local default_capabilities = require('cmp_nvim_lsp').default_capabilities();
2024-12-22 03:12:45 -05:00
2024-12-22 14:49:17 -05:00
local loadDevShell = function()
2024-12-22 03:12:45 -05:00
if (devShells['web'] == nil) then
devShells['web'] = 1;
2024-12-22 12:53:27 -05:00
require('nix-develop').nix_develop({'${flakeEnv}#web'}, function()
2024-12-22 12:42:29 -05:00
vim.cmd[[LspStart]];
2024-12-22 12:53:27 -05:00
end);
2024-12-22 03:12:45 -05:00
end
2024-12-22 14:49:17 -05:00
end;
vim.api.nvim_create_autocmd('FileType', {
pattern = { 'javascript', 'javascriptreact', 'javascript.jsx', 'typescript', 'typescriptreact', 'typescript.tsx', 'css', 'scss' },
callback = function()
vim.cmd[[setlocal ts=4 sw=4 sts=0 expandtab]];
loadDevShell();
2024-12-22 03:12:45 -05:00
end,
});
vim.api.nvim_create_autocmd('FileType', {
pattern = 'html',
2024-12-22 03:12:45 -05:00
callback = function()
vim.cmd[[setlocal ts=4 sw=4 expandtab]];
2024-12-22 14:49:17 -05:00
loadDevShell();
2024-12-22 03:12:45 -05:00
end,
});
vim.api.nvim_create_autocmd('FileType', {
pattern = 'scss',
command = 'setlocal iskeyword+=@-@',
});
2024-05-09 15:36:57 -04:00
tsserver.setup({
2024-10-19 01:08:24 -04:00
capabilities = default_capabilities,
2024-12-22 03:12:45 -05:00
autostart = false,
handlers = {
-- format error code with better error message
['textDocument/publishDiagnostics'] = function(err, result, ctx, config)
require('ts-error-translator').translate_diagnostics(err, result, ctx, config)
vim.lsp.diagnostic.on_publish_diagnostics(err, result, ctx, config)
end,
},
});
lsp.eslint.setup({
2024-10-19 01:08:24 -04:00
capabilities = default_capabilities,
2024-12-22 03:12:45 -05:00
autostart = false,
2024-05-09 15:36:57 -04:00
-- auto-save
on_attach = function(client, bufnr)
vim.api.nvim_create_autocmd('BufWritePre', {
buffer = bufnr,
command = 'EslintFixAll',
});
end,
settings = {
validate = 'on',
packageManager = 'npm',
useESLintClass = true,
useFlatConfig = true,
experimental = {
useFlatConfig = true,
},
codeAction = {
disableRuleComment = {
enable = true,
location = 'separateLine'
},
showDocumentation = {
enable = true,
},
},
codeActionOnSave = {
mode = 'all',
rules = {},
},
format = true,
quiet = false,
onIgnoredFiles = 'off',
rulesCustomizations = {},
run = 'onType',
problems = {
shortenToSingleLine = false,
},
nodePath = "",
workingDirectory = {
mode = 'location',
},
options = {
2024-12-16 17:44:17 -05:00
flags = { 'unstable_ts_config' },
},
},
});
lsp.cssls.setup({
2024-10-19 01:08:24 -04:00
capabilities = default_capabilities,
2024-12-22 03:12:45 -05:00
autostart = false,
2024-05-09 15:36:57 -04:00
settings = {
css = {
validate = false,
},
less = {
validate = false,
},
scss = {
validate = false,
},
},
});
2024-10-19 01:08:24 -04:00
lsp.somesass_ls.setup({
capabilities = default_capabilities,
2024-12-22 03:12:45 -05:00
autostart = false,
});
lsp.somesass_ls.manager.config.settings = {
somesass = {
scss = {
completion = {
suggestFromUseOnly = true,
},
},
},
};
2024-10-19 01:08:24 -04:00
local html_caps = default_capabilities;
html_caps.textDocument.completion.completionItem.snippetSupport = true;
lsp.html.setup({
capabilities = html_caps,
2024-12-22 03:12:45 -05:00
autostart = false,
2024-10-19 01:08:24 -04:00
settings = {
configurationSection = { "html", "css", "javascript" },
embeddedLanguages = {
css = true,
javascript = true,
},
provideFormatter = true,
tabSize = 4,
insertSpaces = true,
indentEmptyLines = false,
wrapAttributes = 'auto',
wrapAttributesIndentSize = 4,
endWithNewline = true,
},
});
'';
plugins = [
pkgs.vimPlugins.typescript-tools-nvim
2024-05-15 18:55:07 -04:00
(buildPlugin "ts-error-translator" vimplugin-ts-error-translator-src)
{
plugin = pkgs.vimPlugins.package-info-nvim;
type = "lua";
config =
# lua
''
local packageInfo = require('package-info');
2024-12-22 03:12:45 -05:00
packageInfo.setup({
hide_up_to_date = true,
package_manager = 'npm',
});
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
pattern = { 'package.json' },
2024-12-22 03:12:45 -05:00
callback = function()
packageInfo.show({ force = true });
end,
});
'';
}
];
};
};
};
# For accurate stack trace
_file = ./default.nix;
}