nixos/modules/home/editors/neovim.nix
Florian RICHER 2a33aec6dd
All checks were successful
check / check (push) Successful in 40s
editors.neovim: Add multicursors
2025-06-30 14:11:28 +02:00

297 lines
7 KiB
Nix

{
config,
lib,
...
}:
with lib; let
cfg = config.modules.home.editors.neovim;
in {
options.modules.home.editors.neovim = {
enable = mkEnableOption ''
Enable neovim with my custom configurations
'';
};
config = mkIf cfg.enable {
programs.nvf = {
enable = true;
enableManpages = true;
# https://notashelf.github.io/nvf/options.html
settings.vim = {
viAlias = true;
vimAlias = true;
debugMode = {
enable = false;
level = 16;
logFile = "/tmp/nvim.log";
};
options = {
tabstop = 2;
shiftwidth = 2;
};
spellcheck = {
enable = true;
};
clipboard = {
enable = true;
registers = "unnamedplus";
providers = {
wl-copy.enable = true;
};
};
lsp = {
enable = true;
formatOnSave = false;
lspkind.enable = false;
lightbulb.enable = true;
lspsaga.enable = false;
lspSignature.enable = true;
trouble.enable = true;
otter-nvim.enable = true;
nvim-docs-view.enable = true;
};
debugger = {
nvim-dap = {
enable = true;
ui.enable = true;
};
};
languages = {
enableDAP = true;
enableFormat = true;
enableTreesitter = true;
enableExtraDiagnostics = true;
bash.enable = true;
clang = {
# C++
enable = true;
dap.enable = true;
lsp.enable = true;
};
css.enable = true;
dart = {
enable = true;
flutter-tools = {
enable = true;
enableNoResolvePatch = true;
color = {
enable = true;
highlightBackground = true;
highlightForeground = true;
virtualText.enable = true;
};
};
};
go.enable = true;
html.enable = true;
java.enable = true;
kotlin.enable = true;
markdown = {
enable = true;
extensions.render-markdown-nvim.enable = true;
};
nix.enable = true;
php.enable = true;
python.enable = true;
ruby.enable = true;
rust = {
enable = true;
crates.enable = true;
};
sql.enable = true;
tailwind.enable = true;
ts = {
enable = true;
extensions.ts-error-translator.enable = false;
};
wgsl.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;
theme = "catppuccin";
};
};
theme = {
enable = true;
name = "catppuccin";
style = "mocha";
transparent = false;
};
autopairs.nvim-autopairs.enable = true;
autocomplete.nvim-cmp.enable = true;
snippets.luasnip.enable = true;
filetree = {
neo-tree = {
enable = true;
setupOpts = {
git_status_async = true;
};
};
};
tabline = {
nvimBufferline.enable = true;
};
treesitter = {
context.enable = true;
};
binds = {
whichKey.enable = true;
cheatsheet.enable = true;
};
telescope.enable = true;
git = {
enable = true;
gitsigns.enable = true;
gitsigns.codeActions.enable = false; # throws an annoying debug message
};
minimap = {
minimap-vim.enable = false;
codewindow.enable = true; # lighter, faster, and uses lua for configuration
};
dashboard = {
dashboard-nvim.enable = false;
alpha.enable = true;
};
notify = {
nvim-notify.enable = true;
};
projects = {
project-nvim.enable = true;
};
utility = {
ccc.enable = false;
vim-wakatime.enable = false;
icon-picker.enable = true;
surround.enable = true;
diffview-nvim.enable = true;
yanky-nvim.enable = false;
multicursors.enable = true;
motion = {
hop.enable = true;
leap.enable = true;
precognition.enable = false; # VIM help
};
images = {
image-nvim.enable = false;
};
};
notes = {
obsidian.enable = false;
neorg.enable = false;
orgmode.enable = false;
mind-nvim.enable = true;
todo-comments.enable = true;
};
terminal = {
toggleterm = {
enable = true;
lazygit.enable = true;
};
};
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 = true;
navbuddy.enable = true;
};
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 = {
avante-nvim = {
enable = true;
setupOpts = {
auto_suggestions_provider = "mistral_devstral";
provider = "mistral_devstral";
providers = {
mistral_devstral = {
__inherited_from = "openai";
api_key_name = "MISTRAL_API_KEY";
endpoint = "https://api.mistral.ai/v1/";
model = "devstral-small-latest";
extra_request_body = {
max_tokens = 32768;
};
};
};
};
};
};
session = {
nvim-session-manager.enable = false;
};
gestures = {
gesture-nvim.enable = true;
};
comments = {
comment-nvim.enable = true;
};
presence = {
neocord.enable = true;
};
};
};
};
}