Files
garandos/modules/home/nvf.nix
2025-09-13 23:16:22 +02:00

269 lines
6.7 KiB
Nix

{ 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 = {
"<leader>e" = {
action = "<CMD>Neotree toggle<CR>";
silent = false;
};
};
};
diagnostics = {
enable = true;
config = {
virtual_lines.enable = true;
underline = true;
};
};
keymaps = [
{
key = "jk";
mode = [ "i" ];
action = "<ESC>";
desc = "Exit insert mode";
}
{
key = "<leader>nh";
mode = [ "n" ];
action = ":nohl<CR>";
desc = "Clear search highlights";
}
{
key = "<leader>ff";
mode = [ "n" ];
action = "<cmd>Telescope find_files<cr>";
desc = "Search files by name";
}
{
key = "<leader>lg";
mode = [ "n" ];
action = "<cmd>Telescope live_grep<cr>";
desc = "Search files by contents";
}
{
key = "<leader>fe";
mode = [ "n" ];
action = "<cmd>Neotree toggle<cr>";
desc = "File browser toggle";
}
{
key = "<C-h>";
mode = [ "i" ];
action = "<Left>";
desc = "Move left in insert mode";
}
{
key = "<C-j>";
mode = [ "i" ];
action = "<Down>";
desc = "Move down in insert mode";
}
{
key = "<C-k>";
mode = [ "i" ];
action = "<Up>";
desc = "Move up in insert mode";
}
{
key = "<C-l>";
mode = [ "i" ];
action = "<Right>";
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
'';
};
}