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
optional
optionalAttrs
optionalString
nameValuePair
mapAttrs'
filter
filterAttrs
filterAttrsRecursive
attrNames
concatStringsSep
toLower
recursiveUpdate
listToAttrs
getExe
;
cfg = config.programs.lutris;
settingsFormat = pkgs.formats.yaml { };
formatWineName = (package: toLower package.name);
in
{
options.programs.lutris = {
@ -46,6 +51,16 @@ in
'';
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 {
default = [ ];
example = "[ pkgs.proton-ge-bin ]";
@ -87,6 +102,7 @@ in
description = ''
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.
Uncompatible with certain runners, such as wine.
'';
type = types.nullOr types.package;
};
@ -111,6 +127,7 @@ in
default = "";
description = ''
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
);
in
mkIf (redundantRunners != [ ]) [
''
filter (e: e != "") [
(optionalString (redundantRunners != [ ]) ''
Under programs.lutris.runners, the following lutris runners had both a
<runner>.package and <runner>.settings.runner.runner_executable options set:
- ${concatStringsSep ", " redundantRunners}
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 =
let
@ -170,27 +197,34 @@ in
let
buildRunnerConfig = (
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}" =
(optionalAttrs (runner_config.settings.runner != { }) runner_config.settings.runner)
// (optionalAttrs
(runner_config.package != null && runner_config.settings.runner.runner_executable == "")
{
runner_executable = getExe runner_config.package;
}
);
}
// optionalAttrs (runner_config.settings.system != { }) {
system = runner_config.settings.system;
runner_config.settings.runner
# If set translate .package to runner_executable
// (optionalAttrs (runner_config.package != null) {
runner_executable = getExe runner_config.package;
});
inherit (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
mapAttrs' (
runner_name: runner_config:
nameValuePair "lutris/runners/${runner_name}.yml" {
source = settingsFormat.generate "${runner_name}.yml" (buildRunnerConfig runner_name runner_config);
}
) cfg.runners;
) (recursiveUpdate wine_extra cfg.runners);
xdg.dataFile =
let
@ -199,7 +233,7 @@ in
map (
# lutris seems to not detect wine/proton if the name has some caps
package:
(nameValuePair "lutris/runners/${type}/${toLower package.name}" {
(nameValuePair "lutris/runners/${type}/${formatWineName package}" {
source = package;
})
) packages;

View file

@ -2,7 +2,12 @@
{
programs.lutris = {
enable = true;
defaultWinePackage = pkgs.proton-ge-bin;
runners = {
wine.settings = {
runner.system_winetricks = true;
system.disable_runtime = true;
};
cemu.package = pkgs.cemu;
pcsx2.settings = {
system.disable_screen_saver = true;
@ -38,6 +43,13 @@
system:
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
''
assertFileExists ${runnersDir}/cemu.yml
@ -46,5 +58,7 @@
assertFileContent ${runnersDir}/pcsx2.yml ${expectedPcsx2}
assertFileExists ${runnersDir}/rpcs3.yml
assertFileContent ${runnersDir}/rpcs3.yml ${expectedRpcs3}
assertFileExists ${runnersDir}/wine.yml
assertFileContent ${runnersDir}/wine.yml ${expectedWine}
'';
}