nix-community.nixvim/plugins/statuslines/lightline.nix
Pedro Alves eef84178ab docs: Add basic documentation system based on nmd
You can now run `nix build '.#docs'` to build HTML documentation
documenting every single option on nixvim! Fortunately, thanks to
the 'description' field, most options are already documented, but
there are still a fair few that need documenting.

I will be taking care of those in the next few days. When those are
done, I will find a way to automatically rebuild documentation on every
repo push, and also add a PR hook requiring documentation.

Additionally, I will try to find a way to have per-page plugin docs.
2022-01-12 01:44:51 +00:00

87 lines
2.5 KiB
Nix

{ pkgs, config, lib, ... }:
with lib;
let
cfg = config.programs.nixvim.plugins.lightline;
helpers = import ../helpers.nix { inherit lib; };
in {
options = {
programs.nixvim.plugins.lightline = {
enable = mkEnableOption "Enable lightline";
colorscheme = mkOption {
type = with types; nullOr str;
default = config.programs.nixvim.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 = ''
programs.nixvim.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 {
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.lightline-vim ];
globals.lightline = mkIf (configAttrs != {}) configAttrs;
};
};
}