diff --git a/lib/lua.nix b/lib/lua.nix index 0ed2505..9e67b3f 100644 --- a/lib/lua.nix +++ b/lib/lua.nix @@ -58,7 +58,7 @@ in rec { # Convert a list of lua expressions to a lua table. The difference to listToLuaTable is that the elements here are expected to be lua expressions already, whereas listToLuaTable converts from nix types to lua first luaTable = items: ''{${concatStringsSep "," items}}''; - isLuaInline = {_type ? null, ...}: _type == "lua-inline"; + isLuaInline = object: (object._type or null) == "lua-inline"; toLuaObject = args: if isAttrs args diff --git a/modules/plugins/visuals/fidget/fidget.nix b/modules/plugins/visuals/fidget/fidget.nix index 6897800..481dfeb 100644 --- a/modules/plugins/visuals/fidget/fidget.nix +++ b/modules/plugins/visuals/fidget/fidget.nix @@ -7,8 +7,8 @@ inherit (lib.options) mkEnableOption mkOption; inherit (lib.attrsets) mapAttrs; inherit (lib.strings) toUpper; - inherit (lib.types) int float bool str enum listOf attrsOf; - inherit (lib.nvim.types) mkPluginSetupOption; + inherit (lib.types) int float bool str enum listOf attrsOf anything; + inherit (lib.nvim.types) mkPluginSetupOption luaInline; inherit (lib.generators) mkLuaInline; in { imports = [ @@ -42,30 +42,14 @@ in { type = bool; default = false; }; - clear_on_detach = mkOption { - description = "Clear notification group when LSP server detaches"; - type = bool; - default = true; - apply = clear: - if clear - then - mkLuaInline '' - function(client_id) - local client = vim.lsp.get_client_by_id(client_id) - return client and client.name or nil - end - '' - else null; - }; notification_group = mkOption { description = "How to get a progress message's notification group key"; - type = str; - default = '' + type = luaInline; + default = mkLuaInline '' function(msg) return msg.lsp_client.name end ''; - apply = mkLuaInline; }; ignore = mkOption { description = "Ignore LSP servers by name"; @@ -172,33 +156,29 @@ in { }; format_message = mkOption { description = "How to format a progress message"; - type = str; - default = '' + type = luaInline; + default = mkLuaInline '' require("fidget.progress.display").default_format_message ''; - apply = mkLuaInline; }; format_annote = mkOption { description = "How to format a progress annotation"; - type = str; - default = '' + type = luaInline; + default = mkLuaInline '' function(msg) return msg.title end ''; - apply = mkLuaInline; }; format_group_name = mkOption { description = "How to format a progress notification group's name"; - type = str; - default = '' + type = luaInline; + default = mkLuaInline '' function(group) return tostring(group) end ''; - apply = mkLuaInline; }; overrides = mkOption { description = "Override options from the default notification config"; - type = attrsOf str; - default = {rust_analyzer = "{ name = 'rust-analyzer' }";}; - apply = mapAttrs (key: lua: mkLuaInline lua); + type = attrsOf (attrsOf anything); + default = {rust_analyzer = {name = "rust-analyzer";};}; }; }; @@ -240,21 +220,19 @@ in { }; configs = mkOption { description = "How to configure notification groups when instantiated"; - type = attrsOf str; - default = {default = "require('fidget.notification').default_config";}; - apply = mapAttrs (key: lua: mkLuaInline lua); + type = attrsOf luaInline; + default = {default = mkLuaInline "require('fidget.notification').default_config";}; }; redirect = mkOption { description = "Conditionally redirect notifications to another backend"; - type = str; - default = '' + type = luaInline; + default = mkLuaInline '' function(msg, level, opts) if opts and opts.on_open then return require("fidget.integration.nvim-notify").delegate(msg, level, opts) end end ''; - apply = mkLuaInline; }; view = { @@ -280,13 +258,12 @@ in { }; render_message = mkOption { description = "How to render notification messages"; - type = str; - default = '' + type = luaInline; + default = mkLuaInline '' function(msg, cnt) return cnt == 1 and msg or string.format("(%dx) %s", cnt, msg) end ''; - apply = mkLuaInline; }; }; @@ -386,11 +363,10 @@ in { }; path = mkOption { description = "Where Fidget writes its logs to"; - type = str; - default = '' + type = luaInline; + default = mkLuaInline '' string.format("%s/fidget.nvim.log", vim.fn.stdpath("cache")) ''; - apply = mkLuaInline; }; }; };