init
This commit is contained in:
268
modules/home/nvf.nix
Normal file
268
modules/home/nvf.nix
Normal file
@@ -0,0 +1,268 @@
|
||||
{ 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
|
||||
'';
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user