status-mobile/nix
Pedro Pombeiro 7ab5cf053f
nix: fix shell bootstrapper
2019-11-26 16:30:22 +01:00
..
desktop desktop builds need GnuPG 2019-10-17 11:03:41 +02:00
lein remove dev-server and extensions for v1 2019-08-20 17:42:02 +02:00
mobile Add support for `STATUS_GO_SRC_OVERRIDE` env var 2019-11-13 16:41:21 +01:00
patched-go upgrade Go: 1.11 > 1.12 2019-09-30 11:57:57 +02:00
status-go Add support for `STATUS_GO_SRC_OVERRIDE` env var 2019-11-13 16:41:21 +01:00
targets [Fix 8635] About showed "Version ()" instead of Version 0.14.0 (201908...) on Android 2019-08-26 12:51:50 +03:00
tools Use react-native net-info community package 2019-09-05 14:16:28 +02:00
README.md Add support for `STATUS_GO_SRC_OVERRIDE` env var 2019-11-13 16:41:21 +01:00
bootstrapped-shell.nix nix: fix shell bootstrapper 2019-11-26 16:30:22 +01:00
build.sh Add support for `STATUS_GO_SRC_OVERRIDE` env var 2019-11-13 16:41:21 +01:00
clean.sh fix nix-clean for MacOS 2019-11-19 15:46:42 +01:00
derivation.nix Add support for `STATUS_GO_SRC_OVERRIDE` env var 2019-11-13 16:41:21 +01:00
nix.conf build status-go for Nix cache 2019-07-23 01:01:41 -04:00
nixpkgs-bootstrap.nix nix: Remove need to pass default values in `--arg config` 2019-11-17 16:26:58 +01:00
platform.nix nix: Apply some nixfmt suggestions and fix macOS status-go buildInputs 2019-07-29 18:01:07 +02:00
shell.sh fix nix-clean for MacOS 2019-11-19 15:46:42 +01:00
utils.nix nix: Apply some nixfmt suggestions and fix macOS status-go buildInputs 2019-07-29 18:01:07 +02:00

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 substituters. Removing cache.nixos.org could also help.

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/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.

By default the shell starts without any specific target platform, if you want to change that you should export the TARGET_OS env variable with the right value:

make shell TARGET_OS=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/platform.nix file.

Using a local status-go repository

If you need to use a locally checked-out status-go repository as a dependency of status-react, 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
# Any command that you run from now on
# will use the specified status-go location
make release-android

or for a one-off build:

make release-android STATUS_GO_SRC_OVERRIDE=$GOPATH/src/github.com/status-im/status-go

Known Issues

MacOS 10.15 "Catalina"

There is an unsolved issue with the root(/) file system in 10.15 being read-only: https://github.com/NixOS/nix/issues/2925

Our current recommended workaround is putting /nix under /opt/nix and symlinking it via /etc/synthetic.conf:

sudo mkdir /opt/nix
sudo chown ${USER} /opt/nix
sudo sh -c "echo 'nix\t/opt/nix' >> /etc/synthetic.conf"
reboot

After the system reboots you should see the /nix symlink in place:

 % ls -l /nix
lrwxr-xr-x  1 root  wheel  8 Oct 11 13:53 /nix -> /opt/nix

In order to be able to use Nix with a symlinked /nix you need to include this in your shell:

export NIX_IGNORE_SYMLINK_STORE=1

Add it to your .bashrc or any other shell config file.

NOTE: Your old /nix directory will end up in /Users/Shared/Relocated Items/Security/nix after OS upgrade.