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;
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 = types.str;
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 <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 = {
extraPlugins = [ pkgs.vimPlugins.lightline-vim ];
extraConfigVim = ''
""" lightline {{{
let g:lightline = { 'colorscheme': '${cfg.colorscheme}' }
let g:lightline = ${configString}
${cfg.extraConfig}
""" }}}
'';
};