{
  config,
  lib,
  ...
}: let
  inherit (lib.modules) mkRenamedOptionModule;
  inherit (lib.options) mkOption mkEnableOption literalExpression;
  inherit (lib.types) nullOr attrsOf attrs enum;
  inherit (lib.nvim.types) mkPluginSetupOption;
in {
  imports = [
    (mkRenamedOptionModule ["vim" "visuals" "nvimWebDevicons"] ["vim" "visuals" "nvim-web-devicons"])
  ];

  options.vim.visuals.nvim-web-devicons = {
    enable = mkEnableOption "Neovim dev icons [nvim-web-devicons]";

    setupOpts = mkPluginSetupOption "nvim-web-devicons" {
      color_icons = mkEnableOption "different highlight colors per icon" // {default = true;};
      variant = mkOption {
        type = nullOr (enum ["light" "dark"]);
        default = null;
        description = "Set the light or dark variant manually, instead of relying on `background`";
      };

      override = mkOption {
        type = attrsOf attrs;
        default = {};
        example = literalExpression ''
          {
            zsh = {
              name = "Zsh";
              icon = "";
              color = "#428850";
              cterm_color = "65";
            };
          }
        '';
        description = ''
          Your personal icon overrides.

          You can specify color or cterm_color instead of specifying
          both of them. DevIcon will be appended to `name`
        '';
      };
    };
  };
}