diff --git a/lib/types/default.nix b/lib/types/default.nix index 170667d..928bbae 100644 --- a/lib/types/default.nix +++ b/lib/types/default.nix @@ -9,7 +9,7 @@ typesCustom = import ./custom.nix {inherit lib;}; in { inherit (typesDag) dagOf; - inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType lznPluginType lznPluginTableType; + inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType; inherit (typesLanguage) diagnostics mkGrammarOption; inherit (typesCustom) anythingConcatLists char; } diff --git a/lib/types/plugins.nix b/lib/types/plugins.nix index 8532772..c0e89d6 100644 --- a/lib/types/plugins.nix +++ b/lib/types/plugins.nix @@ -6,7 +6,8 @@ inherit (lib.options) mkOption; inherit (lib.attrsets) attrNames mapAttrs' filterAttrs nameValuePair; inherit (lib.strings) hasPrefix removePrefix; - inherit (lib.types) submodule either package enum str lines attrsOf anything listOf nullOr oneOf bool int; + inherit (lib.types) submodule either package enum str lines attrsOf anything listOf nullOr; + # Get the names of all flake inputs that start with the given prefix. fromInputs = { inputs, @@ -50,193 +51,8 @@ }; }; }; - - luaInline = lib.mkOptionType { - name = "luaInline"; - check = x: lib.nvim.lua.isLuaInline x; - }; - - lznKeysSpec = submodule { - options = { - desc = mkOption { - description = "Description of the key map"; - type = nullOr str; - default = null; - }; - - noremap = mkOption { - description = "TBD"; - type = bool; - default = false; - }; - - expr = mkOption { - description = "TBD"; - type = bool; - default = false; - }; - - nowait = mkOption { - description = "TBD"; - type = bool; - default = false; - }; - - ft = mkOption { - description = "TBD"; - type = nullOr (listOf str); - default = null; - }; - - key = mkOption { - type = str; - description = "Key to bind to"; - }; - - action = mkOption { - type = nullOr str; - default = null; - description = "Action to trigger."; - }; - - lua = mkOption { - type = bool; - default = false; - description = "If true the action is treated as a lua function instead of a vim command."; - }; - - mode = mkOption { - description = "Modes to bind in"; - type = listOf str; - default = ["n" "x" "s" "o"]; - }; - }; - }; - - lznPluginTableType = attrsOf lznPluginType; - lznPluginType = submodule { - options = { - ## Should probably infer from the actual plugin somehow - ## In general this is the name passed to packadd, so the dir name of the plugin - # name = mkOption { - # type= str; - # } - - # Non-lz.n options - - package = mkOption { - type = pluginType; - description = "Plugin package"; - }; - - setupModule = mkOption { - type = nullOr str; - description = "Lua module to run setup function on."; - default = null; - }; - - setupOpts = mkOption { - type = submodule {freeformType = attrsOf anything;}; - description = "Options to pass to the setup function"; - default = {}; - }; - - # lz.n options - - enabled = mkOption { - type = nullOr (either bool str); - description = "When false, or if the lua function returns false, this plugin will not be included in the spec"; - default = null; - }; - - beforeAll = mkOption { - type = nullOr str; - description = "Lua code to run before any plugins are loaded. This will be wrapped in a function."; - default = null; - }; - - before = mkOption { - type = nullOr str; - description = "Lua code to run before plugin is loaded. This will be wrapped in a function."; - default = null; - }; - - after = mkOption { - type = nullOr str; - description = "Lua code to run after plugin is loaded. This will be wrapped in a function."; - default = null; - }; - - event = mkOption { - description = "Lazy-load on event"; - default = null; - type = let - event = submodule { - options = { - event = mkOption { - type = nullOr (either str (listOf str)); - description = "Exact event name"; - example = "BufEnter"; - }; - pattern = mkOption { - type = nullOr (either str (listOf str)); - description = "Event pattern"; - example = "BufEnter *.lua"; - }; - }; - }; - in - nullOr (oneOf [str (listOf str) event]); - }; - - cmd = mkOption { - description = "Lazy-load on command"; - default = null; - type = nullOr (either str (listOf str)); - }; - - ft = mkOption { - description = "Lazy-load on filetype"; - default = null; - type = nullOr (either str (listOf str)); - }; - - keys = mkOption { - description = "Lazy-load on key mapping"; - default = null; - type = nullOr (oneOf [str (listOf lznKeysSpec) (listOf str)]); - example = '' - keys = [ - {lhs = "s"; rhs = ":NvimTreeToggle"; desc = "Toggle NvimTree"} - ] - ''; - }; - - colorscheme = mkOption { - description = "Lazy-load on colorscheme."; - type = nullOr (either str (listOf str)); - default = null; - }; - - priority = mkOption { - type = nullOr int; - description = "Only useful for stat plugins (not lazy-loaded) to force loading certain plugins first."; - default = null; - }; - - load = mkOption { - type = nullOr str; - default = null; - description = '' - Lua code to override the `vim.g.lz_n.load()` function for a single plugin. - - This will be wrapped in a function - ''; - }; - }; - }; in { - inherit extraPluginType fromInputs pluginType luaInline lznPluginType lznPluginTableType; + inherit extraPluginType fromInputs pluginType; pluginsOpt = { description, @@ -248,6 +64,11 @@ in { type = pluginsType; }; + luaInline = lib.mkOptionType { + name = "luaInline"; + check = x: lib.nvim.lua.isLuaInline x; + }; + /* opts is a attrset of options, example: ``` diff --git a/modules/wrapper/lazy/lazy.nix b/modules/wrapper/lazy/lazy.nix index 77502d4..1180144 100644 --- a/modules/wrapper/lazy/lazy.nix +++ b/modules/wrapper/lazy/lazy.nix @@ -1,7 +1,186 @@ {lib, ...}: let inherit (lib.options) mkOption mkEnableOption; - inherit (lib.types) enum listOf; - inherit (lib.nvim.types) lznPluginType; + inherit (lib.types) enum listOf submodule nullOr str bool int attrsOf anything either oneOf; + inherit (lib.nvim.types) pluginType; + + lznKeysSpec = submodule { + options = { + desc = mkOption { + description = "Description of the key map"; + type = nullOr str; + default = null; + }; + + noremap = mkOption { + description = "TBD"; + type = bool; + default = false; + }; + + expr = mkOption { + description = "TBD"; + type = bool; + default = false; + }; + + nowait = mkOption { + description = "TBD"; + type = bool; + default = false; + }; + + ft = mkOption { + description = "TBD"; + type = nullOr (listOf str); + default = null; + }; + + key = mkOption { + type = str; + description = "Key to bind to"; + }; + + action = mkOption { + type = nullOr str; + default = null; + description = "Action to trigger."; + }; + + lua = mkOption { + type = bool; + default = false; + description = "If true the action is treated as a lua function instead of a vim command."; + }; + + mode = mkOption { + description = "Modes to bind in"; + type = listOf str; + default = ["n" "x" "s" "o"]; + }; + }; + }; + + lznPluginType = submodule { + options = { + ## Should probably infer from the actual plugin somehow + ## In general this is the name passed to packadd, so the dir name of the plugin + # name = mkOption { + # type= str; + # } + + # Non-lz.n options + + package = mkOption { + type = pluginType; + description = "Plugin package"; + }; + + setupModule = mkOption { + type = nullOr str; + description = "Lua module to run setup function on."; + default = null; + }; + + setupOpts = mkOption { + type = submodule {freeformType = attrsOf anything;}; + description = "Options to pass to the setup function"; + default = {}; + }; + + # lz.n options + + enabled = mkOption { + type = nullOr (either bool str); + description = "When false, or if the lua function returns false, this plugin will not be included in the spec"; + default = null; + }; + + beforeAll = mkOption { + type = nullOr str; + description = "Lua code to run before any plugins are loaded. This will be wrapped in a function."; + default = null; + }; + + before = mkOption { + type = nullOr str; + description = "Lua code to run before plugin is loaded. This will be wrapped in a function."; + default = null; + }; + + after = mkOption { + type = nullOr str; + description = "Lua code to run after plugin is loaded. This will be wrapped in a function."; + default = null; + }; + + event = mkOption { + description = "Lazy-load on event"; + default = null; + type = let + event = submodule { + options = { + event = mkOption { + type = nullOr (either str (listOf str)); + description = "Exact event name"; + example = "BufEnter"; + }; + pattern = mkOption { + type = nullOr (either str (listOf str)); + description = "Event pattern"; + example = "BufEnter *.lua"; + }; + }; + }; + in + nullOr (oneOf [str (listOf str) event]); + }; + + cmd = mkOption { + description = "Lazy-load on command"; + default = null; + type = nullOr (either str (listOf str)); + }; + + ft = mkOption { + description = "Lazy-load on filetype"; + default = null; + type = nullOr (either str (listOf str)); + }; + + keys = mkOption { + description = "Lazy-load on key mapping"; + default = null; + type = nullOr (oneOf [str (listOf lznKeysSpec) (listOf str)]); + example = '' + keys = [ + {lhs = "s"; rhs = ":NvimTreeToggle"; desc = "Toggle NvimTree"} + ] + ''; + }; + + colorscheme = mkOption { + description = "Lazy-load on colorscheme."; + type = nullOr (either str (listOf str)); + default = null; + }; + + priority = mkOption { + type = nullOr int; + description = "Only useful for stat plugins (not lazy-loaded) to force loading certain plugins first."; + default = null; + }; + + load = mkOption { + type = nullOr str; + default = null; + description = '' + Lua code to override the `vim.g.lz_n.load()` function for a single plugin. + + This will be wrapped in a function + ''; + }; + }; + }; in { options.vim.lazy = { enable = mkEnableOption "plugin lazy-loading" // {default = true;};