From 08e6294366ed9a42b5b08e4d38f60567b91d858c Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 30 Aug 2025 12:33:55 -0400 Subject: tmux and neovim config --- neovim.nix | 269 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 neovim.nix (limited to 'neovim.nix') diff --git a/neovim.nix b/neovim.nix new file mode 100644 index 0000000..a6562d9 --- /dev/null +++ b/neovim.nix @@ -0,0 +1,269 @@ +{inputs, pkgs, ...}: { + config.vim = { + viAlias = true; + vimAlias = true; + debugMode = { + enable = false; + level = 16; + logFile = "/tmp/nvim.log"; + }; + + spellcheck = { + enable = true; + programmingWordlist.enable = true; + }; + + lsp = { + # This must be enabled for the language modules to hook into + # the LSP API. + enable = true; + + formatOnSave = true; + lspkind.enable = false; + lightbulb.enable = true; + lspsaga.enable = false; + trouble.enable = true; + lspSignature.enable = !true; # conflicts with blink in maximal + otter-nvim.enable = true; + nvim-docs-view.enable = true; + }; + + debugger = { + nvim-dap = { + enable = true; + ui.enable = true; + }; + }; + + # This section does not include a comprehensive list of available language modules. + # To list all available language module options, please visit the nvf manual. + languages = { + enableFormat = true; + enableTreesitter = true; + enableExtraDiagnostics = true; + + # Languages that will be supported in default and maximal configurations. + nix.enable = true; + markdown.enable = true; + + # Languages that are enabled in the maximal configuration. + bash.enable = true; + clang.enable = true; + css.enable = true; + html.enable = true; + sql.enable = true; + java.enable = true; + kotlin.enable = true; + ts.enable = true; + go.enable = true; + lua.enable = true; + zig.enable = true; + python.enable = true; + typst.enable = true; + rust = { + enable = true; + crates.enable = true; + }; + + # Language modules that are not as common. + assembly.enable = false; + astro.enable = false; + nu.enable = false; + csharp.enable = false; + julia.enable = false; + vala.enable = false; + scala.enable = false; + r.enable = false; + gleam.enable = false; + dart.enable = false; + ocaml.enable = false; + elixir.enable = false; + haskell.enable = false; + ruby.enable = false; + fsharp.enable = false; + + tailwind.enable = false; + svelte.enable = false; + + # Nim LSP is broken on Darwin and therefore + # should be disabled by default. Users may still enable + # `vim.languages.vim` to enable it, this does not restrict + # that. + # See: + nim.enable = false; + }; + + visuals = { + nvim-scrollbar.enable = true; + nvim-web-devicons.enable = true; + nvim-cursorline.enable = true; + cinnamon-nvim.enable = true; + fidget-nvim.enable = true; + + highlight-undo.enable = true; + indent-blankline.enable = true; + + # Fun + cellular-automaton.enable = false; + }; + + statusline = { + lualine = { + enable = true; + theme = "catppuccin"; + }; + }; + + theme = { + enable = true; + name = "catppuccin"; + style = "mocha"; + transparent = false; + }; + + autopairs.nvim-autopairs.enable = true; + + # nvf provides various autocomplete options. The tried and tested nvim-cmp + # is enabled in default package, because it does not trigger a build. We + # enable blink-cmp in maximal because it needs to build its rust fuzzy + # matcher library. + autocomplete = { + nvim-cmp.enable = !true; + blink-cmp.enable = true; + }; + + snippets.luasnip.enable = true; + + filetree = { + neo-tree = { + enable = true; + }; + }; + + tabline = { + nvimBufferline.enable = true; + }; + + treesitter.context.enable = true; + + 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 + neogit.enable = true; + }; + + minimap = { + minimap-vim.enable = false; + codewindow.enable = true; # lighter, faster, and uses lua for configuration + }; + + dashboard = { + dashboard-nvim.enable = false; + alpha.enable = true; + }; + + notify = { + nvim-notify.enable = true; + }; + + projects = { + project-nvim.enable = true; + }; + + utility = { + ccc.enable = false; + vim-wakatime.enable = false; + diffview-nvim.enable = true; + yanky-nvim.enable = false; + icon-picker.enable = true; + surround.enable = true; + leetcode-nvim.enable = true; + multicursors.enable = true; + smart-splits.enable = true; + undotree.enable = true; + nvim-biscuits.enable = true; + + motion = { + hop.enable = true; + leap.enable = true; + precognition.enable = true; + }; + images = { + image-nvim.enable = false; + img-clip.enable = true; + }; + }; + + notes = { + obsidian.enable = false; # FIXME: neovim fails to build if obsidian is enabled + neorg.enable = false; + orgmode.enable = false; + mind-nvim.enable = true; + todo-comments.enable = true; + }; + + terminal = { + toggleterm = { + enable = true; + lazygit.enable = true; + }; + }; + + ui = { + borders.enable = true; + noice.enable = true; + colorizer.enable = true; + modes-nvim.enable = false; # the theme looks terrible with catppuccin + illuminate.enable = true; + breadcrumbs = { + enable = true; + navbuddy.enable = true; + }; + smartcolumn = { + enable = true; + setupOpts.custom_colorcolumn = { + # this is a freeform module, it's `buftype = int;` for configuring column position + nix = "110"; + ruby = "120"; + java = "130"; + go = ["90" "130"]; + }; + }; + fastaction.enable = true; + }; + + assistant = { + chatgpt.enable = false; + copilot = { + enable = false; + cmp.enable = true; + }; + codecompanion-nvim.enable = false; + avante-nvim.enable = true; + }; + + session = { + nvim-session-manager.enable = false; + }; + + gestures = { + gesture-nvim.enable = false; + }; + + comments = { + comment-nvim.enable = true; + }; + + presence = { + neocord.enable = false; + }; + }; +} -- cgit v1.3.1