diff --git a/morph/grid/local/grid.nix b/morph/grid/local/grid.nix
index fdc0cde55be4f1b644c212ce20f6c3e44af8e3df..dccb3813500c52eb234a41e304b3b29b2f893428 100644
--- a/morph/grid/local/grid.nix
+++ b/morph/grid/local/grid.nix
@@ -1,7 +1,7 @@
-# Load the helper function and call it with arguments tailored for the local
-# grid.  It will make the morph configuration for us.  We share this function
-# with the production grid and have one fewer possible point of divergence.
-import ../../lib/make-grid.nix {
+let lib = import ../../lib;
+in lib.make-grid {
+  # Make a morph configuration for this grid.  We share this function
+  # with the other grids and have one fewer possible point of divergence.
   name = "LocalDev";
   config = ./config.json;
   nodes = cfg:
@@ -22,7 +22,7 @@ import ../../lib/make-grid.nix {
     nodeExporterTargets = [ "monitoring" "payments" "storage1" "storage2" ];
 
   in {
-    "payments" = import ../../lib/make-issuer.nix (cfg // rec {
+    "payments" = lib.make-issuer (cfg // rec {
       publicIPv4 = "192.168.67.21";
       monitoringvpnIPv4 = "172.23.23.11";
       hardware = import ./virtual-hardware.nix ({ inherit publicIPv4; });
@@ -31,7 +31,7 @@ import ../../lib/make-grid.nix {
       inherit sshUsers;
     });
 
-    "storage1" = import ../../lib/make-testing.nix (cfg // rec {
+    "storage1" = lib.make-testing (cfg // rec {
       publicIPv4 = "192.168.67.22";
       monitoringvpnIPv4 = "172.23.23.12";
       hardware = import ./virtual-hardware.nix ({ inherit publicIPv4; });
@@ -40,7 +40,7 @@ import ../../lib/make-grid.nix {
       inherit sshUsers;
     });
 
-    "storage2" = import ../../lib/make-testing.nix (cfg // rec {
+    "storage2" = lib.make-testing (cfg // rec {
       publicIPv4 = "192.168.67.23";
       monitoringvpnIPv4 = "172.23.23.13";
       hardware = import ./virtual-hardware.nix ({ inherit publicIPv4; });
@@ -49,7 +49,7 @@ import ../../lib/make-grid.nix {
       inherit sshUsers;
     });
 
-    "monitoring" = import ../../lib/make-monitoring.nix (cfg // rec {
+    "monitoring" = lib.make-monitoring (cfg // rec {
       publicIPv4 = "192.168.67.24";
       monitoringvpnIPv4 = "172.23.23.1";
       inherit vpnClientIPs;
diff --git a/morph/grid/production/grid.nix b/morph/grid/production/grid.nix
index fee0c9be6faed47d4a702b5b53c2419cbb677ba6..aea3a9df56c41a260a217e2b4d02c7a170bccd6a 100644
--- a/morph/grid/production/grid.nix
+++ b/morph/grid/production/grid.nix
@@ -1,7 +1,6 @@
-# Load the helper function and call it with arguments tailored for the testing
-# grid.  It will make the morph configuration for us.  We share this function
-# with the testing grid and have one fewer possible point of divergence.
-import ../../lib/make-grid.nix {
+# See morph/grid/local/grid.nix for additional commentary.
+let lib = import ../../lib;
+in lib.make-grid {
   name = "Production";
   config = ./config.json;
   nodes = cfg:
@@ -52,16 +51,16 @@ import ../../lib/make-grid.nix {
     # doesn't specify one.
     #
     # The names must be unique!
-    "payments.privatestorage.io" = import ../../lib/make-issuer.nix (cfg // {
+    "payments.privatestorage.io" = lib.make-issuer (cfg // {
       publicIPv4 = "18.184.142.208";
       monitoringvpnIPv4 = "172.23.23.11";
       inherit monitoringvpnKeyDir;
       inherit sshUsers;
-      hardware = ../../lib/issuer-aws.nix;
+      hardware = lib.hardware-aws;
       stateVersion = "19.03";
     });
 
-    "storage001" = import ../../lib/make-storage.nix (cfg // {
+    "storage001" = lib.make-storage (cfg // {
         cfg = import ./storage001-config.nix;
         inherit sshUsers;
         hardware = ./storage001-hardware.nix;
@@ -69,7 +68,7 @@ import ../../lib/make-grid.nix {
         monitoringvpnIPv4 = "172.23.23.21";
         inherit monitoringvpnKeyDir;
     });
-    "storage002" = import ../../lib/make-storage.nix (cfg // {
+    "storage002" = lib.make-storage (cfg // {
         cfg = import ./storage002-config.nix;
         inherit sshUsers;
         hardware = ./storage002-hardware.nix;
@@ -77,7 +76,7 @@ import ../../lib/make-grid.nix {
         monitoringvpnIPv4 = "172.23.23.22";
         inherit monitoringvpnKeyDir;
     });
-    "storage003" = import ../../lib/make-storage.nix (cfg // {
+    "storage003" = lib.make-storage (cfg // {
         cfg = import ./storage003-config.nix;
         inherit sshUsers;
         hardware = ./storage003-hardware.nix;
@@ -85,7 +84,7 @@ import ../../lib/make-grid.nix {
         monitoringvpnIPv4 = "172.23.23.23";
         inherit monitoringvpnKeyDir;
     });
-    "storage004" = import ../../lib/make-storage.nix (cfg // {
+    "storage004" = lib.make-storage (cfg // {
         cfg = import ./storage004-config.nix;
         inherit sshUsers;
         hardware = ./storage004-hardware.nix;
@@ -93,7 +92,7 @@ import ../../lib/make-grid.nix {
         monitoringvpnIPv4 = "172.23.23.24";
         inherit monitoringvpnKeyDir;
     });
-    "storage005" = import ../../lib/make-storage.nix (cfg // {
+    "storage005" = lib.make-storage (cfg // {
         cfg = import ./storage005-config.nix;
         inherit sshUsers;
         hardware = ./storage005-hardware.nix;
@@ -102,14 +101,14 @@ import ../../lib/make-grid.nix {
         inherit monitoringvpnKeyDir;
     });
 
-    "monitoring" = import ../../lib/make-monitoring.nix (cfg // {
+    "monitoring" = lib.make-monitoring (cfg // {
       publicIPv4 = "monitoring.private.storage";
       monitoringvpnIPv4 = "172.23.23.1";
       inherit monitoringvpnKeyDir;
       inherit vpnClientIPs;
       inherit hostsMap;
       inherit nodeExporterTargets;
-      hardware = ../../lib/issuer-aws.nix;
+      hardware = lib.hardware-aws;
       stateVersion = "19.09";
       inherit sshUsers;
     });
diff --git a/morph/grid/testing/grid.nix b/morph/grid/testing/grid.nix
index e31a28f2eb7817f393f4e8b6b71972b7fd2f79f1..73635932a4ed97fd482ec8cb57dc904c2cde519c 100644
--- a/morph/grid/testing/grid.nix
+++ b/morph/grid/testing/grid.nix
@@ -1,7 +1,6 @@
-# Load the helper function and call it with arguments tailored for the testing
-# grid.  It will make the morph configuration for us.  We share this function
-# with the production grid and have one fewer possible point of divergence.
-import ../../lib/make-grid.nix {
+# See morph/grid/local/grid.nix for additional commentary.
+let lib = import ../../lib;
+in lib.make-grid {
   name = "Testing";
   config = ./config.json;
   nodes = cfg:
@@ -21,16 +20,16 @@ import ../../lib/make-grid.nix {
     nodeExporterTargets = [ "monitoring" "payments" "storage001" ];
 
   in {
-    "payments" = import ../../lib/make-issuer.nix (cfg // {
+    "payments" = lib.make-issuer (cfg // {
       publicIPv4 = "18.194.183.13";
       monitoringvpnIPv4 = "172.23.23.11";
       inherit monitoringvpnKeyDir;
       inherit sshUsers;
-      hardware = ../../lib/issuer-aws.nix;
+      hardware = lib.hardware-aws;
       stateVersion = "19.03";
     });
 
-    "storage001" = import ../../lib/make-testing.nix (cfg // {
+    "storage001" = lib.make-testing (cfg // {
       publicIPv4 = "3.120.26.190";
       monitoringvpnIPv4 = "172.23.23.12";
       inherit monitoringvpnKeyDir;
@@ -39,14 +38,14 @@ import ../../lib/make-grid.nix {
       stateVersion = "19.03";
     });
 
-    "monitoring" = import ../../lib/make-monitoring.nix (cfg // {
+    "monitoring" = lib.make-monitoring (cfg // {
       publicIPv4 = "18.156.171.217";
       monitoringvpnIPv4 = "172.23.23.1";
       inherit monitoringvpnKeyDir;
       inherit vpnClientIPs;
       inherit hostsMap;
       inherit nodeExporterTargets;
-      hardware = ../../lib/issuer-aws.nix;
+      hardware = lib.hardware-aws;
       stateVersion = "19.09";
       inherit sshUsers;
     });
diff --git a/morph/lib/default.nix b/morph/lib/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..95a3ee14e35f664886e5be55d9d206e1b5701610
--- /dev/null
+++ b/morph/lib/default.nix
@@ -0,0 +1,9 @@
+rec {
+  make-grid = import ./make-grid.nix;
+  make-issuer = import ./make-issuer.nix;
+  make-testing = import ./make-testing.nix;
+  make-storage = import ./make-storage.nix;
+  make-monitoring = import ./make-monitoring.nix;
+
+  hardware-aws = import ./issuer-aws.nix;
+}