mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +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
1
.tmp
Symbolic link
1
.tmp
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/5ixvasljzz7fixv2nd28c8d6bsnam3ap-nixos-system-nixos-21.03.20201227.2f47650
|
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;
|
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}
|
||||||
""" }}}
|
""" }}}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue