summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/install.yaml17
-rw-r--r--README.md16
-rw-r--r--[-rwxr-xr-x]utils/bin/lvim5
-rwxr-xr-xutils/installer/install.sh456
4 files changed, 261 insertions, 233 deletions
diff --git a/.github/workflows/install.yaml b/.github/workflows/install.yaml
index 6fb0d49c..f7d9da01 100644
--- a/.github/workflows/install.yaml
+++ b/.github/workflows/install.yaml
@@ -1,11 +1,11 @@
name: install
on:
push:
- branches: '**'
+ branches: "**"
pull_request:
branches:
- - 'master'
- - 'rolling'
+ - "master"
+ - "rolling"
jobs:
unixish:
@@ -38,14 +38,15 @@ jobs:
- name: Install LunarVim
timeout-minutes: 4
run: |
- bash ./utils/installer/install.sh --testing
+ mkdir -p "$HOME/.local/share/lunarvim"
+ mkdir -p "$HOME/.config/lvim"
+ bash ./utils/installer/install.sh
- name: Test LunarVim PackerCompile
- run: if lvim --headless +PackerCompile -c ':qall' 2>&1|grep -q 'Error'; then false; fi
+ run: if "$HOME"/.local/bin/lvim --headless +PackerCompile -c ':qall' 2>&1|grep -q 'Error'; then false; fi
- name: Test LunarVim Health
- run: if lvim --headless +checkhealth -c ':qall' 2>&1|grep -q 'Error'; then false; fi
-
+ run: if "$HOME"/.local/bin/lvim --headless +checkhealth -c ':qall' 2>&1|grep -q 'Error'; then false; fi
# freebsd:
# runs-on: macos-latest
# if: github.event.pull_request.draft == false
@@ -53,7 +54,7 @@ jobs:
# name: "FreeBSD macos-latest"
# steps:
# - uses: actions/checkout@v2
-
+
# - name: Install dependencies for FreeBSD
# uses: vmactions/[email protected]
# with:
diff --git a/README.md b/README.md
index c140c35d..7f2f742d 100644
--- a/README.md
+++ b/README.md
@@ -28,10 +28,20 @@ Make sure you have the newest version of Neovim (0.5).
bash <(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/master/utils/installer/install.sh)
```
-### Installing
-The following command installs LunarVim. Change `LVBRANCH` to the branch you'd like to install. `master` for the stable branch and `rolling` for the latest changes.
+### Customizing the installation
+
+The following options are supported by setting environment variables:
+- `"$LV_REMOTE"` Select a different LunarVim remote [default: 'lunarvim/lunarvim.git']
+- `"$LV_BRANCH"` Select LunarVim's branch [default: 'rolling']
+- `"$INSTALL_PREFIX"` Select LunarVim's install prefix [default: `'$HOME/.local'`]
+- `"$LUNARVIM_RUNTIME_DIR"` Select LunarVim's runtime directory [default: `'$HOME/.local/share/lunarvim'`]
+- `"$LUNARVIM_CONFIG_DIR"` Select LunarVim's configuration directory [default: `'$HOME/.config/lvim'`]
+
+Putting it all together
+
``` bash
-LVBRANCH=rolling bash <(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/rolling/utils/installer/install.sh)
+curl -LSs https://raw.githubusercontent.com/lunarvim/lunarvim/rolling/utils/installer/install.sh -O install.sh
+INSTALL_PREFIX=/tmp/t1 LUNARVIM_CONFIG_DIR=/tmp/t2 LUNARVIM_RUNTIME_DIR=/tmp/t3 bash ./install.sh
```
### BREAKING CHANGE on rolling and master branches
diff --git a/utils/bin/lvim b/utils/bin/lvim
index c55ddda7..2303be3c 100755..100644
--- a/utils/bin/lvim
+++ b/utils/bin/lvim
@@ -1,5 +1,6 @@
#!/bin/sh
-LUNARVIM_RUNTIME_DIR=${LUNARVIM_RUNTIME_DIR:-"$HOME/.local/share/lunarvim"}
+export LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-$HOME/.local/share/lunarvim}"
+export LUNARVIM_CONFIG_DIR="${LUNARVIM_RUNTIME_DIR:-$HOME/.config/lvim}"
-exec nvim -u "$LUNARVIM_RUNTIME_DIR"/lvim/init.lua "$@"
+exec nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" "$@"
diff --git a/utils/installer/install.sh b/utils/installer/install.sh
index 98040344..989f5595 100755
--- a/utils/installer/install.sh
+++ b/utils/installer/install.sh
@@ -1,272 +1,288 @@
-#!/bin/sh
-#Set Variable to master is not set differently
-LVBRANCH="${LVBRANCH:-master}"
-USER_BIN_DIR="/usr/local/bin"
-set -o nounset # error when referencing undefined variable
-set -o errexit # exit when command fails
-
-installnodemac() {
- brew install lua
- brew install node
- brew install yarn
-}
+#!/usr/bin/env bash
+set -eo pipefail
-installnodeubuntu() {
- sudo apt install nodejs
- sudo apt install npm
-}
+#Set branch to master unless specified by the user
+declare -r LV_BRANCH="${LV_BRANCH:-rolling}"
+declare -r LV_REMOTE="${LV_REMOTE:-lunarvim/lunarvim.git}"
+declare -r INSTALL_PREFIX="${INSTALL_PREFIX:-"$HOME/.local"}"
-installnodetermux() {
- apt install nodejs
-}
+declare -r XDG_DATA_HOME="${XDG_DATA_HOME:-"$HOME/.local/share"}"
+declare -r XDG_CACHE_HOME="${XDG_CACHE_HOME:-"$HOME/.cache"}"
+declare -r XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-"$HOME/.config"}"
-moveoldlvim() {
- echo "Not installing LunarVim"
- echo "Please move your ~/.local/share/lunarvim folder before installing"
- exit
-}
+# TODO: Use a dedicated cache directory #1256
+declare -r NEOVIM_CACHE_DIR="$XDG_CACHE_HOME/nvim"
-installnodearch() {
- sudo pacman -S nodejs
- sudo pacman -S npm
-}
+declare -r LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-"$XDG_DATA_HOME/lunarvim"}"
+declare -r LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-"$XDG_CONFIG_HOME/lvim"}"
-installnodefedora() {
- sudo dnf install -y nodejs
- sudo dnf install -y npm
-}
+declare -a __lvim_dirs=(
+ "$LUNARVIM_CONFIG_DIR"
+ "$LUNARVIM_RUNTIME_DIR"
+ "$NEOVIM_CACHE_DIR" # for now this is shared with neovim
+)
-installnodegentoo() {
- echo "Printing current node status..."
- emerge -pqv net-libs/nodejs
- echo "Make sure the npm USE flag is enabled for net-libs/nodejs"
- echo "If it isn't enabled, would you like to enable it with flaggie? (Y/N)"
- read -r answer
- [ "$answer" != "${answer#[Yy]}" ] && sudo flaggie net-libs/nodejs +npm
- sudo emerge -avnN net-libs/nodejs
-}
+declare -a __npm_deps=(
+ "neovim"
+ "tree-sitter-cli"
+)
-installnode() {
- echo "Installing node..."
- [ "$(uname)" = "Darwin" ] && installnodemac
- grep -q Ubuntu /etc/os-release && installnodeubuntu
- [ -f "/etc/arch-release" ] && installnodearch
- [ -f "/etc/artix-release" ] && installnodearch
- [ -f "/etc/fedora-release" ] && installnodefedora
- [ -f "/etc/gentoo-release" ] && installnodegentoo
- [ -d "/data/data/com.termux" ] && installnodetermux
- [ "$(uname -s | cut -c 1-10)" = "MINGW64_NT" ] && echo "Windows not currently supported"
- sudo npm i -g neovim
-}
+declare -a __pip_deps=(
+ "pynvim"
+)
-installpiponmac() {
- sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
- python3 get-pip.py
- rm get-pip.py
-}
+function main() {
+ cat <<'EOF'
-installpiponubuntu() {
- sudo apt install python3-pip >/dev/null
-}
+ 88\ 88\
+ 88 | \__|
+ 88 |88\ 88\ 888888$\ 888888\ 888888\ 88\ 88\ 88\ 888888\8888\
+ 88 |88 | 88 |88 __88\ \____88\ 88 __88\\88\ 88 |88 |88 _88 _88\
+ 88 |88 | 88 |88 | 88 | 888888$ |88 | \__|\88\88 / 88 |88 / 88 / 88 |
+ 88 |88 | 88 |88 | 88 |88 __88 |88 | \88$ / 88 |88 | 88 | 88 |
+ 88 |\888888 |88 | 88 |\888888$ |88 | \$ / 88 |88 | 88 | 88 |
+ \__| \______/ \__| \__| \_______|\__| \_/ \__|\__| \__| \__|
-installpipontermux() {
- apt install python
-}
+EOF
-installpiponarch() {
- sudo pacman -S python-pip
-}
+ __add_separator "80"
-installpiponfedora() {
- sudo dnf install -y pip >/dev/null
-}
+ echo "Detecting platform for managing any additional neovim dependencies"
+ detect_platform
-installpipongentoo() {
- sudo emerge -avn dev-python/pip
-}
+ # skip this in a Github workflow
+ if [ -z "$GITHUB_ACTIONS" ]; then
+ check_system_deps
-installpip() {
- echo "Installing pip..."
- [ "$(uname)" = "Darwin" ] && installpiponmac
- grep -q Ubuntu /etc/os-release && installpiponubuntu
- [ -f "/etc/arch-release" ] && installpiponarch
- [ -f "/etc/fedora-release" ] && installpiponfedora
- [ -f "/etc/gentoo-release" ] && installpipongentoo
- [ -d "/data/data/com.termux" ] && installpipontermux
- [ "$(uname -s | cut -c 1-10)" = "MINGW64_NT" ] && echo "Windows not currently supported"
-}
+ __add_separator "80"
+
+ echo "Would you like to check lunarvim's NodeJS dependencies?"
+ read -p "[y]es or [n]o (default: no) : " -r answer
+ [ "$answer" != "${answer#[Yy]}" ] && install_nodejs_deps
+
+ echo "Would you like to check lunarvim's Python dependencies?"
+ read -p "[y]es or [n]o (default: no) : " -r answer
+ [ "$answer" != "${answer#[Yy]}" ] && install_python_deps
+
+ echo "Would you like to check lunarvim's Rust dependencies?"
+ read -p "[y]es or [n]o (default: no) : " -r answer
+ [ "$answer" != "${answer#[Yy]}" ] && install_rust_deps
-installpynvim() {
- echo "Installing pynvim..."
- if [ -f "/etc/gentoo-release" ]; then
- echo "Installing using Portage"
- sudo emerge -avn dev-python/pynvim
+ __add_separator "80"
+
+ echo "Backing up old LunarVim configuration"
+ backup_old_config
+
+ __add_separator "80"
+
+ fi
+
+ case "$@" in
+ *--overwrite*)
+ echo "!!Warning!! -> Removing all lunarvim related config \
+ because of the --overwrite flag"
+ read -p "Would you like to continue? [y]es or [n]o : " -r answer
+ [ "$answer" == "${answer#[Yy]}" ] && exit 1
+ for dir in "${__lvim_dirs[@]}"; do
+ [ -d "$dir" ] && rm -rf "$dir"
+ done
+ ;;
+ esac
+
+ if [ -e "$LUNARVIM_RUNTIME_DIR/site/pack/packer/start/packer.nvim" ]; then
+ echo "Packer already installed"
else
- pip3 install pynvim --user
+ install_packer
fi
-}
-installpacker() {
- git clone https://github.com/wbthomason/packer.nvim ~/.local/share/lunarvim/site/pack/packer/start/packer.nvim
-}
+ __add_separator "80"
-cloneconfig() {
- if [ -d "/data/data/com.termux" ]; then
- sudo() {
- eval "$@"
- }
- USER_BIN_DIR="$HOME/../usr/bin"
+ if [ -e "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" ]; then
+ echo "Updating LunarVim"
+ update_lvim
+ else
+ clone_lvim
+ setup_lvim
fi
- echo "Cloning LunarVim configuration"
- mkdir -p ~/.local/share/lunarvim
- case "$@" in
- *--testing*)
- cp -r "$(pwd)" ~/.local/share/lunarvim/lvim
+ __add_separator "80"
+
+}
+
+function detect_platform() {
+ OS="$(uname -s)"
+ case "$OS" in
+ Linux)
+ if [ -f "/etc/arch-release" ] || [ -f "/etc/artix-release" ]; then
+ RECOMMEND_INSTALL="sudo pacman -S"
+ elif [ -f "/etc/fedora-release" ] || [ -f "/etc/redhat-release" ]; then
+ RECOMMEND_INSTALL="sudo dnf install -y"
+ elif [ -f "/etc/gentoo-release" ]; then
+ RECOMMEND_INSTALL="emerge install -y"
+ else # assume debian based
+ RECOMMEND_INSTALL="sudo apt install -y"
+ fi
+ ;;
+ Darwin)
+ RECOMMEND_INSTALL="brew install"
;;
*)
- git clone --branch "$LVBRANCH" https://github.com/lunarvim/lunarvim.git ~/.local/share/lunarvim/lvim
+ echo "OS $OS is not currently supported."
+ exit 1
;;
esac
- mkdir -p "$HOME/.config/lvim"
- sudo cp "$HOME/.local/share/lunarvim/lvim/utils/bin/lvim" "$USER_BIN_DIR"
- sudo chmod a+rx "$USER_BIN_DIR"/lvim
- cp "$HOME/.local/share/lunarvim/lvim/utils/installer/config.example-no-ts.lua" "$HOME/.config/lvim/config.lua"
-
- nvim -u ~/.local/share/lunarvim/lvim/init.lua --cmd "set runtimepath+=~/.local/share/lunarvim/lvim" --headless \
- +'autocmd User PackerComplete sleep 100m | qall' \
- +PackerInstall
-
- nvim -u ~/.local/share/lunarvim/lvim/init.lua --cmd "set runtimepath+=~/.local/share/lunarvim/lvim" --headless \
- +'autocmd User PackerComplete sleep 100m | qall' \
- +PackerSync
+}
- printf "\nCompile Complete\n"
+function print_missing_dep_msg() {
+ echo "[ERROR]: Unable to find dependency [$1]"
+ echo "Please install it first and re-run the installer. Try: $RECOMMEND_INSTALL $1"
+}
- if [ -e "$HOME/.local/share/lunarvim/lvim/init.lua" ]; then
- echo 'config.lua already present'
- else
- cp "$HOME/.local/share/lunarvim/lvim/utils/installer/config.example.lua" "$HOME/.config/lvim/config.lua"
+function check_dep() {
+ if ! command -v "$1" &>/dev/null; then
+ print_missing_dep_msg "$1"
+ exit 1
fi
-
}
-asktoinstallnode() {
- echo "node not found"
- printf "Would you like to install node now (y/n)? "
- read -r answer
- [ "$answer" != "${answer#[Yy]}" ] && installnode
+function check_system_deps() {
+ if ! command -v git &>/dev/null; then
+ print_missing_dep_msg "git"
+ exit 1
+ fi
+ if ! command -v nvim &>/dev/null; then
+ print_missing_dep_msg "neovim"
+ exit 1
+ fi
}
-asktoinstallgit() {
- echo "git not found, please install git"
- exit
+function install_nodejs_deps() {
+ check_dep "npm"
+ echo "Installing node modules with npm.."
+ for dep in "${__npm_deps[@]}"; do
+ if ! npm ls -g "$dep" &>/dev/null; then
+ printf "installing %s .." "$dep"
+ npm install -g "$dep"
+ fi
+ done
+ echo "All NodeJS dependencies are succesfully installed"
}
-asktoinstallpip() {
- # echo "pip not found"
- # echo -n "Would you like to install pip now (y/n)? "
- # read answer
- # [ "$answer" != "${answer#[Yy]}" ] && installpip
- echo "Please install pip3 before continuing with install"
- exit
+function install_python_deps() {
+ echo "Verifying that pip is available.."
+ if ! python3 -m ensurepip &>/dev/null; then
+ print_missing_dep_msg "pip"
+ exit 1
+ fi
+ echo "Installing with pip.."
+ for dep in "${__pip_deps[@]}"; do
+ pip3 install --user "$dep"
+ done
+ echo "All Python dependencies are succesfully installed"
}
-installonmac() {
- brew install ripgrep fzf
- npm install -g tree-sitter-cli
+function __attempt_to_install_with_cargo() {
+ if ! command -v cargo &>/dev/null; then
+ echo "Installing missing Rust dependency with cargo"
+ cargo install "$1"
+ else
+ echo "[WARN]: Unable to find fd. Make sure to install it to avoid any problems"
+ fi
}
-installonubuntu() {
- sudo apt install ripgrep fzf
- sudo apt install libjpeg8-dev zlib1g-dev python-dev python3-dev libxtst-dev
- pip3 install neovim-remote
- npm install -g tree-sitter-cli
+# we try to install the missing one with cargo even though it's unlikely to be found
+function install_rust_deps() {
+ if ! command -v fd &>/dev/null; then
+ __attempt_to_install_with_cargo "fd-find"
+ fi
+ if ! command -v rg &>/dev/null; then
+ __attempt_to_install_with_cargo "ripgrep"
+ fi
+ echo "All Rust dependencies are succesfully installed"
}
-installtermux() {
- apt install ripgrep fzf
- pip install neovim-remote
- npm install -g tree-sitter-cli
+function backup_old_config() {
+ for dir in "${__lvim_dirs[@]}"; do
+ # we create an empty folder for subsequent commands \
+ # that require an existing directory
+ mkdir -p "$dir" "$dir.bak"
+ if command -v rsync &>/dev/null; then
+ rsync --archive -hh --partial --info=stats1 --info=progress2 \
+ --modify-window=1 "$dir" "$dir.bak"
+ else
+ cp -R "$dir/*" "$dir.bak/."
+ fi
+ done
+ echo "Backup operation complete"
}
-installonarch() {
- sudo pacman -S ripgrep fzf
- pip3 install neovim-remote
- npm install -g tree-sitter-cli
+function install_packer() {
+ git clone --progress --depth 1 https://github.com/wbthomason/packer.nvim \
+ "$LUNARVIM_RUNTIME_DIR/site/pack/packer/start/packer.nvim"
}
-installonfedora() {
- sudo dnf groupinstall "X Software Development"
- sudo dnf install -y fzf ripgrep
+function clone_lvim() {
+ echo "Cloning LunarVim configuration"
+ if ! git clone --progress --branch "$LV_BRANCH" \
+ --depth 1 "https://github.com/${LV_REMOTE}" "$LUNARVIM_RUNTIME_DIR/lvim"; then
+ echo "Failed to clone repository. Installation failed."
+ exit 1
+ fi
}
-installongentoo() {
- sudo emerge -avn sys-apps/ripgrep app-shells/fzf dev-python/neovim-remote virtual/jpeg sys-libs/zlib
- npm install -g tree-sitter-cli
+function setup_shim() {
+ if [ ! -d "$INSTALL_PREFIX/bin" ]; then
+ mkdir -p "$INSTALL_PREFIX/bin"
+ fi
+ cat >"$INSTALL_PREFIX/bin/lvim" <<EOF
+#!/bin/sh
+
+export LUNARVIM_CONFIG_DIR="\${LUNARVIM_CONFIG_DIR:-$LUNARVIM_CONFIG_DIR}"
+export LUNARVIM_RUNTIME_DIR="\${LUNARVIM_RUNTIME_DIR:-$LUNARVIM_RUNTIME_DIR}"
+
+exec nvim -u "\$LUNARVIM_RUNTIME_DIR/lvim/init.lua" "\$@"
+EOF
+ chmod +x "$INSTALL_PREFIX/bin/lvim"
}
-installextrapackages() {
- [ "$(uname)" = "Darwin" ] && installonmac
- grep -q Ubuntu /etc/os-release && installonubuntu
- [ -f "/etc/arch-release" ] && installonarch
- [ -f "/etc/artix-release" ] && installonarch
- [ -f "/etc/fedora-release" ] && installonfedora
- [ -f "/etc/gentoo-release" ] && installongentoo
- [ -d "/data/data/com.termux" ] && installtermux
- [ "$(uname -s | cut -c 1-10)" = "MINGW64_NT" ] && echo "Windows not currently supported"
+function setup_lvim() {
+ echo "Installing LunarVim shim"
+
+ setup_shim
+
+ echo "Preparing Packer setup"
+
+ cp "$LUNARVIM_RUNTIME_DIR/lvim/utils/installer/config.example-no-ts.lua" \
+ "$LUNARVIM_CONFIG_DIR/config.lua"
+
+ nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" --headless \
+ +'autocmd User PackerComplete sleep 100m | qall' \
+ +PackerInstall
+
+ nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" --headless \
+ +'autocmd User PackerComplete sleep 100m | qall' \
+ +PackerSync
+
+ echo "Packer setup complete"
+
+ cp "$LUNARVIM_RUNTIME_DIR/lvim/utils/installer/config.example.lua" "$LUNARVIM_CONFIG_DIR/config.lua"
+
+ echo "Thank you for installing LunarVim!!"
+ echo "You can start it by running: $INSTALL_PREFIX/bin/lvim"
+ echo "Do not forget to use a font with glyphs (icons) support [https://github.com/ryanoasis/nerd-fonts]"
}
-# Welcome
-echo 'Installing LunarVim'
-
-case "$@" in
- *--overwrite*)
- echo '!!Warning!! -> Removing all lunarvim related config because of the --overwrite flag'
- rm -rf "$HOME/.local/share/lunarvim"
- rm -rf "$HOME/.cache/nvim"
- rm -rf "$HOME/.config/lvim"
- ;;
-esac
-
-# move old lvim directory if it exists
-[ -d "$HOME/.local/share/lunarvim" ] && moveoldlvim
-
-# install node and neovim support
-(command -v git >/dev/null && echo "git installed, moving on...") || asktoinstallgit
-
-# install pip
-(command -v pip3 >/dev/null && echo "pip installed, moving on...") || asktoinstallpip
-
-# install node and neovim support
-(command -v node >/dev/null && echo "node installed, moving on...") || asktoinstallnode
-
-# install pynvim
-(pip3 list | grep pynvim >/dev/null && echo "pynvim installed, moving on...") || installpynvim
-
-if [ -e "$HOME/.local/share/lunarvim/site/pack/packer/start/packer.nvim" ]; then
- echo 'packer already installed'
-else
- installpacker
-fi
-
-if [ -e "$HOME/.local/share/lunarvim/lvim/init.lua" ]; then
- echo 'LunarVim already installed'
-else
- # clone config down
- cloneconfig "$@"
- # echo 'export PATH=$HOME/.config/nvim/utils/bin:$PATH' >>~/.zshrc
- # echo 'export PATH=$HOME/.config/lunarvim/utils/bin:$PATH' >>~/.bashrc
-fi
-
-if [ "$(uname)" != "Darwin" ]; then
- if [ -e "$HOME/.local/share/applications/lvim.desktop" ]; then
- echo 'Desktop file already available'
- else
- mkdir -p "$HOME/.local/share/applications"
- cp "$HOME/.local/share/lunarvim/lvim/utils/desktop/lvim.desktop" "$HOME/.local/share/applications/lvim.desktop"
+function update_lvim() {
+ if ! git -C "$LUNARVIM_RUNTIME_DIR/lvim" status -uno &>/dev/null; then
+ git -C "$LUNARVIM_RUNTIME_DIR/lvim" pull --ff-only --progress ||
+ echo "Unable to guarantee data integrity while updating. Please do that manually instead." && exit 1
fi
-fi
+ echo "Your LunarVim installation is now up to date!"
+}
+
+function __add_separator() {
+ local DIV_WIDTH="$1"
+ printf "%${DIV_WIDTH}s\n" ' ' | tr ' ' -
+}
-echo "I recommend you also install and activate a font from here: https://github.com/ryanoasis/nerd-fonts"
-# echo 'export PATH=/home/$USER/.config/lunarvim/utils/bin:$PATH appending to zshrc/bashrc'
+main "$@"