{ config, inputs, lib, pkgs, ... }: let retroarchWithCores = pkgs.retroarch.withCores ( cores: builtins.attrValues { inherit (cores) mgba # gba pcsx2 # ps2 dolphin # wii / gamecube snes9x2010 # snes desmume # nintendo ds citra # 3ds ; } ); in { imports = [ inputs.nix-gaming.nixosModules.platformOptimizations ]; options.my.apps = { gaming = { enable = lib.mkEnableOption "gaming applications and emulators"; users = lib.mkOption { type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); default = config.my.toggleUsers.apps; merge = inputs.self.lib.mergeUsersOption lib; description = "Users to install gaming packages for"; }; }; switch.enable = lib.mkEnableOption "Nintendo Switch homebrew tools"; }; config = lib.mkIf config.my.apps.gaming.enable { # sops.secrets.switch-presence = lib.mkIf config.my.apps.gaming.switch.enable { # sopsFile = ../../secrets/env.yaml; # format = "dotenv"; # owner = config.users.users.jawz.name; # inherit (config.users.users.jawz) group; # }; programs = { gamemode.enable = true; steam = { enable = true; gamescopeSession.enable = true; remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; platformOptimizations.enable = true; }; }; services = lib.mkIf config.my.apps.switch.enable { switch-boot.enable = true; # switch-presence = { # enable = true; # environmentFile = config.sops.secrets.switch-presence.path; # }; }; users.users = let packages = builtins.attrValues { inherit retroarchWithCores; inherit (pkgs) shipwright # zelda OoT port mangohud # fps & stats overlay lutris # games launcher & emulator hub cartridges # games launcher gamemode # optimizes linux to have better gaming performance heroic # install epic games protonup-qt # update proton-ge ns-usbloader # load games into my switch # emulators rpcs3 # ps3 cemu # wii u ryubing # switch prismlauncher # minecraft launcher with jdk overlays ; }; in inputs.self.lib.mkUserPackages lib config.my.apps.gaming.users packages; }; }