{ config, pkgs, lib, ... }:
{
  # https://wiki.archlinux.org/title/HiDPI#Wayland
  # Results in blurry font in non-Wayland applications :/

  # https://wiki.archlinux.org/title/HiDPI#Xorg

  programs.dconf.enable = true;

  # Overlays.
  # https://nixos.wiki/wiki/Overlays#In_NixOS
  # https://discourse.nixos.org/t/use-specific-pkg-version-in-overlay/32741/3

  # If on X11, then use patched version of mutter.
  nixpkgs.overlays = lib.mkIf (! config.services.xserver.displayManager.gdm.wayland) [
    (
      # Patched version of mutter 44.2.
      # Outdated example: https://nixos.wiki/wiki/Overlays#Overriding_a_package_inside_a_scope
      #
      # On the AUR, they apply only one patch, not three.
      # And they pick the patch that corresponds to the mutter version.
      # https://aur.archlinux.org/packages/mutter-x11-scaling
      #
      # New patch URL:
      # -> https://salsa.debian.org/gnome-team/mutter/-/blob/ubuntu/master/debian/patches/ubuntu/x11-Add-support-for-fractional-scaling-using-Randr.patch
      # For release 44.2:
      # -> https://salsa.debian.org/gnome-team/mutter/-/tags?sort=updated_desc&search=ubuntu%2F
      # -> https://salsa.debian.org/gnome-team/mutter/-/tags/ubuntu%2F44.2-3ubuntu1
      # -> https://salsa.debian.org/gnome-team/mutter/-/raw/ubuntu/44.2-3ubuntu1/debian/patches/ubuntu/x11-Add-support-for-fractional-scaling-using-Randr.patch
      #
      #=> building '/nix/store/yh0jnwyq5351l1rjspjlkimas3wvpf6g-mutter-44.2.drv'...

      # Elements of nixpkgs must be taken from final and prev.
      final: prev: {
        # Elements of pkgs.gnome must be taken from gfinal and gprev.
        gnome = prev.gnome.overrideScope' (gfinal: gprev: {
          mutter = gprev.mutter.overrideAttrs (oldAttrs:
            if oldAttrs.version == "44.2" then
              {
                patches = (oldAttrs.patches or []) ++ [
                  (prev.fetchpatch {
                    url = "https://salsa.debian.org/gnome-team/mutter/-/raw/ubuntu/44.2-3ubuntu1/debian/patches/ubuntu/x11-Add-support-for-fractional-scaling-using-Randr.patch";
                    # Determining the hash: https://github.com/NixOS/nixpkgs/issues/191128#issuecomment-1246030431
                    hash = "sha256-GCtz87C1NgxenYE5nbxcIIxqNhutmdngscnlK10fRyQ=";
                  })
                ];
              }
            else throw "Mutter version mismatch. Please update patch."
          );
        });
      }
    )
  ];

  home-manager.users.yoda = { osConfig, config, pkgs, ... }: {
    dconf.settings = {
      "org/gnome/mutter" = {
        experimental-features = [
          (
            if (osConfig.services.xserver.displayManager.gdm.wayland)
            # Wayland fractional scaling
            then "scale-monitor-framebuffer"
            # X11 fractional scaling
            else "x11-randr-fractional-scaling"
          )
        ];
      };
    };
  };
}
