kakoune: add support for plugins

The kakoune editor has a plugin mechanism and several plugins are
already packaged under `pkgs.kakounePlugins`. However, adding these
packages to `home.packages` is not enough: the `kakoune` package needs
to be configured with the list of plugins to include, so that they get
sourced on start-up.

We add a `programs.kakoune.plugins` option, analogous to
`programs.vim.plugins`.

The change is backwards compatible since `pkgs.kakoune` is defined as

    wrapKakoune kakoune-unwrapped { };

and `wrapKakoune` defaults the list of plugins to empty.

PR #1356
This commit is contained in:
Daniel Gorin 2020-06-24 10:35:17 +01:00 committed by Robert Helgesson
parent 3886f8db33
commit 96e2f1bdf0
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
4 changed files with 49 additions and 1 deletions

View file

@ -489,6 +489,10 @@ let
};
};
kakouneWithPlugins = pkgs.wrapKakoune pkgs.kakoune-unwrapped {
configure = { plugins = cfg.plugins; };
};
configFile = let
wrapOptions = with cfg.config.wrapLines;
concatStrings [
@ -634,11 +638,22 @@ in {
<filename>~/.config/kak/kakrc</filename>.
'';
};
plugins = mkOption {
type = with types; listOf package;
default = [ ];
example = literalExample "[ pkgs.kakounePlugins.kak-fzf ]";
description = ''
List of kakoune plugins to install. To get a list of
supported plugins run:
<command>nix-env -f '&lt;nixpkgs&gt;' -qaP -A kakounePlugins</command>.
'';
};
};
};
config = mkIf cfg.enable {
home.packages = [ pkgs.kakoune ];
home.packages = [ kakouneWithPlugins ];
xdg.configFile."kak/kakrc".source = configFile;
};
}

View file

@ -1,4 +1,6 @@
{
kakoune-no-plugins = ./no-plugins.nix;
kakoune-use-plugins = ./use-plugins.nix;
kakoune-whitespace-highlighter = ./whitespace-highlighter.nix;
kakoune-whitespace-highlighter-corner-cases =
./whitespace-highlighter-corner-cases.nix;

View file

@ -0,0 +1,13 @@
{ config, lib, pkgs, ... }:
with lib;
{
config = {
programs.kakoune = { enable = true; };
nmt.script = ''
assertFileNotRegex home-path/share/kak/plugins.kak . # file is empty
'';
};
}

View file

@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
with lib;
{
config = {
programs.kakoune = {
enable = true;
plugins = [ pkgs.kakounePlugins.kak-powerline ];
};
nmt.script = let plugins_kak = "home-path/share/kak/plugins.kak";
in ''
assertFileRegex ${plugins_kak} \
'^source "/nix/store/.*-kak-powerline/share/kak/autoload/plugins/powerline/.*.kak"$'
'';
};
}