mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 00:25:42 +02:00
lightline: support all options of the official plugin
This commit is contained in:
parent
2c9631997f
commit
18d6f8da5f
4 changed files with 99 additions and 3 deletions
6
plugins/helpers.nix
Normal file
6
plugins/helpers.nix
Normal 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);
|
||||
}
|
19
plugins/languages/treesitter.nix
Normal file
19
plugins/languages/treesitter.nix
Normal 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 ];
|
||||
};
|
||||
}
|
||||
}
|
|
@ -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}
|
||||
""" }}}
|
||||
'';
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue