140 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   lib,
 | |
|   self',
 | |
|   config,
 | |
|   ...
 | |
| }: let
 | |
|   inherit (lib) mkOption mkEnableOption mkIf;
 | |
|   inherit (lib.types) package str path attrsOf anything bool int;
 | |
|   cfg = config.ooknet.gaming.project-plus;
 | |
| in {
 | |
|   options.ooknet.gaming.project-plus = {
 | |
|     enable = mkEnableOption "Enable Project Plus";
 | |
|     package = mkOption {
 | |
|       type = package;
 | |
|       default = self'.packages.project-plus.override {
 | |
|         inherit (cfg) userDir;
 | |
|       };
 | |
|     };
 | |
|     userDir = mkOption {
 | |
|       type = str;
 | |
|       default = "${config.xdg.configHome}/project-plus";
 | |
|       description = ''
 | |
|         Location of the Dolphin User directory, this is the path that the wrapped package
 | |
|         will use for User configuration. defaults to "\$\{config.xdg.configHome}/project-plus"
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     launcherSource = mkOption {
 | |
|       type = path;
 | |
|       default = "${self'.packages.fpp-launcher}/Launcher";
 | |
|       description = ''
 | |
|         Location of the faster-project-plus launcher files.
 | |
|       '';
 | |
|     };
 | |
|     sdCardSource = mkOption {
 | |
|       type = path;
 | |
|       default = "${self'.packages.fpp-sd}/sd.raw";
 | |
|       description = ''
 | |
|         Location of the faster-project-plus sd card
 | |
|       '';
 | |
|     };
 | |
|     userSource = mkOption {
 | |
|       type = path;
 | |
|       default = "${self'.packages.fpp-config}/Binaries/User";
 | |
|     };
 | |
| 
 | |
|     netplay = {
 | |
|       nickname = mkOption {
 | |
|         type = str;
 | |
|         default = "Player";
 | |
|         description = "Netplay nickname displayed to other players";
 | |
|       };
 | |
|       disableMusic = mkOption {
 | |
|         type = bool;
 | |
|         default = true;
 | |
|         description = "Whether to disable music during netplay";
 | |
|       };
 | |
|       buffer = mkOption {
 | |
|         type = int;
 | |
|         default = 4;
 | |
|         description = "Default netplay buffer";
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     analytics = {
 | |
|       enable = mkEnableOption "Enable anaylytics";
 | |
|     };
 | |
| 
 | |
|     startFullscreen = mkEnableOption "Start emulated game fullscreen";
 | |
| 
 | |
|     gamesDir = mkOption {
 | |
|       type = str;
 | |
|       default = "./Games";
 | |
|       description = ''
 | |
|         Location of the directory that stores all game isos, this is where you should store
 | |
|         your brawl iso. Defaults to "./Brawl" (The . is relative to the User dolphin directory)
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     extraSettings = mkOption {
 | |
|       type = attrsOf anything;
 | |
|       default = {};
 | |
|       description = ''
 | |
|         Additional settings for Dolphin.ini
 | |
|       '';
 | |
|     };
 | |
|   };
 | |
|   config = mkIf cfg.enable {
 | |
|     home.packages = [cfg.package];
 | |
|     xdg.configFile = {
 | |
|       "project-plus/Config/Dolphin.ini" = {
 | |
|         text = lib.generators.toINI {} {
 | |
|           # default settings to ensure project-plus works OOTB.
 | |
|           General = {
 | |
|             IsoPaths = 2;
 | |
|             IsoPath0 = "${cfg.userDir}/Games";
 | |
|             IsoPath1 = "${cfg.userDir}/Launcher";
 | |
|             WiiSDCardPath = "${cfg.userDir}/Wii/sd.raw";
 | |
|           };
 | |
|           Core = {
 | |
|             DefaultISO = "${cfg.userDir}/Games/brawl.iso";
 | |
|           };
 | |
|           Netplay = {
 | |
|             SelectedHostGame = "Project+ Netplay Launcher.dol";
 | |
|             BufferSize = cfg.netplay.buffer;
 | |
|             Nickname = cfg.netplay.nickname;
 | |
|             MusicOff = cfg.netplay.disableMusic;
 | |
|             ListenPort = "0x0a42";
 | |
|             HostPort = "0x0a42";
 | |
|             ConnectPort = "0x0a42";
 | |
|             HostCode = 00000000;
 | |
|             TraversalChoice = "traversal";
 | |
|           };
 | |
|           Analytics = {
 | |
|             Enabled = cfg.analytics.enable;
 | |
|             PermissionAsked = true;
 | |
|           };
 | |
|           Display = {
 | |
|             Fullscreen = cfg.startFullscreen;
 | |
|           };
 | |
|         };
 | |
|       };
 | |
|       # Copy dolphin GameSettings configuration from faster-project-plus config
 | |
|       # This includes various Gecko Code files to make for a better Netplay experience
 | |
|       "project-plus/GameSettings" = {
 | |
|         source = "${cfg.userSource}/GameSettings";
 | |
|         recursive = true;
 | |
|       };
 | |
|       "project-plus/Launcher" = {
 | |
|         source = "${cfg.launcherSource}";
 | |
|         recursive = true;
 | |
|       };
 | |
|       # Cant get this to work, does the sd card need to be writable for dolphin to use it?
 | |
|       # for now sd card will need to be manually placed in the SD directory
 | |
|       # "project-plus/Wii/sd.raw" = {
 | |
|       #   source = cfg.sdCardSource;
 | |
|       # };
 | |
|     };
 | |
|   };
 | |
| }
 |