{ pkgs, lib, ... }: { imports = [ ./trouble.nix ]; # Autocomplete plugins.cmp = { enable = true; settings = { autoEnableSources = true; experimental = { ghost_text = true; }; performance = { debounce = 60; fetchingTimeout = 200; maxViewEntries = 30; }; formatting = { fields = [ "kind" "abbr" "menu" ]; }; sources = [ { name = "nvim_lsp"; } { name = "buffer"; # text within current buffer option.get_bufnrs.__raw = "vim.api.nvim_list_bufs"; keywordLength = 3; } { name = "path"; # file system paths keywordLength = 3; } ]; window = { completion = { border = "solid"; }; documentation = { border = "solid"; }; }; mapping = { "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; "" = "cmp.mapping.select_next_item()"; "" = "cmp.mapping.select_prev_item()"; "" = "cmp.mapping.abort()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.complete()"; "" = "cmp.mapping.confirm({ select = true })"; "" = "cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })"; }; }; }; plugins.cmp-nvim-lsp = { enable = true; # LSP }; plugins.cmp-buffer = { enable = true; }; plugins.cmp-path = { enable = true; # file system paths }; plugins.cmp_luasnip = { enable = true; # snippets }; # Language server plugins.lsp = { enable = true; servers = { ts_ls.enable = true; # TS/JS cssls.enable = true; # CSS tailwindcss.enable = true; # TailwindCSS html.enable = true; # HTML astro.enable = true; # AstroJS phpactor.enable = true; # PHP svelte.enable = false; # Svelte vuels.enable = false; # Vue pyright.enable = true; # Python marksman.enable = true; # Markdown nil_ls.enable = true; # Nix dockerls.enable = true; # Docker bashls.enable = true; # Bash clangd.enable = true; # C/C++ csharp_ls.enable = true; # C# yamlls.enable = true; # YAML lua_ls = { enable = true; settings.telemetry.enable = false; }; #Rust rust-analyzer = { enable = true; # Flip these in case rust is installed systemvise installRustc = false; installCargo = false; settings.completion.callable.snippets = "add_parentheses"; }; }; }; plugins.none-ls = { enable = true; sources = { code_actions = { statix.enable = true; gitsigns.enable = true; }; diagnostics = { statix.enable = true; deadnix.enable = true; pylint.enable = true; checkstyle.enable = true; }; formatting = { alejandra.enable = true; stylua.enable = true; shfmt.enable = true; nixpkgs_fmt.enable = true; google_java_format.enable = false; prettier = { enable = true; disableTsServerFormatter = true; }; }; completion = { luasnip.enable = true; spell.enable = true; }; }; }; plugins.nix.enable = true; # Auto formatter plugins.conform-nvim = { enable = true; settings = { format_on_save = { lspFallback = true; timeoutMs = 500; }; formatters_by_ft = { # Use the "_" filetype to run formatters on filetypes that don't have other formatters configured. "_" = [ "squeeze_blanks" "trim_whitespace" "trim_newlines" ]; }; }; }; # Auto-tagging plugins.ts-autotag = { enable = true; }; # Needed for autotagging plugins.treesitter = { enable = true; }; }