lightline: support all options of the official plugin

This commit is contained in:
Pedro Alves 2020-12-31 18:15:19 +00:00
parent 2c9631997f
commit 18d6f8da5f
4 changed files with 99 additions and 3 deletions

1
.tmp Symbolic link
View file

@ -0,0 +1 @@
/nix/store/5ixvasljzz7fixv2nd28c8d6bsnam3ap-nixos-system-nixos-21.03.20201227.2f47650

6
plugins/helpers.nix Normal file
View file

@ -0,0 +1,6 @@
{ lib, ... }:
{
# vim dictionaries are, in theory, compatible with JSON
toVimDict = args: builtins.toJSON
(lib.filterAttrs (n: v: !builtins.isNull v) args);
}

View file

@ -0,0 +1,19 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = programs.nixvim.plugins.treesitter;
in
{
options = {
# TODO we need some treesitter configuration, all done in lua!
programs.nixvim.plugins.treesitter = {
enable = mkEnableOption "Enable treesitter highlighting";
};
};
config = mkIf cfg.enable {
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.nvim-treesitter ];
};
}
}

View file

@ -2,26 +2,96 @@
with lib; with lib;
let let
cfg = config.programs.nixvim.plugins.lightline; cfg = config.programs.nixvim.plugins.lightline;
helpers = import ../helpers.nix { inherit lib; };
in { in {
options = { options = {
programs.nixvim.plugins.lightline = { programs.nixvim.plugins.lightline = {
enable = mkEnableOption "Enable lightline"; enable = mkEnableOption "Enable lightline";
colorscheme = mkOption { colorscheme = mkOption {
type = types.str; type = with types; nullOr str;
default = config.programs.nixvim.colorscheme; default = config.programs.nixvim.colorscheme;
description = "The colorscheme to use for lightline. Defaults to .colorscheme."; description = "The colorscheme to use for lightline. Defaults to .colorscheme.";
example = "gruvbox"; 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 <para>extraConfig</para>
'';
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;
};
extraConfig = mkOption {
type = types.lines;
default = "";
description = "Extra configuration for this plugin";
};
}; };
}; };
config = mkIf cfg.enable { config = let
configString = helpers.toVimDict {
inherit (cfg) colorscheme active component componentFunction modeMap;
};
in mkIf cfg.enable {
programs.nixvim = { programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.lightline-vim ]; extraPlugins = [ pkgs.vimPlugins.lightline-vim ];
extraConfigVim = '' extraConfigVim = ''
""" lightline {{{ """ lightline {{{
let g:lightline = { 'colorscheme': '${cfg.colorscheme}' } let g:lightline = ${configString}
${cfg.extraConfig}
""" }}} """ }}}
''; '';
}; };