2025-02-28 16:46:38 +01:00

229 lines
6.3 KiB
Nix

{
config,
pkgs,
lib,
...
}: {
options = {
crony.neovim.enable = lib.mkEnableOption "Enable neovim and apply a good config.";
};
config = lib.mkIf config.crony.neovim.enable {
# Setup neovim
programs.nvf = {
enable = true;
settings = {
vim = {
# Enable the aliases, I love them
viAlias = true;
vimAlias = true;
# Changing some basic settings
options = {
tabstop = 2;
shiftwidth = 2;
expandtab = true;
softtabstop = 2;
updatetime = 50;
scrolloff = 5;
signcolumn = "no";
ignorecase = true;
smartcase = true;
colorcolumn = "80";
laststatus = 3;
};
# Enable the undo file
undoFile = {
enable = true;
};
binds = {
# Setup whichkey
whichKey.enable = true;
};
# Enable lsp
lsp = {
enable = true;
lspkind.enable = true;
};
# Setup the theme
theme = {
enable = true;
name = "gruvbox";
style = "dark";
};
# Setup lsp's and languages
languages = {
enableLSP = true;
enableTreesitter = true;
enableFormat = true;
lua = {
enable = true;
lsp.lazydev.enable = true;
};
python = {
enable = true;
format.type = "black-and-isort";
};
css = {
enable = true;
format.enable = true;
};
ts = {
enable = true;
format.enable = true;
};
nix = {
enable = true;
lsp = {
server = "nixd";
options = {
nixos = {
expr = ''(builtins.getFlake "/home/crony/Repos/nixos").nixosConfigurations.CONFIGNAME.options'';
};
home_manager = {
expr = ''(builtins.getFlake "/home/crony/Repos/nixos").homeConfigurations.CONFIGNAME.options'';
};
};
};
};
bash.enable = true;
go.enable = true;
markdown = {
enable = true;
extensions.render-markdown-nvim.enable = true;
};
};
# Enable mini modules ( mini is amazing )
mini = {
# Text editing
ai.enable = true;
comment.enable = true;
operators.enable = true;
pairs.enable = true;
surround.enable = true;
basics = {
enable = true;
setupOpts = {
mappings = {
windows = true;
move_with_alt = true;
};
};
};
bracketed.enable = true;
bufremove.enable = true;
diff.enable = true;
files.enable = true;
git.enable = true;
sessions.enable = true;
visits.enable = true;
hipatterns = {
enable = true;
setupOpts = {
highlighters = {
hex_color = lib.generators.mkLuaInline "require('mini.hipatterns').gen_highlighter.hex_color()";
};
};
};
icons.enable = true;
indentscope.enable = true;
notify.enable = true;
starter.enable = true;
statusline.enable = true;
};
# Use telescope
telescope = {
enable = true;
setupOpts = {
extensions = {
fzf = {
fuzzy = true;
override_generic_sorter = true;
override_file_sorter = true;
case_mode = "smart_case";
};
};
};
};
# Enable autocompletion
autocomplete = {
enableSharedCmpSources = true;
blink-cmp = {
enable = true;
setupOpts = {
keymap.preset = "default";
};
};
};
keymaps = [
{
key = "<leader>e";
mode = ["n"];
action = ":lua MiniFiles.open()<CR>";
silent = true;
desc = "Open Mini.Files and manage the filesystem.";
}
];
extraLuaFiles = [./nvim/autocommands.lua];
extraPlugins = with pkgs.vimPlugins; {
oil = {
package = oil-nvim;
setup = ''
require("oil").setup()
vim.keymap.set("n", "<leader>N", ":Oil<CR>")
vim.keymap.set("n", "<leader>n", ':lua require("oil").toggle_float()<CR>')
'';
};
harpoon = {
package = harpoon2;
setup = ''
local harpoon = require("harpoon")
-- REQUIRED
harpoon:setup()
-- REQUIRED
vim.keymap.set("n", "<leader>a", function() harpoon:list():add() end)
vim.keymap.set("n", "<C-e>", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end)
vim.keymap.set("n", "<C-h>", function() harpoon:list():select(1) end)
vim.keymap.set("n", "<C-j>", function() harpoon:list():select(2) end)
vim.keymap.set("n", "<C-k>", function() harpoon:list():select(3) end)
vim.keymap.set("n", "<C-l>", function() harpoon:list():select(4) end)
'';
};
friendly-snippets = {
package = friendly-snippets;
};
telescope-fzf-native = {
package = telescope-fzf-native-nvim;
setup = ''
require('telescope').load_extension('fzf')
'';
};
telescope-ui-select = {
package = telescope-ui-select-nvim;
setup = ''
require('telescope').load_extension('fzf')
'';
};
};
};
};
};
};
}