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 in
builtins.listToAttrs (map toKeyVal haskellPaths); 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 { }; 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; isLibrary = false;
enableSharedExecutables = false; enableSharedExecutables = false;
executableToolDepends = [ makeWrapper ]; executableToolDepends = (drv.executableToolDepends or []) ++ [ makeWrapper ];
postInstall = '' postInstall = ''
exe=$out/libexec/${drv.pname}-${drv.version}/${drv.pname} exe=$out/libexec/${drv.pname}-${drv.version}/${drv.pname}
install -D $out/bin/${drv.pname} $exe install -D $out/bin/${drv.pname} $exe
@ -1012,11 +1012,7 @@ with pkgs;
makeWrapper $exe $out/bin/${drv.pname} \ makeWrapper $exe $out/bin/${drv.pname} \
--prefix PATH ":" "${nix}/bin" \ --prefix PATH ":" "${nix}/bin" \
--prefix PATH ":" "${nix-prefetch-scripts}/bin" --prefix PATH ":" "${nix-prefetch-scripts}/bin"
mkdir -p $out/share/{bash-completion/completions,zsh/vendor-completions,fish/completions} '' + (drv.postInstall or "");
$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
'';
}); });
stack2nix = with haskell.lib; overrideCabal (justStaticExecutables haskellPackages.stack2nix) (drv: { stack2nix = with haskell.lib; overrideCabal (justStaticExecutables haskellPackages.stack2nix) (drv: {