factorio: nixfmt

This commit is contained in:
Luke Granger-Brown
2024-10-22 19:45:42 +01:00
parent f68438a9bb
commit 8a819d416f
+140 -112
View File
@@ -1,33 +1,35 @@
{ lib
, alsa-lib
, factorio-utils
, fetchurl
, libGL
, libICE
, libSM
, libX11
, libXcursor
, libXext
, libXi
, libXinerama
, libXrandr
, libpulseaudio
, libxkbcommon
, makeDesktopItem
, makeWrapper
, releaseType
, stdenv
, wayland
{
lib,
alsa-lib,
factorio-utils,
fetchurl,
libGL,
libICE,
libSM,
libX11,
libXcursor,
libXext,
libXi,
libXinerama,
libXrandr,
libpulseaudio,
libxkbcommon,
makeDesktopItem,
makeWrapper,
releaseType,
stdenv,
wayland,
, mods-dat ? null
, versionsJson ? ./versions.json
, username ? ""
, token ? "" # get/reset token at https://factorio.com/profile
, experimental ? false # true means to always use the latest branch
, ...
} @ args:
mods-dat ? null,
versionsJson ? ./versions.json,
username ? "",
token ? "", # get/reset token at https://factorio.com/profile
experimental ? false, # true means to always use the latest branch
...
}@args:
assert releaseType == "alpha"
assert
releaseType == "alpha"
|| releaseType == "headless"
|| releaseType == "demo"
|| releaseType == "expansion";
@@ -86,55 +88,69 @@ let
versions = importJSON versionsJson;
binDists = makeBinDists versions;
actual = binDists.${stdenv.hostPlatform.system}.${releaseType}.${branch} or (throw "Factorio ${releaseType}-${branch} binaries for ${stdenv.hostPlatform.system} are not available for download.");
actual =
binDists.${stdenv.hostPlatform.system}.${releaseType}.${branch}
or (throw "Factorio ${releaseType}-${branch} binaries for ${stdenv.hostPlatform.system} are not available for download.");
makeBinDists = versions:
makeBinDists =
versions:
let
f = path: name: value:
f =
path: name: value:
if builtins.isAttrs value then
if value ? "name" then
makeBinDist value
else
builtins.mapAttrs (f (path ++ [ name ])) value
if value ? "name" then makeBinDist value else builtins.mapAttrs (f (path ++ [ name ])) value
else
throw "expected attrset at ${toString path} - got ${toString value}";
in
builtins.mapAttrs (f [ ]) versions;
makeBinDist = { name, version, tarDirectory, url, sha256, needsAuth }: {
inherit version tarDirectory;
src =
if !needsAuth then
fetchurl { inherit name url sha256; }
else
(lib.overrideDerivation
(fetchurl {
inherit name url sha256;
curlOptsList = [
"--get"
"--data-urlencode"
"username@username"
"--data-urlencode"
"token@token"
];
})
(_: {
# This preHook hides the credentials from /proc
preHook =
if username != "" && token != "" then ''
echo -n "${username}" >username
echo -n "${token}" >token
'' else ''
# Deliberately failing since username/token was not provided, so we can't fetch.
# We can't use builtins.throw since we want the result to be used if the tar is in the store already.
exit 1
makeBinDist =
{
name,
version,
tarDirectory,
url,
sha256,
needsAuth,
}:
{
inherit version tarDirectory;
src =
if !needsAuth then
fetchurl { inherit name url sha256; }
else
(lib.overrideDerivation
(fetchurl {
inherit name url sha256;
curlOptsList = [
"--get"
"--data-urlencode"
"username@username"
"--data-urlencode"
"token@token"
];
})
(_: {
# This preHook hides the credentials from /proc
preHook =
if username != "" && token != "" then
''
echo -n "${username}" >username
echo -n "${token}" >token
''
else
''
# Deliberately failing since username/token was not provided, so we can't fetch.
# We can't use builtins.throw since we want the result to be used if the tar is in the store already.
exit 1
'';
failureHook = ''
cat <<EOF
${helpMsg}
EOF
'';
failureHook = ''
cat <<EOF
${helpMsg}
EOF
'';
}));
};
})
);
};
configBaseCfg = ''
use-system-read-write-data-directories=false
@@ -175,11 +191,14 @@ let
'';
passthru.updateScript =
if (username != "" && token != "") then [
./update.py
"--username=${username}"
"--token=${token}"
] else null;
if (username != "" && token != "") then
[
./update.py
"--username=${username}"
"--token=${token}"
]
else
null;
meta = {
description = "Game in which you build and maintain factories";
@@ -198,7 +217,12 @@ let
homepage = "https://www.factorio.com/";
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = lib.licenses.unfree;
maintainers = with lib.maintainers; [ Baughn elitak priegger lukegb ];
maintainers = with lib.maintainers; [
Baughn
elitak
priegger
lukegb
];
platforms = [ "x86_64-linux" ];
mainProgram = "factorio";
};
@@ -227,51 +251,55 @@ let
wayland
];
installPhase = base.installPhase + ''
wrapProgram $out/bin/factorio \
--prefix LD_LIBRARY_PATH : /run/opengl-driver/lib:$libPath \
--run "$out/share/factorio/update-config.sh" \
--argv0 "" \
--add-flags "-c \$HOME/.factorio/config.cfg" \
${lib.optionalString (mods!=[]) "--add-flags --mod-directory=${modDir}"}
installPhase =
base.installPhase
+ ''
wrapProgram $out/bin/factorio \
--prefix LD_LIBRARY_PATH : /run/opengl-driver/lib:$libPath \
--run "$out/share/factorio/update-config.sh" \
--argv0 "" \
--add-flags "-c \$HOME/.factorio/config.cfg" \
${lib.optionalString (mods != [ ]) "--add-flags --mod-directory=${modDir}"}
# TODO Currently, every time a mod is changed/added/removed using the
# modlist, a new derivation will take up the entire footprint of the
# client. The only way to avoid this is to remove the mods arg from the
# package function. The modsDir derivation will have to be built
# separately and have the user specify it in the .factorio config or
# right along side it using a symlink into the store I think i will
# just remove mods for the client derivation entirely. this is much
# cleaner and more useful for headless mode.
# TODO Currently, every time a mod is changed/added/removed using the
# modlist, a new derivation will take up the entire footprint of the
# client. The only way to avoid this is to remove the mods arg from the
# package function. The modsDir derivation will have to be built
# separately and have the user specify it in the .factorio config or
# right along side it using a symlink into the store I think i will
# just remove mods for the client derivation entirely. this is much
# cleaner and more useful for headless mode.
# TODO: trying to toggle off a mod will result in read-only-fs-error.
# not much we can do about that except warn the user somewhere. In
# fact, no exit will be clean, since this error will happen on close
# regardless. just prints an ugly stacktrace but seems to be otherwise
# harmless, unless maybe the user forgets and tries to use the mod
# manager.
# TODO: trying to toggle off a mod will result in read-only-fs-error.
# not much we can do about that except warn the user somewhere. In
# fact, no exit will be clean, since this error will happen on close
# regardless. just prints an ugly stacktrace but seems to be otherwise
# harmless, unless maybe the user forgets and tries to use the mod
# manager.
install -m0644 <(cat << EOF
${configBaseCfg}
EOF
) $out/share/factorio/config-base.cfg
install -m0644 <(cat << EOF
${configBaseCfg}
EOF
) $out/share/factorio/config-base.cfg
install -m0755 <(cat << EOF
${updateConfigSh}
EOF
) $out/share/factorio/update-config.sh
install -m0755 <(cat << EOF
${updateConfigSh}
EOF
) $out/share/factorio/update-config.sh
mkdir -p $out/share/icons/hicolor/{64x64,128x128}/apps
cp -a data/core/graphics/factorio-icon.png $out/share/icons/hicolor/64x64/apps/factorio.png
cp -a data/core/graphics/factorio-icon@2x.png $out/share/icons/hicolor/128x128/apps/factorio.png
ln -s ${desktopItem}/share/applications $out/share/
'';
mkdir -p $out/share/icons/hicolor/{64x64,128x128}/apps
cp -a data/core/graphics/factorio-icon.png $out/share/icons/hicolor/64x64/apps/factorio.png
cp -a data/core/graphics/factorio-icon@2x.png $out/share/icons/hicolor/128x128/apps/factorio.png
ln -s ${desktopItem}/share/applications $out/share/
'';
};
alpha = demo // {
installPhase = demo.installPhase + ''
cp -a doc-html $out/share/factorio
'';
installPhase =
demo.installPhase
+ ''
cp -a doc-html $out/share/factorio
'';
};
expansion = alpha;
};