From 3efdec7eb56d8ac52b6af00b0c3046456054fe41 Mon Sep 17 00:00:00 2001 From: Julien Lepiller Date: Tue, 7 Nov 2017 11:46:34 +0100 Subject: [PATCH] Catch use-modules errors in configuration. * gnu.scm (use-package-modules, use-service-modules, use-system-modules): Catch use-modules errors and show a small explanation about it. --- gnu.scm | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/gnu.scm b/gnu.scm index 913ce6160..64c752915 100644 --- a/gnu.scm +++ b/gnu.scm @@ -52,13 +52,47 @@ (module-use! i (resolve-interface m)))) %public-modules))) +(define (import-error type module syntax) + (define package-hint + (string-append + "Hint: You may use `guix package -s foo` to search for foo's location.\n" + "Hint: If you get the line \"location: gnu/packages/ssh.scm:174:2\",\n" + "Hint: you want to add ssh in use-package-modules.")) + (define service-hint + (string-append + "Hint: You may use `guix system search foo` to search for foo's location.\n" + "Hint: If you get the line \"location: gnu/services/ssh.scm:188:2\",\n" + "Hint: you want to add ssh in use-service-modules.")) + (error (string-append + type " module \"" module "\" does not exist.\n" + "Check the \"" syntax "\" line in your configuration.\n" + (if (equal? type "Package") + package-hint + (if (equal? type "Service") + service-hint + ""))))) + (define-syntax-rule (use-package-modules module ...) - (use-modules (gnu packages module) ...)) + (begin + (catch #t (lambda () (use-modules (gnu packages module))) + (lambda _ + (import-error "Package" (symbol->string 'module) "use-package-modules"))) + ...)) (define-syntax-rule (use-service-modules module ...) - (use-modules (gnu services module) ...)) + (begin + (catch #t (lambda () (use-modules (gnu services module))) + (lambda _ + (import-error "Service" (symbol->string 'module) "use-service-modules"))) + ...)) + (define-syntax-rule (use-system-modules module ...) - (use-modules (gnu system module) ...)) + (begin + (catch #t (lambda () (use-modules (gnu system module))) + (lambda _ + (import-error "System" (symbol->string 'module) "use-system-modules"))) + ...)) + ;;; gnu.scm ends here -- 2.13.6