diff --git a/docs/release-notes/rl-0.5.adoc b/docs/release-notes/rl-0.5.adoc index 10bb4a8..f738a16 100644 --- a/docs/release-notes/rl-0.5.adoc +++ b/docs/release-notes/rl-0.5.adoc @@ -89,3 +89,7 @@ https://github.com/ksonj[ksonj]: * Removed redundant "Enable ..." in `mkEnableOption` descriptions * Add options to modify LSP key bindings and add proper whichkey descriptions + +* Changed type of `statusline.lualine.activeSection` and `statusline.lualine.inactiveSection` from `attrsOf str` to `attrsOf (listOf str)` + +* Added `statusline.lualine.extraActiveSection` and `statusline.lualine.extraInactiveSection` diff --git a/lib/lua.nix b/lib/lua.nix index c5c2ae5..d888d3f 100644 --- a/lib/lua.nix +++ b/lib/lua.nix @@ -44,4 +44,6 @@ ) ) + " }"; + # 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: ''{${builtins.concatStringsSep "," items}}''; } diff --git a/modules/statusline/lualine/config.nix b/modules/statusline/lualine/config.nix index e28aefa..53cf3fd 100644 --- a/modules/statusline/lualine/config.nix +++ b/modules/statusline/lualine/config.nix @@ -5,6 +5,7 @@ }: with lib; let cfg = config.vim.statusline.lualine; + inherit (nvim.lua) luaTable; in { config = (mkIf cfg.enable) { vim.startPlugins = [ @@ -32,21 +33,21 @@ in { }, -- active sections sections = { - lualine_a = ${cfg.activeSection.a}, - lualine_b = ${cfg.activeSection.b}, - lualine_c = ${cfg.activeSection.c}, - lualine_x = ${cfg.activeSection.x}, - lualine_y = ${cfg.activeSection.y}, - lualine_z = ${cfg.activeSection.z}, + lualine_a = ${luaTable (cfg.activeSection.a ++ cfg.extraActiveSection.a)}, + lualine_b = ${luaTable (cfg.activeSection.b ++ cfg.extraActiveSection.b)}, + lualine_c = ${luaTable (cfg.activeSection.c ++ cfg.extraActiveSection.c)}, + lualine_x = ${luaTable (cfg.activeSection.x ++ cfg.extraActiveSection.x)}, + lualine_y = ${luaTable (cfg.activeSection.y ++ cfg.extraActiveSection.y)}, + lualine_z = ${luaTable (cfg.activeSection.z ++ cfg.extraActiveSection.z)}, }, -- inactive_sections = { - lualine_a = ${cfg.inactiveSection.a}, - lualine_b = ${cfg.inactiveSection.b}, - lualine_c = ${cfg.inactiveSection.c}, - lualine_x = ${cfg.inactiveSection.x}, - lualine_y = ${cfg.inactiveSection.y}, - lualine_z = ${cfg.inactiveSection.z}, + lualine_a = ${luaTable (cfg.inactiveSection.a ++ cfg.extraInactiveSection.a)}, + lualine_b = ${luaTable (cfg.inactiveSection.b ++ cfg.extraInactiveSection.b)}, + lualine_c = ${luaTable (cfg.inactiveSection.c ++ cfg.extraInactiveSection.c)}, + lualine_x = ${luaTable (cfg.inactiveSection.x ++ cfg.extraInactiveSection.x)}, + lualine_y = ${luaTable (cfg.inactiveSection.y ++ cfg.extraInactiveSection.y)}, + lualine_z = ${luaTable (cfg.inactiveSection.z ++ cfg.extraInactiveSection.z)}, }, tabline = {}, diff --git a/modules/statusline/lualine/lualine.nix b/modules/statusline/lualine/lualine.nix index 941a3a2..20480fd 100644 --- a/modules/statusline/lualine/lualine.nix +++ b/modules/statusline/lualine/lualine.nix @@ -117,10 +117,10 @@ in { activeSection = { a = mkOption { - type = types.str; + type = with types; listOf str; description = "active config for: | (A) | B | C X | Y | Z |"; - default = '' - { + default = [ + '' { "mode", icons_enabled = true, @@ -128,37 +128,39 @@ in { left = '▎', right = '' }, - }, - } - ''; + } + '' + ]; }; b = mkOption { - type = types.str; + type = with types; listOf str; description = "active config for: | A | (B) | C X | Y | Z |"; - default = '' - { + default = [ + '' { "filetype", colored = true, icon_only = true, icon = { align = 'left' }, color = {bg='${colorPuccin}', fg='lavender'}, - }, + } + '' + '' { "filename", color = {bg='${colorPuccin}'}, symbols = {modified = '', readonly = ''}, - }, - } - ''; + } + '' + ]; }; c = mkOption { - type = types.str; + type = with types; listOf str; description = "active config for: | A | B | (C) X | Y | Z |"; - default = '' - { + default = [ + '' { "diff", colored = false, @@ -173,16 +175,16 @@ in { bg='${colorPuccin}', fg='lavender' }, - }, - } - ''; + } + '' + ]; }; x = mkOption { - type = types.str; + type = with types; listOf str; description = "active config for: | A | B | C (X) | Y | Z |"; - default = '' - { + default = [ + '' { -- Lsp server name function() @@ -218,7 +220,9 @@ in { end, icon = ' ', color = {bg='${colorPuccin}', fg='lavender'}, - }, + } + '' + '' { "diagnostics", sources = {'nvim_lsp', 'nvim_diagnostic', 'coc'}, @@ -229,45 +233,51 @@ in { color_warn = { fg = 'yellow' }, color_info = { fg = 'cyan' }, }, - }, - } - ''; + } + '' + ]; }; y = mkOption { - type = types.str; + type = with types; listOf str; description = "active config for: | A | B | C X | (Y) | Z |"; - default = '' - { + default = [ + '' { 'searchcount', maxcount = 999, timeout = 120, color = {bg='${colorPuccin}', fg='lavender'} - }, + } + '' + '' { "branch", icon = ' •', color = {bg='${colorPuccin}', fg='lavender'}, - }, - } - ''; + } + '' + ]; }; z = mkOption { - type = types.str; + type = with types; listOf str; description = "active config for: | A | B | C X | Y | (Z) |"; - default = '' - { + default = [ + '' { "progress", separator = { left = '', }, - }, + } + '' + '' { "location", - }, + } + '' + '' { "fileformat", color = {fg='black'}, @@ -276,47 +286,111 @@ in { dos = '', -- e70f mac = '', -- e711 }, - }, - } - ''; + } + '' + ]; + }; + }; + extraActiveSection = { + a = mkOption { + type = with types; listOf str; + description = "Extra entries for activeSection.a"; + default = []; + }; + b = mkOption { + type = with types; listOf str; + description = "Extra entries for activeSection.b"; + default = []; + }; + c = mkOption { + type = with types; listOf str; + description = "Extra entries for activeSection.c"; + default = []; + }; + x = mkOption { + type = with types; listOf str; + description = "Extra entries for activeSection.x"; + default = []; + }; + y = mkOption { + type = with types; listOf str; + description = "Extra entries for activeSection.y"; + default = []; + }; + z = mkOption { + type = with types; listOf str; + description = "Extra entries for activeSection.z"; + default = []; }; }; inactiveSection = { a = mkOption { - type = types.str; + type = with types; listOf str; description = "inactive config for: | (A) | B | C X | Y | Z |"; - default = "{}"; + default = []; }; b = mkOption { - type = types.str; + type = with types; listOf str; description = "inactive config for: | A | (B) | C X | Y | Z |"; - default = "{}"; + default = []; }; c = mkOption { - type = types.str; + type = with types; listOf str; description = "inactive config for: | A | B | (C) X | Y | Z |"; - default = "{'filename'}"; + default = ["'filename'"]; }; x = mkOption { - type = types.str; + type = with types; listOf str; description = "inactive config for: | A | B | C (X) | Y | Z |"; - default = "{'location'}"; + default = ["'location'"]; }; y = mkOption { - type = types.str; + type = with types; listOf str; description = "inactive config for: | A | B | C X | (Y) | Z |"; - default = "{}"; + default = []; }; z = mkOption { - type = types.str; + type = with types; listOf str; description = "inactive config for: | A | B | C X | Y | (Z) |"; - default = "{}"; + default = []; + }; + }; + extraInactiveSection = { + a = mkOption { + type = with types; listOf str; + description = "Extra entries for inactiveSection.a"; + default = []; + }; + b = mkOption { + type = with types; listOf str; + description = "Extra entries for inactiveSection.b"; + default = []; + }; + c = mkOption { + type = with types; listOf str; + description = "Extra entries for inactiveSection.c"; + default = []; + }; + x = mkOption { + type = with types; listOf str; + description = "Extra entries for inactiveSection.x"; + default = []; + }; + y = mkOption { + type = with types; listOf str; + description = "Extra entries for inactiveSection.y"; + default = []; + }; + z = mkOption { + type = with types; listOf str; + description = "Extra entries for inactiveSection.z"; + default = []; }; }; };