{ 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; move.enable = true; splitjoin.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 = "e"; mode = ["n"]; action = ":lua MiniFiles.open()"; 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", "N", ":Oil") vim.keymap.set("n", "n", ':lua require("oil").toggle_float()') ''; }; harpoon = { package = harpoon2; setup = '' local harpoon = require("harpoon") -- REQUIRED harpoon:setup() -- REQUIRED vim.keymap.set("n", "a", function() harpoon:list():add() end) vim.keymap.set("n", "", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end) vim.keymap.set("n", "", function() harpoon:list():select(1) end) vim.keymap.set("n", "", function() harpoon:list():select(2) end) vim.keymap.set("n", "", function() harpoon:list():select(3) end) vim.keymap.set("n", "", 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') ''; }; }; }; }; }; }; }