Merge pull request #173 from ksonj/lualine-options

statusline/lualine: extensible sections
This commit is contained in:
NotAShelf 2023-10-25 06:35:09 +03:00 committed by GitHub
commit 30552a9ec3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 146 additions and 65 deletions

View File

@ -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`

View File

@ -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}}'';
}

View File

@ -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 = {},

View File

@ -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 = [];
};
};
};