269 lines
6.7 KiB
Nix
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
|
|
'';
|
|
};
|
|
}
|