diff options
-rw-r--r-- | doc/package-notes.xml | 12 | ||||
-rw-r--r-- | pkgs/applications/editors/kakoune/default.nix | 2 | ||||
-rw-r--r-- | pkgs/applications/editors/kakoune/plugins.nix | 5 | ||||
-rw-r--r-- | pkgs/applications/editors/kakoune/wrapper.nix | 44 | ||||
-rw-r--r-- | pkgs/applications/editors/kakoune/wrapper.sh | 30 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 5 |
6 files changed, 96 insertions, 2 deletions
diff --git a/doc/package-notes.xml b/doc/package-notes.xml index 2b7b4b9bc51ba..d2c660e22a9b0 100644 --- a/doc/package-notes.xml +++ b/doc/package-notes.xml @@ -325,6 +325,18 @@ packageOverrides = pkgs: { elm2nix</link>. </para> </section> + <section xml:id="sec-kakoune"> + <title>Kakoune</title> + + <para> + Kakoune can be built to autoload plugins: +<programlisting>(kakoune.override { + configure = { + plugins = with pkgs.kakounePlugins; [ parinfer-rust ]; + }; +})</programlisting> + </para> + </section> <section xml:id="sec-shell-helpers"> <title>Interactive shell helpers</title> diff --git a/pkgs/applications/editors/kakoune/default.nix b/pkgs/applications/editors/kakoune/default.nix index 16596056c9a06..8dfcc48566806 100644 --- a/pkgs/applications/editors/kakoune/default.nix +++ b/pkgs/applications/editors/kakoune/default.nix @@ -3,7 +3,7 @@ with stdenv.lib; stdenv.mkDerivation rec { - name = "kakoune-${version}"; + pname = "kakoune-unwrapped"; version = "2019.01.20"; src = fetchFromGitHub { repo = "kakoune"; diff --git a/pkgs/applications/editors/kakoune/plugins.nix b/pkgs/applications/editors/kakoune/plugins.nix new file mode 100644 index 0000000000000..d2f3607d63cba --- /dev/null +++ b/pkgs/applications/editors/kakoune/plugins.nix @@ -0,0 +1,5 @@ +{ parinfer-rust }: + +{ + inherit parinfer-rust; +} diff --git a/pkgs/applications/editors/kakoune/wrapper.nix b/pkgs/applications/editors/kakoune/wrapper.nix new file mode 100644 index 0000000000000..b4cc823880e72 --- /dev/null +++ b/pkgs/applications/editors/kakoune/wrapper.nix @@ -0,0 +1,44 @@ +{ stdenv, bash }: +with stdenv.lib; + +kakoune: + +let + getPlugins = { plugins ? [] }: plugins; + + wrapper = { configure ? {} }: + stdenv.mkDerivation rec { + pname = "kakoune"; + version = getVersion kakoune; + + src = ./.; + buildCommand = '' + mkdir -p $out/share/kak + for plugin in ${strings.escapeShellArgs (getPlugins configure)}; do + if [[ -d $plugin/share/kak/autoload ]]; then + find "$plugin/share/kak/autoload" -type f -name '*.kak'| while read rcfile; do + printf 'source "%s"\n' "$rcfile" + done + fi + done >>$out/share/kak/plugins.kak + + mkdir -p $out/bin + substitute ${src}/wrapper.sh $out/bin/kak \ + --subst-var-by bash "${bash}" \ + --subst-var-by kakoune "${kakoune}" \ + --subst-var-by out "$out" + chmod +x $out/bin/kak + ''; + + preferLocalBuild = true; + buildInputs = [ bash kakoune ]; + passthru = { unwrapped = kakoune; }; + + meta = kakoune.meta // { + # prefer wrapper over the package + priority = (kakoune.meta.priority or 0) - 1; + hydraPlatforms = []; + }; + }; +in + makeOverridable wrapper diff --git a/pkgs/applications/editors/kakoune/wrapper.sh b/pkgs/applications/editors/kakoune/wrapper.sh new file mode 100644 index 0000000000000..48a971a10c6e6 --- /dev/null +++ b/pkgs/applications/editors/kakoune/wrapper.sh @@ -0,0 +1,30 @@ +#!@bash@/bin/bash + +# We use the -E option to load plugins. This only makes sense when we are +# starting a new session, so we detect that. Also, Kakoune can only handle +# one -E option, so we prepend loading plugins to an existing one. +args=( "$@" ) +loadPlugins=true +EValueOffset=-1 +pluginScript='@out@/share/kak/plugins.kak' + +for (( i = 0; i < ${#args[@]}; i++ )); do + case "${args[i]}" in + -n|-c|-l|-p|-clear|-version) loadPlugins=false;; + -E) EValueOffset=$(( i + 1 ));; + --) break;; + esac + case "${args[i]}" in + -E|-c|-e|-s|-p|-f|-i|-ui|-debug) i=$(( i + 1 ));; + esac +done + +if [[ $loadPlugins = true ]]; then + if (( EValueOffset >= 0 )); then + args[EValueOffset]="source '$pluginScript'"$'\n'"${args[EValueOffset]}" + else + args=( "-E" "source '$pluginScript'" "${args[@]}" ) + fi +fi + +exec @kakoune@/bin/kak "${args[@]}" diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 09a2f6c391dbf..f213cc7c83fbd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3943,7 +3943,10 @@ in kalibrate-hackrf = callPackage ../applications/radio/kalibrate-hackrf { }; - kakoune = callPackage ../applications/editors/kakoune { }; + wrapKakoune = callPackage ../applications/editors/kakoune/wrapper.nix { }; + kakounePlugins = callPackage ../applications/editors/kakoune/plugins.nix { }; + kakoune-unwrapped = callPackage ../applications/editors/kakoune { }; + kakoune = wrapKakoune kakoune-unwrapped { }; kbdd = callPackage ../applications/window-managers/kbdd { }; |