diff options
author | Zhu Zihao <all_but_last@163.com> | 2020-12-06 16:26:02 +0800 |
---|---|---|
committer | 宋文武 <iyzsong@member.fsf.org> | 2020-12-06 17:48:48 +0800 |
commit | 8e73bf754f95fac5a383b90405e741d1cf1aaeb9 (patch) | |
tree | abbeb068eee6993ee1f6fe60baba8582782307f6 /gnu/services | |
parent | 063f6dfc37a674b24ca75fd20530a8039bddfd8f (diff) |
services: nix: Move nix.conf generation to etc-service-type.
/etc/nix/nix.conf is a static file doesn't need rebuild on every boot.
* gnu/services/nix.scm (nix-activation): Don't create /etc/nix/nix.conf.
(nix-service-etc): New function.
(nix-service-type): New service-extension "nix-service-etc" to etc-service-type.
Signed-off-by: 宋文武 <iyzsong@member.fsf.org>
Diffstat (limited to 'gnu/services')
-rw-r--r-- | gnu/services/nix.scm | 61 |
1 files changed, 33 insertions, 28 deletions
diff --git a/gnu/services/nix.scm b/gnu/services/nix.scm index 93f46ef71e..1aef47db0a 100644 --- a/gnu/services/nix.scm +++ b/gnu/services/nix.scm @@ -89,37 +89,41 @@ GID." (id 40000)) (nix-build-accounts 10 #:group "nixbld"))) -(define nix-activation +(define (nix-activation _) ;; Return the activation gexp. + #~(begin + (use-modules (guix build utils) + (srfi srfi-26)) + (for-each (cut mkdir-p <>) '("/nix/store" "/nix/var/log" + "/nix/var/nix/gcroots/per-user" + "/nix/var/nix/profiles/per-user")) + (chown "/nix/store" + (passwd:uid (getpw "root")) (group:gid (getpw "nixbld01"))) + (chmod "/nix/store" #o775) + (for-each (cut chmod <> #o777) '("/nix/var/nix/profiles" + "/nix/var/nix/profiles/per-user")))) + +(define nix-service-etc (match-lambda (($ <nix-configuration> package sandbox build-sandbox-items extra-config) - (with-imported-modules (source-module-closure - '((guix build store-copy))) - #~(begin - (use-modules (guix build utils) - (ice-9 format) - (srfi srfi-1) - (srfi srfi-26)) - (for-each (cut mkdir-p <>) '("/nix/store" "/nix/var/log" - "/nix/var/nix/gcroots/per-user" - "/nix/var/nix/profiles/per-user")) - (chown "/nix/store" - (passwd:uid (getpw "root")) (group:gid (getpw "nixbld01"))) - (chmod "/nix/store" #o775) - (for-each (cut chmod <> #o777) '("/nix/var/nix/profiles" - "/nix/var/nix/profiles/per-user")) - (mkdir-p "/etc/nix") - (with-output-to-file "/etc/nix/nix.conf" - (lambda _ - (format #t "sandbox = ~a~%" (if #$sandbox "true" "false")) - ;; config.nix captures store file names. - (format #t "build-sandbox-paths = ~{~a ~}~%" - (append (append-map (cut call-with-input-file <> read) - '#$(map references-file - (list package))) - '#$build-sandbox-items)) - (for-each (cut display <>) '#$extra-config) - (newline)))))))) + (let ((ref-file (references-file package))) + `(("nix/nix.conf" + ,(computed-file + "nix.conf" + #~(begin + (use-modules (srfi srfi-26) + (ice-9 format)) + (with-output-to-file #$output + (lambda _ + (define internal-sandbox-paths + (call-with-input-file #$ref-file read)) + + (format #t "sandbox = ~a~%" (if #$sandbox "true" "false")) + ;; config.nix captures store file names. + (format #t "build-sandbox-paths = ~{~a ~}~%" + (append internal-sandbox-paths + '#$build-sandbox-items)) + (for-each (cut display <>) '#$extra-config))))))))))) (define nix-shepherd-service ;; Return a <shepherd-service> for Nix. @@ -143,6 +147,7 @@ GID." (list (service-extension shepherd-root-service-type nix-shepherd-service) (service-extension account-service-type nix-accounts) (service-extension activation-service-type nix-activation) + (service-extension etc-service-type nix-service-etc) (service-extension profile-service-type (compose list nix-configuration-package)))) (description "Run the Nix daemon.") |