diff options
Diffstat (limited to 'nixpkgs/nixos/modules/programs/fish.nix')
-rw-r--r-- | nixpkgs/nixos/modules/programs/fish.nix | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/nixpkgs/nixos/modules/programs/fish.nix b/nixpkgs/nixos/modules/programs/fish.nix index 03d6c26c8c87..bcb5a3f341b5 100644 --- a/nixpkgs/nixos/modules/programs/fish.nix +++ b/nixpkgs/nixos/modules/programs/fish.nix @@ -172,7 +172,7 @@ in programs.fish.interactiveShellInit = '' # add completions generated by NixOS to $fish_complete_path begin - # joins with null byte to acommodate all characters in paths, then respectively gets all paths before / after the first one including "generated_completions", + # joins with null byte to acommodate all characters in paths, then respectively gets all paths before (exclusive) / after (inclusive) the first one including "generated_completions", # splits by null byte, and then removes all empty lines produced by using 'string' set -l prev (string join0 $fish_complete_path | string match --regex "^.*?(?=\x00[^\x00]*generated_completions.*)" | string split0 | string match -er ".") set -l post (string join0 $fish_complete_path | string match --regex "[^\x00]*generated_completions.*" | string split0 | string match -er ".") @@ -182,13 +182,28 @@ in environment.etc."fish/generated_completions".source = let + patchedGenerator = pkgs.stdenv.mkDerivation { + name = "fish_patched-completion-generator"; + srcs = [ + "${pkgs.fish}/share/fish/tools/create_manpage_completions.py" + "${pkgs.fish}/share/fish/tools/deroff.py" + ]; + unpackCmd = "cp $curSrc $(basename $curSrc)"; + sourceRoot = "."; + patches = [ ./fish_completion-generator.patch ]; # to prevent collisions of identical completion files + dontBuild = true; + installPhase = '' + mkdir -p $out + cp * $out/ + ''; + preferLocalBuild = true; + allowSubstitutes = false; + }; generateCompletions = package: pkgs.runCommand - "${package.name}-fish-completions" + "${package.name}_fish-completions" ( { - src = package; - nativeBuildInputs = [ pkgs.python3 ]; - buildInputs = [ pkgs.fish ]; + inherit package; preferLocalBuild = true; allowSubstitutes = false; } @@ -196,13 +211,14 @@ in ) '' mkdir -p $out - if [ -d $src/share/man ]; then - find $src/share/man -type f | xargs python ${pkgs.fish}/share/fish/tools/create_manpage_completions.py --directory $out >/dev/null + if [ -d $package/share/man ]; then + find $package/share/man -type f | xargs ${pkgs.python3.interpreter} ${patchedGenerator}/create_manpage_completions.py --directory $out >/dev/null fi ''; in pkgs.buildEnv { - name = "system-fish-completions"; + name = "system_fish-completions"; + ignoreCollisions = true; paths = map generateCompletions config.environment.systemPackages; }; |