{ config, pkgs, lib, ... }: let psCfg = config.pub-solar; cfg = config.pub-solar.terminal-life; xdg = config.home-manager.users."${psCfg.user.name}".xdg; preview-file = pkgs.writeShellScriptBin "preview-file" (import ./preview-file.nix pkgs); in { enable = true; viAlias = true; vimAlias = true; vimdiffAlias = true; withNodeJs = true; withRuby = true; withPython3 = true; extraPackages = with pkgs; lib.mkIf (cfg.full) [ ansible-language-server ccls gopls nixd nodejs nodePackages.bash-language-server nodePackages.dockerfile-language-server-nodejs nodePackages.svelte-language-server nodePackages.typescript nodePackages.typescript-language-server nodePackages.vim-language-server nodePackages.vue-language-server nodePackages.vscode-langservers-extracted nodePackages.yaml-language-server python3Packages.python-lsp-server python3Full rust-analyzer solargraph terraform-ls universal-ctags ]; plugins = with pkgs.vimPlugins; lib.mkIf cfg.full [ (pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [ p.ini p.json p.json5 p.markdown p.nix p.toml p.yaml p.css p.graphql p.html p.javascript p.scss p.tsx p.typescript p.vue p.c p.cpp p.go p.gomod p.gosum p.haskell p.lua p.php p.python p.ruby p.rust p.vim p.vimdoc p.passwd p.sql p.diff p.gitcommit p.gitignore p.git_config p.gitattributes p.git_rebase p.bash p.dockerfile p.make p.ninja p.terraform ])) # Dependencies for nvim-lspconfig nvim-cmp cmp-nvim-lsp cmp_luasnip luasnip # Quickstart configs for neovim LSP lsp_extensions-nvim nvim-lspconfig # Collaborative editing in Neovim using built-in capabilities instant-nvim-nvfetcher # Search functionality behind :Ack ack-vim # The status bar in the bottom of the screen with the mode indication and file location vim-airline # Automatically load editorconfig files in repos to configure nvim settings editorconfig-vim # File browser. Use n to access nnn-vim # Highlight characters when using f, F, t, and T quick-scope # Get sudo in vim; :SudaWrite suda-vim # Undo history etc. per project vim-workspace-nvfetcher # JSON schemas SchemaStore-nvim # Work with tags files vim-gutentags # Neovim colorschemes / themes sonokai vim-hybrid-material vim-airline-themes vim-apprentice-nvfetcher # Git integrations # A Git wrapper so awesome, it should be illegal fugitive # Shows git diff markers in the sign column vim-gitgutter # GitHub extension for fugitive vim-rhubarb # Ease your git workflow within Vim vimagit-nvfetcher # FZF fuzzy finder fzf-vim fzfWrapper # Make the yanked region apparent vim-highlightedyank # :Beautify Code beautifier vim-beautify-nvfetcher # Unload, delete or wipe a buffer without closing the window vim-bufkill # Defaults everyone can agree on vim-sensible # emmet for vim: http://emmet.io/ emmet-vim # Caddyfile syntax support for Vim vim-caddyfile-nvfetcher # Fix TOFU hashes when writing nix derivations without leaving neovim vim-nixhash ]; extraConfig = builtins.concatStringsSep "\n" [ '' " Persistent undo set undofile set undodir=${xdg.cacheHome}/nvim/undo set backupdir=${xdg.dataHome}/nvim/backup set directory=${xdg.dataHome}/nvim/swap/ '' (builtins.readFile ./init.vim) (builtins.readFile ./plugins.vim) (builtins.readFile ./clipboard.vim) (builtins.readFile ./ui.vim) (builtins.readFile ./quickfixopenall.vim) (builtins.readFile ./lsp.vim) '' " fzf with file preview command! -bang -nargs=? -complete=dir Files \ call fzf#vim#files(, { 'options': ['--keep-right', '--cycle', '--layout', 'reverse', '--preview', '${preview-file}/bin/preview-file {}'] }, 0) '' ]; }