diff --git a/docs/manual/release-notes/rl-0.8.md b/docs/manual/release-notes/rl-0.8.md index 6fec61ca..bf1208b1 100644 --- a/docs/manual/release-notes/rl-0.8.md +++ b/docs/manual/release-notes/rl-0.8.md @@ -632,6 +632,5 @@ [ccc.nvim]: https://github.com/uga-rosa/ccc.nvim -- Added [ccc.nvim] options {option}`vim.utility.ccc.inputs` and - {option}`vim.utility.ccc.outputs` to make input color systems and output color - formats configurable. +- Added [ccc.nvim] option {option}`vim.utility.ccc.setupOpts` with the existing + hard-coded options as default values. diff --git a/modules/plugins/utility/ccc/ccc.nix b/modules/plugins/utility/ccc/ccc.nix index e51d86da..a8f19587 100644 --- a/modules/plugins/utility/ccc/ccc.nix +++ b/modules/plugins/utility/ccc/ccc.nix @@ -2,64 +2,151 @@ inherit (lib.options) mkOption mkEnableOption; inherit (lib.types) listOf enum; inherit (lib.nvim.binds) mkMappingOption; + inherit (lib.nvim.types) mkPluginSetupOption luaInline; + inherit (lib.generators) mkLuaInline; in { options.vim.utility.ccc = { enable = mkEnableOption "ccc color picker for neovim"; - inputs = mkOption { - type = listOf (enum [ - "rgb" - "hsl" - "hwb" - "lab" - "lch" - "oklab" - "oklch" - "cmyk" - "hsluv" - "okhsl" - "hsv" - "okhsv" - "xyz" - ]); - default = [ - "hsl" - ]; - description = '' - List of color systems to be activated. + setupOpts = mkPluginSetupOption "ccc.nvim" { + highlighter = mkOption { + type = luaInline; + default = mkLuaInline '' + { + auto_enable = true, + max_byte = 2 * 1024 * 1024, -- 2mb + lsp = true, + filetypes = colorPickerFts, + } + ''; + description = "Settings for the highlighter"; + }; - The toggle input mode action toggles in this order. The first one is - the default used at the first startup. Once activated, it will keep the - previous input mode. - ''; - }; + pickers = mkOption { + type = luaInline; + default = mkLuaInline '' + { + ccc.picker.hex, + ccc.picker.css_rgb, + ccc.picker.css_hsl, + ccc.picker.ansi_escape { + meaning1 = "bright", -- whether the 1 means bright or yellow + }, + } + ''; + description = '' + List of formats that can be detected by |:CccPick| to be activated. + ''; + }; - outputs = mkOption { - type = listOf (enum [ - "hex" - "hex_short" - "css_hsl" - "css_rgb" - "css_rgba" - "css_hwb" - "css_lab" - "css_lch" - "css_oklab" - "css_oklch" - "float" - ]); - default = [ - "css_hsl" - "css_rgb" - "hex" - ]; - description = '' - List of output formats to be activated. + alpha_show = mkOption { + type = enum [ + "show" + "hide" + "auto" + ]; + default = "hide"; + description = '' + This option determines whether the alpha slider is displayed when the + UI is opened. "show" and "hide" mean as they are. "auto" makes the + slider appear only when the alpha value can be picked up. + ''; + }; - The toggle output mode action toggles in this order. The first one is - the default used at the first startup. Once activated, it will keep the - previous output mode. - ''; + recognize = mkOption { + type = luaInline; + default = mkLuaInline '' + { output = true } + ''; + description = "Settings for recognizing the color format."; + }; + + inputs = mkOption { + type = listOf (enum [ + "rgb" + "hsl" + "hwb" + "lab" + "lch" + "oklab" + "oklch" + "cmyk" + "hsluv" + "okhsl" + "hsv" + "okhsv" + "xyz" + ]); + default = [ + "hsl" + ]; + description = '' + List of color systems to be activated. + + The toggle input mode action toggles in this order. The first one is + the default used at the first startup. Once activated, it will keep the + previous input mode. + ''; + }; + + outputs = mkOption { + type = listOf (enum [ + "hex" + "hex_short" + "css_hsl" + "css_rgb" + "css_rgba" + "css_hwb" + "css_lab" + "css_lch" + "css_oklab" + "css_oklch" + "float" + ]); + default = [ + "css_hsl" + "css_rgb" + "hex" + ]; + description = '' + List of output formats to be activated. + + The toggle output mode action toggles in this order. The first one is + the default used at the first startup. Once activated, it will keep the + previous output mode. + ''; + }; + + convert = mkOption { + type = luaInline; + default = mkLuaInline '' + { + { ccc.picker.hex, ccc.output.css_hsl }, + { ccc.picker.css_rgb, ccc.output.css_hsl }, + { ccc.picker.css_hsl, ccc.output.hex }, + } + ''; + description = '' + Specify the correspondence between picker and output. + ''; + }; + + mappings = mkOption { + type = luaInline; + default = mkLuaInline '' + { + ["q"] = ccc.mapping.quit, + ["L"] = ccc.mapping.increase10, + ["H"] = ccc.mapping.decrease10, + } + ''; + description = '' + The mappings are set in the UI of ccc. The table where lhs is key and + rhs is value. To disable all default mappings, use + disable_default_mappings. To disable only some of the default + mappings, set ccc.mapping.none. + ''; + }; }; mappings = { diff --git a/modules/plugins/utility/ccc/config.nix b/modules/plugins/utility/ccc/config.nix index e978ed14..f8472649 100644 --- a/modules/plugins/utility/ccc/config.nix +++ b/modules/plugins/utility/ccc/config.nix @@ -3,47 +3,25 @@ lib, ... }: let - inherit (lib.strings) concatStringsSep; inherit (lib.modules) mkIf; inherit (lib.nvim.dag) entryAnywhere; - + inherit (lib.nvim.lua) toLuaObject; + inherit (lib.generators) mkLuaInline; cfg = config.vim.utility.ccc; + mkLuaIdentifier = prefix: identifier: mkLuaInline "${prefix}${identifier}"; + mapSetupOptions = setupOpts: + setupOpts + // { + inputs = map (mkLuaIdentifier "ccc.input.") setupOpts.inputs; + outputs = map (mkLuaIdentifier "ccc.output.") setupOpts.outputs; + }; in { config = mkIf cfg.enable { vim.startPlugins = ["ccc-nvim"]; vim.pluginRC.ccc = entryAnywhere '' local ccc = require("ccc") - ccc.setup { - highlighter = { - auto_enable = true, - max_byte = 2 * 1024 * 1024, -- 2mb - lsp = true, - filetypes = colorPickerFts, - }, - pickers = { - ccc.picker.hex, - ccc.picker.css_rgb, - ccc.picker.css_hsl, - ccc.picker.ansi_escape { - meaning1 = "bright", -- whether the 1 means bright or yellow - }, - }, - alpha_show = "hide", -- needed when highlighter.lsp is set to true - recognize = { output = true }, -- automatically recognize color format under cursor - inputs = {${concatStringsSep "," (map (input: "ccc.input.${input}") cfg.inputs)}}, - outputs = {${concatStringsSep "," (map (output: "ccc.output.${output}") cfg.outputs)}}, - convert = { - { ccc.picker.hex, ccc.output.css_hsl }, - { ccc.picker.css_rgb, ccc.output.css_hsl }, - { ccc.picker.css_hsl, ccc.output.hex }, - }, - mappings = { - ["q"] = ccc.mapping.quit, - ["L"] = ccc.mapping.increase10, - ["H"] = ccc.mapping.decrease10, - }, - } + ccc.setup(${toLuaObject (mapSetupOptions cfg.setupOpts)}) ''; }; }