{ config, lib, ... }: let cfg = config.modules.programs.neovim; in { options.modules.programs.neovim = { enable = lib.mkOption { default = false; example = true; }; }; config = lib.mkIf cfg.enable { home.programs.nixvim.config = { enable = true; defaultEditor = true; viAlias = true; vimAlias = true; options = { number = true; tabstop = 2; shiftwidth = 2; expandtab = true; foldlevel = 99; splitbelow = true; splitright = true; undofile = true; updatetime = 100; list = true; }; globals = { mapleader = ","; maplocalleader = ","; }; clipboard = { register = "unnamedplus"; providers.wl-copy.enable = true; }; plugins.comment.enable = true; plugins.hmts.enable = true; plugins.lightline.enable = true; plugins.luasnip.enable = true; plugins.lsp = { enable = true; servers = { bashls.enable = true; ccls.enable = true; cssls.enable = true; eslint.enable = true; gopls.enable = true; html.enable = true; lua_ls.enable = true; pylsp.enable = true; nixd.enable = true; rust_analyzer = { enable = true; installCargo = true; installRustc = true; }; ts_ls.enable = true; }; }; plugins.nvim-autopairs.enable = true; plugins.cmp = { enable = true; autoEnableSources = true; settings = { sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } ]; mapping = { "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; "" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; "" = "cmp.mapping.confirm({ select = true })"; }; }; }; plugins.telescope = { enable = true; keymaps = { "ff" = "find_files"; "fg" = "live_grep"; "b" = "buffers"; "fh" = "help_tags"; "" = "git_files"; "" = "live_grep"; }; }; plugins.treesitter = { enable = true; nixvimInjections = true; folding = true; settings.indent.enable = true; }; plugins.treesitter-refactor = { enable = true; highlightDefinitions = { enable = true; clearOnCursorMove = false; }; }; plugins.undotree.enable = true; plugins.web-devicons.enable = true; # plugins.gitsigns.enable = true; # plugins.gitgutter.enable = true; # plugins.goyo.enable = true; # plugins.fugitive.enable = true; # plugins.fzf-lua.enable = true; # plugins.neo-tree.enable = true; # plugins.none-ls.enable = true; # plugins.nvim-tree.enable = true; # plugins.oil.enable = true; # plugins.project-nvim.enable = true; # plugins.surround.enable = true; }; env.EDITOR = "nvim"; }; }