{ config, pkgs, ... }: let inherit (config) dots; in let buildVimPlugin = pkgs.vimUtils.buildVimPlugin; configFiles = (builtins.readDir (dots + "/nvim")); configFileNames = (pkgs.lib.attrsets.mapAttrsToList (key: value: key) configFiles); in { home.packages = with pkgs; [ bat # required by my nixconfig fzf # required by my nixconfig ]; xdg.configFile = builtins.listToAttrs (builtins.map (name: { name = "nvim/" + name; value = { source = "${dots}/nvim/${name}"; }; }) configFileNames); programs.neovim = let startupPlugins = with pkgs.vimPlugins; [ auto-pairs vim-highlightedyank vim-rooter gruvbox-nvim yats-vim vim-gitgutter vimtex vim-sensible vim-nix (nvim-treesitter.withPlugins (p: builtins.attrValues p)) nvim-lspconfig telescope-nvim nerdtree neoformat luasnip which-key-nvim nvim-cmp cmp-nvim-lsp cmp-buffer ]; in { enable = true; vimAlias = true; viAlias = true; withNodeJs = true; withRuby = true; extraConfig = "lua require('config')"; plugins = [ ] ++ (builtins.map (plugin: { inherit plugin; }) startupPlugins); }; }