{ pkgs, lib, config, jovian, ... }: with lib; {
  specialisation.steamos.configuration = {
    jovian = {
      hardware.has.amd.gpu = true;
      steamos.useSteamOSConfig = true;
      steamos.enableDefaultCmdlineConfig = false;

      steam = {
        enable = true;
        autoStart = true;
        desktopSession = "plasma";
        user = "app";
      };
    };

    users.home.persistApp.directories = [
      ".steam" ".local/share/Steam"
      ".config/gamescope" ".config/hhd"
      ".kodi"
    ];

    users.users.app.extraGroups = [ "networkmanager" "gamemode" ];
    programs.gamemode.enable = true;
    programs.regreet.enable = false;
    home.gnome.enable = mkForce false;
    home.steam.enable = mkForce false;
    home.plasma.enable = true;
    home.plasma.extraConfig = {
      configFile = {
        kwinrc.Xwayland.Scale = 2;
        kscreenlockerrc.Daemon.Autolock = false;
      };
    };

    home-manager.users.app = {
      home.packages = with pkgs; [
        (pkgs.kodi-wayland.passthru.withPackages (kodiPkgs: with kodiPkgs; [
          joystick # keymap steam-controller
          #controller-topology-project
          libretro libretro-2048
          libretro-fuse libretro-genplus libretro-mgba
          libretro-nestopia libretro-snes9x
          jellycon
        ]))
      ];

      home.pointerCursor = {
        package = pkgs.steamdeck-hw-theme;
        name = "steam";
      };
    };

    services.handheld-daemon = {
      enable = true;
      user = "app";
    };

    jovian.decky-loader = {
      # ~/.steam/steam/.cef-enable-remote-debugging
      enable = true;
      user = "app";
      extraPackages = with pkgs; [
        curl unzip util-linux gnugrep procps pciutils kmod ryzenadj
      ];
      extraPythonPackages = pythonPackages: with pythonPackages; [
        hid pyyaml
      ];
      stateDir = "/nix/persist/decky";
    };

    boot.kernelParams = [
      "iomem=relaxed"
      "amd_pstate=passive"
    ];
    boot.plymouth.themePackages = [ pkgs.steamdeck-hw-theme ];
    boot.plymouth.theme = "steamos";

    services.udev.extraRules = ''
      SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="${pkgs.ryzenadj}/bin/ryzenadj --max-performance"
    '';

    nixpkgs.overlays = [ (final: prev: {
      gamescope = prev.gamescope.overrideAttrs (finalAttrs: previousAttrs: {
        postInstall = previousAttrs.postInstall + "\n" + ''
          wrapProgram "$out/bin/gamescope" \
            --append-flags "--force-orientation left"
        '';
      });
    }) ];
  };

  imports = [
    jovian.nixosModules.jovian
  ];
}