{ config, lib, pkgs, ... }: let nvimConf = config.modules.desktop.apps.editors.neovim; in { options.modules.desktop.apps.editors.neovim = { enable = lib.mkOption { type = lib.types.bool; default = false; }; }; config = lib.mkIf (nvimConf.enable) { modules.desktop.defaultApplications.apps.editor = rec { package = pkgs.neovim; install = false; cmd = "${package}/bin/nvim"; desktop = "nvim"; }; home.packages = [ pkgs.clang-tools pkgs.nil pkgs.texlab ]; home.manager.programs.neovim = { enable = true; viAlias = true; vimAlias = true; withNodeJs = true; extraConfig = '' luafile /etc/nixos/config/nvim/lua/settings.lua luafile /etc/nixos/config/nvim/lua/lsp.lua ''; coc.enable = true; coc.settings = { "suggest.noselect" = true; "suggest.enablePreview" = true; "suggest.enablePreselect" = false; "suggest.disableKind" = true; "inlayHint.enable" = false; "nix.enableLanguageServer" = true; "nix.serverPath" = "nil"; }; plugins = with pkgs.vimPlugins; [ nvim-web-devicons gitsigns-nvim catppuccin-nvim vim-commentary vim-fugitive popup-nvim plenary-nvim telescope-nvim nvim-lspconfig nvim-treesitter nvim-treesitter.withAllGrammars coc-clangd coc-lua coc-spell-checker ]; }; }; }