{ inputs , config , ... }: { imports = [ inputs.nvf.homeManagerModules.default ]; programs.nvf = { enable = true; settings.vim = { lsp.enable = true; vimAlias = true; viAlias = true; withNodeJs = true; lineNumberMode = "relNumber"; enableLuaLoader = true; preventJunkFiles = true; options = { tabstop = 4; shiftwidth = 2; wrap = false; }; clipboard = { enable = true; registers = "unnamedplus"; providers = { wl-copy.enable = true; xsel.enable = true; }; }; maps = { normal = { "e" = { action = "Neotree toggle"; silent = false; }; }; }; diagnostics = { enable = true; config = { virtual_lines.enable = true; underline = true; }; }; keymaps = [ { key = "jk"; mode = [ "i" ]; action = ""; desc = "Exit insert mode"; } { key = "nh"; mode = [ "n" ]; action = ":nohl"; desc = "Clear search highlights"; } { key = "ff"; mode = [ "n" ]; action = "Telescope find_files"; desc = "Search files by name"; } { key = "lg"; mode = [ "n" ]; action = "Telescope live_grep"; desc = "Search files by contents"; } { key = "fe"; mode = [ "n" ]; action = "Neotree toggle"; desc = "File browser toggle"; } { key = ""; mode = [ "i" ]; action = ""; desc = "Move left in insert mode"; } { key = ""; mode = [ "i" ]; action = ""; desc = "Move down in insert mode"; } { key = ""; mode = [ "i" ]; action = ""; desc = "Move up in insert mode"; } { key = ""; mode = [ "i" ]; action = ""; desc = "Move right in insert mode"; } ]; telescope.enable = true; spellcheck = { enable = true; languages = [ "en" ]; programmingWordlist.enable = true; }; lsp = { formatOnSave = true; lspkind.enable = false; lightbulb.enable = false; lspsaga.enable = false; trouble.enable = true; lspSignature.enable = true; otter-nvim.enable = false; nvim-docs-view.enable = false; }; languages = { enableFormat = true; enableTreesitter = true; enableExtraDiagnostics = true; nix.enable = true; clang.enable = true; zig.enable = true; python.enable = true; markdown.enable = true; ts = { enable = true; lsp.enable = true; format.type = "prettierd"; extensions.ts-error-translator.enable = true; }; html.enable = true; lua.enable = true; css = { enable = true; format.type = "prettierd"; }; typst.enable = true; rust = { enable = true; crates.enable = true; }; }; visuals = { 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; rainbow-delimiters.enable = true; }; statusline.lualine = { enable = true; theme = "base16"; }; autopairs.nvim-autopairs.enable = true; autocomplete.nvim-cmp.enable = true; snippets.luasnip.enable = true; tabline.nvimBufferline.enable = true; treesitter.context.enable = false; binds = { whichKey.enable = true; cheatsheet.enable = true; }; git = { enable = true; gitsigns.enable = true; gitsigns.codeActions.enable = false; }; projects.project-nvim.enable = true; dashboard.dashboard-nvim.enable = true; filetree.neo-tree.enable = true; notify = { nvim-notify.enable = true; nvim-notify.setupOpts.background_colour = "#${config.lib.stylix.colors.base01}"; }; utility = { preview.markdownPreview.enable = true; ccc.enable = false; vim-wakatime.enable = false; icon-picker.enable = true; surround.enable = true; diffview-nvim.enable = true; motion = { hop.enable = true; leap.enable = true; precognition.enable = false; }; images = { image-nvim.enable = false; }; }; ui = { borders.enable = true; noice.enable = true; colorizer.enable = true; illuminate.enable = true; breadcrumbs = { enable = false; navbuddy.enable = false; }; smartcolumn = { enable = true; }; fastaction.enable = true; }; session = { nvim-session-manager.enable = false; }; comments = { comment-nvim.enable = true; }; luaConfigPost = '' -- Nix LSP (nil) configuration for auto-eval-inputs local lspconfig = require('lspconfig') lspconfig.nil_ls.setup({ settings = { ['nil'] = { nix = { auto_eval_inputs = true, }, }, }, }) -- Auto-update programming wordlist on first startup vim.api.nvim_create_autocmd("VimEnter", { callback = function() -- Check if dirtytalk dict file exists local dict_path = vim.fn.stdpath('data') .. '/site/spell/programming.utf-8.add' if vim.fn.filereadable(dict_path) == 0 then -- Only run if file doesn't exist to avoid repeated downloads vim.schedule(function() vim.cmd('DirtytalkUpdate') end) end end, }) ''; }; }; home.activation = { dirtytalkUpdate = '' # Create the spell directory if it doesn't exist mkdir -p "$HOME/.local/share/nvim/site/spell" # Try to run DirtytalkUpdate in headless mode with better error handling if ! ${config.programs.nvf.finalPackage}/bin/nvim --headless -c "DirtytalkUpdate" -c "qa!" 2>/dev/null; then echo "Note: DirtytalkUpdate will run automatically on first Neovim startup" fi ''; }; }