mkTarget:
{ lib, pkgs, ... }:
mkTarget {
  name = "vim";
  humanName = "Vim";

  config = [
    (
      { fonts }:
      {
        programs.vim.extraConfig = ''
          set guifont=${
            lib.escape [ " " ] fonts.monospace.name
          }:h${toString fonts.sizes.terminal}
        '';
      }
    )
    (
      { colors, inputs }:
      {
        programs.vim = {
          plugins = [
            (pkgs.vimUtils.buildVimPlugin {
              name = "stylix";
              pname = "stylix";

              src = colors {
                templateRepo = inputs.base16-vim;
                target = "base16";
              };
              dontUnpack = true;

              buildPhase = ''
                install -D $src $out/colors/base16-stylix.vim
              '';
            })
          ];
          extraConfig = with colors.withHashtag; ''
            set termguicolors
            colorscheme base16-stylix
            unlet g:colors_name

            let g:stylix_colors = {
              \ 'base00': '${base00}',
              \ 'base01': '${base01}',
              \ 'base02': '${base02}',
              \ 'base03': '${base03}',
              \ 'base04': '${base04}',
              \ 'base05': '${base05}',
              \ 'base06': '${base06}',
              \ 'base07': '${base07}',
              \ 'base08': '${base08}',
              \ 'base09': '${base09}',
              \ 'base0A': '${base0A}',
              \ 'base0B': '${base0B}',
              \ 'base0C': '${base0C}',
              \ 'base0D': '${base0D}',
              \ 'base0E': '${base0E}',
              \ 'base0F': '${base0F}',
            \ }
          '';
        };
      }
    )
  ];
}
