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:
parent
6e28513cf2
commit
e286f848a0
2 changed files with 64 additions and 16 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue