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;
|
|
# };
|
|
};
|
|
};
|
|
}
|