mirror of
https://github.com/status-im/status-react.git
synced 2025-01-09 18:46:19 +00:00
d5c1ecc104
To help with #15595 changes, refactoring is required. In this PR we switch from config to env vars. Doing some cleanup meanwhile.
75 lines
2.6 KiB
Bash
Executable File
75 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This script is used by the Makefile to have an implicit nix-shell.
|
|
# The following environment variables modify the script behavior:
|
|
# - TARGET: This attribute is passed via --attr to Nix, defining the scope.
|
|
# - _NIX_PURE: This variable allows for making the shell pure with the use of --pure.
|
|
# Take note that this makes Nix tools like `nix-build` unavailable in the shell.
|
|
# - _NIX_KEEP: This variable allows specifying which env vars to keep for Nix pure shell.
|
|
|
|
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
|
|
source "${GIT_ROOT}/scripts/colors.sh"
|
|
source "${GIT_ROOT}/nix/scripts/source.sh"
|
|
|
|
export TERM=xterm # fix for colors
|
|
shift # we remove the first -c from arguments
|
|
|
|
if [[ -z "${TARGET}" ]]; then
|
|
export TARGET="default"
|
|
echo -e "${YLW}Missing TARGET, assuming default target.${RST} See nix/README.md for more details." 1>&2
|
|
fi
|
|
|
|
# Minimal shell with just Nix sourced, useful for `make nix-gc`.
|
|
if [[ "${TARGET}" == "nix" ]]; then
|
|
eval $@
|
|
exit 0
|
|
fi
|
|
if [[ -n "${IN_NIX_SHELL}" ]] && [[ -n "${NIX_SHELL_TARGET}" ]]; then
|
|
if [[ "${NIX_SHELL_TARGET}" == "${TARGET}" ]]; then
|
|
echo -e "${YLW}Nix shell for TARGET=${TARGET} is already active.${RST}" >&2
|
|
exit 0
|
|
else
|
|
# Nesting nix shells does not work due to how we detect already present shell.
|
|
echo -e "${RED}Cannot nest Nix shells with different targets!${RST}" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
entryPoint="default.nix"
|
|
nixArgs=(
|
|
"--show-trace"
|
|
"--attr shells.${TARGET}"
|
|
)
|
|
|
|
# This variable allows specifying which env vars to keep for Nix pure shell
|
|
# The separator is a colon
|
|
if [[ -n "${_NIX_KEEP}" ]]; then
|
|
nixArgs+=("--keep ${_NIX_KEEP//,/ --keep }")
|
|
fi
|
|
|
|
# Not all builds are ready to be run in a pure environment
|
|
if [[ -n "${_NIX_PURE}" ]]; then
|
|
nixArgs+=("--pure")
|
|
pureDesc='pure '
|
|
fi
|
|
|
|
# Hack fix for missing Android SDK for aarch64 on Darwin. See systemOverride in `nix/pkgs.nix`.
|
|
if [[ "${TARGET}" =~ ^(android-sdk|android|gradle|keytool|status-go)$ ]]; then
|
|
os=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
export NIXPKGS_SYSTEM_OVERRIDE="x86_64-${os}"
|
|
fi
|
|
|
|
echo -e "${GRN}Configuring ${pureDesc}Nix shell for target '${TARGET}'...${RST}" 1>&2
|
|
|
|
# Save derivation from being garbage collected
|
|
"${GIT_ROOT}/nix/scripts/gcroots.sh" "shells.${TARGET}"
|
|
|
|
# ENTER_NIX_SHELL is the fake command used when `make shell` is run.
|
|
# It is just a special string, not a variable, and a marker to not use `--run`.
|
|
if [[ "${@}" == "ENTER_NIX_SHELL" ]]; then
|
|
export NIX_SHELL_TARGET="${TARGET}"
|
|
exec nix-shell ${nixArgs[@]} --keep NIX_SHELL_TARGET ${entryPoint}
|
|
else
|
|
exec nix-shell ${nixArgs[@]} --run "$@" ${entryPoint}
|
|
fi
|