build(nix): switch to naersk

This commit is contained in:
Yusuf Bera Ertan 2021-03-23 16:02:47 +03:00
parent 379ab0f341
commit e9a7ff7dd7
No known key found for this signature in database
GPG Key ID: 1D8F8FAF2294D6EA
11 changed files with 234 additions and 19098 deletions

1
.gitignore vendored
View File

@ -52,3 +52,4 @@ userdata
# Nix # Nix
nix/result* nix/result*
/result* /result*
/shell.nix

View File

@ -1,29 +1,27 @@
{ {
"nodes": { "nodes": {
"crate2nix": { "flake-utils": {
"flake": false,
"locked": { "locked": {
"lastModified": 1606659997, "lastModified": 1609246779,
"narHash": "sha256-wpJOCcbgQNeV2Dq2rvbf9Atjs8So5m7wUaP0xdr4u3w=", "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=",
"owner": "kolloch", "owner": "numtide",
"repo": "crate2nix", "repo": "flake-utils",
"rev": "3701179c8aef0677dab1915457ca0f367f2dc523", "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "kolloch", "owner": "numtide",
"repo": "crate2nix", "repo": "flake-utils",
"rev": "3701179c8aef0677dab1915457ca0f367f2dc523",
"type": "github" "type": "github"
} }
}, },
"flake-utils": { "flakeUtils": {
"locked": { "locked": {
"lastModified": 1605370193, "lastModified": 1614513358,
"narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=", "narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "5021eac20303a61fafe17224c087f5519baed54d", "rev": "5466c5bbece17adaab2d82fae80b46e807611bf3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -32,44 +30,70 @@
"type": "github" "type": "github"
} }
}, },
"naersk": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1616263753,
"narHash": "sha256-wf1naH44D0Z7+JNpD6T/6/d0XaXDi9r4Oi100pBtzhs=",
"owner": "yusdacra",
"repo": "naersk",
"rev": "8cd4d175606de222114c551c85847acb013cc9cb",
"type": "github"
},
"original": {
"owner": "yusdacra",
"ref": "veloren",
"repo": "naersk",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1606744648, "lastModified": 1616259034,
"narHash": "sha256-/sBYrKS4uNFeX3cX1qmQ/viyqiDz7Eq/XoX4v2qSVgk=", "narHash": "sha256-WlMIiGIXJm7J+jemzd+ksoun6znWmabCZNz76szV158=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c00959877fb06b09468562518b408acda886c79e", "rev": "4e0d3868c679da20108db402785f924daa1a7fb5",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c00959877fb06b09468562518b408acda886c79e",
"type": "github"
}
},
"nixpkgsMoz": {
"flake": false,
"locked": {
"lastModified": 1603906276,
"narHash": "sha256-RsNPnEKd7BcogwkqhaV5kI/HuNC4flH/OQCC/4W5y/8=",
"owner": "mozilla",
"repo": "nixpkgs-mozilla",
"rev": "8c007b60731c07dd7a052cce508de3bb1ae849b4",
"type": "github"
},
"original": {
"owner": "mozilla",
"repo": "nixpkgs-mozilla",
"type": "github" "type": "github"
} }
}, },
"root": { "root": {
"inputs": { "inputs": {
"crate2nix": "crate2nix", "flakeUtils": "flakeUtils",
"flake-utils": "flake-utils", "naersk": "naersk",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgsMoz": "nixpkgsMoz" "rustOverlay": "rustOverlay"
}
},
"rustOverlay": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1616467144,
"narHash": "sha256-7iGzusiBdQcXGrnQGcLwRoEiKtH3bNGIpXu+TJTD6Gw=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "cdaa20a3e7f97d5fad271464dac7e2725157c6e7",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
} }
} }
}, },

View File

@ -2,59 +2,59 @@
description = "Flake providing Veloren, a multiplayer voxel RPG written in Rust."; description = "Flake providing Veloren, a multiplayer voxel RPG written in Rust.";
inputs = { inputs = {
crate2nix = { naersk = {
url = "github:kolloch/crate2nix?rev=3701179c8aef0677dab1915457ca0f367f2dc523"; url = "github:yusdacra/naersk/veloren";
flake = false; inputs.nixpkgs.follows = "nixpkgs";
}; };
flake-utils.url = "github:numtide/flake-utils"; flakeUtils.url = "github:numtide/flake-utils";
nixpkgsMoz = { rustOverlay = {
url = "github:mozilla/nixpkgs-mozilla"; url = "github:oxalica/rust-overlay";
flake = false; inputs.nixpkgs.follows = "nixpkgs";
}; };
nixpkgs.url = "github:NixOS/nixpkgs?rev=c00959877fb06b09468562518b408acda886c79e"; nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
}; };
outputs = inputs: with inputs; outputs = inputs: with inputs; with flakeUtils.lib;
flake-utils.lib.eachSystem [ "x86_64-linux" ] (system: eachSystem [ "x86_64-linux" ] (system:
let let
sources = { common = import ./nix/common.nix {
inherit sources = {
crate2nix inherit
nixpkgs naersk
nixpkgsMoz nixpkgs
; rustOverlay
;
};
inherit system;
}; };
veloren = import ./nix/veloren.nix { mkPackage = crateName: import ./nix/build.nix {
inherit inherit common;
nixpkgs crateToBuild = crateName;
sources
system
;
sourceInfo = sourceInfo =
if self.sourceInfo ? rev then self.sourceInfo // { if self.sourceInfo ? rev
then self.sourceInfo // {
# Tag would have to be set manually for stable releases flake # Tag would have to be set manually for stable releases flake
# because there's currently no way to get the tag via the interface. # because there's currently no way to get the tag via the interface.
# tag = v0.8.0; # tag = v0.8.0;
} else (throw "Can't get revision because the git tree is dirty"); }
else (throw "Can't get revision because the git tree is dirty");
}; };
in cratesToPackage = [ "veloren-voxygen" "veloren-server-cli" ];
with flake-utils; rec {
apps = builtins.mapAttrs
(name: value: lib.mkApp { inherit name; drv = value; })
packages;
defaultApp = apps.veloren-voxygen;
packages = veloren; genAttrs = names: f:
builtins.listToAttrs (map (n: { name = n; value = f n; }) names);
in
rec {
packages = genAttrs cratesToPackage mkPackage;
defaultPackage = packages.veloren-voxygen; defaultPackage = packages.veloren-voxygen;
apps = builtins.mapAttrs (n: v: mkApp { name = n; drv = v; }) packages;
defaultApp = apps.veloren-voxygen;
devShell = import ./nix/devShell.nix { devShell = import ./nix/devShell.nix {
inherit inherit common;
nixpkgs
sources
system
;
}; };
} }
); );

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,7 @@
## Read this first! ## Read this first!
#### You'll need at least Nix `2.4pre20210317_8a5203d`!
Since this repo uses a new Nix feature called "Flakes", it is recommended to enable it. Since this repo uses a new Nix feature called "Flakes", it is recommended to enable it.
It massively improves the `nix` CLI UX, and adds many useful features. It massively improves the `nix` CLI UX, and adds many useful features.
We include instructions for Nix without flakes enabled, but using flakes is the recommended way. We include instructions for Nix without flakes enabled, but using flakes is the recommended way.
@ -184,15 +186,6 @@ It is inadvised to update revisions without the use of `nix flake update` as it'
Modify the relevant `rev` field in `flake.lock` to what you need - you can use `nix-prefetch-git` to find an up-to-date revision. Leave the `narHash` entry as is and attempt a rebuild to find out what its value should be. Modify the relevant `rev` field in `flake.lock` to what you need - you can use `nix-prefetch-git` to find an up-to-date revision. Leave the `narHash` entry as is and attempt a rebuild to find out what its value should be.
### Generating Cargo.nix
Enter the development shell.
To update `Cargo.nix` (and `crate-hashes.json`) using latest `Cargo.lock`, run:
```shell
crate2nix generate -f ../Cargo.toml
```
### Rust toolchain ### Rust toolchain
If the `rust-toolchain` file is updated, you will need to update the `sha256` hash in the `nix/rustPkgs.nix` file. If the `rust-toolchain` file is updated, you will need to update the `sha256` hash in the `nix/rustPkgs.nix` file.

118
nix/build.nix Normal file
View File

@ -0,0 +1,118 @@
{ common
, release ? true
, crateToBuild ? "veloren-voxygen"
, disableGitLfsCheck ? false
, sourceInfo ? { }
}:
with common;
let
utils = import ./utils.nix { inherit pkgs; };
meta = with pkgs.lib; {
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";
license = licenses.gpl3;
maintainers = [ maintainers.yusdacra ];
# TODO: Make this work on BSD and Mac OS
platforms = platforms.linux;
};
prettyRev = with sourceInfo; builtins.substring 0 8 rev + "/" + utils.dateTimeFormat lastModified;
tag = with sourceInfo;
if sourceInfo ? tag
then sourceInfo.tag
else "";
# If gitTag has a tag (meaning the commit we are on is a *release*), use
# it as version, else: just use the prettified hash we have, if we don't
# have it the build fails.
# Must be in format f4987672/2020-12-10-12:00
version =
if tag != "" then tag
else if prettyRev != "" then prettyRev
else throw "Need a tag or pretty revision in order to determine version";
veloren-assets = pkgs.runCommand "makeAssetsDir" { } ''
mkdir $out
ln -sf ${../assets} $out/assets
'';
velorenVoxygenDesktopFile = pkgs.makeDesktopItem rec {
name = "veloren-voxygen";
exec = name;
icon = ../assets/voxygen/logo.ico;
comment =
"Official client for Veloren - the open-world, open-source multiplayer voxel RPG";
desktopName = "Voxygen";
genericName = "Veloren Client";
categories = "Game;";
};
velorenOverride = oldAttr: with pkgs;
if crateToBuild == "veloren-voxygen"
then
{
pname = "veloren-voxygen";
inherit version;
nativeBuildInputs = (oldAttr.nativeBuildInputs or [ ]) ++ [ makeWrapper copyDesktopItems ];
desktopItems = [ velorenVoxygenDesktopFile ];
postInstall = ''
wrapProgram $out/bin/veloren-voxygen\
--set VELOREN_ASSETS ${veloren-assets}\
--set LD_LIBRARY_PATH ${
lib.makeLibraryPath common.voxygenNeededLibs
}
'';
meta = meta // {
longDescription = ''
${meta.longDescription}
"This package includes the official client, Voxygen."
'';
};
}
else if crateToBuild == "veloren-server-cli"
then
{
pname = "veloren-server-cli";
inherit version;
nativeBuildInputs = (oldAttr.nativeBuildInputs or [ ]) ++ [ makeWrapper ];
postInstall = ''
wrapProgram $out/bin/veloren-server-cli --set VELOREN_ASSETS ${veloren-assets}
'';
meta = meta // {
longDescription = ''
${meta.longDescription}
"This package includes the server CLI."
'';
};
}
else { };
velorenPackage =
pkgs.naersk.buildPackage {
name = crateToBuild;
root = ../.;
targets = [ crateToBuild ];
nativeBuildInputs = common.crateDeps.nativeBuildInputs;
buildInputs = common.crateDeps.buildInputs;
override = (_: {
# Disable `git-lfs` check here since we check it ourselves
# We have to include the command output here, otherwise Nix won't run it
DISABLE_GIT_LFS_CHECK = utils.isGitLfsSetup common.gitLfsCheckFile;
# Declare env values here so that `common/build.rs` sees them
NIX_GIT_HASH = prettyRev;
NIX_GIT_TAG = tag;
VELOREN_USERDATA_STRATEGY = "system";
});
overrideMain = velorenOverride;
inherit release;
};
in
velorenPackage

View File

@ -1,16 +1,18 @@
{ nixpkgs, sources, system }: { sources, system }:
let let
rustChannel = import ./rustPkgs.nix { pkgz = import sources.nixpkgs { inherit system; overlays = [ sources.rustOverlay.overlay ]; };
pkgs = import nixpkgs { inherit system; }; rust = (pkgz.rust-bin.fromRustupToolchainFile ../rust-toolchain).override {
inherit (sources) nixpkgsMoz; extensions = [ "rust-src" ];
}; };
pkgs = import nixpkgs { pkgs = import sources.nixpkgs {
inherit system; inherit system;
overlays = [ overlays = [
(final: prev: { (final: prev: {
rustc = rustChannel.rust; rustc = rust;
crate2nix = prev.callPackage sources.crate2nix { pkgs = prev; }; })
(final: prev: {
naersk = prev.callPackage sources.naersk { };
}) })
]; ];
}; };
@ -20,15 +22,9 @@ with pkgs;
inherit pkgs; inherit pkgs;
# deps that crates need (for compiling) # deps that crates need (for compiling)
crateDeps = crateDeps =
let
makeDeps = b: n: { buildInputs = b; nativeBuildInputs = n; };
in
{ {
libudev-sys = makeDeps [ libudev ] [ pkg-config ]; nativeBuildInputs = [ pkg-config python3 ];
alsa-sys = makeDeps [ alsaLib ] [ pkg-config ]; buildInputs = [ libudev alsaLib openssl xorg.libxcb ];
veloren-network = makeDeps [ openssl ] [ pkg-config ];
veloren-voxygen = makeDeps [ xorg.libxcb ] [ ];
xcb = makeDeps [ ] [ python3 ];
}; };
# deps that voxygen needs to function # deps that voxygen needs to function
# FIXME: Wayland doesn't work (adding libxkbcommon, wayland and wayland-protocols results in a panic) # FIXME: Wayland doesn't work (adding libxkbcommon, wayland and wayland-protocols results in a panic)

View File

@ -1,21 +0,0 @@
{
"auth-common 0.1.0 (git+https://gitlab.com/veloren/auth.git?rev=b943c85e4a38f5ec60cd18c34c73097640162bfe#b943c85e4a38f5ec60cd18c34c73097640162bfe)": "0ckpx36a5gmzirsih03ddfyp4iz23ffwb6sc75smb4srx1ivc7fy",
"authc 1.0.0 (git+https://gitlab.com/veloren/auth.git?rev=b943c85e4a38f5ec60cd18c34c73097640162bfe#b943c85e4a38f5ec60cd18c34c73097640162bfe)": "0ckpx36a5gmzirsih03ddfyp4iz23ffwb6sc75smb4srx1ivc7fy",
"conrod_core 0.63.0 (git+https://gitlab.com/veloren/conrod.git?branch=copypasta_0.7#1ae5193588fb662a7189d81edd9f2d653c7f1da0)": "14sxyw8si0c2md5p5hssvfl12368hqp1fy6ighd7v4lb8fqwp6zj",
"conrod_derive 0.63.0 (git+https://gitlab.com/veloren/conrod.git?branch=copypasta_0.7#1ae5193588fb662a7189d81edd9f2d653c7f1da0)": "14sxyw8si0c2md5p5hssvfl12368hqp1fy6ighd7v4lb8fqwp6zj",
"conrod_winit 0.63.0 (git+https://gitlab.com/veloren/conrod.git?branch=copypasta_0.7#1ae5193588fb662a7189d81edd9f2d653c7f1da0)": "14sxyw8si0c2md5p5hssvfl12368hqp1fy6ighd7v4lb8fqwp6zj",
"euc 0.5.1 (git+https://github.com/zesterer/euc.git#c9a7c17a03d45fce00caeeca09afa1e1558cd183)": "0qvk0bx1arkgmdc59sip39zszdw2fwv6jcy5jinv18n5m1nrclw4",
"iced_core 0.2.1 (git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3)": "08ixcznfi6wmznjyg0ahi9zs12x5mlbw1bznifqr66gkpa25kyp1",
"iced_futures 0.1.2 (git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3)": "08ixcznfi6wmznjyg0ahi9zs12x5mlbw1bznifqr66gkpa25kyp1",
"iced_graphics 0.1.0 (git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3)": "08ixcznfi6wmznjyg0ahi9zs12x5mlbw1bznifqr66gkpa25kyp1",
"iced_native 0.2.2 (git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3)": "08ixcznfi6wmznjyg0ahi9zs12x5mlbw1bznifqr66gkpa25kyp1",
"iced_style 0.1.0 (git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3)": "08ixcznfi6wmznjyg0ahi9zs12x5mlbw1bznifqr66gkpa25kyp1",
"iced_winit 0.1.1 (git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3)": "08ixcznfi6wmznjyg0ahi9zs12x5mlbw1bznifqr66gkpa25kyp1",
"portpicker 0.1.0 (git+https://github.com/xMAC94x/portpicker-rs#9d6df36c53c94684080a64a7212dd6bfc3617ee4)": "00vl2k3xfihxq86kf5rsknjl8dxmrxqhwajwn0hj4gzgnbssr0rx",
"scan_fmt 0.2.5 (git+https://github.com/Imberflur/scan_fmt#5f9e8eed73e93e8d19fa864d76e75bb4984cffe7)": "1g36jm3rii6iziqpddszhdk6bqpa7jzsbmrlfzmsmi16zcisrvid",
"specs 0.16.1 (git+https://github.com/amethyst/specs.git?rev=7a2e348ab2223818bad487695c66c43db88050a5#7a2e348ab2223818bad487695c66c43db88050a5)": "1z7gjiq7zirg9az3ly1y2ghi5m7s3x1bp35gw5x0cyv50fsi3pjq",
"specs-idvs 0.1.0 (git+https://gitlab.com/veloren/specs-idvs.git?branch=specs-git#fcb0b2306b571f62f9f85d89e79e087454d95efd)": "00w4kc60d7mjb5gbkcxrxzarshmhf4idqm3sk8335f7s3pn9q0s5",
"tui 0.10.0 (git+https://github.com/fdehau/tui-rs.git?branch=paragraph-scroll#54b841fab6cfdb38e8dc1382176e965787964b4c)": "0si3sp0hkjjrrfvmiynhai35pgjlnflw7qwwh268rpivdl8bd9xz",
"vek 0.12.0 (git+https://gitlab.com/veloren/vek.git?branch=fix_intrinsics#237a78528b505f34f6dde5dc77db3b642388fe4a)": "1v3kxjl826zf0zbi9pbwpw75ybidr0cdsgx772l0671zmp3yrkjg",
"winit 0.23.0 (git+https://gitlab.com/veloren/winit.git?branch=macos-test-spiffed#7c8c5f21384c898f50d37298d229093549b08803)": "1amfl8xpmyh7a4sy87iz5rybdgfn598crl6y6hxyrmyamg6cbqd4"
}

View File

@ -1,32 +1,15 @@
{ nixpkgs, sources, system }: { common }:
with import ./common.nix with common; with pkgs;
{
inherit
nixpkgs
sources
system
;
};
with pkgs;
let
getAllCratesDeps = name:
(lib.concatLists
(map (attrset: attrset."${name}") (lib.attrValues crateDeps)));
in
mkShell { mkShell {
name = "veloren-shell"; name = "veloren-shell";
nativeBuildInputs = [ nativeBuildInputs = [
cachix cachix
cargo
clippy
crate2nix
git git
git-lfs git-lfs
nixpkgs-fmt nixpkgs-fmt
rustc rustc
rustfmt ] ++ crateDeps.nativeBuildInputs;
] ++ (getAllCratesDeps "nativeBuildInputs"); buildInputs = crateDeps.buildInputs;
buildInputs = getAllCratesDeps "buildInputs";
shellHook = '' shellHook = ''
# Setup our cachix "substituter" # Setup our cachix "substituter"
export NIX_CONFIG=" export NIX_CONFIG="

View File

@ -2,8 +2,7 @@ watch_file flake.lock
watch_file flake.nix watch_file flake.nix
watch_file nix/common.nix watch_file nix/common.nix
watch_file nix/devShell.nix watch_file nix/devShell.nix
watch_file nix/rustPkgs.nix
watch_file nix/shell.nix watch_file nix/shell.nix
watch_file nix/utils.nix watch_file nix/utils.nix
use flake use flake || use nix nix/shell.nix

View File

@ -1,141 +0,0 @@
{
# `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" ]
, disableGitLfsCheck ? false
, nixpkgs
, sources
, system
, sourceInfo ? { }
}:
let
common = import ./common.nix {
inherit
nixpkgs
sources
system
;
};
inherit (common) pkgs;
utils = import ./utils.nix { inherit pkgs; };
meta = with pkgs.stdenv.lib; {
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 = licenses.gpl3;
maintainers = [ maintainers.yusdacra ];
# TODO: Make this work on BSD and Mac OS
platforms = platforms.linux;
};
prettyRev = with sourceInfo;
if sourceInfo ? rev && sourceInfo ? lastModified
then builtins.substring 0 8 rev + "/" + utils.dateTimeFormat lastModified
else throw "Need revision + lastModified to determine pretty revision";
tag = with sourceInfo;
if sourceInfo ? tag
then sourceInfo.tag
else "";
# If gitTag has a tag (meaning the commit we are on is a *release*), use
# it as version, else: just use the prettified hash we have, if we don't
# have it the build fails.
# Must be in format f4987672/2020-12-10-12:00
version =
if tag != "" then tag
else if prettyRev != "" then prettyRev
else throw "Need a tag or pretty revision in order to determine version";
veloren-assets = pkgs.runCommand "makeAssetsDir" { } ''
mkdir $out
ln -sf ${../assets} $out/assets
'';
velorenVoxygenDesktopFile = pkgs.makeDesktopItem rec {
name = "veloren-voxygen";
exec = name;
icon = ../assets/voxygen/logo.ico;
comment =
"Official client for Veloren - the open-world, open-source multiplayer voxel RPG";
desktopName = "Voxygen";
genericName = "Veloren Client";
categories = "Game;";
};
veloren-crates = with pkgs;
callPackage ./Cargo.nix {
defaultCrateOverrides = with common; with crateDeps;
defaultCrateOverrides // {
veloren-common = oldAttrs: {
# see: https://github.com/kolloch/crate2nix/issues/129
dependencies =
map
(dep:
if dep.name == "csv" || dep.name == "structopt"
then builtins.removeAttrs dep [ "optional" ]
else dep)
oldAttrs.dependencies;
# Disable `git-lfs` check here since we check it ourselves
# We have to include the command output here, otherwise Nix won't run it
DISABLE_GIT_LFS_CHECK = utils.isGitLfsSetup common.gitLfsCheckFile;
# Declare env values here so that `common/build.rs` sees them
NIX_GIT_HASH = prettyRev;
NIX_GIT_TAG = tag;
};
veloren-server-cli = _: {
name = "veloren-server-cli";
inherit version;
VELOREN_USERDATA_STRATEGY = "system";
nativeBuildInputs = [ makeWrapper ];
postInstall = ''
wrapProgram $out/bin/veloren-server-cli --set VELOREN_ASSETS ${veloren-assets}
'';
meta = meta // {
longDescription = ''
${meta.longDescription}
"This package includes the server CLI."
'';
};
};
veloren-voxygen = _: {
name = "veloren-voxygen";
inherit version;
VELOREN_USERDATA_STRATEGY = "system";
inherit (veloren-voxygen) buildInputs;
nativeBuildInputs = veloren-voxygen.nativeBuildInputs
++ [ makeWrapper copyDesktopItems ];
desktopItems = [ velorenVoxygenDesktopFile ];
postInstall = ''
wrapProgram $out/bin/veloren-voxygen\
--set VELOREN_ASSETS ${veloren-assets}\
--set LD_LIBRARY_PATH ${
lib.makeLibraryPath common.voxygenNeededLibs
}
'';
meta = meta // {
longDescription = ''
${meta.longDescription}
"This package includes the official client, Voxygen."
'';
};
};
} // {
xcb = _: xcb;
libudev-sys = _: libudev-sys;
alsa-sys = _: alsa-sys;
veloren-network = _: veloren-network;
};
inherit release pkgs;
};
makePkg = name: veloren-crates.workspaceMembers."${name}".build;
in
(pkgs.lib.genAttrs cratesToBuild makePkg)