{
  config,
  lib,
  pkgs,
  ...
}:

{
  imports = [ ];

  options.me = {
    pcsx2.enable = lib.mkOption {
      type = lib.types.bool;
      default = false;
      example = true;
      description = "Whether we want to install pcsx2.";
    };
  };

  config = lib.mkIf config.me.pcsx2.enable (
    lib.mkMerge [
      (lib.mkIf config.me.graphical {
        environment.systemPackages = with pkgs; [
          pcsx2
        ];

        environment.persistence."/state" = lib.mkIf (!config.me.buildingIso) {
          hideMounts = true;
          users.talexander = {
            directories = [
              {
                # Shaders, games list, and achievement data.
                directory = ".config/PCSX2/cache";
                user = "talexander";
                group = "talexander";
                mode = "0755";
              }
              {
                # Save states.
                directory = ".config/PCSX2/sstates";
                user = "talexander";
                group = "talexander";
                mode = "0755";
              }
              {
                # Screenshots.
                directory = ".config/PCSX2/snaps";
                user = "talexander";
                group = "talexander";
                mode = "0755";
              }
              {
                # Game covers.
                directory = ".config/PCSX2/covers";
                user = "talexander";
                group = "talexander";
                mode = "0755";
              }
              {
                # Video recordings.
                directory = ".config/PCSX2/videos";
                user = "talexander";
                group = "talexander";
                mode = "0755";
              }
            ];
          };
        };

        environment.persistence."/persist" = lib.mkIf (!config.me.buildingIso) {
          hideMounts = true;
          users.talexander = {
            directories = [
              {
                # Game saves
                directory = ".config/PCSX2/memcards";
                user = "talexander";
                group = "talexander";
                mode = "0755";
              }
            ];
          };
        };

        home-manager.users.talexander =
          { pkgs, ... }:
          {
            home.file.".config/PCSX2/inis/PCSX2.ini" = {
              source = ./files/PCSX2.ini;
            };
          };
      })
    ]
  );
}