mirror of
https://github.com/ViViDboarder/vim-settings.git
synced 2024-09-19 21:47:09 +00:00
60819a7dff
maybe_run only checks the first arugment, which for go modules would have been `env`. Since `env` exists, it would always attempt to do the `go install` command, regardless of whether or not go exists. This patch moves the env to an exported variable rather than being passed inline.
250 lines
6.6 KiB
Bash
Executable File
250 lines
6.6 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
# Clear explicit PYTHONPATH since this gets confused between py2 and py3
|
|
export PYTHONPATH=""
|
|
|
|
# Languages to install helpers for
|
|
declare -a VIM_LANGS
|
|
|
|
# Read flag for ignore missing and args for languages
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--ignore-missing)
|
|
VIM_IGNORE_MISSING=true
|
|
;;
|
|
*)
|
|
VIM_LANGS+=("$1")
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
function want_lang() {
|
|
if [ "${#VIM_LANGS[@]}" -eq 0 ]; then
|
|
return 0
|
|
fi
|
|
|
|
for l in "${VIM_LANGS[@]}"; do
|
|
if [ "$l" == "$1" ]; then
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
# Ignore failed installs
|
|
if [ -z "$VIM_IGNORE_MISSING" ]; then
|
|
set -e
|
|
else
|
|
set +e
|
|
fi
|
|
|
|
# Determines if a command exists or not
|
|
function command_exist() {
|
|
command -v "$1" > /dev/null 2>&1;
|
|
}
|
|
|
|
# Runs a command or spits out the output
|
|
function maybe_run() {
|
|
if command_exist "$1" ;then
|
|
echo "> $*"
|
|
# shellcheck disable=2048,2086
|
|
eval $*
|
|
else
|
|
echo "ERROR: $1 does not exist. Could not run $*"
|
|
fi
|
|
}
|
|
|
|
# Runs the "right" pip for installing
|
|
function maybe_pip_install() {
|
|
if command_exist pipx ;then
|
|
# Prefer pipx to keep environments isolated
|
|
pipx upgrade "$@"
|
|
else
|
|
if command_exist pip3 ;then
|
|
# If pip3 is there, use it to ensure we're using pytho3
|
|
pip3 install --user --upgrade "$@"
|
|
else
|
|
# Use pip and hope for the best
|
|
pip install --user --upgrade "$@"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
## Language servers
|
|
function install_language_servers() {
|
|
echo "### Installing language servers..."
|
|
|
|
# bash
|
|
if want_lang bash ;then
|
|
maybe_run npm install -g bash-language-server
|
|
fi
|
|
|
|
# Kotlin
|
|
# https://github.com/fwcd/kotlin-language-server/blob/master/BUILDING.md
|
|
|
|
# Python
|
|
if want_lang python ;then
|
|
maybe_run npm install -g pyright
|
|
fi
|
|
|
|
# Rust
|
|
if want_lang rust ;then
|
|
maybe_run rustup component add rustfmt rust-analysis rust-src clippy rust-analyzer
|
|
if ! command_exists rustup ;then
|
|
maybe_run release-gitter --git-url "https://github.com/rust-lang/rust-analyzer" \
|
|
--map-system Windows=pc-windows-msvc --map-system Linux=unknown-linux-gnu --map-system Darwin=apple-darwin \
|
|
--exec "'F={}; gzip -d /tmp/\$F && mv /tmp/\$(echo \$F|sed s/\.gz\$//) ~/bin/rust-analyzer && chmod +x ~/bin/rust-analyzer'" \
|
|
"rust-analyzer-{arch}-{system}.gz" /tmp/
|
|
fi
|
|
fi
|
|
|
|
# Go
|
|
if want_lang go ;then
|
|
export GO111MODULE=on
|
|
maybe_run go install golang.org/x/tools/gopls@latest
|
|
fi
|
|
|
|
echo ""
|
|
}
|
|
|
|
## Linters
|
|
function install_linters() {
|
|
echo "### Installing linters..."
|
|
|
|
# Python
|
|
if want_lang python ;then
|
|
maybe_pip_install mypy || echo "WARNING: mypy is py3 only"
|
|
fi
|
|
|
|
# CSS
|
|
if want_lang css || want_lang web ;then
|
|
maybe_run npm install -g csslint
|
|
fi
|
|
|
|
# Vim
|
|
if want_lang vim || want_lang neovim ;then
|
|
maybe_pip_install vim-vint
|
|
fi
|
|
|
|
# YAML
|
|
if want_lang yaml ;then
|
|
maybe_pip_install yamllint
|
|
fi
|
|
|
|
# Text / Markdown
|
|
if want_lang text || want_lang prose ;then
|
|
maybe_run npm install -g alex write-good
|
|
maybe_pip_install proselint
|
|
fi
|
|
|
|
# Makefile
|
|
# maybe_run go install github.com/mrtazz/checkmake@latest
|
|
|
|
# Go
|
|
if want_lang go ;then
|
|
maybe_run release-gitter --git-url "https://github.com/golangci/golangci-lint" \
|
|
--map-system Windows=windows --map-system Linux=linux --map-system Darwin=darwin \
|
|
--map-arch x86_64=amd64 --map-arch armv7l=armv7 --map-arch aarch64=arm64 \
|
|
--extract-all --exec "'mv /tmp/\$(echo {}|sed s/\.tar\.gz\$//)/golangci-lint ~/bin/'" \
|
|
"golangci-lint-{version}-{system}-{arch}.tar.gz" /tmp/
|
|
fi
|
|
|
|
# Lua
|
|
if want_lang lua || want_lang neovim ;then
|
|
maybe_run luarocks --local install luafilesystem
|
|
# Version pinned to version in pre-commit
|
|
maybe_run luarocks --local install luacheck 1.1.0
|
|
fi
|
|
|
|
# Docker
|
|
if want_lang docker ;then
|
|
hadolint_arm64=arm64
|
|
if [ "$(uname -s)" == "Darwin" ]; then
|
|
hadolint_arm64=x86_64
|
|
fi
|
|
maybe_run release-gitter --git-url "https://github.com/hadolint/hadolint" \
|
|
--map-arch aarch64=$hadolint_arm64 \
|
|
--map-arch arm64=$hadolint_arm64 \
|
|
--exec "'mv ~/bin/{} ~/bin/hadolint && chmod +x ~/bin/hadolint'" \
|
|
"hadolint-{system}-{arch}" ~/bin
|
|
fi
|
|
|
|
# Terraform
|
|
if want_lang terraform ;then
|
|
maybe_run release-gitter --git-url "https://github.com/aquasecurity/tfsec" \
|
|
--map-arch x86_64=amd64 \
|
|
--map-arch aarch64=arm64 \
|
|
--map-system Linux=linux --map-system Darwin=darwin \
|
|
--exec "'mv ~/bin/{} ~/bin/tfsec && chmod +x ~/bin/tfsec'" \
|
|
"tfsec-{system}-{arch}" ~/bin
|
|
maybe_run release-gitter --git-url "https://github.com/terraform-linters/tflint" \
|
|
--map-arch x86_64=amd64 \
|
|
--map-arch aarch64=arm64 \
|
|
--map-system Linux=linux --map-system Darwin=darwin \
|
|
--extract-all --exec "'chmod +x ~/bin/tflint'" \
|
|
"tflint_{system}_{arch}.zip" ~/bin
|
|
fi
|
|
|
|
echo ""
|
|
}
|
|
|
|
## Fixers
|
|
function install_fixers() {
|
|
echo "### Installing fixers..."
|
|
|
|
# CSS/JS/HTML/JSON/YAML/Markdown/and more!
|
|
if want_lang javascript || want_lang html || want_lang css || want_lang web || want_lang json ;then
|
|
maybe_run npm install -g prettier
|
|
fi
|
|
|
|
# Python
|
|
if want_lang python ;then
|
|
maybe_pip_install black autopep8 reorder-python-imports
|
|
fi
|
|
|
|
# Rust
|
|
if want_lang rust ;then
|
|
maybe_run rustup component add rustfmt
|
|
fi
|
|
|
|
# Lua
|
|
if want_lang lua || want_lang neovim ;then
|
|
# Version pinned to version in pre-commit
|
|
local stylua_version=0.17.1
|
|
if ! release-gitter --git-url "https://github.com/JohnnyMorganz/StyLua" \
|
|
--version "v$stylua_version" \
|
|
--map-arch arm64=aarch64 \
|
|
--map-system Windows=windows --map-system Linux=linux --map-system Darwin=macos \
|
|
--extract-all --exec "chmod +x ~/bin/stylua" \
|
|
"stylua-{system}-{arch}.zip" ~/bin ; then
|
|
maybe_run cargo install --version "$stylua_version" stylua
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
}
|
|
|
|
## Debuggers
|
|
function install_debuggers() {
|
|
# Python
|
|
if want_lang python ;then
|
|
maybe_pip_install debugpy
|
|
fi
|
|
}
|
|
|
|
function main() {
|
|
maybe_pip_install release-gitter
|
|
|
|
install_language_servers
|
|
install_linters
|
|
install_fixers
|
|
install_debuggers
|
|
|
|
echo ""
|
|
echo "DONE"
|
|
}
|
|
|
|
main
|