mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-09 04:19:19 -08:00
feat(steam): bs user launch scripts
This commit is contained in:
parent
7959fbd8b2
commit
6ec990a5cd
2 changed files with 61 additions and 23 deletions
|
|
@ -11,7 +11,7 @@
|
||||||
inherit (lib.modules) mkIf mkMerge mkDefault mkOptionDefault;
|
inherit (lib.modules) mkIf mkMerge mkDefault mkOptionDefault;
|
||||||
inherit (lib.strings) hasSuffix replaceStrings optionalString concatStringsSep escapeShellArg makeBinPath versionOlder;
|
inherit (lib.strings) hasSuffix replaceStrings optionalString concatStringsSep escapeShellArg makeBinPath versionOlder;
|
||||||
inherit (lib.attrsets) attrValues filterAttrs mapAttrs mapAttrs' mapAttrsToList listToAttrs nameValuePair;
|
inherit (lib.attrsets) attrValues filterAttrs mapAttrs mapAttrs' mapAttrsToList listToAttrs nameValuePair;
|
||||||
inherit (lib.lists) concatMap head last filter sort singleton;
|
inherit (lib.lists) concatLists head last filter sort singleton;
|
||||||
inherit (config.services.steam) accountSwitch;
|
inherit (config.services.steam) accountSwitch;
|
||||||
cfg = config.services.steam.beatsaber;
|
cfg = config.services.steam.beatsaber;
|
||||||
sortedVersions = sort (a: b: versionOlder a.version b.version) (attrValues cfg.versions);
|
sortedVersions = sort (a: b: versionOlder a.version b.version) (attrValues cfg.versions);
|
||||||
|
|
@ -280,6 +280,18 @@
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
userModule = { config, name, ... }: {
|
||||||
|
options = with lib.types; {
|
||||||
|
name = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = name;
|
||||||
|
};
|
||||||
|
preferredVersion = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = cfg.defaultVersion;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
emptyFile = pkgs.writeText "empty.txt" "";
|
emptyFile = pkgs.writeText "empty.txt" "";
|
||||||
emptyJson = pkgs.writeText "empty.json" "{}";
|
emptyJson = pkgs.writeText "empty.json" "{}";
|
||||||
emptyDir = pkgs.runCommand "empty" { } ''
|
emptyDir = pkgs.runCommand "empty" { } ''
|
||||||
|
|
@ -335,6 +347,9 @@
|
||||||
rmdir "%STEAM_BS_LIBRARY%"
|
rmdir "%STEAM_BS_LIBRARY%"
|
||||||
mklink /D "%STEAM_BS_LIBRARY%" "%STEAM_BS_LAUNCH%"
|
mklink /D "%STEAM_BS_LIBRARY%" "%STEAM_BS_LAUNCH%"
|
||||||
'';
|
'';
|
||||||
|
launch = ''
|
||||||
|
cd /d "%STEAM_BS_LIBRARY%"
|
||||||
|
'' + ''"%STEAM_BS_LIBRARY%\Beat Saber.exe'';
|
||||||
setup = ''
|
setup = ''
|
||||||
rmdir "%STEAM_BS_APPDATA%"
|
rmdir "%STEAM_BS_APPDATA%"
|
||||||
rmdir "%STEAM_BS_LIBRARY%"
|
rmdir "%STEAM_BS_LIBRARY%"
|
||||||
|
|
@ -351,14 +366,12 @@
|
||||||
launchbeatsaber = ''
|
launchbeatsaber = ''
|
||||||
${vars}
|
${vars}
|
||||||
${mount}
|
${mount}
|
||||||
cd /d "%STEAM_BS_LIBRARY%"
|
${launch}
|
||||||
"%STEAM_BS_LIBRARY%\Beat Saber.exe"
|
|
||||||
${eof}
|
${eof}
|
||||||
'';
|
'';
|
||||||
fpfcbeatsaber = ''
|
fpfcbeatsaber = ''
|
||||||
${vars}
|
${vars}
|
||||||
cd /d "%STEAM_BS_LIBRARY%"
|
${launch} fpfc
|
||||||
"%STEAM_BS_LIBRARY%\Beat Saber.exe" fpfc
|
|
||||||
${eof}
|
${eof}
|
||||||
'';
|
'';
|
||||||
setupbeatsaber = ''
|
setupbeatsaber = ''
|
||||||
|
|
@ -388,8 +401,15 @@
|
||||||
set GENSO_STEAM_BS_LOCAL=1
|
set GENSO_STEAM_BS_LOCAL=1
|
||||||
${vars}
|
${vars}
|
||||||
${mount}
|
${mount}
|
||||||
cd /d "%STEAM_BS_LIBRARY%"
|
${launch}
|
||||||
"%STEAM_BS_LIBRARY%\Beat Saber.exe"
|
${eof}
|
||||||
|
'';
|
||||||
|
beatsaber-user = { user, version }: ''
|
||||||
|
set GENSO_STEAM_USER=${user}
|
||||||
|
set GENSO_STEAM_BS_VERSION=${version}
|
||||||
|
${vars}
|
||||||
|
${mount}
|
||||||
|
${launch}
|
||||||
${eof}
|
${eof}
|
||||||
'';
|
'';
|
||||||
vanilla = ''
|
vanilla = ''
|
||||||
|
|
@ -429,7 +449,7 @@ in {
|
||||||
default = { };
|
default = { };
|
||||||
};
|
};
|
||||||
users = mkOption {
|
users = mkOption {
|
||||||
type = listOf str;
|
type = attrsOf (submodule userModule);
|
||||||
};
|
};
|
||||||
dirName = mkOption {
|
dirName = mkOption {
|
||||||
type = str;
|
type = str;
|
||||||
|
|
@ -695,11 +715,9 @@ in {
|
||||||
defaultVersion = mkIf (allVersions != [ ]) (mkOptionDefault (
|
defaultVersion = mkIf (allVersions != [ ]) (mkOptionDefault (
|
||||||
head allVersions
|
head allVersions
|
||||||
));
|
));
|
||||||
users = mkOptionDefault (
|
users = mapAttrs (_: user: { name = mkDefault user.name; }) bsUsers;
|
||||||
mapAttrsToList (_: user: user.name) bsUsers
|
|
||||||
);
|
|
||||||
setupServiceNames = mkOptionDefault (
|
setupServiceNames = mkOptionDefault (
|
||||||
map (user: "steam-setup-beatsaber-${user}.service") cfg.users
|
mapAttrsToList (_: user: "steam-setup-beatsaber-${user.name}.service") cfg.users
|
||||||
);
|
);
|
||||||
files = mkMerge [
|
files = mkMerge [
|
||||||
userFiles
|
userFiles
|
||||||
|
|
@ -718,9 +736,9 @@ in {
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = mkOptionDefault "oneshot";
|
Type = mkOptionDefault "oneshot";
|
||||||
RemainAfterExit = mkOptionDefault true;
|
RemainAfterExit = mkOptionDefault true;
|
||||||
ExecStart = mkMerge (map (user:
|
ExecStart = mkMerge (mapAttrsToList (_: user:
|
||||||
(mapAttrsToList (_: version:
|
(mapAttrsToList (_: version:
|
||||||
"${mksetupbeatsaber { inherit user; inherit (version) version; }}"
|
"${mksetupbeatsaber { user = user.name; inherit (version) version; }}"
|
||||||
) cfg.versions)
|
) cfg.versions)
|
||||||
) cfg.users);
|
) cfg.users);
|
||||||
};
|
};
|
||||||
|
|
@ -766,17 +784,17 @@ in {
|
||||||
nameValuePair "${cfg.sharedDataDir}/${folder}" shared
|
nameValuePair "${cfg.sharedDataDir}/${folder}" shared
|
||||||
) sharedFolders
|
) sharedFolders
|
||||||
))
|
))
|
||||||
] ++ concatMap (owner:
|
] ++ concatLists (mapAttrsToList (_: user:
|
||||||
singleton {
|
singleton {
|
||||||
${cfg.dataDirFor owner} = personal owner;
|
${cfg.dataDirFor user.name} = personal user.name;
|
||||||
"${cfg.dataDirFor owner}/AppData" = personal owner;
|
"${cfg.dataDirFor user.name}/AppData" = personal user.name;
|
||||||
"${cfg.dataDirFor owner}/UserData" = personal owner;
|
"${cfg.dataDirFor user.name}/UserData" = personal user.name;
|
||||||
} ++ mapAttrsToList (_: version: {
|
} ++ mapAttrsToList (_: version: {
|
||||||
"${cfg.dataDirFor owner}/${version.version}" = personal owner;
|
"${cfg.dataDirFor user.name}/${version.version}" = personal user.name;
|
||||||
${cfg.userWorkingDirFor owner} = personal owner;
|
${cfg.userWorkingDirFor user.name} = personal user.name;
|
||||||
${cfg.workingDirFor { user = owner; inherit (version) version; }} = personal owner;
|
${cfg.workingDirFor { user = user.name; inherit (version) version; }} = personal user.name;
|
||||||
}) cfg.versions
|
}) cfg.versions
|
||||||
) cfg.users
|
) cfg.users)
|
||||||
++ mapAttrsToList (_: version: {
|
++ mapAttrsToList (_: version: {
|
||||||
"${cfg.sharedDataDir}/${version.version}" = shared;
|
"${cfg.sharedDataDir}/${version.version}" = shared;
|
||||||
}) cfg.versions;
|
}) cfg.versions;
|
||||||
|
|
@ -793,6 +811,20 @@ in {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
) cfg.versions;
|
) cfg.versions;
|
||||||
|
userBinFiles = mapAttrs' (_: user: nameValuePair
|
||||||
|
"${cfg.binDir}/${user.name}.bat"
|
||||||
|
{
|
||||||
|
inherit (bin) owner group mode type;
|
||||||
|
src = pkgs.writeTextFile {
|
||||||
|
name = "beatsaber-${user.name}.bat";
|
||||||
|
executable = true;
|
||||||
|
text = beatsaber-user {
|
||||||
|
user = user.name;
|
||||||
|
version = user.preferredVersion;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
) cfg.users;
|
||||||
binFiles = {
|
binFiles = {
|
||||||
"${cfg.binDir}/mount.bat" = {
|
"${cfg.binDir}/mount.bat" = {
|
||||||
inherit (bin) owner group mode type;
|
inherit (bin) owner group mode type;
|
||||||
|
|
@ -866,7 +898,8 @@ in {
|
||||||
executable = true;
|
executable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} // versionBinFiles;
|
} // versionBinFiles
|
||||||
|
// userBinFiles;
|
||||||
in {
|
in {
|
||||||
enable = mkIf cfg.setup true;
|
enable = mkIf cfg.setup true;
|
||||||
files = mkIf cfg.setup (mkMerge (
|
files = mkIf cfg.setup (mkMerge (
|
||||||
|
|
|
||||||
|
|
@ -8,5 +8,10 @@ in {
|
||||||
"1.29.0" = {};
|
"1.29.0" = {};
|
||||||
"1.34.2" = {};
|
"1.34.2" = {};
|
||||||
};
|
};
|
||||||
|
users = {
|
||||||
|
arc.preferredVersion = "1.29.0";
|
||||||
|
kat.preferredVersion = "1.29.0";
|
||||||
|
kaosubaloo.preferredVersion = "1.29.0";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue