summary refs log tree commit diff
path: root/gnu/packages/bash.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/bash.scm')
-rw-r--r--gnu/packages/bash.scm24
1 files changed, 24 insertions, 0 deletions
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index 02cb45c955..45676f568b 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -23,6 +23,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages linux)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
@@ -247,6 +248,29 @@ without modification.")
               (patches
                (list (search-patch "bash-completion-directories.patch")))))
     (build-system gnu-build-system)
+    (native-inputs `(("util-linux" ,util-linux)))
+    (arguments
+     `(#:phases (alist-cons-after
+                 'install 'remove-redundant-completions
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   ;; Util-linux comes with a bunch of completion files for
+                   ;; its own commands which are more sophisticated and
+                   ;; up-to-date than those of bash-completion.  Remove those
+                   ;; from bash-completion.
+                   (let* ((out         (assoc-ref outputs "out"))
+                          (util-linux  (assoc-ref inputs "util-linux"))
+                          (completions (string-append out
+                                                      "/share/bash-completion"
+                                                      "/completions"))
+                          (already     (find-files (string-append util-linux
+                                                                  "/etc/bash_completion.d"))))
+                     (with-directory-excursion completions
+                       (for-each (lambda (file)
+                                   (when (file-exists? file)
+                                     (delete-file file)))
+                                 (map basename already)))
+                     #t))
+                 %standard-phases)))
     (synopsis "Bash completions for common commands")
     (description
      "This package provides extensions that allow Bash to provide adapted