How to build `vulkan-validation-layers`?

I’m currently trying to build the latest commit of vulkan-validation-layers with the following setup:

vulkan-validation-layers = prev.vulkan-validation-layers.overrideAttrs (old: {
  version = "1.4.343.0";
  src = pkgs.fetchFromGitHub {
    owner = "KhronosGroup";
    repo = "Vulkan-ValidationLayers";
    rev = "11440fc0664718ac51646c63d6e321f61195e808";
    hash = "sha256-iAOUwTAU8VdrMNDYlPHWqPKtzDZOHRxNq4nsEmDbsug=";
  };
  nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.git ];
});

However, I’m getting the following error message:

building vulkan-validation-layers-1.4.343.0 (configurePhase): fatal: unable to access 'https://github.com/KhronosGroup/Vulkan-Headers.git/': Could not resolve host: github.com

The reason seems to be that each derivation won’t have internet access during the build but if I change my setup above to this:

vulkan-validation-layers = prev.vulkan-validation-layers.overrideAttrs (old: {
  version = "1.4.343.0";
  src = pkgs.fetchFromGitHub {
    owner = "KhronosGroup";
    repo = "Vulkan-ValidationLayers";
    rev = "11440fc0664718ac51646c63d6e321f61195e808";
    hash = "sha256-iAOUwTAU8VdrMNDYlPHWqPKtzDZOHRxNq4nsEmDbsug=";
  };
});

then I’m getting the following error message:

error: builder for '/nix/store/wh8yf4jdfqizr6159kwyjapnwanw04m3-vulkan-validation-layers-1.4.343.0.drv' failed with exit code 1;
       last 25 log lines:
       >     command_output(['git', 'clone', self.url, '.'], self.repo_dir)
       >     ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       >   File "/build/source/scripts/update_deps.py", line 325, in command_output
       >     result = subprocess.run(cmd, cwd=directory, capture_output=True, text=True, errors='replace')
       >   File "/nix/store/qzc04a3npl70cyyy6flnnrb2ig3kayxm-python3-3.13.11/lib/python3.13/subprocess.py", line 554, in run
       >     with Popen(*popenargs, **kwargs) as process:
       >          ~~~~~^^^^^^^^^^^^^^^^^^^^^^
       >   File "/nix/store/qzc04a3npl70cyyy6flnnrb2ig3kayxm-python3-3.13.11/lib/python3.13/subprocess.py", line 1039, in __init__
       >     self._execute_child(args, executable, preexec_fn, close_fds,
       >     ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       >                         pass_fds, cwd, env,
       >                         ^^^^^^^^^^^^^^^^^^^
       >     ...<5 lines>...
       >                         gid, gids, uid, umask,
       >                         ^^^^^^^^^^^^^^^^^^^^^^
       >                         start_new_session, process_group)
       >                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       >   File "/nix/store/qzc04a3npl70cyyy6flnnrb2ig3kayxm-python3-3.13.11/lib/python3.13/subprocess.py", line 1991, in _execute_child
       >     raise child_exception_type(errno_num, err_msg, err_filename)
       > FileNotFoundError: [Errno 2] No such file or directory: 'git'
       > CMake Error at scripts/CMakeLists.txt:133 (message):
       >   Could not run update_deps.py which is necessary to download dependencies.

Link to the script.

How… can I build vulkan-validation-layers? (@Ralith I hope it’s fine to ping since you are the maintainer of the vulkan-validation-layers package)

Minimal flake

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    flake-parts.url = "github:hercules-ci/flake-parts";
  };

  outputs = inputs@{ flake-parts, ... }:
    flake-parts.lib.mkFlake { inherit inputs; }
      {
        systems = [
          "x86_64-linux"
          "aarch64-linux"
        ];

        perSystem = { self', lib, system, pkgs, config, ... }: {
          _module.args.pkgs = import inputs.nixpkgs {
            inherit system;

            overlays = [
              (final: prev:
                let
                  version = "1.4.343.0";
                in
                {
                  vulkan-loader = prev.vulkan-loader.overrideAttrs (old: {
                    inherit version;
                    src = prev.fetchFromGitHub {
                      owner = "charles-lunarg";
                      repo = "Vulkan-Loader";
                      rev = "5b0ed940054d35d2b07840b02c1b8e0c2bf2e5cc";
                      hash = "sha256-AVd0Q2axESlFVShjNFUFoc1fQfvHP3/QfNtbD92jujg=";
                    };
                  });

                  vulkan-headers = prev.vulkan-headers.overrideAttrs (old: {
                    inherit version;
                    src = prev.fetchFromGitHub {
                      owner = "KhronosGroup";
                      repo = "Vulkan-Headers";
                      rev = "49f1a381e2aec33ef32adf4a377b5a39ec016ec4";
                      hash = "sha256-K/8X9D7B0o6+osOzScplwea+OsfM3srAtDKCgfZpcJU=";
                    };
                  });

                  vulkan-validation-layers = prev.vulkan-validation-layers.overrideAttrs (old: {
                    inherit version;
                    src = pkgs.fetchFromGitHub {
                      owner = "KhronosGroup";
                      repo = "Vulkan-ValidationLayers";
                      rev = "8166b45f45f15eab64e73480de22fd3004480215";
                      hash = "sha256-LafNnTVTpGWlVEBUwk6RCPjkt+RORj4UbvyoKBMqO8U=";
                    };

                    # uncomment this to avoid cloning during build
                    # cmakeFlags = old.cmakeFlags ++ [ "-DUPDATE_DEPS=false" ];
                  });
                })
            ];
          };

          devShells.default = pkgs.mkShell {
            packages = with pkgs; [
              vulkan-loader
              vulkan-validation-layers
            ];
          };
        };
      };
}

Ok, after reading the scrip a bit thorough I found this:

option(UPDATE_DEPS "Run update_deps.py for user" ON)

so by doing this:

vulkan-validation-layers = prev.vulkan-validation-layers.overrideAttrs (old: {
  inherit version;
  src = pkgs.fetchFromGitHub {
    owner = "KhronosGroup";
    repo = "Vulkan-ValidationLayers";
    rev = "11440fc0664718ac51646c63d6e321f61195e808";
    hash = "sha256-iAOUwTAU8VdrMNDYlPHWqPKtzDZOHRxNq4nsEmDbsug=";
  };

  cmakeFlags = old.cmakeFlags ++ [ "-DUPDATE_DEPS=false" ];
});

it seems to continue building… until I got this:

error: builder for '/nix/store/mq39xfyspkjjf4xxcnwrfv83kf9cq5pr-vulkan-validation-layers-1.4.335.0.drv' failed with exit code 2;
       last 25 log lines:
       > /nix/store/0k8pqkvy8dxa0vx6sd8lqs73mg86sgkq-vulkan-utility-libraries-1.4.335.0/include/vulkan/vk_enum_string_helper.h:2331:14: error: 'VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_OHOS' was not declared in this scope; did you mean 'VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR'?
       >  2331 |         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_OHOS:
       >       |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       >       |              VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR
       > make[2]: *** [layers/CMakeFiles/VkLayer_utils.dir/build.make:93: layers/CMakeFiles/VkLayer_utils.dir/error_message/error_location.cpp.o] Error 1
       > make[2]: *** [layers/CMakeFiles/VkLayer_utils.dir/build.make:261: layers/CMakeFiles/VkLayer_utils.dir/utils/image_utils.cpp.o] Error 1
       > In file included from /build/source/layers/utils/sync_utils.cpp:24:
       > /nix/store/0k8pqkvy8dxa0vx6sd8lqs73mg86sgkq-vulkan-utility-libraries-1.4.335.0/include/vulkan/vk_enum_string_helper.h: In function 'const char* string_VkStructureType(VkStructureType)':
       > /nix/store/0k8pqkvy8dxa0vx6sd8lqs73mg86sgkq-vulkan-utility-libraries-1.4.335.0/include/vulkan/vk_enum_string_helper.h:2327:14: error: 'VK_STRUCTURE_TYPE_NATIVE_BUFFER_OHOS' was not declared in this scope; did you mean 'VK_STRUCTURE_TYPE_NATIVE_BUFFER_USAGE_OHOS'?
       >  2327 |         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_OHOS:
       >       |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       >       |              VK_STRUCTURE_TYPE_NATIVE_BUFFER_USAGE_OHOS
       > /nix/store/0k8pqkvy8dxa0vx6sd8lqs73mg86sgkq-vulkan-utility-libraries-1.4.335.0/include/vulkan/vk_enum_string_helper.h:2329:14: error: 'VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_OHOS' was not declared in this scope; did you mean 'VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR'?
       >  2329 |         case VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_OHOS:
       >       |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       >       |              VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR
       > /nix/store/0k8pqkvy8dxa0vx6sd8lqs73mg86sgkq-vulkan-utility-libraries-1.4.335.0/include/vulkan/vk_enum_string_helper.h:2331:14: error: 'VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_OHOS' was not declared in this scope; did you mean 'VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR'?
       >  2331 |         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_OHOS:
       >       |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       >       |              VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR
       > make[2]: *** [layers/CMakeFiles/VkLayer_utils.dir/build.make:331: layers/CMakeFiles/VkLayer_utils.dir/utils/sync_utils.cpp.o] Error 1
       > make[2]: *** [layers/CMakeFiles/VkLayer_utils.dir/build.make:317: layers/CMakeFiles/VkLayer_utils.dir/utils/ray_tracing_utils.cpp.o] Error 1
       > make[2]: *** [layers/CMakeFiles/VkLayer_utils.dir/build.make:79: layers/CMakeFiles/VkLayer_utils.dir/error_message/logging.cpp.o] Error 1
       > make[1]: *** [CMakeFiles/Makefile2:178: layers/CMakeFiles/VkLayer_utils.dir/all] Error 2
       > make: *** [Makefile:136: all] Error 2```

but I assume those errors are... from the repository.