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
|
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;
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue