From c34f5176f1173ac2cdaeed4512a61389d98f9d9f Mon Sep 17 00:00:00 2001 From: John Ericson Date: Tue, 30 Oct 2018 14:20:24 -0400 Subject: [PATCH] haskell-lib: Factor out shell completion scripts helper --- pkgs/development/haskell-modules/lib.nix | 15 +++++++++++++++ pkgs/top-level/all-packages.nix | 10 +++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pkgs/development/haskell-modules/lib.nix b/pkgs/development/haskell-modules/lib.nix index 8dae7c8d72c..10edf69478b 100644 --- a/pkgs/development/haskell-modules/lib.nix +++ b/pkgs/development/haskell-modules/lib.nix @@ -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" + ''; + }); } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a2152113ae5..abd7db6263d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -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: {