{
  description = "General Vulkan dev environment";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs {
          inherit system;
          config.allowUnfree = true;
        };
      in {
        devShells.default = pkgs.mkShell {
          name = "vulkan";
          hardeningDisable = [ "fortify" ];

          packages = with pkgs; [
            # Shader compile
            shader-slang
            glslang
            # Vulkan
            vulkan-headers
            vulkan-loader
            vulkan-validation-layers
            vulkan-tools
            vulkan-utility-libraries
            vk-bootstrap
            vulkan-memory-allocator
            # Wayland
            wayland
            wayland-protocols
            wayland-scanner
            libxkbcommon
            # Miniaudio
            libpulseaudio
            libpulseaudio.dev
            # Other libraries
            glfw3
            SDL2
            fmt
            imgui
            tinyobjloader
            nlohmann_json
            tinygltf
#            fastgltf
            stb
            ktx-tools
            glm
            cmake
            ninja
            pkg-config
            # Debug
            gdb
            renderdoc
#            git
          ];
          # Environment Variables
          LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [
            pkgs.vulkan-loader
            pkgs.shaderc.lib
            pkgs.SDL2
            pkgs.vk-bootstrap
          ];
          VK_LAYER_PATH = "${pkgs.vulkan-validation-layers}/share/vulkan/explicit_layer.d";
          VULKAN_SDK = "${pkgs.vulkan-validation-layers}/share/vulkan/explicit_layer.d";
          GIT="${pkgs.git}";

          shellHook = ''
            echo "Vulkan loaded"
            unset SOURCE_DATE_EPOCH
            echo $LD_LIBRARY_PATH
          '';
        };
      });
}
