mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
134 lines
4.6 KiB
Nix
134 lines
4.6 KiB
Nix
{
|
|
/* `crate2nix` doesn't support profiles in `Cargo.toml`, so default to release.
|
|
Otherwise bad performance (non-release is built with opt level 0)
|
|
*/
|
|
release ? true, cratesToBuild ? [ "veloren-voxygen" "veloren-server-cli" ]
|
|
, system ? builtins.currentSystem
|
|
, sources ? import ./sources.nix { inherit system; } }:
|
|
|
|
let
|
|
isBuildingCrate = name:
|
|
builtins.any (otherName: name == otherName) cratesToBuild;
|
|
isBuildingVoxygen = isBuildingCrate "veloren-voxygen";
|
|
isBuildingServerCli = isBuildingCrate "veloren-server-cli";
|
|
|
|
pkgs = import ./nixpkgs.nix { inherit sources system; };
|
|
common = import ./common.nix { inherit pkgs; };
|
|
|
|
meta = with pkgs; {
|
|
description = "Veloren is a multiplayer voxel RPG written in Rust.";
|
|
longDescription = ''
|
|
Veloren is a multiplayer voxel RPG written in Rust.
|
|
It is inspired by games such as Cube World, Legend of Zelda: Breath of the Wild, Dwarf Fortress and Minecraft.
|
|
'';
|
|
homepage = "https://veloren.net";
|
|
upstream = "https://gitlab.com/veloren/veloren";
|
|
license = lib.licenses.gpl3;
|
|
maintainers = [ lib.maintainers.yusdacra ];
|
|
platforms = lib.platforms.all;
|
|
};
|
|
|
|
makeGitCommand = subcommands: name:
|
|
# Check if git-lfs is working. This is a partial check only,
|
|
# the actual check is done in `common/build.rs`. We do this
|
|
# so that the build fails early.
|
|
if builtins.pathExists ../assets/voxygen/background/bg_main.png then
|
|
builtins.readFile (pkgs.runCommand name { } ''
|
|
cd ${
|
|
# Only copy the `.git` directory to nix store, anything else is a waste.
|
|
builtins.path {
|
|
path = ../.git;
|
|
# Nix store path names don't accept names that start with a dot.
|
|
name = "git";
|
|
}
|
|
}
|
|
${pkgs.git}/bin/git ${subcommands} > $out
|
|
'')
|
|
else
|
|
abort ''
|
|
Git Large File Storage (git-lfs) has not been set up correctly.
|
|
Most common reasons:
|
|
- git-lfs was not installed before cloning this repository
|
|
- this repository was not cloned from the primary gitlab mirror.
|
|
- The github mirror does not support lfs.
|
|
See the book at https://book.veloren.net/ for details.
|
|
'';
|
|
|
|
gitHash = makeGitCommand
|
|
"log -n 1 --pretty=format:%h/%cd --date=format:%Y-%m-%d-%H:%M --abbrev=8"
|
|
"getGitHash";
|
|
|
|
gitTag =
|
|
# If the git command errors out we feed an empty string
|
|
makeGitCommand "describe --exact-match --tags HEAD || printf ''"
|
|
"getGitTag";
|
|
|
|
version = if gitTag != "" then gitTag else gitHash;
|
|
|
|
veloren-crates = with pkgs;
|
|
callPackage ./Cargo.nix {
|
|
defaultCrateOverrides = with common;
|
|
defaultCrateOverrides // {
|
|
libudev-sys = _: { buildInputs = crateDeps.libudev-sys; };
|
|
alsa-sys = _: { buildInputs = crateDeps.alsa-sys; };
|
|
veloren-common = _:
|
|
(if isBuildingServerCli then {
|
|
DISABLE_GIT_LFS_CHECK = true;
|
|
} else
|
|
{ }) // {
|
|
# Declare env values here so that `common/build.rs` sees them
|
|
NIX_GIT_HASH = gitHash;
|
|
NIX_GIT_TAG = gitTag;
|
|
};
|
|
veloren-network = _: { buildInputs = crateDeps.veloren-network; };
|
|
veloren-server-cli = _: { VELOREN_USERDATA_STRATEGY = "system"; };
|
|
veloren-voxygen = _: {
|
|
VELOREN_USERDATA_STRATEGY = "system";
|
|
buildInputs = crateDeps.veloren-voxygen;
|
|
nativeBuildInputs = [ makeWrapper ];
|
|
postInstall = ''
|
|
wrapProgram $out/bin/veloren-voxygen --set LD_LIBRARY_PATH ${neededLibPaths}
|
|
'';
|
|
};
|
|
};
|
|
inherit release pkgs;
|
|
};
|
|
|
|
veloren-assets = pkgs.symlinkJoin {
|
|
inherit version;
|
|
name = "veloren-assets_${version}";
|
|
paths = [
|
|
(pkgs.runCommand "mkVelorenAssetsDir" { } ''
|
|
mkdir -p $out/share/veloren
|
|
ln -sf ${../assets} $out/share/veloren/assets
|
|
'')
|
|
];
|
|
meta = meta // {
|
|
longDescription = ''
|
|
${meta.longDescription}
|
|
This package includes the assets.
|
|
'';
|
|
};
|
|
};
|
|
|
|
makePkg = name:
|
|
pkgs.symlinkJoin {
|
|
inherit version;
|
|
name = "${name}_${version}";
|
|
paths = [ veloren-crates.workspaceMembers."${name}".build ];
|
|
meta = meta // {
|
|
longDescription = ''
|
|
${meta.longDescription}
|
|
${if isBuildingVoxygen then
|
|
"This package includes the client, Voxygen."
|
|
else
|
|
""}
|
|
${if isBuildingServerCli then
|
|
"This package includes the server CLI."
|
|
else
|
|
""}
|
|
'';
|
|
};
|
|
};
|
|
in (pkgs.lib.genAttrs cratesToBuild makePkg) // { inherit veloren-assets; }
|