{ config, inputs, lib, ... }: let feature = "nixvim"; in { config = lib.mkIf config.${feature}.enable { environment.variables.EDITOR = "nvim"; programs.nixvim = { enable = true; clipboard = { providers.wl-copy.enable = true; register = "unnamedplus"; }; colorschemes.catppuccin = { enable = true; settings.background.dark = "mocha"; }; dependencies = { tree-sitter.enable = true; nodejs.enable = true; gcc.enable = true; }; diagnostic.settings.virtual_lines = true; opts = { autoindent = true; expandtab = true; number = true; relativenumber = true; shiftwidth = 2; tabstop = 2; }; plugins = { # autoclose brackets autoclose.enable = true; # completion window cmp = { enable = true; autoEnableSources = true; settings = { mapping = { "" = "cmp.mapping.complete()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.close()"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.confirm({ select = true })"; "" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; }; sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } ]; }; }; # git changes in margin gitsigns.enable = true; # opens last edit position lastplace.enable = true; # lsp servers lsp = { enable = true; inlayHints = true; servers = { nixd.enable = true; rust_analyzer = { enable = true; installCargo = true; installRustc = true; }; }; }; lsp-format.enable = true; lsp-lines.enable = true; lsp-signature.enable = true; lspkind.enable = true; # status bar lualine.enable = true; # syntax highlighting treesitter.enable = true; }; }; }; imports = [ inputs.nixvim.nixosModules.nixvim ]; options.${feature}.enable = lib.mkEnableOption "enables ${feature}"; }