summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2025-05-06 16:16:09 +0900
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2025-05-26 13:43:03 +0900
commit4c017ccfe56a8887bf26faaea62d60501d7cc4f6 (patch)
tree5c8a5efc2bd183db771f2ad6cafed857824f1063
parent42245040f683bf11688f3731037d0e933fa562fa (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.texi18
-rw-r--r--gnu/services.scm14
-rw-r--r--gnu/tests/base.scm39
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
47683The type of the @file{/etc/bashrc.d} service. This service is used to
47684create files under @file{/etc/bashrc.d}. It takes as value a list of
47685file-like objects, as can be produced with @code{local-file},
47686@code{plain-file}, etc. Note that provided files whose file names do
47687not end with @file{.sh} are @emph{not} added to @file{/etc/profile.d/}
47688and are silently dropped. Package objects can also be provided directly
47689to have their @file{etc/bashrc.d/*.sh} prefixed files added. An example
47690usage 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
47683Type for the ``privileged-program service''. This service collects lists of 47701Type for the ``privileged-program service''. This service collects lists of
47684executable file names, passed as gexps, and adds them to the set of 47702executable 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'."
988scripts having the @file{.sh} file extension, to be sourced when users 989scripts having the @file{.sh} file extension, to be sourced when users
989log in."))) 990log 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
1002scripts having the @file{.sh} file extension, to be sourced by interactive
1003Bash 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
178test \"$PROFILE_D_OK\" = yes") 178test \"$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
189set -e -x
190test -f /etc/bashrc.d/test_bashrc_d.sh
191test \"$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)))