about summary refs log tree commit diff
path: root/nixpkgs/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/flake.nix')
-rw-r--r--nixpkgs/flake.nix20
1 files changed, 19 insertions, 1 deletions
diff --git a/nixpkgs/flake.nix b/nixpkgs/flake.nix
index 5237cae86f18..ececd26c153c 100644
--- a/nixpkgs/flake.nix
+++ b/nixpkgs/flake.nix
@@ -47,8 +47,26 @@
                       })
                     ];
                   })).config;
+
+                moduleDeclarationFile =
+                  let
+                    # Even though `modules` is a mandatory argument for `nixosSystem`, it doesn't
+                    # mean that the evaluator always keeps track of its position. If there
+                    # are too many levels of indirection, the position gets lost at some point.
+                    intermediatePos = builtins.unsafeGetAttrPos "modules" args;
+                  in
+                    if intermediatePos == null then null else intermediatePos.file;
+
+                # Add the invoking file as error message location for modules
+                # that don't have their own locations; presumably inline modules.
+                addModuleDeclarationFile =
+                  m: if moduleDeclarationFile == null then m else {
+                    _file = moduleDeclarationFile;
+                    imports = [ m ];
+                  };
+
               in
-              modules ++ [
+              map addModuleDeclarationFile modules ++ [
                 {
                   system.nixos.versionSuffix =
                     ".${final.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}.${self.shortRev or "dirty"}";