{ pkgs, ... }: { programs.neovim-flake = { enable = true; settings = { vim = { package = pkgs.neovim-nightly; viAlias = true; vimAlias = true; enableEditorconfig = true; preventJunkFiles = true; enableLuaLoader = true; scrollOffset = 7; maps = { normal = { "gD" = { action = "vim.lsp.buf.declaration"; lua = true; }; "gd" = { action = "vim.lsp.buf.definition"; lua = true; }; "gi" = { action = "vim.lsp.buf.implementation"; lua = true; }; "gr" = { action = "vim.lsp.buf.references"; lua = true; }; "K" = { action = "vim.lsp.buf.hover"; lua = true; }; "" = { action = "vim.lsp.buf.signature_help"; lua = true; }; "wa" = { action = "vim.lsp.buf.add_workspace_folder"; lua = true; }; "wr" = { action = "vim.lsp.buf.remove_workspace_folder"; lua = true; }; "wl" = { action = '' function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end ''; lua = true; }; "D" = { action = "vim.lsp.buf.type_definition"; lua = true; }; "r" = { action = "vim.lsp.buf.rename"; lua = true; }; "a" = { action = "vim.lsp.buf.code_action"; lua = true; }; "e" = { action = "vim.diagnostic.open_float"; lua = true; }; "q" = { action = "vim.diagnostic.setloclist"; lua = true; }; "[d" = { action = "vim.diagnostic.goto_prev"; lua = true; }; "]d" = { action = "vim.diagnostic.goto_next"; lua = true; }; "" = { action = '' function() vim.lsp.buf.format { async = true } end ''; lua = true; }; }; }; treesitter = { enable = true; fold = true; grammars = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [ lua rust markdown markdown-inline python ]; }; # extraPlugins = with pkgs.vimPlugins; [ # # ]; lsp = { formatOnSave = false; }; languages = { enableLSP = true; enableFormat = true; enableTreesitter = true; enableExtraDiagnostics = true; nix.enable = true; html.enable = true; ts.enable = true; rust = { enable = true; crates.enable = true; }; clang = { enable = true; lsp = { enable = true; server = "clangd"; }; }; }; autocomplete = { enable = true; }; telescope.enable = true; git = { enable = true; gitsigns = { enable = true; codeActions = true; }; }; #filetree.chadtree = { # enable = true; #}; filetree.nvimTree = { enable = true; mappings = { toggle = "v"; }; disableNetrw = true; openOnSetup = false; }; terminal.toggleterm = { enable = true; direction = "float"; mappings.open = ""; }; theme = { enable = true; name = "catppuccin"; style = "mocha"; transparent = true; }; }; }; }; }