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 = {};
 | |
|     };
 | |
|   };
 | |
| }
 |