nix-community.nixvim/plugins/statuslines/lightline.nix
2023-02-20 10:42:13 +00:00

92 lines
2.5 KiB
Nix

{
pkgs,
config,
lib,
...
}:
with lib; let
cfg = config.plugins.lightline;
helpers = import ../helpers.nix {inherit lib;};
in {
options = {
plugins.lightline = {
enable = mkEnableOption "lightline";
package = helpers.mkPackageOption "lightline" pkgs.vimPlugins.lightline-vim;
colorscheme = mkOption {
type = with types; nullOr str;
default = config.colorscheme;
description = "The colorscheme to use for lightline. Defaults to .colorscheme.";
example = "gruvbox";
};
componentFunction = mkOption {
default = null;
type = with types; nullOr (attrsOf str);
description = ''
A list of function component definitions.
You should define the functions themselves in extraConfig
'';
example = ''
plugins.lightline = {
enable = true;
componentFunction = {
readonly = "LightlineReadonly";
};
extraConfig = '''
function! LightlineReadonly()
return &readonly && &filetype !=# 'help' ? 'RO' : '''
endfunction
''';
};
'';
};
component = mkOption {
default = null;
type = with types; nullOr (attrsOf str);
description = "Lightline component definitions. Uses 'statusline' syntax. Consult :h 'statusline' for a list of what's available.";
};
active = mkOption {
default = null;
type = types.nullOr (types.submodule {
options = let
listType = with types; nullOr (listOf (listOf str));
in {
left = mkOption {
type = listType;
description = "List of components that will show up on the left side of the bar";
default = null;
};
right = mkOption {
type = listType;
description = "List of components that will show up on the right side of the bar";
default = null;
};
};
});
};
modeMap = mkOption {
type = with types; nullOr (attrsOf str);
description = "Mode name mappings";
default = null;
};
};
};
config = let
configAttrs = filterAttrs (_: v: v != null) {
inherit (cfg) colorscheme active component componentFunction modeMap;
};
in
mkIf cfg.enable {
extraPlugins = [cfg.package];
globals.lightline = mkIf (configAttrs != {}) configAttrs;
};
}