{
  pkgs,
  lib,
  config,
  nixosConfig,
  ...
}:
let
  inherit (builtins) readFile;
in
{
  programs.vim = {
    enable = lib.mkDefault 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-full.override {
          features = "normal";
          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
    ];
  };
}