Subject: [bug#77181] [PATCH 0/5] gnu: Fix bash completion directories.

From: 45mg <[email-masked]>
Date: Tue, 25 Mar 2025 15:32:01 +0000

Efraim Flashner <[email-masked]> writes:

>
> I have the following diff I think will be useful.  Let me know what you
> think.  We shouldn't need to duplicate the paths in all the packages.
>
> -- 
> Efraim Flashner   <[email-masked]>   אפרים פלשנר
> GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
> Confidentiality cannot be guaranteed on emails sent or received unencrypted
> diff --git a/guix/utils.scm b/guix/utils.scm
> index c7c23d9d5ba..c0c044147e2 100644
> --- a/guix/utils.scm
> +++ b/guix/utils.scm
> @@ -149,6 +149,12 @@ (define-module (guix utils)
>              config-directory
>              cache-directory
>  
> +            bash-completion-dir
> +            fish-completion-dir
> +            zsh-completion-dir
> +            elvish-completion-dir
> +            nu-completion-dir
> +
>              readlink*
>              go-to-location
>              edit-expression
> @@ -1193,6 +1199,33 @@ (define-syntax current-source-directory
>            ;; raising an error would upset Geiser users
>            #f))))))
>  
> +
> +;;;
> +;;; Shell completion directories.
> +;;;
> +
> +(define bash-completion-dir
> +  ;; The standard directory for installing bash completions.
> +  ;; https://github.com/scop/bash-completion?tab=readme-ov-file#faq
> +  "/share/bash-completion/completions/")
> +
> +(define fish-completion-dir
> +  ;; The standard directory for installing fish completions.
> +  ;; https://fishshell.com/docs/current/completions.html#where-to-put-completions
> +  "/share/fish/vendor_completions.d/")
> +
> +(define zsh-completion-dir
> +  ;; The standard directory for installing zsh completions.
> +  "/share/zsh/site-functions/")
> +
> +(define elvish-completion-dir
> +  ;; The standard directory for installing elvish completions.
> +  "/share/elvish/lib/")
> +
> +(define nu-completion-dir
> +  ;; The standard directory for installing nushell completions.
> +  "/share/nushell/vendor/autoload/")
> +
>  
>  ;;;
>  ;;; String comparison.

Seems reasonable. I suppose we could use these variables for all
packages that already use these standard directories (lots of rebuilds
though!).

As for the ones that use eg. `/etc/bash_completion.d`, I think we should
probably leave those as they are, unless someone's willing to
investigate each one and make sure they don't need to eager-load their
completion scripts, or have some other reason to use that directory.