pipx: add shell completions

Install shell completions with `pipx` for `bash`, `zsh` and `fish`.

Apart from convenience, this reduces confusion. `pipx completions` is
not quite accurate when `pipx` is installed with Nix, since you need to
do  `nix shell nixpkgs#python311Packages.argcomplete
register-python-argcomplete`. It is possible to also put it in the path,
as suggested in
https://discourse.nixos.org/t/python-how-to-expose-a-dependencys-bin/283,
but that would be a separate PR.

Fixes https://github.com/NixOS/nixpkgs/issues/299845

Cc: [@natsukium](https://github.com/natsukium),
[@mweinelt](https://github.com/mweinelt),
[@yshym](https://github.com/yshym) (same people I Cc-ed in the issue)
This commit is contained in:
Ilya Grigoriev 2024-03-30 16:27:00 -07:00
parent c6d803b6cd
commit 56be20aa49

View file

@ -4,6 +4,7 @@
, fetchFromGitHub
, hatchling
, hatch-vcs
, installShellFiles
, packaging
, platformdirs
, pytestCheckHook
@ -41,6 +42,10 @@ buildPythonPackage rec {
tomli
];
nativeBuildInputs = [
installShellFiles
];
nativeCheckInputs = [
pytestCheckHook
git
@ -79,6 +84,13 @@ buildPythonPackage rec {
"test_skip_maintenance"
];
postInstall = ''
installShellCompletion --cmd pipx \
--bash <(${argcomplete}/bin/register-python-argcomplete pipx --shell bash) \
--zsh <(${argcomplete}/bin/register-python-argcomplete pipx --shell zsh) \
--fish <(${argcomplete}/bin/register-python-argcomplete pipx --shell fish)
'';
meta = with lib; {
description = "Install and run Python applications in isolated environments";
mainProgram = "pipx";