{
  lib,
  ...
}:
let
  inherit (lib.nixvim) defaultNullOpts toLuaObject;
in
lib.nixvim.plugins.mkNeovimPlugin {
  name = "vscode";
  isColorscheme = true;
  packPathName = "vscode-nvim";
  package = "vscode-nvim";
  colorscheme = null; # Color scheme is set by `require.("vscode").load()`
  callSetup = false;

  maintainers = [ lib.maintainers.loicreynier ];

  settingsOptions = {
    transparent = defaultNullOpts.mkBool false "Whether to enable transparent background";
    italic_comments = defaultNullOpts.mkBool false "Whether to enable italic comments";
    underline_links = defaultNullOpts.mkBool false "Whether to underline links";
    disable_nvimtree_bg = defaultNullOpts.mkBool true "Whether to disable nvim-tree background";
    color_overrides = defaultNullOpts.mkAttrsOf lib.types.str { } ''
      A dictionary of color overrides.
      See https://github.com/Mofiqul/vscode.nvim/blob/main/lua/vscode/colors.lua for color names.
    '';
    group_overrides = defaultNullOpts.mkAttrsOf lib.types.highlight { } ''
      A dictionary of group names, each associated with a dictionary of parameters
      (`bg`, `fg`, `sp` and `style`) and colors in hex.
    '';
  };

  extraConfig = cfg: {
    colorschemes.vscode.luaConfig.content = ''
      local _vscode = require("vscode")
      _vscode.setup(${toLuaObject cfg.settings})
      _vscode.load()
    '';
  };
}
