Jakub Sokołowski
eac77f84c2
Significant updates: - Git: `2.25.1` to `2.28.0` - Make: `4.2.1` to `4.3` - Glibc: `2.30` to `2.31` - PatchElf: `0.9` to `0.11` - GoLang: `1.14.0` to `1.14.7` - NodeJS: `v12.16.2` to `v12.18.3` - Clojure: `1.10.1.507` to `1.10.1.645` - OpenJDK: `8u242-b08` to `8u265-ga` - GoMobile: `20200329` to `20200622` Signed-off-by: Jakub Sokołowski <jakub@status.im> |
||
---|---|---|
.. | ||
deps | ||
lib | ||
mobile | ||
pkgs | ||
scripts | ||
status-go | ||
tools | ||
DETAILS.md | ||
KNOWN_ISSUES.md | ||
README.md | ||
config.nix | ||
default.nix | ||
nix.conf | ||
overlay.nix | ||
pkgs.nix | ||
shell.nix | ||
shells.nix | ||
targets.nix |
README.md
Description
This folder contains configuration for Nix, a purely functional package manager used by the Status app for its build process.
Configuration
The main config file is nix/nix.conf
and its main purpose is defining the binary caches which allow download of packages to avoid having to compile them yourself locally.
NOTE: If you are in Asia you might want to add the https://nix-cache-cn.status.im/
to be first in order of extra-substituters
. Removing cache.nixos.org
could also help.
Build arguments
We leverage the config
argument of standard nixpkgs
for our own parameterization of the builds (e.g. to pass a build number or build type).
Here is a sample structure of the config
attribute set:
{
status-im = {
build-type = "pr"; # Build type (influences which .env file gets used for feature flags)
build-number = 9999; # Used for versionCode and CFBundleVersion in Android and iOS respectively
android = {
gradle-opts = ""; # Gradle options passed for Android builds
keystore-path = ""; # Path to keystore for signing the APK
abi-split = false; # If APKs should be split based on architectures
abi-include = "x86"; # Android architectures to build for
};
status-go = {
src-override = "$HOME/my/source/status-go"; # local source override
};
};
}
You can see the defaults in nix/config.nix
.
Shell
In order to access an interactive Nix shell a user should run make shell
.
The Nix shell is started in this repo via the nix/scripts/shell.sh
script, which is a wrapper around the nix-shell
command and is intended for use with our main Makefile
. This allows for an implicit use of nix-shell
as the default shell in the Makefile
.
Normally the shell starts without any specific target platform, if you want to change that you should export the TARGET
env variable with appropriate value:
make shell TARGET=android
This way your shell and all other nix commands should run in a setup that is tailored towards Android development.
For valid values you can check the nix/shells.nix
file.
Using a local status-go repository
If you need to use a locally checked-out status-go repository, you can achieve that by defining the STATUS_GO_SRC_OVERRIDE
environment variable:
export STATUS_GO_SRC_OVERRIDE=$GOPATH/src/github.com/status-im/status-go
make release-android
Resources
You can learn more about Nix by watching these presentations:
- Nix Fundamentals (PDF, src)
- Nix in Status (PDF, src)
And you can read nix/DETAILS.md
for more information.
Known Issues
See KNOWN_ISSUES.md
.