diff options
| author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2025-05-06 16:16:09 +0900 |
|---|---|---|
| committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2025-05-26 13:43:03 +0900 |
| commit | 4c017ccfe56a8887bf26faaea62d60501d7cc4f6 (patch) | |
| tree | 5c8a5efc2bd183db771f2ad6cafed857824f1063 | |
| parent | 42245040f683bf11688f3731037d0e933fa562fa (diff) | |
services: Add etc-bashrc-d-service-type.
* gnu/services.scm (files->bashrc-d-directory) New procedure.
(etc-bashrc-d-service-type): New service type.
* doc/guix.texi (Service Reference): Document it.
* gnu/tests/base.scm (test-basic-os): Test it.
Change-Id: Ibbb0f684de7aee296adedbce5b1192786d661af2
| -rw-r--r-- | doc/guix.texi | 18 | ||||
| -rw-r--r-- | gnu/services.scm | 14 | ||||
| -rw-r--r-- | gnu/tests/base.scm | 39 |
3 files changed, 62 insertions, 9 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index 628cc007ce7..38a75b73ceb 100644 --- a/doc/guix.texi +++ b/doc/guix.texi | |||
| @@ -47679,6 +47679,24 @@ usage may look like: | |||
| 47679 | @end example | 47679 | @end example |
| 47680 | @end defvar | 47680 | @end defvar |
| 47681 | 47681 | ||
| 47682 | @defvar etc-bashrc-d-service-type | ||
| 47683 | The type of the @file{/etc/bashrc.d} service. This service is used to | ||
| 47684 | create files under @file{/etc/bashrc.d}. It takes as value a list of | ||
| 47685 | file-like objects, as can be produced with @code{local-file}, | ||
| 47686 | @code{plain-file}, etc. Note that provided files whose file names do | ||
| 47687 | not end with @file{.sh} are @emph{not} added to @file{/etc/profile.d/} | ||
| 47688 | and are silently dropped. Package objects can also be provided directly | ||
| 47689 | to have their @file{etc/bashrc.d/*.sh} prefixed files added. An example | ||
| 47690 | usage may look like: | ||
| 47691 | |||
| 47692 | @example | ||
| 47693 | (use-package-modules gnome) ;for the `vte' package | ||
| 47694 | |||
| 47695 | (simple-service 'vte-integration etc-bashrc-d-service-type | ||
| 47696 | (list (file-append vte "/etc/profile.d/vte.sh"))) | ||
| 47697 | @end example | ||
| 47698 | @end defvar | ||
| 47699 | |||
| 47682 | @defvar privileged-program-service-type | 47700 | @defvar privileged-program-service-type |
| 47683 | Type for the ``privileged-program service''. This service collects lists of | 47701 | Type for the ``privileged-program service''. This service collects lists of |
| 47684 | executable file names, passed as gexps, and adds them to the set of | 47702 | executable file names, passed as gexps, and adds them to the set of |
diff --git a/gnu/services.scm b/gnu/services.scm index 8584b16ac5c..7083c88c130 100644 --- a/gnu/services.scm +++ b/gnu/services.scm | |||
| @@ -123,6 +123,7 @@ | |||
| 123 | extra-special-file | 123 | extra-special-file |
| 124 | etc-service-type | 124 | etc-service-type |
| 125 | etc-profile-d-service-type | 125 | etc-profile-d-service-type |
| 126 | etc-bashrc-d-service-type | ||
| 126 | etc-directory | 127 | etc-directory |
| 127 | privileged-program-service-type | 128 | privileged-program-service-type |
| 128 | setuid-program-service-type ; deprecated | 129 | setuid-program-service-type ; deprecated |
| @@ -988,6 +989,19 @@ two-elements list suitable for extending `etc-service-type'." | |||
| 988 | scripts having the @file{.sh} file extension, to be sourced when users | 989 | scripts having the @file{.sh} file extension, to be sourced when users |
| 989 | log in."))) | 990 | log in."))) |
| 990 | 991 | ||
| 992 | (define files->bashrc-d-directory | ||
| 993 | (make-files->etc-directory "bashrc.d")) | ||
| 994 | |||
| 995 | (define etc-bashrc-d-service-type | ||
| 996 | (service-type | ||
| 997 | (inherit etc-profile-d-service-type) | ||
| 998 | (name 'etc-bashrc-d) | ||
| 999 | (extensions (list (service-extension etc-service-type | ||
| 1000 | files->bashrc-d-directory))) | ||
| 1001 | (description "A service for populating @file{/etc/bashrc.d/} with Bash | ||
| 1002 | scripts having the @file{.sh} file extension, to be sourced by interactive | ||
| 1003 | Bash shells."))) | ||
| 1004 | |||
| 991 | (define (privileged-program->activation-gexp programs) | 1005 | (define (privileged-program->activation-gexp programs) |
| 992 | "Return an activation gexp for privileged-program from PROGRAMS." | 1006 | "Return an activation gexp for privileged-program from PROGRAMS." |
| 993 | (let ((programs | 1007 | (let ((programs |
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index 09fc91383df..0f31c152e0f 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm | |||
| @@ -178,6 +178,19 @@ test -f /etc/profile.d/test_profile_d.sh | |||
| 178 | test \"$PROFILE_D_OK\" = yes") | 178 | test \"$PROFILE_D_OK\" = yes") |
| 179 | marionette))) | 179 | marionette))) |
| 180 | 180 | ||
| 181 | (test-assert "/etc/bashrc.d is sourced" | ||
| 182 | (zero? (marionette-eval | ||
| 183 | '(system* "bash" | ||
| 184 | ;; Ensure Bash runs interactively. | ||
| 185 | "--init-file" | ||
| 186 | #$(plain-file "test_bashrc_d.sh" | ||
| 187 | "\ | ||
| 188 | . /etc/bashrc | ||
| 189 | set -e -x | ||
| 190 | test -f /etc/bashrc.d/test_bashrc_d.sh | ||
| 191 | test \"$BASHRC_D_OK\" = yes")) | ||
| 192 | marionette))) | ||
| 193 | |||
| 181 | (test-equal "special files" | 194 | (test-equal "special files" |
| 182 | '#$special-files | 195 | '#$special-files |
| 183 | (marionette-eval | 196 | (marionette-eval |
| @@ -585,15 +598,23 @@ functionality tests, using the given KERNEL.") | |||
| 585 | (operating-system | 598 | (operating-system |
| 586 | (inherit %simple-os) | 599 | (inherit %simple-os) |
| 587 | (kernel kernel) | 600 | (kernel kernel) |
| 588 | (services (cons (service | 601 | (services (cons* (service |
| 589 | etc-profile-d-service-type | 602 | etc-profile-d-service-type |
| 590 | (list (plain-file | 603 | (list (plain-file |
| 591 | "test_profile_d.sh" | 604 | "test_profile_d.sh" |
| 592 | "export PROFILE_D_OK=yes\n") | 605 | "export PROFILE_D_OK=yes\n") |
| 593 | (plain-file | 606 | (plain-file |
| 594 | "invalid-name" | 607 | "invalid-name" |
| 595 | "not a POSIX script -- ignore me"))) | 608 | "not a POSIX script -- ignore me"))) |
| 596 | %base-services))) | 609 | (service |
| 610 | etc-bashrc-d-service-type | ||
| 611 | (list (plain-file | ||
| 612 | "test_bashrc_d.sh" | ||
| 613 | "export BASHRC_D_OK=yes\n") | ||
| 614 | (plain-file | ||
| 615 | "invalid-name" | ||
| 616 | "not a Bash script -- ignore me"))) | ||
| 617 | %base-services))) | ||
| 597 | #:imported-modules '((gnu services herd) | 618 | #:imported-modules '((gnu services herd) |
| 598 | (guix combinators)))) | 619 | (guix combinators)))) |
| 599 | (vm (virtual-machine os))) | 620 | (vm (virtual-machine os))) |
