From f79d69113e4231596335c68c934c7404c172ec0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Hedin=20Br=C3=B8nner?= Date: Sun, 10 Dec 2017 12:41:24 +0100 Subject: [PATCH] nix-bash-completions: lazy load aware install `bash-completion` lazy loads completion scripts by looking up the command name in the completion directory. As such we need to create a symlink for every nix command. The problem had been masked by nixos sourcing all completion scripts on startup. --- pkgs/shells/nix-bash-completions/default.nix | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pkgs/shells/nix-bash-completions/default.nix b/pkgs/shells/nix-bash-completions/default.nix index 7de8be10c9b..f9cd97e9735 100644 --- a/pkgs/shells/nix-bash-completions/default.nix +++ b/pkgs/shells/nix-bash-completions/default.nix @@ -1,19 +1,29 @@ { stdenv, fetchFromGitHub }: stdenv.mkDerivation rec { - version = "0.6"; + version = "0.6.1"; name = "nix-bash-completions-${version}"; src = fetchFromGitHub { owner = "hedning"; repo = "nix-bash-completions"; rev = "v${version}"; - sha256 = "093rla6wwx51fclh7xm8qlssx70hj0fj23r59qalaaxf7fdzg2hf"; + sha256 = "10nzdn249f0cw6adgpbpg4x90ysvxm7vs9jjbbwynfh9kngijp64"; }; + # To enable lazy loading via. bash-completion we need a symlink to the script + # from every command name. installPhase = '' - mkdir -p $out/share/bash-completion/completions - cp _nix $out/share/bash-completion/completions + commands=$( + function complete() { shift 2; echo "$@"; } + shopt -s extglob + source _nix + ) + install -Dm444 -t $out/share/bash-completion/completions _nix + cd $out/share/bash-completion/completions + for c in $commands; do + ln -s _nix $c + done ''; meta = with stdenv.lib; {