103 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{lib, ...}: let
 | 
						|
  inherit (lib) mkOption mkEnableOption;
 | 
						|
  inherit (lib.types) nullOr str bool attrsOf submodule;
 | 
						|
 | 
						|
  highlightOpts = submodule {
 | 
						|
    options = {
 | 
						|
      # https://neovim.io/doc/user/api.html#nvim_set_hl()
 | 
						|
      fg = mkOption {
 | 
						|
        type = nullOr str;
 | 
						|
        default = null;
 | 
						|
        description = "Foreground color";
 | 
						|
      };
 | 
						|
      bg = mkOption {
 | 
						|
        type = nullOr str;
 | 
						|
        default = null;
 | 
						|
        description = "Background color";
 | 
						|
      };
 | 
						|
      sp = mkOption {
 | 
						|
        type = nullOr str;
 | 
						|
        default = null;
 | 
						|
        description = "SP color";
 | 
						|
      };
 | 
						|
      blend = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Blend attribute";
 | 
						|
      };
 | 
						|
      bold = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Italic attribute";
 | 
						|
      };
 | 
						|
      standout = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Standout attribute";
 | 
						|
      };
 | 
						|
      underline = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "underline attribute";
 | 
						|
      };
 | 
						|
      undercurl = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Undercurl attribute";
 | 
						|
      };
 | 
						|
      underdouble = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Underdouble attribute";
 | 
						|
      };
 | 
						|
      underdotted = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Underdotted attribute";
 | 
						|
      };
 | 
						|
      underdashed = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Underdashed attribute";
 | 
						|
      };
 | 
						|
      strikethrough = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Strikethrough attribute";
 | 
						|
      };
 | 
						|
      italic = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Bold attribute";
 | 
						|
      };
 | 
						|
      reverse = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Reverse attribute";
 | 
						|
      };
 | 
						|
      nocombine = mkOption {
 | 
						|
        type = nullOr bool;
 | 
						|
        default = null;
 | 
						|
        description = "Nocombine attribute";
 | 
						|
      };
 | 
						|
      link = mkOption {
 | 
						|
        type = nullOr str;
 | 
						|
        default = null;
 | 
						|
        description = "Link attribute";
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
in {
 | 
						|
  options.vim.theme.custom = {
 | 
						|
    enable = mkEnableOption "Enable custom theme";
 | 
						|
    name = mkOption {
 | 
						|
      type = str;
 | 
						|
      default = "my-custom-theme";
 | 
						|
      description = "Name of custom theme";
 | 
						|
    };
 | 
						|
    highlights = mkOption {
 | 
						|
      type = attrsOf highlightOpts;
 | 
						|
      default = {};
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |