{lib, ...}: let inherit (lib.nvim.binds) mkKeymap; theme = "gruvbox"; in { config.vim = { viAlias = true; vimAlias = true; debugMode = { enable = false; level = 16; logFile = "/tmp/nvim.log"; }; # Keymaps for built-in functionality keymaps = [ # Diagnostics (mkKeymap "n" "cd" "vim.diagnostic.open_float" {desc = "Line Diagnostics";}) ]; spellcheck = { 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 # # otter-nvim.enable = isMaximal; # # nvim-docs-view.enable = isMaximal; }; 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; astro.enable = true; bash.enable = true; clang.enable = true; # csharp.enable = true; css.enable = true; gleam.enable = true; go.enable = true; html.enable = true; java.enable = true; kotlin.enable = true; lua.enable = true; markdown.enable = true; nix.enable = true; nu.enable = true; python.enable = true; r.enable = true; rust = { enable = true; crates.enable = true; }; sql.enable = true; svelte.enable = true; tailwind.enable = true; ts.enable = true; typst.enable = true; zig.enable = true; }; 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; inherit theme; }; }; theme = { enable = true; name = theme; style = "dark"; 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 = !isMaximal; # # blink-cmp.enable = isMaximal; }; snippets.luasnip.enable = true; filetree = { neo-tree = { enable = true; }; }; tabline = { nvimBufferline.enable = true; }; treesitter.context.enable = true; binds = { whichKey.enable = true; cheatsheet.enable = true; # hardtime-nvim.enable = isMaximal; }; telescope = { enable = true; mappings = { findFiles = ""; liveGrep = "/"; lspDefinitions = "gd"; lspReferences = "gr"; lspImplementations = "gI"; lspTypeDefinitions = "gt"; }; }; git = { enable = true; gitsigns.enable = true; gitsigns.codeActions.enable = false; # throws an annoying debug message }; minimap = { minimap-vim.enable = false; # codewindow.enable = isMaximal; # lighter, faster, and uses lua for configuration }; dashboard = { dashboard-nvim.enable = false; alpha.enable = true; }; notify = { nvim-notify.enable = true; }; projects = { # project-nvim.enable = isMaximal; }; utility = { ccc.enable = false; vim-wakatime.enable = false; diffview-nvim.enable = true; yanky-nvim.enable = false; # icon-picker.enable = isMaximal; # surround.enable = isMaximal; # leetcode-nvim.enable = isMaximal; # multicursors.enable = isMaximal; motion = { hop.enable = true; leap.enable = true; # precognition.enable = isMaximal; }; images = { image-nvim.enable = false; # img-clip.enable = isMaximal; }; }; notes = { # obsidian.enable = false; # neorg.enable = false; # orgmode.enable = false; # mind-nvim.enable = isMaximal; todo-comments.enable = true; }; terminal = { toggleterm = { enable = true; lazygit.enable = true; mappings = { open = ""; }; }; }; 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 = isMaximal; # navbuddy.enable = isMaximal; }; 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 = isMaximal; # }; # codecompanion-nvim.enable = false; # }; session = { nvim-session-manager.enable = false; }; gestures = { gesture-nvim.enable = false; }; comments = { comment-nvim.enable = true; }; presence = { neocord.enable = false; }; }; }