#!/bin/bash # shellcheck disable=2045,2086 ZSHFOLDER=$HOME/.config/zsh CONFIG="$HOME/.config" # Colours RED='\033[0;31m' GREEN='\033[0;0;32m' NC='\033[0m' PIPEXT="--user --force --quiet" PIPEXTPRE="--pre $PIPEXT" if [[ "$(uname -r)" =~ "gentoo" || "$(uname -r)" =~ "WSL2" ]]; then PIPEXT="$PIPEXT --break-system-packages" PIPEXTPRE="$PIPEXTPRE --break-system-packages" fi function timestamp() { echo -e "${GREEN}[+]${NC} $(date +'%F %T') [INFO] $*" } function err() { echo -e "${RED}[-] $(date +'%F %T') [ERROR] $*${NC}" >&2 } function command_start() { timestamp "Command $* has been started." if ! "$*"; then err "Command $* went wrong." exit fi timestamp "Command $* has been ended." } function update_pip() { # Update the pip python3 -m pip install --upgrade pip --user } function install_neovim_module_for_python() { # Python module in neovim pip3 install neovim $PIPEXTPRE } function install_pyright() { # Install pyright sudo npm -s -g i pyright --force } function install_bash-language-server() { # Install bash-language-server sudo npm -s -g i bash-language-server --force } function install_yaml-language-server() { # Install yaml-language-server sudo npm -s -g i yaml-language-server --force } function install_shfmt() { # Install shfmt GO111MODULE=on go install mvdan.cc/sh/v3/cmd/shfmt@latest } function install_lazy() { # Install shfmt GO111MODULE=on go install github.com/jesseduffield/lazygit@latest GO111MODULE=on go install github.com/jesseduffield/lazydocker@latest } function install_terraform() { # Install terraform and terraform-ls GO111MODULE=on go install github.com/hashicorp/terraform-ls@latest if [[ "$(uname)" == "Darwin" ]]; then brew install tflint -q brew install tfenv -q TFENV_ARCH=amd64 tfenv install latest TFENV_VER_ARRAY=($(tfenv list | grep -ioE ' [0-9.]+' | sed -e '1,1d')) if [ "${#TFENV_VER_ARRAY[@]}" -gt "2" ]; then for i in "${TFENV_VER_ARRAY[@]}"; do tfenv uninstall "$i" && timestamp "Removed - terraform '$i' version" done fi else GO111MODULE=on go install github.com/hashicorp/terraform@latest curl -s https://raw.githubusercontent.com/terraform-linters/tflint/master/install_linux.sh | bash fi } function install_terragrunt() { # Install terragrunt if [[ "$(uname)" == "Darwin" ]]; then brew install terragrunt -q else wget https://github.com/gruntwork-io/terragrunt/releases/latest/download/terragrunt_linux_amd64 -O $HOME/.local/bin/terragrunt chmod +x $HOME/.local/bin/terragrunt fi } function install_shellcheck() { # Install shellcheck if [[ "$(uname)" == "Darwin" ]]; then brew install shellcheck -q else curl -s https://raw.githubusercontent.com/terraform-linters/tflint/master/install_linux.sh | bash fi } function install_go() { # Install the golang if [[ "$(uname)" == "Darwin" ]]; then brew install golang -q elif [[ "$(uname -r)" =~ "gentoo" ]]; then sudo emerge dev-lang/go fi } function install_gopls() { # Install gopls GO111MODULE=on go install golang.org/x/tools/gopls@latest } function install_black() { # Install black pip3 install black $PIPEXTPRE } function install_ansible() { # Install Ansible pip3 install ansible ansible-lint ansible-core $PIPEXTPRE pip3 install ansible-parallel $PIPEXTPRE } function install_ansible-language-server() { # Install ansible-language-server sudo npm -s -g i @ansible/ansible-language-server --force sudo npm -s -g i yaml-language-server --force } function install_meraki_ansible() { # Install python, ansible module for meraki ansible-galaxy collection install cisco.meraki --force pip3 install meraki $PIPEXT } function install_azure_cli() { # Install azure_cli pip3 install azure-cli $PIPEXTPRE } function install_awscli() { # Install awscli pip3 install awscli $PIPEXTPRE } function install_ytdlp() { # Install yt-dlp pip3 install yt-dlp $PIPEXTPRE } function install_spotifydl() { # Install spotify_dl pip3 install spotify_dl $PIPEXTPRE } function update() { if [ -d $CONFIG/fzf ]; then FOLDER="$CONFIG/fzf" cd $FOLDER || err "Folder $FOLDER has been NOT found" git pull -q && timestamp "Pulling the $FOLDER configuration" else FOLDER="$CONFIG/fzf" git clone https://github.com/junegunn/fzf.git $FOLDER && timestamp "Cloning the FZF" git pull -q && timestamp "Pulling the $FOLDER configuration" fi if [ ! -d $ZSHFOLDER/aws ]; then curl -s https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/plugins/aws/aws.plugin.zsh \ -o "$ZSHFOLDER"/aws/aws.plugin.zsh && timestamp "Downloaded the newest version of aws plugin for zsh" curl -s https://raw.githubusercontent.com/Azure/azure-cli/dev/az.completion \ -o "$ZSHFOLDER"/azure-cli/az.completion && timestamp "Downloaded the newest version of az plugin for zsh" mkdir -p "$ZSHFOLDER/azure-cli" "$ZSHFOLDER/aws" cd $ZSHFOLDER || err "Folder $ZSHFOLDER has been NOT found" git clone https://github.com/popstas/zsh-command-time.git && timestamp "Cloning the zsh-command-time" git clone https://github.com/zsh-users/zsh-syntax-highlighting.git && timestamp "Cloning the zsh-syntax-highlighting" git clone https://github.com/zsh-users/zsh-autosuggestions.git && timestamp "Cloning the zsh-autosuggestions" fi for i in $(ls $ZSHFOLDER); do FOLDER="$ZSHFOLDER/$i" if [ -d "$FOLDER/.git" ]; then cd "$FOLDER" || err "Folder $FOLDER has been NOT found" git pull -q && timestamp "Pulling the $FOLDER configuration" fi done curl -s https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/plugins/aws/aws.plugin.zsh -o "$ZSHFOLDER"/aws/aws.plugin.zsh && timestamp "Downloaded the newest version of aws plugin for zsh" curl -s https://raw.githubusercontent.com/Azure/azure-cli/dev/az.completion -o "$ZSHFOLDER"/azure-cli/az.completion && timestamp "Downloaded the newest version of az plugin for zsh" } function main() { command_start update_pip command_start install_neovim_module_for_python command_start install_go command_start install_pyright command_start install_lazy command_start install_bash-language-server command_start install_yaml-language-server command_start install_ansible-language-server command_start install_shfmt command_start install_shellcheck command_start install_gopls command_start install_terraform command_start install_terragrunt command_start install_azure_cli command_start install_black command_start install_ansible command_start install_meraki_ansible command_start install_ytdlp command_start install_spotifydl command_start update } main