diff --git a/Makefile b/Makefile index 512714c3e7..207702e90d 100644 --- a/Makefile +++ b/Makefile @@ -41,15 +41,11 @@ export REACT_SERVER_PORT ?= 5001 export NIX_CONF_DIR = $(PWD)/nix # Defines which variables will be kept for Nix pure shell, use semicolon as divider export _NIX_KEEP ?= TMPDIR,BUILD_ENV,STATUS_GO_SRC_OVERRIDE,NIMBUS_SRC_OVERRIDE -export _NIX_ROOT = /nix # legacy TARGET_OS variable support ifdef TARGET_OS export TARGET ?= $(TARGET_OS) endif -# Useful for checking if we are on NixOS -OS_NAME := $(shell [ -f /etc/os-release ] && awk -F= '/^NAME/{print $2}' /etc/os-release) - # Useful for Andoird release builds TMP_BUILD_NUMBER := $(shell ./scripts/version/gen_build_no.sh | cut -c1-10) @@ -57,7 +53,6 @@ TMP_BUILD_NUMBER := $(shell ./scripts/version/gen_build_no.sh | cut -c1-10) UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) export NIX_IGNORE_SYMLINK_STORE=1 -export _NIX_ROOT = /opt/nix endif #---------------- @@ -78,19 +73,17 @@ else @echo "${YELLOW}Nix shell is already active$(RESET)" endif +nix-gc: export TARGET := default nix-gc: ##@nix Garbage collect all packages older than 20 days from /nix/store nix-collect-garbage --delete-old --delete-older-than 20d +nix-clean: export TARGET := default nix-clean: ##@nix Remove all status-react build artifacts from /nix/store nix/scripts/clean.sh nix-purge: SHELL := /bin/sh -nix-purge: ##@nix Completely remove the complete Nix setup -ifeq ($(OS_NAME), NixOS) - $(error $(RED)You should not purge Nix files on NixOS!$(RESET)) -else - sudo rm -rf $(_NIX_ROOT)/* ~/.nix-profile ~/.nix-defexpr ~/.nix-channels ~/.cache/nix ~/.status .nix-gcroots -endif +nix-purge: ##@nix Completely remove Nix setup, including /nix directory + nix/scripts/purge.sh nix-add-gcroots: export TARGET := default nix-add-gcroots: ##@nix Add Nix GC roots to avoid status-react expressions being garbage collected diff --git a/nix/scripts/purge.sh b/nix/scripts/purge.sh new file mode 100755 index 0000000000..a4f62494d3 --- /dev/null +++ b/nix/scripts/purge.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -e + +GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel) +source "${GIT_ROOT}/scripts/colors.sh" + +# Purging /nix on NixOS would be disasterous +if [[ -f "/etc/os-release" ]]; then + OS_NAME=$(awk -F= '/^NAME/{print $2}' /etc/os-release) + if [[ "$OS_NAME" == "NixOS" ]]; then + echo -e "${RED}You should not purge Nix files on NixOS!${RST}" >&2 + exit + fi +fi + +NIX_ROOT="/nix" +if [[ $(uname -s) == "Darwin" ]]; then + # Special case due to read-only root on MacOS Catalina + NIX_ROOT="/opt/nix" +fi + +sudo rm -rf ${NIX_ROOT}/* ~/.nix-profile ~/.nix-defexpr ~/.nix-channels ~/.cache/nix ~/.status .nix-gcroots +echo -e "${GRN}Purged all Nix files from your system.${RST}" >&2 diff --git a/nix/scripts/setup.sh b/nix/scripts/setup.sh index 412e42ae9c..d13b08b327 100755 --- a/nix/scripts/setup.sh +++ b/nix/scripts/setup.sh @@ -15,14 +15,14 @@ function install_nix() { if [ $? -eq 0 ]; then echo -e "${GRN}The Nix package manager was successfully installed.${RST}" else - echo -e "${RED}Failed to install Nix package manager!${RST}" > /dev/stderr - echo "Please see: https://nixos.org/nix/manual/#chap-installation" > /dev/stderr + echo -e "${RED}Failed to install Nix package manager!${RST}" >&2 + echo "Please see: https://nixos.org/nix/manual/#chap-installation" >&2 exit 1 fi } if [[ ! -x "$(command -v git)" ]]; then - echo -e "${RED}The 'curl' utility is required for Nix installation.${RST}" > /dev/stderr + echo -e "${RED}The 'curl' utility is required for Nix installation.${RST}" >&2 exit 1 fi