1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 19:46:05 +01:00

lutris: add defaultWinePackage option (#7778)

This commit is contained in:
B1kku 2025-09-14 00:08:10 +00:00 committed by GitHub
parent 6e28513cf2
commit e286f848a0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 64 additions and 16 deletions

View file

@ -12,17 +12,22 @@ let
types types
optional optional
optionalAttrs optionalAttrs
optionalString
nameValuePair nameValuePair
mapAttrs' mapAttrs'
filter
filterAttrs filterAttrs
filterAttrsRecursive
attrNames attrNames
concatStringsSep concatStringsSep
toLower toLower
recursiveUpdate
listToAttrs listToAttrs
getExe getExe
; ;
cfg = config.programs.lutris; cfg = config.programs.lutris;
settingsFormat = pkgs.formats.yaml { }; settingsFormat = pkgs.formats.yaml { };
formatWineName = (package: toLower package.name);
in in
{ {
options.programs.lutris = { options.programs.lutris = {
@ -46,6 +51,16 @@ in
''; '';
type = types.listOf types.package; type = types.listOf types.package;
}; };
defaultWinePackage = mkOption {
default = null;
example = "pkgs.proton-ge-bin";
description = ''
The wine/proton package to set as the default for lutris.
It must still be set under proton/winePackages.
'';
type = types.nullOr types.package;
};
protonPackages = mkOption { protonPackages = mkOption {
default = [ ]; default = [ ];
example = "[ pkgs.proton-ge-bin ]"; example = "[ pkgs.proton-ge-bin ]";
@ -87,6 +102,7 @@ in
description = '' description = ''
The package to use for this runner, nix will try to find the executable for this package. The package to use for this runner, nix will try to find the executable for this package.
A more specific path can be set by using settings.runner.runner_executable instead. A more specific path can be set by using settings.runner.runner_executable instead.
Uncompatible with certain runners, such as wine.
''; '';
type = types.nullOr types.package; type = types.nullOr types.package;
}; };
@ -111,6 +127,7 @@ in
default = ""; default = "";
description = '' description = ''
Specific option to point to a runner executable directly, don't set runner.package if you set this. Specific option to point to a runner executable directly, don't set runner.package if you set this.
Uncompatible with certain runners such as wine.
''; '';
}; };
}; };
@ -148,13 +165,23 @@ in
) cfg.runners ) cfg.runners
); );
in in
mkIf (redundantRunners != [ ]) [ filter (e: e != "") [
'' (optionalString (redundantRunners != [ ]) ''
Under programs.lutris.runners, the following lutris runners had both a Under programs.lutris.runners, the following lutris runners had both a
<runner>.package and <runner>.settings.runner.runner_executable options set: <runner>.package and <runner>.settings.runner.runner_executable options set:
- ${concatStringsSep ", " redundantRunners} - ${concatStringsSep ", " redundantRunners}
Note that runner_executable overrides package, setting both is pointless. Note that runner_executable overrides package, setting both is pointless.
'' '')
(optionalString ((cfg.runners.wine.package or null) != null) ''
Setting programs.lutris.runners.wine.package does nothing.
Use the respective options, proton/winePackages and defaultWinePackage.
'')
(optionalString ((cfg ? runners.wine.settings.runner.version) && (cfg.defaultWinePackage != null))
''
Found conflicting options under programs.lutris, both runners.wine.settings.version and defaultWinePackage
were set.
''
)
]; ];
home.packages = home.packages =
let let
@ -170,27 +197,34 @@ in
let let
buildRunnerConfig = ( buildRunnerConfig = (
runner_name: runner_config: runner_name: runner_config:
{ # Remove the unset values so they don't end up on the final config.
filterAttrsRecursive (name: value: value != { } && value != null && value != "") {
"${runner_name}" = "${runner_name}" =
(optionalAttrs (runner_config.settings.runner != { }) runner_config.settings.runner) runner_config.settings.runner
// (optionalAttrs # If set translate .package to runner_executable
(runner_config.package != null && runner_config.settings.runner.runner_executable == "") // (optionalAttrs (runner_config.package != null) {
{ runner_executable = getExe runner_config.package;
runner_executable = getExe runner_config.package; });
} inherit (runner_config.settings) system;
);
}
// optionalAttrs (runner_config.settings.system != { }) {
system = runner_config.settings.system;
} }
); );
# Extra default config for wine if defaultWinePackage was set
wine_extra = optionalAttrs (cfg.defaultWinePackage != null) {
wine = {
package = null;
settings = {
runner.version = formatWineName cfg.defaultWinePackage;
system = { };
};
};
};
in in
mapAttrs' ( mapAttrs' (
runner_name: runner_config: runner_name: runner_config:
nameValuePair "lutris/runners/${runner_name}.yml" { nameValuePair "lutris/runners/${runner_name}.yml" {
source = settingsFormat.generate "${runner_name}.yml" (buildRunnerConfig runner_name runner_config); source = settingsFormat.generate "${runner_name}.yml" (buildRunnerConfig runner_name runner_config);
} }
) cfg.runners; ) (recursiveUpdate wine_extra cfg.runners);
xdg.dataFile = xdg.dataFile =
let let
@ -199,7 +233,7 @@ in
map ( map (
# lutris seems to not detect wine/proton if the name has some caps # lutris seems to not detect wine/proton if the name has some caps
package: package:
(nameValuePair "lutris/runners/${type}/${toLower package.name}" { (nameValuePair "lutris/runners/${type}/${formatWineName package}" {
source = package; source = package;
}) })
) packages; ) packages;

View file

@ -2,7 +2,12 @@
{ {
programs.lutris = { programs.lutris = {
enable = true; enable = true;
defaultWinePackage = pkgs.proton-ge-bin;
runners = { runners = {
wine.settings = {
runner.system_winetricks = true;
system.disable_runtime = true;
};
cemu.package = pkgs.cemu; cemu.package = pkgs.cemu;
pcsx2.settings = { pcsx2.settings = {
system.disable_screen_saver = true; system.disable_screen_saver = true;
@ -38,6 +43,13 @@
system: system:
disable_screen_saver: true disable_screen_saver: true
''; '';
expectedWine = builtins.toFile "wine.yml" ''
system:
disable_runtime: true
wine:
system_winetricks: true
version: ${lib.toLower pkgs.proton-ge-bin.name}
'';
in in
'' ''
assertFileExists ${runnersDir}/cemu.yml assertFileExists ${runnersDir}/cemu.yml
@ -46,5 +58,7 @@
assertFileContent ${runnersDir}/pcsx2.yml ${expectedPcsx2} assertFileContent ${runnersDir}/pcsx2.yml ${expectedPcsx2}
assertFileExists ${runnersDir}/rpcs3.yml assertFileExists ${runnersDir}/rpcs3.yml
assertFileContent ${runnersDir}/rpcs3.yml ${expectedRpcs3} assertFileContent ${runnersDir}/rpcs3.yml ${expectedRpcs3}
assertFileExists ${runnersDir}/wine.yml
assertFileContent ${runnersDir}/wine.yml ${expectedWine}
''; '';
} }