Subject: [bug#78308] [PATCH v3 06/10] system: Migrate sourcing bash_completion.sh to etc-bashrc-d-service-type.

From: Maxim Cournoyer <[email-masked]>
Date: Mon, 19 May 2025 09:29:04 +0900

* gnu/system.scm (operating-system-etc-service): Remove block sourcing
bash_completion.sh.
(%base-packages-interactive): Delete bash-completion.
* gnu/services.scm (%default-etc-bashrc-d-files): New variable, which includes
the bash_completion.sh file.
(etc-bashrc-d-service-type): Use it.
* doc/guix.texi (Service Reference): Update documentation.

Change-Id: I2223a5f96f5d761148badc6be29e1c5c80465a1d
---
 doc/guix.texi    | 11 +++++++----
 gnu/services.scm |  8 +++++++-
 gnu/system.scm   | 10 ----------
 3 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 927e9243bfb..746722caa61 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -47651,15 +47651,18 @@ Service Reference
 file-like objects, as can be produced with @code{local-file},
 @code{plain-file}, etc.  Note that provided files whose file names do
 not end with @file{.sh} are @emph{not} added to @file{/etc/profile.d/}
-and are silently dropped.  Package objects can also be provided directly
-to have their @file{etc/bashrc.d/*.sh} prefixed files added.  An example
-usage may look like:
+and are silently dropped.  The default value is made available via the
+@var{%default-etc-bashrc-d-files} variable for users to extended.
+Package objects can also be provided directly to have their
+@file{etc/bashrc.d/*.sh} prefixed files added.  An example usage may
+look like:
 
 @example
 (use-package-modules gnome)     ;for the `vte' package
 
 (service etc-bashrc-d-service-type
-         (list (file-append vte "/etc/profile.d/vte.sh")))
+         (append (list (file-append vte "/etc/profile.d/vte.sh"))
+                 %default-etc-bashrc-d-files))
 @end example
 @end defvar
 
diff --git a/gnu/services.scm b/gnu/services.scm
index 7083c88c130..5dbda176b80 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -124,6 +124,7 @@ (define-module (gnu services)
             etc-service-type
             etc-profile-d-service-type
             etc-bashrc-d-service-type
+            %default-etc-bashrc-d-files
             etc-directory
             privileged-program-service-type
             setuid-program-service-type ; deprecated
@@ -992,6 +993,10 @@ (define etc-profile-d-service-type
 (define files->bashrc-d-directory
   (make-files->etc-directory "bashrc.d"))
 
+(define %default-etc-bashrc-d-files
+  (list (file-append bash-completion
+                     "/etc/profile.d/bash_completion.sh")))
+
 (define etc-bashrc-d-service-type
   (service-type
    (inherit etc-profile-d-service-type)
@@ -1000,7 +1005,8 @@ (define etc-bashrc-d-service-type
                                         files->bashrc-d-directory)))
    (description "A service for populating @file{/etc/bashrc.d/} with Bash
 scripts having the @file{.sh} file extension, to be sourced by interactive
-Bash shells.")))
+Bash shells.")
+   (default-value %default-etc-bashrc-d-files)))
 
 (define (privileged-program->activation-gexp programs)
   "Return an activation gexp for privileged-program from PROGRAMS."
diff --git a/gnu/system.scm b/gnu/system.scm
index 0b64927f5ba..50f739c17c7 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -960,7 +960,6 @@ (define %base-packages-interactive
         nvi
         man-db
         info-reader                     ;the standalone Info reader (no Perl)
-        bash-completion
         kbd
         ;; The 'sudo' command is already in %SETUID-PROGRAMS, but we also
         ;; want the other commands and the man pages (notably because
@@ -1146,15 +1145,6 @@ (define* (operating-system-etc-service os)
 # Provide a default prompt.  The user's ~/.bashrc can override it.
 PS1='\\u@\\h \\w${GUIX_ENVIRONMENT:+ [env]}\\$ '
 
-# The 'bash-completion' package.
-if [ -f /run/current-system/profile/etc/profile.d/bash_completion.sh ]
-then
-  # Bash-completion sources ~/.bash_completion.  It installs a dynamic
-  # completion loader that searches its own completion files as well
-  # as those in ~/.guix-profile and /run/current-system/profile.
-  source /run/current-system/profile/etc/profile.d/bash_completion.sh
-fi
-
 for i in /etc/bashrc.d/*.sh; do
     [[ -r $i ]] && source \"$i\"
 done
-- 
2.49.0