From b4c2ab126c5ef38b16053326e2887298c45e74dd Mon Sep 17 00:00:00 2001 From: "Wyatt J. Miller" Date: Sun, 17 Aug 2025 23:51:55 -0400 Subject: [PATCH] added nvf, added several nvim plugins now i have to find all my keymaps :P --- home/neovim.nix | 366 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 350 insertions(+), 16 deletions(-) diff --git a/home/neovim.nix b/home/neovim.nix index 0177dae..4d7701b 100644 --- a/home/neovim.nix +++ b/home/neovim.nix @@ -1,22 +1,356 @@ -{ nvf, ...}: { +{ + nvf, + pkgs, + ... +}: { imports = [ nvf.homeManagerModules.default ]; - programs.nvf.enable = true; + programs.nvf = { + # enable nvf neovim distribution + enable = true; - ### --- OLD NEOVIM CONFIG BASED ON LUA CONFIG --- - # - # programs.neovim = { - # enable = true; - # defaultEditor = true; - # vimAlias = true; - # }; - # - # xdg.configFile = { - # nvim = { - # onChange = "nvim --headless -c 'if exists(\":LuaCacheClear\") | :LuaCacheClear' +quitall"; - # source = dirs.defaults + /nvim; - # }; - # }; + # set stuff! + settings = { + vim = { + # setting alias to _always_ use neovim + viAlias = true; + vimAlias = true; + + # useSystemClipboard = true; + + # setting some nvim settings that are not in nvf + luaConfigPost = '' + vim.opt.tabstop = 2 + vim.opt.shiftwidth = 2 + vim.opt.expandtab = true + vim.opt.autoindent = true + vim.opt.smartindent = true + vim.opt.smarttab = true + vim.opt.scrolloff = 20; + ''; + + # clipboard configuration + clipboard = { + enable = true; + providers = { + wl-copy.enable = true; + }; + registers = "unnamed,unnamedplus"; + }; + + # LSP configuration + lsp = { + enable = true; + formatOnSave = true; + lspkind.enable = true; + lspconfig.enable = true; + lightbulb.enable = false; + lspsaga.enable = false; + trouble.enable = false; + lspSignature.enable = true; + otter-nvim.enable = false; + nvim-docs-view.enable = false; + }; + + # debugger configuration + debugger = { + nvim-dap = { + enable = true; + ui.enable = true; + }; + }; + + # disable spellcheck + spellcheck.enable = false; + + # enable diagnostics + diagnostics = { + enable = true; + config = { + underline = true; + virtual_lines = true; + }; + }; + + # language specific configuartion + languages = { + enableFormat = true; + enableTreesitter = true; + enableExtraDiagnostics = true; + + nix = { + enable = true; + lsp.enable = true; + treesitter.enable = true; + format = { + enable = true; + package = pkgs.alejandra; + }; + extraDiagnostics = { + enable = true; + types = ["statix"]; + }; + }; + markdown.enable = true; + bash.enable = true; + clang.enable = true; + css = { + enable = true; + format = { + enable = true; + package = pkgs.prettierd; + }; + }; + html.enable = true; + sql.enable = true; + java.enable = true; + kotlin = { + enable = true; + lsp.enable = true; + treesitter.enable = true; + extraDiagnostics.enable = true; + }; + ts = { + enable = true; + format = { + enable = true; + package = pkgs.prettierd; + }; + }; + lua.enable = false; + python.enable = true; + rust = { + enable = true; + lsp.enable = true; + dap.enable = true; + format.enable = true; + crates.enable = true; + }; + csharp = { + enable = true; + lsp = { + enable = true; + server = "csharp_ls"; + }; + treesitter.enable = true; + }; + }; + + # statusline configuration + statusline = { + lualine = { + enable = true; + theme = "catppuccin"; + }; + }; + + # theme configuration + theme = { + enable = true; + name = "catppuccin"; + style = "mocha"; + transparent = true; + }; + + # visual/ui configuration + visuals = { + nvim-scrollbar.enable = false; + nvim-web-devicons.enable = true; + nvim-cursorline.enable = true; + cinnamon-nvim.enable = true; + fidget-nvim.enable = false; + + highlight-undo.enable = true; + indent-blankline.enable = true; + }; + + ui = { + borders.enable = true; + noice.enable = false; + colorizer.enable = true; + modes-nvim.enable = false; # the theme looks terrible with catppuccin + illuminate.enable = true; + breadcrumbs = { + enable = true; + navbuddy.enable = false; + }; + fastaction.enable = true; + }; + + # autocomplete/intellisense configuration + autopairs.nvim-autopairs.enable = true; + autocomplete.nvim-cmp = { + enable = true; + sources = { + nvim-lsp = "nvim_lsp"; + async-path = "async_path"; + }; + }; + + # tabline configuration + tabline = { + nvimBufferline.enable = true; + nvimBufferline.mappings = { + closeCurrent = "x"; + cycleNext = ""; + cyclePrevious = ""; + moveNext = null; + movePrevious = null; + sortByDirectory = null; + sortByExtension = null; + sortById = null; + }; + }; + + treesitter = { + context = { + enable = true; + setupOpts.max_lines = 3; + }; + }; + + binds = { + whichKey.enable = true; + cheatsheet.enable = true; + }; + + telescope.enable = true; + + git = { + enable = true; + gitsigns.enable = true; + gitsigns.codeActions.enable = false; # throws an annoying debug message + git-conflict.enable = true; + }; + + comments = { + comment-nvim.enable = true; + }; + + # discord integration + presence = { + neocord.enable = true; + }; + + notify = { + nvim-notify.enable = true; + }; + + dashboard = { + dashboard-nvim.enable = false; + alpha.enable = true; + }; + + filetree = { + neo-tree = { + enable = true; + setupOpts.enable_refresh_on_write = true; + }; + }; + + # terminal integration configuration + terminal = { + toggleterm = { + enable = true; + lazygit.enable = true; + }; + }; + + # notes! + notes = { + obsidian = { + enable = true; # more to be added here + setupOpts = { + workspaces = [ + { + name = "notes"; + path = "~/Source/notes"; + } + ]; + }; + }; + todo-comments.enable = true; + }; + + # ai assistant configuration + assistant = { + copilot = { + enable = true; + cmp.enable = true; + }; + }; + + # custom key mappings + keymaps = [ + # Ctrl-S save + { + mode = ["n" "v" "i"]; + key = ""; + action = "w"; + } + + # toggle file explorer + { + mode = ["n"]; + key = ""; + action = "Neotree toggle left"; + } + + # copy/cut/paste to system clipboard + # { + # mode = ["v"]; + # key = ""; + # action = '' + # "+y + # ''; + # noremap = true; + # } + # { + # mode = ["n"]; + # key = ""; + # action = '' + # l"+P + # ''; + # noremap = true; + # } + # { + # mode = ["v"]; + # key = ""; + # action = '' + # "+P + # ''; + # noremap = true; + # } + # { + # mode = ["c"]; + # key = ""; + # action = '' + # l"+P + # ''; + # noremap = true; + # } + # { + # mode = ["i"]; + # key = ""; + # action = '' + # l"+Pli + # ''; + # noremap = true; + # } + # { + # mode = ["t"]; + # key = ""; + # action = '' + # "+Pi + # ''; + # noremap = true; + # } + ]; + + ### end of settings + }; + }; + }; }