{
  lib,
  duckstation,
  fetchFromGitHub,
  fetchpatch,
  shaderc,
}:

{
  duckstation =
    let
      self = {
        pname = "duckstation";
        version = "0.1-6759";
        src = fetchFromGitHub {
          owner = "stenzek";
          repo = "duckstation";
          rev = "refs/tags/v${self.version}";
          #
          # Some files are filled by using Git commands; it requires deepClone.
          # More info at `checkout_ref` function in nix-prefetch-git.
          # However, `.git` is a bit nondeterministic (and Git itself makes no
          # guarrantees whatsoever).
          # Then, in order to enhance reproducibility, what we will do here is:
          #
          # - Execute the desired Git commands;
          # - Save the obtained info into files;
          # - Remove `.git` afterwards.
          #
          deepClone = true;
          postFetch = ''
            cd $out
            mkdir -p .nixpkgs-auxfiles/
            git rev-parse HEAD > .nixpkgs-auxfiles/git_hash
            git rev-parse --abbrev-ref HEAD | tr -d '\r\n' > .nixpkgs-auxfiles/git_branch
            git describe --dirty | tr -d '\r\n' > .nixpkgs-auxfiles/git_tag
            git log -1 --date=iso8601-strict --format=%cd > .nixpkgs-auxfiles/git_date
            find $out -name .git -print0 | xargs -0 rm -fr
          '';
          hash = "sha256-HETo7mChBASnr5prPUWcOhS4TIESFdrs1haEXQpnuzs=";
        };
      };
    in
    self;

  shaderc-patched = shaderc.overrideAttrs (
    old:
    let
      version = "2024.0";
      src = fetchFromGitHub {
        owner = "google";
        repo = "shaderc";
        rev = "v${version}";
        hash = "sha256-Cwp7WbaKWw/wL9m70wfYu47xoUGQW+QGeoYhbyyzstQ=";
      };
    in
    {
      pname = "shaderc-patched-for-duckstation";
      inherit version src;
      patches = (old.patches or [ ]) ++ [
        (fetchpatch {
          url = "file://${duckstation.src}/scripts/shaderc-changes.patch";
          hash = "sha256-Ps/D+CdSbjVWg3ZGOEcgbpQbCNkI5Nuizm4E5qiM9Wo=";
          excludes = [
            "CHANGES"
            "CMakeLists.txt"
            "libshaderc/CMakeLists.txt"
          ];
        })
      ];
    }
  );
}