1
Fork 0
mirror of https://https.git.savannah.gnu.org/git/guix.git/ synced 2025-07-10 16:50:43 +02:00

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
This commit is contained in:
Maxim Cournoyer 2025-05-06 16:16:09 +09:00
parent 42245040f6
commit 4c017ccfe5
No known key found for this signature in database
GPG key ID: 1260E46482E63562
3 changed files with 62 additions and 9 deletions

View file

@ -47679,6 +47679,24 @@ usage may look like:
@end example @end example
@end defvar @end defvar
@defvar etc-bashrc-d-service-type
The type of the @file{/etc/bashrc.d} service. This service is used to
create files under @file{/etc/bashrc.d}. It takes as value a list of
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:
@example
(use-package-modules gnome) ;for the `vte' package
(simple-service 'vte-integration etc-bashrc-d-service-type
(list (file-append vte "/etc/profile.d/vte.sh")))
@end example
@end defvar
@defvar privileged-program-service-type @defvar privileged-program-service-type
Type for the ``privileged-program service''. This service collects lists of Type for the ``privileged-program service''. This service collects lists of
executable file names, passed as gexps, and adds them to the set of executable file names, passed as gexps, and adds them to the set of

View file

@ -123,6 +123,7 @@
extra-special-file extra-special-file
etc-service-type etc-service-type
etc-profile-d-service-type etc-profile-d-service-type
etc-bashrc-d-service-type
etc-directory etc-directory
privileged-program-service-type privileged-program-service-type
setuid-program-service-type ; deprecated setuid-program-service-type ; deprecated
@ -988,6 +989,19 @@ two-elements list suitable for extending `etc-service-type'."
scripts having the @file{.sh} file extension, to be sourced when users scripts having the @file{.sh} file extension, to be sourced when users
log in."))) log in.")))
(define files->bashrc-d-directory
(make-files->etc-directory "bashrc.d"))
(define etc-bashrc-d-service-type
(service-type
(inherit etc-profile-d-service-type)
(name 'etc-bashrc-d)
(extensions (list (service-extension etc-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.")))
(define (privileged-program->activation-gexp programs) (define (privileged-program->activation-gexp programs)
"Return an activation gexp for privileged-program from PROGRAMS." "Return an activation gexp for privileged-program from PROGRAMS."
(let ((programs (let ((programs

View file

@ -178,6 +178,19 @@ test -f /etc/profile.d/test_profile_d.sh
test \"$PROFILE_D_OK\" = yes") test \"$PROFILE_D_OK\" = yes")
marionette))) marionette)))
(test-assert "/etc/bashrc.d is sourced"
(zero? (marionette-eval
'(system* "bash"
;; Ensure Bash runs interactively.
"--init-file"
#$(plain-file "test_bashrc_d.sh"
"\
. /etc/bashrc
set -e -x
test -f /etc/bashrc.d/test_bashrc_d.sh
test \"$BASHRC_D_OK\" = yes"))
marionette)))
(test-equal "special files" (test-equal "special files"
'#$special-files '#$special-files
(marionette-eval (marionette-eval
@ -585,15 +598,23 @@ functionality tests, using the given KERNEL.")
(operating-system (operating-system
(inherit %simple-os) (inherit %simple-os)
(kernel kernel) (kernel kernel)
(services (cons (service (services (cons* (service
etc-profile-d-service-type etc-profile-d-service-type
(list (plain-file (list (plain-file
"test_profile_d.sh" "test_profile_d.sh"
"export PROFILE_D_OK=yes\n") "export PROFILE_D_OK=yes\n")
(plain-file (plain-file
"invalid-name" "invalid-name"
"not a POSIX script -- ignore me"))) "not a POSIX script -- ignore me")))
%base-services))) (service
etc-bashrc-d-service-type
(list (plain-file
"test_bashrc_d.sh"
"export BASHRC_D_OK=yes\n")
(plain-file
"invalid-name"
"not a Bash script -- ignore me")))
%base-services)))
#:imported-modules '((gnu services herd) #:imported-modules '((gnu services herd)
(guix combinators)))) (guix combinators))))
(vm (virtual-machine os))) (vm (virtual-machine os)))