{{- if (ne .host.distro.family "windows") -}} #!/usr/bin/env bash # @file Node.js / Volta / ZX Install # @brief Ensures Node.js, Volta, and ZX are installed prior to Chezmoi applying the dotfile state. # @description # This script ensures required dependencies are installed. These dependencies include: # # 1. **[Node.js](https://nodejs.org/en)**: JavaScript runtime engine which is installed to ensure any user with Homebrew configured can access Node.js # 2. **[Volta](https://volta.sh/)**: Node.js version manager that provides the capability of automatically using `package.json` defined Node.js versions # 3. **[ZX](https://github.com/google/zx)**: Used for the script that installs the software packages on any OS # # The Volta setup process will ensure that the user is configured to use the latest Node.js version, by default. It then # also ensures the user's `~/.bashrc` and `~/.zshrc` profiles are setup for use with Volta. {{ includeTemplate "universal/profile-before" }} {{ includeTemplate "universal/logg-before" }} export VOLTA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/volta" export PATH="$VOLTA_HOME/bin:$PATH" ### Ensure node is installed if ! command -v node > /dev/null; then if command -v brew; then logg 'Installing node via Homebrew' brew install --quiet node || NODE_EXIT_CODE=$? if [ -n "$NODE_EXIT_CODE" ]; then logg warn 'Calling brew link --overwrite node because the Node.js installation seems to be misconfigured' brew link --overwrite node fi else logg 'brew is unavailable. Cannot use it to perform a system installation of node.' fi else logg 'node is available' fi ### Ensure Volta is installed if ! command -v volta > /dev/null; then if command -v brew > /dev/null; then logg 'Installing volta via brew' brew install --quiet volta else logg warn 'brew needs to be available to install Volta' fi else if ! node --version > /dev/null; then volta install node@latest fi fi ### Setup Volta if command -v volta > /dev/null; then ### Handle scenario where VOLTA_HOME is not defined yet if [ -z "$VOLTA_HOME" ]; then logg warn 'VOLTA_HOME is not defined' logg info 'Running volta setup' volta setup fi ### Source .bashrc if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" else logg info 'Could not find ~/.bashrc to source the results of volta setup from' fi ### Set PATH and install latest Node.js version via Volta export PATH="$VOLTA_HOME/bin:$PATH" logg info 'Installing node via volta' volta install node@latest else logg warn 'volta needs to be installed' fi ### Ensure zx is installed if ! command -v zx > /dev/null; then if command -v volta > /dev/null; then logg 'Installing zx via volta' volta install zx else logg 'volta is missing' fi else logg 'zx is already installed' fi {{ end -}}