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  }