haskellPackages: Add shell completions + improve docs
This adds the remaining parts of #42657 on top of #49477, renames the function to a better name, and improves the docs
This commit is contained in:
committed by
John Ericson
parent
8d99a3455b
commit
2a1c0dde8f
@@ -408,10 +408,24 @@ 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: {
|
||||
addOptparseApplicativeCompletionScripts = exeName: pkg:
|
||||
builtins.trace "addOptparseApplicativeCompletionScripts is deprecated in favor of generateOptparseApplicativeCompletion. Please change ${pkg.name} to use the latter or its plural form."
|
||||
(generateOptparseApplicativeCompletion exeName pkg);
|
||||
|
||||
/*
|
||||
Modify a Haskell package to add shell 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`.
|
||||
|
||||
Invocation:
|
||||
generateOptparseApplicativeCompletions command pkg
|
||||
|
||||
|
||||
command: name of an executable
|
||||
pkg: Haskell package that builds the executables
|
||||
*/
|
||||
generateOptparseApplicativeCompletion = exeName: pkg: overrideCabal pkg (drv: {
|
||||
postInstall = (drv.postInstall or "") + ''
|
||||
bashCompDir="$out/share/bash-completion/completions"
|
||||
zshCompDir="$out/share/zsh/vendor-completions"
|
||||
@@ -420,6 +434,28 @@ rec {
|
||||
"$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"
|
||||
|
||||
# Sanity check
|
||||
grep -F ${exeName} <$bashCompDir/${exeName} >/dev/null || {
|
||||
echo 'Could not find ${exeName} in completion script.'
|
||||
exit 1
|
||||
}
|
||||
'';
|
||||
});
|
||||
|
||||
/*
|
||||
Modify a Haskell package to add shell completion scripts for the
|
||||
given executables produced by it. These completion scripts will be
|
||||
picked up automatically if the resulting derivation is installed,
|
||||
e.g. by `nix-env -i`.
|
||||
|
||||
Invocation:
|
||||
generateOptparseApplicativeCompletions commands pkg
|
||||
|
||||
|
||||
commands: name of an executable
|
||||
pkg: Haskell package that builds the executables
|
||||
*/
|
||||
generateOptparseApplicativeCompletions = commands: pkg:
|
||||
pkgs.lib.foldr generateOptparseApplicativeCompletion pkg commands;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user