Subject: [PATCH 2/2] gnu: fish: Improve package style.

From: "Paul A. Patience" <[email-masked]>
Date: Tue, 02 Jan 2024 05:30:00 +0000

* gnu/packages/shells.scm (fish)[arguments]: Use G-expressions.
Drop trailing #t in phases. Move above native-inputs.
[native-inputs]: Add bash and coreutils. Move above inputs.
[home-page]: Move above synopsis.

Change-Id: I964b15f47629fa01d649e586f81eb5ae8e7046e3
---
 gnu/packages/shells.scm | 248 ++++++++++++++++++++--------------------
 1 file changed, 122 insertions(+), 126 deletions(-)

diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 798dba1d7c..bfa32ee0ee 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -22,6 +22,7 @@
 ;;; Copyright © 2022 Andrew Tropin <[email-masked]>
 ;;; Copyright © 2023 Zheng Junjie <[email-masked]>
 ;;; Copyright © 2023 David Pflug <[email-masked]>
+;;; Copyright © 2024 Paul A. Patience <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -130,133 +131,129 @@ (define-public fish
        (sha256
         (base32 "1c9slg6azhc9jn1sb75wip4hl9zyibjy9nay505nkw0lnxw766yz"))))
     (build-system cmake-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'set-env
+            (lambda _
+              ;; some tests write to $HOME
+              (setenv "HOME" (getcwd))))
+          (add-after 'unpack 'patch-tests
+            (lambda _
+              (let ((coreutils #$(this-package-native-input "coreutils"))
+                    (bash #$(this-package-native-input "bash")))
+                ;; This test sporadically fails in the build container
+                ;; because of leftover zombie processes, which are not
+                ;; reaped automatically:
+                ;; "Found existing zombie processes. Clean up zombies before running this test."
+                ;; Disabling parallel tests does not reliably prevent it.
+                (delete-file "tests/checks/jobs.fish")
+                ;; This test fails.
+                (delete-file "tests/checks/pipeline-pgroup.fish")
+                ;; This one tries to open a terminal & can't simply be deleted.
+                (substitute* "cmake/Tests.cmake"
+                  ((".* interactive\\.fish.*") ""))
+                ;; This one needs to chdir successfully.
+                (substitute* "tests/checks/vars_as_commands.fish"
+                  (("/usr/bin") "/tmp"))
+                ;; These contain absolute path references.
+                (substitute* "src/fish_tests.cpp"
+                  (("/bin/echo" echo) (string-append coreutils echo))
+                  (("/bin/ca" ca) (string-append coreutils ca))
+                  (("\"(/bin/c)\"" _ c) (string-append "\"" coreutils c "\""))
+                  (("/bin/ls_not_a_path" ls-not-a-path)
+                   (string-append coreutils ls-not-a-path))
+                  (("/bin/ls" ls) (string-append coreutils ls))
+                  (("(/bin/)\"" _ bin) (string-append coreutils bin "\""))
+                  (("/bin -" bin) (string-append coreutils bin))
+                  (((string-append
+                     "do_test\\(is_potential_path\\("
+                     "L\"/usr\", wds, vars, PATH_REQUIRE_DIR\\)\\);"))
+                   "")
+                  ;; Not all mentions of /usr... need to exist, but these do.
+                  (("\"/usr(|/lib)\"" _ subdirectory)
+                   (string-append "\"/tmp" subdirectory "\"")))
+                (substitute*
+                    (append (find-files "tests" ".*\\.(in|out|err)$")
+                            (find-files "tests/checks" ".*\\.fish"))
+                  (("/bin/pwd" pwd) (string-append coreutils pwd))
+                  (("/bin/echo" echo) (string-append coreutils echo))
+                  (("/bin/sh" sh) (string-append bash sh))
+                  (("/bin/ls" ls) (string-append coreutils ls)))
+                (substitute* (find-files "tests" ".*\\.(in|out|err)$")
+                  (("/usr/bin") (string-append coreutils "/bin"))))))
+          ;; Source /etc/fish/config.fish from $__fish_sysconf_dir/config.fish.
+          (add-after 'patch-tests 'patch-fish-config
+            (lambda _
+              (let ((port (open-file "etc/config.fish" "a")))
+                (display (string-append
+                          "\n\n"
+                          "# Patched by Guix.\n"
+                          "# Source /etc/fish/config.fish.\n"
+                          "if test -f /etc/fish/config.fish\n"
+                          "    source /etc/fish/config.fish\n"
+                          "end\n")
+                         port)
+                (close-port port))))
+          ;; Embed absolute paths.
+          (add-before 'install 'embed-absolute-paths
+            (lambda _
+              (substitute* "share/functions/__fish_print_help.fish"
+                (("nroff") (which "nroff")))))
+          ;; Enable completions, functions and configurations in user's and
+          ;; system's guix profiles by adding them to __extra_* variables.
+          (add-before 'install 'patch-fish-extra-paths
+            (lambda _
+              (let ((port (open-file "share/__fish_build_paths.fish" "a")))
+                (display
+                 (string-append
+                  "\n\n"
+                  "# Patched by Guix.\n"
+                  "# Enable completions, functions and configurations in user's"
+                  " and system's guix profiles by adding them to __extra_*"
+                  " variables.\n"
+                  "set -l __guix_profile_paths ~/.guix-profile"
+                  " /run/current-system/profile\n"
+                  "set __extra_completionsdir"
+                  " $__guix_profile_paths\"/etc/fish/completions\""
+                  " $__guix_profile_paths\"/share/fish/vendor_completions.d\""
+                  " $__extra_completionsdir\n"
+                  "set __extra_functionsdir"
+                  " $__guix_profile_paths\"/etc/fish/functions\""
+                  " $__guix_profile_paths\"/share/fish/vendor_functions.d\""
+                  " $__extra_functionsdir\n"
+                  "set __extra_confdir"
+                  " $__guix_profile_paths\"/etc/fish/conf.d\""
+                  " $__guix_profile_paths\"/share/fish/vendor_conf.d\""
+                  " $__extra_confdir\n")
+                 port)
+                (close-port port))))
+          ;; Use fish-foreign-env to source /etc/profile.
+          (add-before 'install 'source-etc-profile
+            (lambda _
+              (let ((port (open-file "share/__fish_build_paths.fish" "a")))
+                (display
+                 (string-append
+                  "\n\n"
+                  "# Patched by Guix.\n"
+                  "# Use fish-foreign-env to source /etc/profile.\n"
+                  "if status is-login\n"
+                  "    set fish_function_path "
+                  #$(this-package-input "fish-foreign-env") "/share/fish/functions"
+                  " $__fish_datadir/functions\n"
+                  "    fenv source /etc/profile\n"
+                  "    set -e fish_function_path\n"
+                  "end\n")
+                 port)
+                (close-port port)))))))
+    (native-inputs
+     (list doxygen groff                ; for 'fish --help'
+           bash coreutils procps))      ; for the test suite
     (inputs
      (list fish-foreign-env ncurses pcre2
-           python))  ; for fish_config and manpage completions
-    (native-inputs
-     (list doxygen groff ; for 'fish --help'
-           procps))             ; for the test suite
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'set-env
-           (lambda _
-             ;; some tests write to $HOME
-             (setenv "HOME" (getcwd))
-             #t))
-         (add-after 'unpack 'patch-tests
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((coreutils (assoc-ref inputs "coreutils"))
-                   (bash (assoc-ref inputs "bash")))
-               ;; This test sporadically fails in the build container
-               ;; because of leftover zombie processes, which are not
-               ;; reaped automatically:
-;; "Found existing zombie processes. Clean up zombies before running this test."
-               ;; Disabling parallel tests does not reliably prevent it.
-               (delete-file "tests/checks/jobs.fish")
-               ;; This test fails.
-               (delete-file "tests/checks/pipeline-pgroup.fish")
-               ;; This one tries to open a terminal & can't simply be deleted.
-               (substitute* "cmake/Tests.cmake"
-                 ((".* interactive\\.fish.*") ""))
-               ;; This one needs to chdir successfully.
-               (substitute* "tests/checks/vars_as_commands.fish"
-                 (("/usr/bin") "/tmp"))
-               ;; These contain absolute path references.
-               (substitute* "src/fish_tests.cpp"
-                 (("/bin/echo" echo) (string-append coreutils echo))
-                 (("/bin/ca" ca) (string-append coreutils ca))
-                 (("\"(/bin/c)\"" _ c) (string-append "\"" coreutils c "\""))
-                 (("/bin/ls_not_a_path" ls-not-a-path)
-                  (string-append coreutils ls-not-a-path))
-                 (("/bin/ls" ls) (string-append coreutils ls))
-                 (("(/bin/)\"" _ bin) (string-append coreutils bin "\""))
-                 (("/bin -" bin) (string-append coreutils bin))
-                 (((string-append
-                    "do_test\\(is_potential_path\\("
-                    "L\"/usr\", wds, vars, PATH_REQUIRE_DIR\\)\\);"))
-                  "")
-                 ;; Not all mentions of /usr... need to exist, but these do.
-                 (("\"/usr(|/lib)\"" _ subdirectory)
-                  (string-append "\"/tmp" subdirectory "\"")))
-               (substitute*
-                 (append (find-files "tests" ".*\\.(in|out|err)$")
-                         (find-files "tests/checks" ".*\\.fish"))
-                 (("/bin/pwd" pwd) (string-append coreutils pwd))
-                 (("/bin/echo" echo) (string-append coreutils echo))
-                 (("/bin/sh" sh) (string-append bash sh))
-                 (("/bin/ls" ls) (string-append coreutils ls)))
-               (substitute* (find-files "tests" ".*\\.(in|out|err)$")
-                 (("/usr/bin") (string-append coreutils "/bin")))
-               #t)))
-         ;; Source /etc/fish/config.fish from $__fish_sysconf_dir/config.fish.
-         (add-after 'patch-tests 'patch-fish-config
-           (lambda _
-             (let ((port (open-file "etc/config.fish" "a")))
-               (display (string-append
-                         "\n\n"
-                         "# Patched by Guix.\n"
-                         "# Source /etc/fish/config.fish.\n"
-                         "if test -f /etc/fish/config.fish\n"
-                         "    source /etc/fish/config.fish\n"
-                         "end\n")
-                        port)
-               (close-port port))
-             #t))
-         ;; Embed absolute paths.
-         (add-before 'install 'embed-absolute-paths
-           (lambda _
-             (substitute* "share/functions/__fish_print_help.fish"
-               (("nroff") (which "nroff")))
-             #t))
-         ;; Enable completions, functions and configurations in user's and
-         ;; system's guix profiles by adding them to __extra_* variables.
-         (add-before 'install 'patch-fish-extra-paths
-           (lambda _
-             (let ((port (open-file "share/__fish_build_paths.fish" "a")))
-               (display
-                (string-append
-                 "\n\n"
-                 "# Patched by Guix.\n"
-                 "# Enable completions, functions and configurations in user's"
-                 " and system's guix profiles by adding them to __extra_*"
-                 " variables.\n"
-                 "set -l __guix_profile_paths ~/.guix-profile"
-                 " /run/current-system/profile\n"
-                 "set __extra_completionsdir"
-                 " $__guix_profile_paths\"/etc/fish/completions\""
-                 " $__guix_profile_paths\"/share/fish/vendor_completions.d\""
-                 " $__extra_completionsdir\n"
-                 "set __extra_functionsdir"
-                 " $__guix_profile_paths\"/etc/fish/functions\""
-                 " $__guix_profile_paths\"/share/fish/vendor_functions.d\""
-                 " $__extra_functionsdir\n"
-                 "set __extra_confdir"
-                 " $__guix_profile_paths\"/etc/fish/conf.d\""
-                 " $__guix_profile_paths\"/share/fish/vendor_conf.d\""
-                 " $__extra_confdir\n")
-                port)
-               (close-port port))
-             #t))
-         ;; Use fish-foreign-env to source /etc/profile.
-         (add-before 'install 'source-etc-profile
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((port (open-file "share/__fish_build_paths.fish" "a")))
-               (display
-                (string-append
-                 "\n\n"
-                 "# Patched by Guix.\n"
-                 "# Use fish-foreign-env to source /etc/profile.\n"
-                 "if status is-login\n"
-                 "    set fish_function_path "
-                 (assoc-ref inputs "fish-foreign-env") "/share/fish/functions"
-                 " $__fish_datadir/functions\n"
-                 "    fenv source /etc/profile\n"
-                 "    set -e fish_function_path\n"
-                 "end\n")
-                port)
-               (close-port port))
-             #t)))))
+           python))                  ; for fish_config and manpage completions
+    (home-page "https://fishshell.com/")
     (synopsis "The friendly interactive shell")
     (description
      "Fish (friendly interactive shell) is a shell focused on interactive use,
@@ -267,7 +264,6 @@ (define-public fish
 access to all the fish documentation in your web browser.  Other features
 include smart terminal handling based on terminfo, an easy to search history,
 and syntax highlighting.")
-    (home-page "https://fishshell.com/")
     (license license:gpl2)))
 
 (define-public fish-foreign-env
-- 
2.41.0