summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2020-01-07 20:06:22 +0100
committerFrederik Rietdijk <fridh@fridh.nl>2020-01-07 20:06:22 +0100
commita823616723c44700a1c976fee77aafb470388e19 (patch)
tree08c996bb7f020cda3aa27ef881b61b0d3807b383 /lib
parent7f8111955082b4aa7dce2718b9ef4d8ad0f4584b (diff)
parentc425a7e694ef48513e35b60a124587ef382b2fa6 (diff)
downloadnixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar
nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.gz
nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.bz2
nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.lz
nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.xz
nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.zst
nixpkgs-a823616723c44700a1c976fee77aafb470388e19.zip
Merge master into staging-next
Diffstat (limited to 'lib')
-rwxr-xr-xlib/tests/modules.sh56
-rw-r--r--lib/tests/modules/declare-attrsOfSub-any-enable.nix (renamed from lib/tests/modules/declare-loaOfSub-any-enable.nix)4
-rw-r--r--lib/tests/modules/define-attrsOfSub-bar-enable.nix3
-rw-r--r--lib/tests/modules/define-attrsOfSub-bar.nix3
-rw-r--r--lib/tests/modules/define-attrsOfSub-foo-enable-force.nix5
-rw-r--r--lib/tests/modules/define-attrsOfSub-foo-enable-if.nix5
-rw-r--r--lib/tests/modules/define-attrsOfSub-foo-enable.nix3
-rw-r--r--lib/tests/modules/define-attrsOfSub-foo-force-enable.nix (renamed from lib/tests/modules/define-loaOfSub-foo-force-enable.nix)2
-rw-r--r--lib/tests/modules/define-attrsOfSub-foo-if-enable.nix (renamed from lib/tests/modules/define-loaOfSub-foo-if-enable.nix)2
-rw-r--r--lib/tests/modules/define-attrsOfSub-foo.nix3
-rw-r--r--lib/tests/modules/define-attrsOfSub-force-foo-enable.nix (renamed from lib/tests/modules/define-loaOfSub-force-foo-enable.nix)2
-rw-r--r--lib/tests/modules/define-attrsOfSub-if-foo-enable.nix (renamed from lib/tests/modules/define-loaOfSub-if-foo-enable.nix)2
-rw-r--r--lib/tests/modules/define-force-attrsOfSub-foo-enable.nix5
-rw-r--r--lib/tests/modules/define-force-loaOfSub-foo-enable.nix5
-rw-r--r--lib/tests/modules/define-if-attrsOfSub-foo-enable.nix (renamed from lib/tests/modules/define-if-loaOfSub-foo-enable.nix)2
-rw-r--r--lib/tests/modules/define-loaOfSub-bar-enable.nix3
-rw-r--r--lib/tests/modules/define-loaOfSub-bar.nix3
-rw-r--r--lib/tests/modules/define-loaOfSub-foo-enable-force.nix5
-rw-r--r--lib/tests/modules/define-loaOfSub-foo-enable-if.nix5
-rw-r--r--lib/tests/modules/define-loaOfSub-foo-enable.nix3
-rw-r--r--lib/tests/modules/define-loaOfSub-foo.nix3
-rw-r--r--lib/tests/modules/loaOf-with-long-list.nix19
-rw-r--r--lib/tests/modules/loaOf-with-many-list-merges.nix19
-rw-r--r--lib/types.nix44
24 files changed, 89 insertions, 117 deletions
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh
index da8c02e35ba..f69befd15c6 100755
--- a/lib/tests/modules.sh
+++ b/lib/tests/modules.sh
@@ -87,36 +87,36 @@ checkConfigOutput "false" "$@" ./define-force-enable.nix
 checkConfigOutput "false" "$@" ./define-enable-force.nix
 
 # Check mkForce with option and submodules.
-checkConfigError 'attribute .*foo.* .* not found' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix
-checkConfigOutput 'false' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix
-set -- config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo-enable.nix
+checkConfigError 'attribute .*foo.* .* not found' config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix
+checkConfigOutput 'false' config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix
+set -- config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo-enable.nix
 checkConfigOutput 'true' "$@"
-checkConfigOutput 'false' "$@" ./define-force-loaOfSub-foo-enable.nix
-checkConfigOutput 'false' "$@" ./define-loaOfSub-force-foo-enable.nix
-checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-force-enable.nix
-checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-enable-force.nix
+checkConfigOutput 'false' "$@" ./define-force-attrsOfSub-foo-enable.nix
+checkConfigOutput 'false' "$@" ./define-attrsOfSub-force-foo-enable.nix
+checkConfigOutput 'false' "$@" ./define-attrsOfSub-foo-force-enable.nix
+checkConfigOutput 'false' "$@" ./define-attrsOfSub-foo-enable-force.nix
 
 # Check overriding effect of mkForce on submodule definitions.
-checkConfigError 'attribute .*bar.* .* not found' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix
-checkConfigOutput 'false' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar.nix
-set -- config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar-enable.nix
+checkConfigError 'attribute .*bar.* .* not found' config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix
+checkConfigOutput 'false' config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix ./define-attrsOfSub-bar.nix
+set -- config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix ./define-attrsOfSub-bar-enable.nix
 checkConfigOutput 'true' "$@"
-checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-force-loaOfSub-foo-enable.nix
-checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-loaOfSub-force-foo-enable.nix
-checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-force-enable.nix
-checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-enable-force.nix
+checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-force-attrsOfSub-foo-enable.nix
+checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-attrsOfSub-force-foo-enable.nix
+checkConfigOutput 'true' "$@" ./define-attrsOfSub-foo-force-enable.nix
+checkConfigOutput 'true' "$@" ./define-attrsOfSub-foo-enable-force.nix
 
 # Check mkIf with submodules.
-checkConfigError 'attribute .*foo.* .* not found' config.loaOfSub.foo.enable ./declare-enable.nix ./declare-loaOfSub-any-enable.nix
-set -- config.loaOfSub.foo.enable ./declare-enable.nix ./declare-loaOfSub-any-enable.nix
-checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-if-loaOfSub-foo-enable.nix
-checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-loaOfSub-if-foo-enable.nix
-checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-loaOfSub-foo-if-enable.nix
-checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-enable-if.nix
-checkConfigOutput 'true' "$@" ./define-enable.nix ./define-if-loaOfSub-foo-enable.nix
-checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-if-foo-enable.nix
-checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-foo-if-enable.nix
-checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-foo-enable-if.nix
+checkConfigError 'attribute .*foo.* .* not found' config.attrsOfSub.foo.enable ./declare-enable.nix ./declare-attrsOfSub-any-enable.nix
+set -- config.attrsOfSub.foo.enable ./declare-enable.nix ./declare-attrsOfSub-any-enable.nix
+checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-if-attrsOfSub-foo-enable.nix
+checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-attrsOfSub-if-foo-enable.nix
+checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-attrsOfSub-foo-if-enable.nix
+checkConfigOutput 'false' "$@" ./define-attrsOfSub-foo-enable-if.nix
+checkConfigOutput 'true' "$@" ./define-enable.nix ./define-if-attrsOfSub-foo-enable.nix
+checkConfigOutput 'true' "$@" ./define-enable.nix ./define-attrsOfSub-if-foo-enable.nix
+checkConfigOutput 'true' "$@" ./define-enable.nix ./define-attrsOfSub-foo-if-enable.nix
+checkConfigOutput 'true' "$@" ./define-enable.nix ./define-attrsOfSub-foo-enable-if.nix
 
 # Check disabledModules with config definitions and option declarations.
 set -- config.enable ./define-enable.nix ./declare-enable.nix
@@ -138,7 +138,7 @@ checkConfigError 'while evaluating the module argument .*custom.* in .*import-cu
 checkConfigError 'infinite recursion encountered' "$@"
 
 # Check _module.check.
-set -- config.enable ./declare-enable.nix ./define-enable.nix ./define-loaOfSub-foo.nix
+set -- config.enable ./declare-enable.nix ./define-enable.nix ./define-attrsOfSub-foo.nix
 checkConfigError 'The option .* defined in .* does not exist.' "$@"
 checkConfigOutput "true" "$@" ./define-module-check.nix
 
@@ -152,12 +152,6 @@ checkConfigOutput "12" config.value ./declare-coerced-value-unsound.nix
 checkConfigError 'The option value .* in .* is not.*8 bit signed integer.* or string convertible to it' config.value ./declare-coerced-value-unsound.nix ./define-value-string-bigint.nix
 checkConfigError 'unrecognised JSON value' config.value ./declare-coerced-value-unsound.nix ./define-value-string-arbitrary.nix
 
-# Check loaOf with long list.
-checkConfigOutput "1 2 3 4 5 6 7 8 9 10" config.result ./loaOf-with-long-list.nix
-
-# Check loaOf with many merges of lists.
-checkConfigOutput "1 2 3 4 5 6 7 8 9 10" config.result ./loaOf-with-many-list-merges.nix
-
 # Check mkAliasOptionModule.
 checkConfigOutput "true" config.enable ./alias-with-priority.nix
 checkConfigOutput "true" config.enableAlias ./alias-with-priority.nix
diff --git a/lib/tests/modules/declare-loaOfSub-any-enable.nix b/lib/tests/modules/declare-attrsOfSub-any-enable.nix
index 71dad1c9135..986d07227e1 100644
--- a/lib/tests/modules/declare-loaOfSub-any-enable.nix
+++ b/lib/tests/modules/declare-attrsOfSub-any-enable.nix
@@ -17,10 +17,10 @@ in
 
 {
   options = {
-    loaOfSub = lib.mkOption {
+    attrsOfSub = lib.mkOption {
       default = {};
       example = {};
-      type = lib.types.loaOf (lib.types.submodule [ submod ]);
+      type = lib.types.attrsOf (lib.types.submodule [ submod ]);
       description = ''
         Some descriptive text
       '';
diff --git a/lib/tests/modules/define-attrsOfSub-bar-enable.nix b/lib/tests/modules/define-attrsOfSub-bar-enable.nix
new file mode 100644
index 00000000000..99c55d8b360
--- /dev/null
+++ b/lib/tests/modules/define-attrsOfSub-bar-enable.nix
@@ -0,0 +1,3 @@
+{
+  attrsOfSub.bar.enable = true;
+}
diff --git a/lib/tests/modules/define-attrsOfSub-bar.nix b/lib/tests/modules/define-attrsOfSub-bar.nix
new file mode 100644
index 00000000000..2a33068a568
--- /dev/null
+++ b/lib/tests/modules/define-attrsOfSub-bar.nix
@@ -0,0 +1,3 @@
+{
+  attrsOfSub.bar = {};
+}
diff --git a/lib/tests/modules/define-attrsOfSub-foo-enable-force.nix b/lib/tests/modules/define-attrsOfSub-foo-enable-force.nix
new file mode 100644
index 00000000000..c9ee36446f1
--- /dev/null
+++ b/lib/tests/modules/define-attrsOfSub-foo-enable-force.nix
@@ -0,0 +1,5 @@
+{ lib, ... }:
+
+{
+  attrsOfSub.foo.enable = lib.mkForce false;
+}
diff --git a/lib/tests/modules/define-attrsOfSub-foo-enable-if.nix b/lib/tests/modules/define-attrsOfSub-foo-enable-if.nix
new file mode 100644
index 00000000000..0b3baddb5ec
--- /dev/null
+++ b/lib/tests/modules/define-attrsOfSub-foo-enable-if.nix
@@ -0,0 +1,5 @@
+{ config, lib, ... }:
+
+{
+  attrsOfSub.foo.enable = lib.mkIf config.enable true;
+}
diff --git a/lib/tests/modules/define-attrsOfSub-foo-enable.nix b/lib/tests/modules/define-attrsOfSub-foo-enable.nix
new file mode 100644
index 00000000000..39cd63cef72
--- /dev/null
+++ b/lib/tests/modules/define-attrsOfSub-foo-enable.nix
@@ -0,0 +1,3 @@
+{
+  attrsOfSub.foo.enable = true;
+}
diff --git a/lib/tests/modules/define-loaOfSub-foo-force-enable.nix b/lib/tests/modules/define-attrsOfSub-foo-force-enable.nix
index dce0ef547b3..009da7c77cd 100644
--- a/lib/tests/modules/define-loaOfSub-foo-force-enable.nix
+++ b/lib/tests/modules/define-attrsOfSub-foo-force-enable.nix
@@ -1,7 +1,7 @@
 { lib, ... }:
 
 {
-  loaOfSub.foo = lib.mkForce {
+  attrsOfSub.foo = lib.mkForce {
     enable = false;
   };
 }
diff --git a/lib/tests/modules/define-loaOfSub-foo-if-enable.nix b/lib/tests/modules/define-attrsOfSub-foo-if-enable.nix
index 236b2840ee5..93702dfa86f 100644
--- a/lib/tests/modules/define-loaOfSub-foo-if-enable.nix
+++ b/lib/tests/modules/define-attrsOfSub-foo-if-enable.nix
@@ -1,7 +1,7 @@
 { config, lib, ... }:
 
 {
-  loaOfSub.foo = lib.mkIf config.enable {
+  attrsOfSub.foo = lib.mkIf config.enable {
     enable = true;
   };
 }
diff --git a/lib/tests/modules/define-attrsOfSub-foo.nix b/lib/tests/modules/define-attrsOfSub-foo.nix
new file mode 100644
index 00000000000..e6bb531dedd
--- /dev/null
+++ b/lib/tests/modules/define-attrsOfSub-foo.nix
@@ -0,0 +1,3 @@
+{
+  attrsOfSub.foo = {};
+}
diff --git a/lib/tests/modules/define-loaOfSub-force-foo-enable.nix b/lib/tests/modules/define-attrsOfSub-force-foo-enable.nix
index df5722274ee..5c02dd34314 100644
--- a/lib/tests/modules/define-loaOfSub-force-foo-enable.nix
+++ b/lib/tests/modules/define-attrsOfSub-force-foo-enable.nix
@@ -1,7 +1,7 @@
 { lib, ... }:
 
 {
-  loaOfSub = lib.mkForce {
+  attrsOfSub = lib.mkForce {
     foo.enable = false;
   };
 }
diff --git a/lib/tests/modules/define-loaOfSub-if-foo-enable.nix b/lib/tests/modules/define-attrsOfSub-if-foo-enable.nix
index bd2d068d31a..a3fe6051d41 100644
--- a/lib/tests/modules/define-loaOfSub-if-foo-enable.nix
+++ b/lib/tests/modules/define-attrsOfSub-if-foo-enable.nix
@@ -1,7 +1,7 @@
 { config, lib, ... }:
 
 {
-  loaOfSub = lib.mkIf config.enable {
+  attrsOfSub = lib.mkIf config.enable {
     foo.enable = true;
   };
 }
diff --git a/lib/tests/modules/define-force-attrsOfSub-foo-enable.nix b/lib/tests/modules/define-force-attrsOfSub-foo-enable.nix
new file mode 100644
index 00000000000..dafb2360e1f
--- /dev/null
+++ b/lib/tests/modules/define-force-attrsOfSub-foo-enable.nix
@@ -0,0 +1,5 @@
+{ lib, ... }:
+
+lib.mkForce {
+  attrsOfSub.foo.enable = false;
+}
diff --git a/lib/tests/modules/define-force-loaOfSub-foo-enable.nix b/lib/tests/modules/define-force-loaOfSub-foo-enable.nix
deleted file mode 100644
index bfd8e084b59..00000000000
--- a/lib/tests/modules/define-force-loaOfSub-foo-enable.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ lib, ... }:
-
-lib.mkForce {
-  loaOfSub.foo.enable = false;
-}
diff --git a/lib/tests/modules/define-if-loaOfSub-foo-enable.nix b/lib/tests/modules/define-if-attrsOfSub-foo-enable.nix
index 4288d74dec0..6a8e32e802a 100644
--- a/lib/tests/modules/define-if-loaOfSub-foo-enable.nix
+++ b/lib/tests/modules/define-if-attrsOfSub-foo-enable.nix
@@ -1,5 +1,5 @@
 { config, lib, ... }:
 
 lib.mkIf config.enable {
-  loaOfSub.foo.enable = true;
+  attrsOfSub.foo.enable = true;
 }
diff --git a/lib/tests/modules/define-loaOfSub-bar-enable.nix b/lib/tests/modules/define-loaOfSub-bar-enable.nix
deleted file mode 100644
index 422bb0a600b..00000000000
--- a/lib/tests/modules/define-loaOfSub-bar-enable.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  loaOfSub.bar.enable = true;
-}
diff --git a/lib/tests/modules/define-loaOfSub-bar.nix b/lib/tests/modules/define-loaOfSub-bar.nix
deleted file mode 100644
index c24315e09b6..00000000000
--- a/lib/tests/modules/define-loaOfSub-bar.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  loaOfSub.bar = {};
-}
diff --git a/lib/tests/modules/define-loaOfSub-foo-enable-force.nix b/lib/tests/modules/define-loaOfSub-foo-enable-force.nix
deleted file mode 100644
index c1d7b198be5..00000000000
--- a/lib/tests/modules/define-loaOfSub-foo-enable-force.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ lib, ... }:
-
-{
-  loaOfSub.foo.enable = lib.mkForce false;
-}
diff --git a/lib/tests/modules/define-loaOfSub-foo-enable-if.nix b/lib/tests/modules/define-loaOfSub-foo-enable-if.nix
deleted file mode 100644
index 44b2c96cd02..00000000000
--- a/lib/tests/modules/define-loaOfSub-foo-enable-if.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ config, lib, ... }:
-
-{
-  loaOfSub.foo.enable = lib.mkIf config.enable true;
-}
diff --git a/lib/tests/modules/define-loaOfSub-foo-enable.nix b/lib/tests/modules/define-loaOfSub-foo-enable.nix
deleted file mode 100644
index 822425c71bb..00000000000
--- a/lib/tests/modules/define-loaOfSub-foo-enable.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  loaOfSub.foo.enable = true;
-}
diff --git a/lib/tests/modules/define-loaOfSub-foo.nix b/lib/tests/modules/define-loaOfSub-foo.nix
deleted file mode 100644
index e9b2e631f2e..00000000000
--- a/lib/tests/modules/define-loaOfSub-foo.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  loaOfSub.foo = {};
-}
diff --git a/lib/tests/modules/loaOf-with-long-list.nix b/lib/tests/modules/loaOf-with-long-list.nix
deleted file mode 100644
index f30903c47e5..00000000000
--- a/lib/tests/modules/loaOf-with-long-list.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ config, lib, ... }:
-
-{
-  options = {
-    loaOfInt = lib.mkOption {
-      type = lib.types.loaOf lib.types.int;
-    };
-
-    result = lib.mkOption {
-      type = lib.types.str;
-    };
-  };
-
-  config = {
-    loaOfInt = [ 1 2 3 4 5 6 7 8 9 10 ];
-
-    result = toString (lib.attrValues config.loaOfInt);
-  };
-}
diff --git a/lib/tests/modules/loaOf-with-many-list-merges.nix b/lib/tests/modules/loaOf-with-many-list-merges.nix
deleted file mode 100644
index f8f8a8da82b..00000000000
--- a/lib/tests/modules/loaOf-with-many-list-merges.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ config, lib, ... }:
-
-{
-  options = {
-    loaOfInt = lib.mkOption {
-      type = lib.types.loaOf lib.types.int;
-    };
-
-    result = lib.mkOption {
-      type = lib.types.str;
-    };
-  };
-
-  config = {
-    loaOfInt = lib.mkMerge (map lib.singleton [ 1 2 3 4 5 6 7 8 9 10 ]);
-
-    result = toString (lib.attrValues config.loaOfInt);
-  };
-}
diff --git a/lib/types.nix b/lib/types.nix
index de3c4f0d603..4872a676657 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -242,8 +242,7 @@ rec {
 
     path = mkOptionType {
       name = "path";
-      # Hacky: there is no ‘isPath’ primop.
-      check = x: builtins.substring 0 1 (toString x) == "/";
+      check = x: isCoercibleToString x && builtins.substring 0 1 (toString x) == "/";
       merge = mergeEqualOption;
     };
 
@@ -295,26 +294,43 @@ rec {
     # List or attribute set of ...
     loaOf = elemType:
       let
-        convertAllLists = defs:
+        convertAllLists = loc: defs:
           let
             padWidth = stringLength (toString (length defs));
             unnamedPrefix = i: "unnamed-" + fixedWidthNumber padWidth i + ".";
           in
-            imap1 (i: convertIfList (unnamedPrefix i)) defs;
-
-        convertIfList = unnamedPrefix: def:
+            imap1 (i: convertIfList loc (unnamedPrefix i)) defs;
+        convertIfList = loc: unnamedPrefix: def:
           if isList def.value then
             let
               padWidth = stringLength (toString (length def.value));
               unnamed = i: unnamedPrefix + fixedWidthNumber padWidth i;
+              res =
+                { inherit (def) file;
+                  value = listToAttrs (
+                    imap1 (elemIdx: elem:
+                      { name  = elem.name or (unnamed elemIdx);
+                        value = elem;
+                      }) def.value);
+                };
+              option = concatStringsSep "." loc;
+              sample = take 3 def.value;
+              list = concatMapStrings (x: ''{ name = "${x.name or "unnamed"}"; ...} '') sample;
+              set = concatMapStrings (x: ''${x.name or "unnamed"} = {...}; '') sample;
+              msg = ''
+                In file ${def.file}
+                a list is being assigned to the option config.${option}.
+                This will soon be an error as type loaOf is deprecated.
+                See https://git.io/fj2zm for more information.
+                Do
+                  ${option} =
+                    { ${set}...}
+                instead of
+                  ${option} =
+                    [ ${list}...]
+              '';
             in
-              { inherit (def) file;
-                value = listToAttrs (
-                  imap1 (elemIdx: elem:
-                    { name = elem.name or (unnamed elemIdx);
-                      value = elem;
-                    }) def.value);
-              }
+              lib.warn msg res
           else
             def;
         attrOnly = attrsOf elemType;
@@ -322,7 +338,7 @@ rec {
         name = "loaOf";
         description = "list or attribute set of ${elemType.description}s";
         check = x: isList x || isAttrs x;
-        merge = loc: defs: attrOnly.merge loc (convertAllLists defs);
+        merge = loc: defs: attrOnly.merge loc (convertAllLists loc defs);
         getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name?>"]);
         getSubModules = elemType.getSubModules;
         substSubModules = m: loaOf (elemType.substSubModules m);