github.com/status-im/status-go@v1.1.0/nix/scripts/lib.sh (about) 1 #!/usr/bin/env bash 2 set -eo pipefail 3 GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel) 4 5 # Checking group ownership to identify installation type. 6 file_group() { 7 UNAME=$(uname -s) 8 if [[ "${UNAME}" == "Linux" ]]; then 9 stat -Lc "%G" "${1}" 2>/dev/null 10 elif [[ "${UNAME}" == "Darwin" ]]; then 11 # Avoid using Nix GNU stat when in Nix shell. 12 /usr/bin/stat -Lf "%Sg" "${1}" 2>/dev/null 13 fi 14 } 15 16 os_name() { 17 source /etc/os-release 2>/dev/null 18 echo "${NAME}" 19 } 20 21 is_arch_linux() { 22 [[ -f /etc/arch-release ]] 23 } 24 25 nix_install_type() { 26 NIX_STORE_DIR_GROUP=$(file_group /nix/store) 27 if [[ "$(os_name)" =~ NixOS ]]; then 28 echo "nixos" 29 else 30 USER=$(id -un) # Missing in Docker. 31 case "${NIX_STORE_DIR_GROUP}" in 32 "nixbld") echo "multi";; 33 "30000") echo "multi";; 34 "(30000)") echo "multi";; 35 "wheel") echo "single";; 36 "users") echo "single";; 37 "${USER}") echo "single";; 38 "${UID}") echo "single";; 39 "(${UID})") echo "single";; 40 "") echo "none"; 41 echo "No Nix installtion detected!" >&2;; 42 *) echo "Unknown Nix installtion type!" >&2; exit 1;; 43 esac 44 fi 45 } 46 47 nix_root() { 48 NIX_ROOT="/nix" 49 if [[ $(uname -s) == "Darwin" ]]; then 50 # Special case due to read-only root on MacOS Catalina 51 NIX_ROOT="/opt/nix" 52 fi 53 echo "${NIX_ROOT}" 54 } 55 56 nix_current_version() { 57 nix-env --version | awk '{print $3}' 58 } 59 60 nix_get_local_setting() { 61 local NIX_LOCAL_CONFIG="${GIT_ROOT}/nix/nix.conf" 62 local KEY="${1}" 63 awk -F' = ' "/^${KEY} *=/{print \$2}" nix/nix.conf 64 } 65 66 nix_set_global_setting() { 67 local NIX_GLOBAL_CONFIG="/etc/nix/nix.conf" 68 local KEY="${1}" 69 local VAL="${2}" 70 if grep "${KEY}" "${NIX_GLOBAL_CONFIG}" 2>/dev/null; then 71 sed -i "s/${KEY} = \(.*\)$/${KEY} = ${VAL}/" "${NIX_GLOBAL_CONFIG}" 72 else 73 echo "${KEY} = ${VAL}" | sudo tee -a "${NIX_GLOBAL_CONFIG}" >/dev/null 74 fi 75 } 76 77 nix_daemon_restart() { 78 # Restarting Nix Daemon makes sense only on a multi-user install. 79 [[ $(nix_install_type) != "multi" ]] && return 80 if [[ "$(uname -s)" == "Darwin" ]]; then 81 echo "Restarting Nix daemon Launchd service..." >&2 82 sudo launchctl unload /Library/LaunchDaemons/org.nixos.nix-daemon.plist 83 sudo launchctl load /Library/LaunchDaemons/org.nixos.nix-daemon.plist 84 elif [[ "$(uname -s)" == "Linux" ]] && [[ "$(nix_install_type)" == "multi" ]]; then 85 echo "Restarting Nix daemon Systemd service..." >&2 86 sudo systemctl daemon-reload 87 sudo systemctl restart nix-daemon 88 else 89 echo "Unknown platform! Unable to restart daemon!" >&2 90 exit 1 91 fi 92 }