550389392a
The previous implementation of plugin-support for the kakoune derivation was based on generating, at build time, a `plugins.kak` file that would source all .kak files in the list of plugins, and wrap the `kak` binary in a script that would add some command-line arguments so that this file gets loaded on start-up. The main problem with this approach is that the plugins' code get executed *after* the user's configuration file is loaded, so effectively one cannot automatically activate/configure these plugins. The idiomatic way of loading plugins is ensuring they end up installed somwhere under `share/kak/autoload`. Because plugins are already being packaged to have their code in `share/kak/autoload/plugins/<name-of-plugin>`, we can obtain a derivation that includes the plugins simply by doing a `symlinkJoin` of `kakoune-unwrapped` and all the requested plugins. For this to work, we need to fix two issues: 1. By default, kakoune makes `share/kak/autoload` a symbolic link to `share/kak/rc`, which contains all builtin definitions. We need to patch this to put the symlink under `share/kak/autoload/rc`, so that the join works. 2. By default kakoune expects the `autoload` directory to be in `../share/kak/autoload` relative to the location of the `kak` binary. We need to set the `KAKOUNE_RUNTIME` to point the symlinked share/kak for this to work.
50 lines
1.2 KiB
Nix
50 lines
1.2 KiB
Nix
{ stdenv, fetchFromGitHub, ncurses, asciidoc, docbook_xsl, libxslt, pkgconfig }:
|
|
|
|
with stdenv.lib;
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "kakoune-unwrapped";
|
|
version = "2020.09.01";
|
|
src = fetchFromGitHub {
|
|
repo = "kakoune";
|
|
owner = "mawww";
|
|
rev = "v${version}";
|
|
sha256 = "091qzk0qs7hql0q51hix99srgma35mhdnjfd5ncfba1bmc1h8x5i";
|
|
};
|
|
nativeBuildInputs = [ pkgconfig ];
|
|
buildInputs = [ ncurses asciidoc docbook_xsl libxslt ];
|
|
makeFlags = [ "debug=no" ];
|
|
|
|
postPatch = ''
|
|
export PREFIX=$out
|
|
cd src
|
|
sed -ie 's#--no-xmllint#--no-xmllint --xsltproc-opts="--nonet"#g' Makefile
|
|
'';
|
|
|
|
preConfigure = ''
|
|
export version="v${version}"
|
|
'';
|
|
|
|
doInstallCheckPhase = true;
|
|
installCheckPhase = ''
|
|
$out/bin/kak -ui json -E "kill 0"
|
|
'';
|
|
|
|
postInstall = ''
|
|
# make share/kak/autoload a directory, so we can use symlinkJoin with plugins
|
|
cd "$out/share/kak"
|
|
autoload_target=$(readlink autoload)
|
|
rm autoload
|
|
mkdir autoload
|
|
ln -s --relative "$autoload_target" autoload
|
|
'';
|
|
|
|
meta = {
|
|
homepage = "http://kakoune.org/";
|
|
description = "A vim inspired text editor";
|
|
license = licenses.publicDomain;
|
|
maintainers = with maintainers; [ vrthra ];
|
|
platforms = platforms.unix;
|
|
};
|
|
}
|