haskell-lib: Factor out shell completion scripts helper

This commit is contained in:
John Ericson 2018-10-30 14:20:24 -04:00
parent 88cd633ea4
commit c34f5176f1
2 changed files with 18 additions and 7 deletions

View File

@ -407,4 +407,19 @@ rec {
in
builtins.listToAttrs (map toKeyVal haskellPaths);
# Modify a Haskell package to add completion scripts for the given executable
# produced by it. These completion scripts will be picked up automatically if
# the resulting derivation is installed, e.g. by `nix-env -i`.
addOptparseApplicativeCompletionScripts = exeName: pkg: overrideCabal pkg (drv: {
postInstall = (drv.postInstall or "") + ''
bashCompDir="$out/share/bash-completion/completions"
zshCompDir="$out/share/zsh/vendor-completions"
fishCompDir="$out/share/fish/vendor_completions.d"
mkdir -p "$bashCompDir" "$zshCompDir" "$fishCompDir"
"$out/bin/${exeName}" --bash-completion-script "$out/bin/${exeName}" >"$bashCompDir/${exeName}"
"$out/bin/${exeName}" --zsh-completion-script "$out/bin/${exeName}" >"$zshCompDir/_${exeName}"
"$out/bin/${exeName}" --fish-completion-script "$out/bin/${exeName}" >"$fishCompDir/${exeName}.fish"
'';
});
}

View File

@ -1001,10 +1001,10 @@ with pkgs;
cue2pops = callPackage ../tools/cd-dvd/cue2pops { };
cabal2nix = haskell.lib.overrideCabal haskellPackages.cabal2nix (drv: {
cabal2nix = haskell.lib.overrideCabal (haskell.lib.addOptparseApplicativeCompletionScripts "cabal2nix" haskellPackages.cabal2nix) (drv: {
isLibrary = false;
enableSharedExecutables = false;
executableToolDepends = [ makeWrapper ];
executableToolDepends = (drv.executableToolDepends or []) ++ [ makeWrapper ];
postInstall = ''
exe=$out/libexec/${drv.pname}-${drv.version}/${drv.pname}
install -D $out/bin/${drv.pname} $exe
@ -1012,11 +1012,7 @@ with pkgs;
makeWrapper $exe $out/bin/${drv.pname} \
--prefix PATH ":" "${nix}/bin" \
--prefix PATH ":" "${nix-prefetch-scripts}/bin"
mkdir -p $out/share/{bash-completion/completions,zsh/vendor-completions,fish/completions}
$exe --bash-completion-script $exe >$out/share/bash-completion/completions/${drv.pname}
$exe --zsh-completion-script $exe >$out/share/zsh/vendor-completions/_${drv.pname}
$exe --fish-completion-script $exe >$out/share/fish/completions/${drv.pname}.fish
'';
'' + (drv.postInstall or "");
});
stack2nix = with haskell.lib; overrideCabal (justStaticExecutables haskellPackages.stack2nix) (drv: {