From 69b2e5e0b23098a36cd57ea11df7481291364307 Mon Sep 17 00:00:00 2001 From: Jeremy Fleischman Date: Sun, 5 Jul 2026 09:37:25 -0700 Subject: [PATCH] nixos/fish: `programs.fish.generateCompletions` fix spaces in filenames `linux-manual` has this fun filename in it: ```console $ find -L $(nix-build -A linux-manual) -name 'station table - introduction.9.gz' /nix/store/q45mzaksp2ll04c363mxpyi252j6anrq-linux-manual-7.1.3/share/man/man9/station table - introduction.9.gz ``` Our `find ... | xargs ...` didn't handle this nicely, and would vomit in the following way: `repro.nix`: ```nix $ cat repro.nix let pkgs = import ./. { }; nixosConfig = pkgs.nixos ( { config, pkgs, ... }: { system.stateVersion = config.system.nixos.release; programs.fish.enable = true; programs.fish.generateCompletions = true; environment.systemPackages = [ pkgs.linux-manual ]; } ); in nixosConfig.config.environment.etc."fish/generated_completions".source ``` The crash: ```console $ nix-build repro.nix these 2 derivations will be built: /nix/store/qs213n0r723w59jdvfz5w87azd3wh405-linux-manual-7.1.3_fish-completions.drv /nix/store/1pwps30drz71icj5v4rdiaarmh37xcn8-system_fish-completions.drv building '/nix/store/qs213n0r723w59jdvfz5w87azd3wh405-linux-manual-7.1.3_fish-completions.drv'... usage: create_manpage_completions.py [-h] [-c CLEANUP_IN] [-d DIRECTORY] [-k] [-m] [-p] [-s] [-v {0,1,2}] [-z] [file_paths ...] create_manpage_completions.py: error: unrecognized arguments: -introduction.9.gz /nix/store/q45mzaksp2ll04c363mxpyi252j6anrq-linux-manual-7.1.3/share/man/man9/DRBD State macros.9.gz /nix/store/q45mzaksp2ll04c363mxpyi252j6anrq-linux-manual-7.1.3/share/man/man9/DRM Client usage stats.9.gz /nix/store/q45mzaksp2ll04c363mxpyi252j6anrq-linux-manual-7.1.3/share/man/man9/DRM RAS Node Management.9.gz /nix/store/q45mzaksp2ll04c363mxpyi252j6anrq-linux-manual-7.1.3/share/man/man9/DRM_ACCEL_FOPS.9.gz ``` This fix is simple, use the `find -print0 ... | xargs -0 ...` pattern. --- nixos/modules/programs/fish.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/modules/programs/fish.nix b/nixos/modules/programs/fish.nix index b425ed4028f1..734d19bdc92d 100644 --- a/nixos/modules/programs/fish.nix +++ b/nixos/modules/programs/fish.nix @@ -293,8 +293,8 @@ in '' mkdir -p $out if [ -d $package/share/man ]; then - find -L $package/share/man -type f \ - | xargs ${pkgs.python3.pythonOnBuildForHost.interpreter} \ + find -L $package/share/man -type f -print0 \ + | xargs -0 ${pkgs.python3.pythonOnBuildForHost.interpreter} \ ${generator}/create_manpage_completions.py --directory $out \ >/dev/null fi