This commit is contained in:
mjallen18
2025-02-20 10:38:03 -06:00
parent 3467cccc24
commit 76384ebbce
3 changed files with 69 additions and 8 deletions

21
README.md Normal file
View File

@@ -0,0 +1,21 @@
# Steam Rom Manager NixOS Home Manager Configuration
## Usage
### Nix Flake
* Inputs: steam-rom-manager.url = "github:mjallen18/nix-steam-rom-manager";
* ```nixosConfigurations = {
"<hostname>" = nixpkgs-unstable.lib.nixosSystem {
system = "x86_64-linux";
modules = [
home-manager.nixosModules.home-manager
{
home-manager.users.<username> = { pkgs, ...}: {
imports = [
steam-rom-manager.homeManagerModules.default
];
};
}
];
};
};```

View File

@@ -239,13 +239,31 @@ in {
}; };
emulators = mkOption { emulators = mkOption {
type = types.attrsOf (types.submodule { type = types.attrsOf (types.submodule ({ name, ... }: {
options = { options = {
enable = mkEnableOption "emulator configuration"; enable = mkEnableOption "emulator configuration";
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = null; default =
description = "Emulator package (defaults to common configuration if not set)"; if name == "pcsx2" then pkgs.pcsx2
else if name == "citra" then pkgs.citra-nightly
else if name == "yuzu" then pkgs.yuzu
else if name == "ryujinx" then pkgs.ryujinx-greemdev
else if name == "rpcs3" then pkgs.rpcs3
else if name == "dolphin-emu" then pkgs.dolphinEmu
else if name == "duckstation" then pkgs.duckstation
else if name == "melonDS" then pkgs.melonDS
else if name == "cemu" then pkgs.cemu
else if name == "ppsspp" then pkgs.ppsspp
else if name == "mame" then pkgs.mame
else if name == "dosbox" then pkgs.dosbox
else if name == "snes9x" then pkgs.snes9x-gtk
else if name == "mgba" then pkgs.mgba
else if name == "mupen64plus" then pkgs.mupen64plus
else if name == "retroarch" then pkgs.retroarch
else if name == "flycast" then pkgs.flycast
else pkgs.${name};
description = "Emulator package";
}; };
binaryName = mkOption { binaryName = mkOption {
type = types.str; type = types.str;
@@ -268,7 +286,7 @@ in {
description = "Additional emulator arguments"; description = "Additional emulator arguments";
}; };
}; };
}); }));
default = {}; default = {};
description = "Emulator configurations"; description = "Emulator configurations";
}; };

View File

@@ -35,96 +35,118 @@ let
romFolder = "switch"; romFolder = "switch";
fileTypes = [ ".nca" ".NCA" ".nro" ".NRO" ".nso" ".NSO" ".nsp" ".NSP" ".xci" ".XCI" ]; fileTypes = [ ".nca" ".NCA" ".nro" ".NRO" ".nso" ".NSO" ".nsp" ".NSP" ".xci" ".XCI" ];
package = pkgs.ryujinx; package = pkgs.ryujinx;
binaryName = "Ryujinx";
}; };
yuzu = { yuzu = {
romFolder = "switch"; romFolder = "switch";
fileTypes = [ ".nsp" ".NSP" ".xci" ".XCI" ]; fileTypes = [ ".nsp" ".NSP" ".xci" ".XCI" ];
package = pkgs.yuzu; package = pkgs.yuzu;
binaryName = "yuzu";
}; };
pcsx2 = { pcsx2 = {
romFolder = "ps2"; romFolder = "ps2";
fileTypes = [ ".iso" ".ISO" ".bin" ".BIN" ".chd" ".CHD" ]; fileTypes = [ ".iso" ".ISO" ".bin" ".BIN" ".chd" ".CHD" ];
package = pkgs.pcsx2; package = pkgs.pcsx2;
binaryName = "pcsx2";
}; };
rpcs3 = { rpcs3 = {
romFolder = "ps3"; romFolder = "ps3";
fileTypes = [ ".iso" ".ISO" ".bin" ".BIN" ".pkg" ".PKG" ]; fileTypes = [ ".iso" ".ISO" ".bin" ".BIN" ".pkg" ".PKG" ];
package = pkgs.rpcs3; package = pkgs.rpcs3;
binaryName = "rpcs3";
}; };
dolphin-emu = { dolphin-emu = {
romFolder = "gc"; romFolder = "gc";
fileTypes = [ ".iso" ".ISO" ".gcm" ".GCM" ".ciso" ".CISO" ]; fileTypes = [ ".iso" ".ISO" ".gcm" ".GCM" ".ciso" ".CISO" ];
package = pkgs.dolphinEmu; package = pkgs.dolphin-emu;
binaryName = "dolphin-emu";
}; };
duckstation = { duckstation = {
romFolder = "psx"; romFolder = "psx";
fileTypes = [ ".iso" ".ISO" ".bin" ".BIN" ".chd" ".CHD" ".pbp" ".PBP" ]; fileTypes = [ ".iso" ".ISO" ".bin" ".BIN" ".chd" ".CHD" ".pbp" ".PBP" ];
package = pkgs.duckstation; package = pkgs.duckstation;
binaryName = "duckstation";
}; };
melonDS = { melonDS = {
romFolder = "nds"; romFolder = "nds";
fileTypes = [ ".nds" ".NDS" ]; fileTypes = [ ".nds" ".NDS" ];
package = pkgs.melonDS; package = pkgs.melonDS;
binaryName = "melonDS";
}; };
cemu = { cemu = {
romFolder = "wiiu"; romFolder = "wiiu";
fileTypes = [ ".wud" ".WUD" ".wux" ".WUX" ".rpx" ".RPX" ]; fileTypes = [ ".wud" ".WUD" ".wux" ".WUX" ".rpx" ".RPX" ];
package = pkgs.cemu; package = pkgs.cemu;
binaryName = "cemu";
}; };
ppsspp = { ppsspp = {
romFolder = "psp"; romFolder = "psp";
fileTypes = [ ".iso" ".ISO" ".cso" ".CSO" ".pbp" ".PBP" ]; fileTypes = [ ".iso" ".ISO" ".cso" ".CSO" ".pbp" ".PBP" ];
package = pkgs.ppsspp; package = pkgs.ppsspp;
binaryName = "ppsspp";
}; };
mame = { mame = {
romFolder = "arcade"; romFolder = "arcade";
fileTypes = [ ".zip" ".ZIP" ".7z" ".7Z" ]; fileTypes = [ ".zip" ".ZIP" ".7z" ".7Z" ];
package = pkgs.mame; package = pkgs.mame;
binaryName = "mame";
}; };
dosbox = { dosbox = {
romFolder = "dos"; romFolder = "dos";
fileTypes = [ ".exe" ".EXE" ".bat" ".BAT" ".com" ".COM" ]; fileTypes = [ ".exe" ".EXE" ".bat" ".BAT" ".com" ".COM" ];
package = pkgs.dosbox; package = pkgs.dosbox;
binaryName = "dosbox";
}; };
snes9x = { snes9x = {
romFolder = "snes"; romFolder = "snes";
fileTypes = [ ".smc" ".SMC" ".sfc" ".SFC" ".fig" ".FIG" ]; fileTypes = [ ".smc" ".SMC" ".sfc" ".SFC" ".fig" ".FIG" ];
package = pkgs.snes9x-gtk; package = pkgs.snes9x-gtk;
binaryName = "snes9x";
}; };
mgba = { mgba = {
romFolder = "gba"; romFolder = "gba";
fileTypes = [ ".gba" ".GBA" ]; fileTypes = [ ".gba" ".GBA" ];
package = pkgs.mgba; package = pkgs.mgba;
binaryName = "mgba";
}; };
mupen64plus = { mupen64plus = {
romFolder = "n64"; romFolder = "n64";
fileTypes = [ ".n64" ".N64" ".v64" ".V64" ".z64" ".Z64" ]; fileTypes = [ ".n64" ".N64" ".v64" ".V64" ".z64" ".Z64" ];
package = pkgs.mupen64plus; package = pkgs.mupen64plus;
binaryName = "mupen64plus";
}; };
retroarch = { retroarch = {
romFolder = "retroarch"; romFolder = "retroarch";
fileTypes = [ ".zip" ".ZIP" ".7z" ".7Z" ".iso" ".ISO" ".bin" ".BIN" ".chd" ".CHD" ]; fileTypes = [ ".zip" ".ZIP" ".7z" ".7Z" ".iso" ".ISO" ".bin" ".BIN" ".chd" ".CHD" ];
package = pkgs.retroarch; package = pkgs.retroarch;
binaryName = "retroarch";
}; };
flycast = { flycast = {
romFolder = "dreamcast"; romFolder = "dreamcast";
fileTypes = [ ".gdi" ".GDI" ".cdi" ".CDI" ".chd" ".CHD" ]; fileTypes = [ ".gdi" ".GDI" ".cdi" ".CDI" ".chd" ".CHD" ];
package = pkgs.flycast; package = pkgs.flycast;
binaryName = "flycast";
}; };
citra = { citra = {
romFolder = "3ds"; romFolder = "3ds";
fileTypes = [ ".3ds" ".3DS" ".cia" ".CIA" ".cxi" ".CXI" ]; fileTypes = [ ".3ds" ".3DS" ".cia" ".CIA" ".cxi" ".CXI" ];
package = pkgs.citra-nightly; package = pkgs.citra-nightly;
binaryName = "citra";
}; };
}; };
# Create parser configuration # Create parser configuration
mkParserConfig = name: emu: mkParserConfig = name: emu:
let let
# Use the provided package or fall back to the default # Get the default config if it exists
package = if emu ? package then emu.package else commonEmulatorConfigs.${name}.package; defaultConfig = commonEmulatorConfigs.${name} or {};
# Merge the provided config with defaults
finalConfig = defaultConfig // emu;
# Use the provided package or fall back to the default if available
package = emu.package;
# Get the binary name dynamically # Get the binary name dynamically
binaryName = findMainBinary package emu.binaryName; binaryName = findMainBinary package (finalConfig.binaryName or "");
orderedConfig = [ orderedConfig = [
# Basic parser configuration # Basic parser configuration