{ pkgs, lib, config, nixosConfig, ... }:
let inherit (builtins) readFile; in
{
  programs.vim = {
    enable = true;
    extraConfig =
      readFile vim/init.vim
        #+ readFile home/vim/syntastic.vim
        #+ readFile home/vim/coc.vim
        + readFile vim/ale.vim
    ;
    # Plugin list:
    # nix-instantiate -E --eval 'builtins.attrNames (import <nixpkgs> {}).vimPlugins'
    plugins = [
      #pkgs.vimPlugins.vim-lsc
      pkgs.vimPlugins.gitgutter
      #pkgs.vimPlugins.nvim-yarp
      #pkgs.vimPlugins.deoplete-nvim
      #pkgs.vimPlugins.deoplete-lsp
      #pkgs.vimPlugins.LanguageClient-neovim
      #pkgs.vimPlugins.fzf-vim
      #pkgs.vimPlugins.echodoc
      pkgs.vimPlugins.ale
      #pkgs.vimPlugins.indentLine
      #pkgs.vimPlugins.vim-indent-guides
      #pkgs.vimPlugins.coc-nvim
      #pkgs.vimPlugins.coc-diagnostic
      #pkgs.vimPlugins.coc-json
      #pkgs.vimPlugins.coc-lists
      pkgs.vimPlugins.easy-align
      pkgs.vimPlugins.hoogle
      pkgs.vimPlugins.Recover-vim
      #pkgs.vimPlugins.syntastic
      #pkgs.vimPlugins.The_NERD_tree
      pkgs.vimPlugins.vim-dirvish
      pkgs.vimPlugins.vim-buffergator
      pkgs.vimPlugins.vim-markdown
      pkgs.vimPlugins.vimproc
      #pkgs.vimPlugins.fugitive
      pkgs.vimPlugins.vim-ghcid-quickfix
    ];
  } // lib.optionalAttrs (!nixosConfig.services.xserver.enable) {
    packageConfigurable =
      # This has the drawback of recompiling/sending vim
      pkgs.vim_configurable.override {
        config.vim.gui = "none";
      };
  };

  programs.neovim = {
    extraConfig =
      readFile vim/init.vim +
      readFile vim/ale.vim;
    plugins = [
      #pkgs.vimPlugins.vim-lsc
      pkgs.vimPlugins.gitgutter
      #pkgs.vimPlugins.nvim-yarp
      #pkgs.vimPlugins.deoplete-nvim
      #pkgs.vimPlugins.deoplete-lsp
      #pkgs.vimPlugins.LanguageClient-neovim
      #pkgs.vimPlugins.fzf-vim
      #pkgs.vimPlugins.echodoc
      pkgs.vimPlugins.ale
      #pkgs.vimPlugins.indentLine
      #pkgs.vimPlugins.vim-indent-guides
      #pkgs.vimPlugins.coc-nvim
      #pkgs.vimPlugins.coc-diagnostic
      #pkgs.vimPlugins.coc-json
      #pkgs.vimPlugins.coc-lists
      pkgs.vimPlugins.easy-align
      pkgs.vimPlugins.hoogle
      pkgs.vimPlugins.Recover-vim
      #pkgs.vimPlugins.syntastic
      #pkgs.vimPlugins.The_NERD_tree
      pkgs.vimPlugins.vim-dirvish
      pkgs.vimPlugins.vim-buffergator
      pkgs.vimPlugins.vim-markdown
      pkgs.vimPlugins.vimproc
      #pkgs.vimPlugins.fugitive
    ];
  };
}