{ config, lib, pkgs, ... }:

let
  cfg = config.programs.neovide;

  settingsFormat = pkgs.formats.toml { };
in
{
  options.programs.neovide = {
    enable = lib.mkEnableOption "Neovide, a graphical interface for Neovim";

    package = lib.mkPackageOption pkgs "neovide" { };

    settings = lib.mkOption {
      type = settingsFormat.type;
      description = ''
        The settings to be generated at
        {file}`$XDG_CONFIG_HOME/neovide/config.toml`.
      '';
      default = { };
      example = {
        maximized = true;

        font = {
          normal = [ "MonoLisa Nerd Font" ];
          size = 18;
          features.MonoLisa = [
            "+ss01"
            "+ss07"
            "+ss11"
            "-calt"
            "+ss09"
            "+ss02"
            "+ss14"
            "+ss16"
            "+ss17"
          ];
        };
      };
    };
  };

  config = lib.mkIf cfg.enable (lib.mkMerge [
    {
      home.packages = [ cfg.package ];
    }

    (lib.mkIf (cfg.settings != { }) {
      xdg.configFile."neovide/config.toml".source =
        settingsFormat.generate "home-manager-neovide-settings" cfg.settings;
    })
  ]);
}