The only user-facing changes is the process for version pinning, which will be slightly less convenient without access to the `nix flake` feature. This is justified by it rarely being necessary, for the benefit of relying on an upcoming built-in nix feature rather than a non-standard third-party tool. - deprecate `niv` for version pinning - legacy nix now uses the flake via `flake-compat` - remove `sources.{nix,json}` (versions now pinned in `flake.lock`) - move contents of `nix/default.nix` to `nix/veloren.nix` - make `nix-build nix/default.nix` produce the same output as `flake build` - move contents of `nix/shell.nix` into `nix/devShell.nix` - make `nix-shell nix/shell.nix` produce the same environment as `flake develop` - Move `tag` parameter into `sourceInfo` - Tidy up and autoformat with `nixpkgs-fmt` - update README to reflect new usage - revert input versions to match those previously specified in nix/sources.json
5.1 KiB
Important
If you are going to call the derivations with a custom nixpkgs
argument, make sure that the nixpkgs
you pass is on at least the same commit or newer than it.
Unexpected errors may pop up if you use an older version. Same goes for the sources
argument.
How to use
To enter the development shell (which includes all tools mentioned in this readme + tools you'll need to develop Veloren), run:
nix-shell nix/shell.nix
It is recommended that you enter the dev shell before starting to build using nix-build
or nix-env
(anything which build stuff),
since it will setup a Cachix cache for you. (you can configure this for your user's nix.conf
by running cachix use veloren-nix
once in the dev shell,
which will make the cache available when you run commands outside of the dev shell).
If you have direnv setup on your system, it is also recommended to copy the envrc
(or envrc-nvidia
, if you have an Nvidia GPU) file to the root of the repository as .envrc
:
cp nix/envrc .envrc
This will make your env have the dev env setup automatically.
To build and install Voxygen and the server CLI into user profile, run:
nix-env -f nix/default.nix -i
You can configure what to install by changing the cratesToBuild
argument:
nix-env -f nix/default.nix --arg cratesToBuild '["veloren-voxygen"]'
For example, this will install Voxygen only.
You can configure the crates to be built with debug mode (not recommended, equals to opt-level = 0
):
nix-env -f nix/default.nix --arg release false
If you aren't on NixOS, you can run veloren-voxygen
using the provided nixGLIntel
in the dev shell:
nixGLIntel veloren-voxygen
If you have an Nvidia GPU, you can enter the dev shell like so:
nix-shell nix/shell.nix --arg nvidia true
And you'll be able to use nixGLNvidia
and nixGLNvidiaBumblebee
.
Using the flake
Due to the nature of flakes' reliance on git and the way git-lfs
is configured for this repo, you must already have git-lfs
in your environment when running nix commands on a local checkout. Run this to enter a shell environment with git-lfs
in your path:
nix shell nixpkgs#git-lfs
To enter a shell environment with the necessary tools:
nix develop
If you simply want to run the latest version without necessarily installing it, you can do so with
# Voxygen (the default):
nix run gitlab:veloren/veloren
# Server CLI:
nix run gitlab:veloren/veloren#veloren-server-cli
To install (for example) the game client on your system, the configuration could look something like this:
{ description = "NixOS configuration with flakes";
inputs.veloren.url = gitlab:veloren/veloren;
outputs = { self, nixpkgs, veloren }: {
nixosConfigurations.<your-hostname> = nixpkgs.lib.nixosSystem rec {
system = <your-system-arch>;
# ...
modules = [
# add to your overlay so that the packages appear in pkgs
# for subsequent modules
({...}: {
nixpkgs.overlays = [
# ...
(final: prev: {
inherit (veloren.packages."${system}") veloren-voxygen;
})
];
# You can also add the flake to your registry
nix.registry.veloren.flake = veloren;
# with this, you can run latest master
# regardless of version installed like this:
# nix run veloren/master
})
# some module
({ pkgs, ... }: {
environment.systemPackages = [
pkgs.veloren-voxygen
];
})
# ...
];
};
};
}
Managing Cargo.nix
Enter the development shell.
To update Cargo.nix
(and crate-hashes.json
) using latest Cargo.lock
, run:
crate2nix generate -f ../Cargo.toml
Managing dependencies
Nix with flakes enabled
If a specific revision is specified in flake.nix
, you will have to update that first, either by specifying a new desired revision or by removing it.
You can update the dependencies individually or all at once from the root of the project:
# only nixpkgs
nix flake update --update-input nixpkgs
# everything
nix flake update --recreate-lock-file
See the NixOS wiki for more information on how to use flakes.
Legacy nix
It is inadvised to update revisions without the use of nix flake update
as it's both tedious and error-prone to attempt setting all fields to their correct values in both flake.nix
and flake.lock
, but if you need to do it for testing, flake.lock
is where legacy nix commands get the input revisions from (through flake-compat
), regardless of what is specified in flake.nix
(see https://github.com/edolstra/flake-compat/issues/10).
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.
Formatting
Use nixpkgs-fmt to format files.
To format every Nix file:
nixpkgs-fmt flake.nix nix/*.nix