diff --git a/.gitignore b/.gitignore index d51dd5b..9e22bf3 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,5 @@ Temporary Items ### Custom ### # this file is autogenerated -.config/fish/completions/docker.fish +.config/fish/completions/* +!.config/fish/completions/aws.fish diff --git a/scripts/install-fnm.sh b/scripts/install-fnm.sh new file mode 100755 index 0000000..02f6f5d --- /dev/null +++ b/scripts/install-fnm.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# exit immediately if a pipeline exits with a non-zero status +set -Eeuxo pipefail + +# Install FNM (https://github.com/Schniz/fnm) +curl -fsSL https://fnm.vercel.app/install | bash -s -- --force-no-brew --install-dir "$HOME/.fnm" --skip-shell + +# Setup Fish shell for FNM +mkdir -p ~/.config/fish/conf.d +cat << 'EOF' > "$HOME/.config/fish/conf.d/fnm.fish" +fish_add_path "$HOME/.fnm" +fnm env --use-on-cd --version-file-strategy=recursive --resolve-engines --shell fish | source +EOF + +# Setup Fish FNM completions +fnm completions --shell=fish > ~/.config/fish/completions/fnm.fish + +# Install latest Node.js version +fnm install --latest diff --git a/scripts/install-nodejs.sh b/scripts/install-nodejs.sh deleted file mode 100755 index 8af8d9b..0000000 --- a/scripts/install-nodejs.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# exit immediately if a pipeline exits with a non-zero status -set -Eeuxo pipefail - -if command -v node &> /dev/null; then - echo "Node.js is already installed" - exit 0 -fi - -LATEST_NODEJS_VERSION=$(curl "https://nodejs.org/dist/latest/" --fail --compressed --location --silent | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p') -PKG_DOWNLOAD_URL="https://nodejs.org/dist/latest/node-$LATEST_NODEJS_VERSION.pkg" -PKG_OUTPUT_PATH="./node-latest.pkg" -NPM_GLOBAL_PACKAGE_DIR_PATH="$HOME/.npm-packages/bin" - -echo "Installing Node.js $LATEST_NODEJS_VERSION" - -curl "$PKG_DOWNLOAD_URL" \ - --output $PKG_OUTPUT_PATH \ - --fail \ - --compressed \ - --location - -sudo installer -store -pkg $PKG_OUTPUT_PATH -target "/" -verbose - -rm -f $PKG_OUTPUT_PATH - -# create NPM global package directory if it does not exist -mkdir -p -v "$NPM_GLOBAL_PACKAGE_DIR_PATH" diff --git a/setup b/setup index 116e01d..0a9900f 100755 --- a/setup +++ b/setup @@ -39,38 +39,38 @@ if [[ $ARCH == "arm64" ]]; then softwareupdate --install-rosetta --agree-to-license --verbose fi -# install Fish shell +# Install Fish shell "$SCRIPT_DIR/scripts/install-fish.sh" -# install Starship prompt +# Install Starship prompt "$SCRIPT_DIR/scripts/install-starship.sh" -# install Node.js -"$SCRIPT_DIR/scripts/install-nodejs.sh" +# Install FNM (Fast Node Manager) +"$SCRIPT_DIR/scripts/install-fnm.sh" -# install fonts +# Install fonts "$SCRIPT_DIR/scripts/install-fonts.sh" -# install Visual Studio Code +# Install Visual Studio Code "$SCRIPT_DIR/scripts/install-vscode.sh" -# create directories if they don't exist +# Create directories if they don't exist mkdir -p -v "$HOME/.config/git" mkdir -p -v "$HOME/.config/fish" mkdir -p -v "$HOME/Library/Application Support/Code/User/snippets" -# create symbolic links to file and directories in the .dotfiles +# Create symbolic links to file and directories in the .dotfiles for LINK in "${LINKING_MAP[@]}"; do SOURCE="${LINK%%:*}" DESTINATION="${LINK##*:}" ln -f -s -v "$SOURCE" "$DESTINATION" done -# install Docker Desktop +# Install Docker Desktop "$SCRIPT_DIR/scripts/install-docker.sh" -# install AWS CLI +# Install AWS CLI "$SCRIPT_DIR/scripts/install-aws-cli.sh" -# install Visual Studio Code extensions +# Install Visual Studio Code extensions "$SCRIPT_DIR/scripts/install-vscode-extensions.sh" diff --git a/test b/test index 662c523..3924787 100755 --- a/test +++ b/test @@ -28,6 +28,9 @@ fish --version whereis starship starship --version +whereis fnm +fnm --version + whereis node node --version