vim: Allow setting init.vim config alongside plugins + neovim test (#876)
* neovim: allow setting init.vim config alongside plugins * neovim: add test for neovim plugins * neovim: make pluginWithConfigType a have type submodule
This commit is contained in:
parent
43ab2f40b9
commit
abfb4cde51
|
@ -24,12 +24,35 @@ let
|
||||||
merge = mergeOneOption;
|
merge = mergeOneOption;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pluginWithConfigType = types.submodule {
|
||||||
|
options = {
|
||||||
|
plugin = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
description = "vim plugin";
|
||||||
|
};
|
||||||
|
config = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
description = "vimscript for this plugin to be placed in init.vim";
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# A function to get the configuration string (if any) from an element of 'plugins'
|
||||||
|
pluginConfig = p:
|
||||||
|
if builtins.hasAttr "plugin" p && builtins.hasAttr "config" p then ''
|
||||||
|
" ${p.plugin.pname} {{{
|
||||||
|
${p.config}
|
||||||
|
" }}}
|
||||||
|
'' else "";
|
||||||
|
|
||||||
moduleConfigure =
|
moduleConfigure =
|
||||||
optionalAttrs (cfg.extraConfig != "") {
|
optionalAttrs (cfg.extraConfig != "" || (lib.filter (hasAttr "config") cfg.plugins) != []) {
|
||||||
customRC = cfg.extraConfig;
|
customRC = cfg.extraConfig +
|
||||||
|
pkgs.lib.concatMapStrings pluginConfig cfg.plugins;
|
||||||
}
|
}
|
||||||
// optionalAttrs (cfg.plugins != []) {
|
// optionalAttrs (cfg.plugins != [] ) {
|
||||||
packages.home-manager.start = cfg.plugins;
|
packages.home-manager.start = map (x: x.plugin or x) cfg.plugins;
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
|
@ -178,11 +201,20 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
plugins = mkOption {
|
plugins = mkOption {
|
||||||
type = with types; listOf package;
|
type = with types; listOf (either package pluginWithConfigType);
|
||||||
default = [ ];
|
default = [ ];
|
||||||
example = literalExample "[ pkgs.vimPlugins.yankring ]";
|
example = literalExample ''
|
||||||
|
with pkgs.vimPlugins; [
|
||||||
|
yankring
|
||||||
|
vim-nix
|
||||||
|
{ plugin = vim-startify;
|
||||||
|
config = "let g:startify_change_to_vcs_root = 0";
|
||||||
|
}
|
||||||
|
]
|
||||||
|
'';
|
||||||
description = ''
|
description = ''
|
||||||
List of vim plugins to install.
|
List of vim plugins to install optionally associated with
|
||||||
|
configuration to be placed in init.vim.
|
||||||
|
|
||||||
</para><para>
|
</para><para>
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ import nmt {
|
||||||
./modules/programs/ncmpcpp
|
./modules/programs/ncmpcpp
|
||||||
./modules/programs/ne
|
./modules/programs/ne
|
||||||
./modules/programs/neomutt
|
./modules/programs/neomutt
|
||||||
|
./modules/programs/neovim
|
||||||
./modules/programs/newsboat
|
./modules/programs/newsboat
|
||||||
./modules/programs/nushell
|
./modules/programs/nushell
|
||||||
./modules/programs/qutebrowser
|
./modules/programs/qutebrowser
|
||||||
|
|
1
tests/modules/programs/neovim/default.nix
Normal file
1
tests/modules/programs/neovim/default.nix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{ neovim-plugin-config = ./plugin-config.nix; }
|
37
tests/modules/programs/neovim/plugin-config.nix
Normal file
37
tests/modules/programs/neovim/plugin-config.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = ''
|
||||||
|
" This should be present in vimrc
|
||||||
|
'';
|
||||||
|
plugins = with pkgs.vimPlugins; [
|
||||||
|
vim-nix
|
||||||
|
{
|
||||||
|
plugin = vim-commentary;
|
||||||
|
config = ''
|
||||||
|
" This should be present too
|
||||||
|
autocmd FileType c setlocal commentstring=//\ %s
|
||||||
|
autocmd FileType c setlocal comments=://
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
vimrc=$(grep -Po "(?<=-u )[^ ]*" < "${
|
||||||
|
builtins.toJSON config.programs.neovim.finalPackage
|
||||||
|
}/bin/nvim")
|
||||||
|
# We need to remove the unkown store paths in the config
|
||||||
|
TESTED="" assertFileContent \
|
||||||
|
<( ${pkgs.perl}/bin/perl -pe "s|\Q$NIX_STORE\E/[a-z0-9]{32}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" < "$vimrc"
|
||||||
|
) \
|
||||||
|
"${./plugin-config.vim}"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
22
tests/modules/programs/neovim/plugin-config.vim
Normal file
22
tests/modules/programs/neovim/plugin-config.vim
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
" configuration generated by NIX
|
||||||
|
set nocompatible
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set packpath^=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-vim-pack-dir
|
||||||
|
set runtimepath^=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-vim-pack-dir
|
||||||
|
|
||||||
|
filetype indent plugin on | syn on
|
||||||
|
|
||||||
|
|
||||||
|
" This should be present in vimrc
|
||||||
|
" vim-commentary {{{
|
||||||
|
" This should be present too
|
||||||
|
autocmd FileType c setlocal commentstring=//\ %s
|
||||||
|
autocmd FileType c setlocal comments=://
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
Loading…
Reference in a new issue