factorio: nixfmt
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user