1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-23 07:20:04 +08:00
SpaceVim/docs/install.sh

452 lines
13 KiB
Bash
Raw Normal View History

2017-01-04 00:20:25 +08:00
#!/usr/bin/env bash
2017-07-03 21:15:45 +08:00
#=============================================================================
# install.sh --- bootstrap script for SpaceVim
2022-06-12 15:37:35 +08:00
# Copyright (c) 2016-2022 Shidong Wang & Contributors
2022-03-27 13:38:54 +08:00
# Author: Shidong Wang < wsdjeg@outlook.com >
2017-07-03 21:15:45 +08:00
# URL: https://spacevim.org
2018-02-15 22:25:03 +08:00
# License: GPLv3
2017-07-03 21:15:45 +08:00
#=============================================================================
2018-01-27 19:23:47 +08:00
# Init option {{{
2017-01-04 00:20:25 +08:00
Color_off='\033[0m' # Text Reset
2018-01-27 20:02:48 +08:00
# terminal color template {{{
2017-01-04 00:20:25 +08:00
# Regular Colors
2018-01-27 20:02:48 +08:00
Black='\033[0;30m' # Black
Red='\033[0;31m' # Red
Green='\033[0;32m' # Green
Yellow='\033[0;33m' # Yellow
Blue='\033[0;34m' # Blue
Purple='\033[0;35m' # Purple
Cyan='\033[0;36m' # Cyan
White='\033[0;37m' # White
# Bold
BBlack='\033[1;30m' # Black
BRed='\033[1;31m' # Red
BGreen='\033[1;32m' # Green
BYellow='\033[1;33m' # Yellow
BBlue='\033[1;34m' # Blue
BPurple='\033[1;35m' # Purple
BCyan='\033[1;36m' # Cyan
BWhite='\033[1;37m' # White
# Underline
UBlack='\033[4;30m' # Black
URed='\033[4;31m' # Red
UGreen='\033[4;32m' # Green
UYellow='\033[4;33m' # Yellow
UBlue='\033[4;34m' # Blue
UPurple='\033[4;35m' # Purple
UCyan='\033[4;36m' # Cyan
UWhite='\033[4;37m' # White
# Background
On_Black='\033[40m' # Black
On_Red='\033[41m' # Red
On_Green='\033[42m' # Green
On_Yellow='\033[43m' # Yellow
On_Blue='\033[44m' # Blue
On_Purple='\033[45m' # Purple
On_Cyan='\033[46m' # Cyan
On_White='\033[47m' # White
# High Intensity
IBlack='\033[0;90m' # Black
IRed='\033[0;91m' # Red
IGreen='\033[0;92m' # Green
IYellow='\033[0;93m' # Yellow
IBlue='\033[0;94m' # Blue
IPurple='\033[0;95m' # Purple
ICyan='\033[0;96m' # Cyan
IWhite='\033[0;97m' # White
# Bold High Intensity
BIBlack='\033[1;90m' # Black
BIRed='\033[1;91m' # Red
BIGreen='\033[1;92m' # Green
BIYellow='\033[1;93m' # Yellow
BIBlue='\033[1;94m' # Blue
BIPurple='\033[1;95m' # Purple
BICyan='\033[1;96m' # Cyan
BIWhite='\033[1;97m' # White
# High Intensity backgrounds
On_IBlack='\033[0;100m' # Black
On_IRed='\033[0;101m' # Red
On_IGreen='\033[0;102m' # Green
On_IYellow='\033[0;103m' # Yellow
On_IBlue='\033[0;104m' # Blue
On_IPurple='\033[0;105m' # Purple
On_ICyan='\033[0;106m' # Cyan
On_IWhite='\033[0;107m' # White
# }}}
2017-01-04 00:20:25 +08:00
2018-01-27 20:02:48 +08:00
# version
2024-12-23 09:28:48 +08:00
Version='2.5.0-dev'
#System name
System="$(uname -s)"
2018-01-27 19:23:47 +08:00
# }}}
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
XDGSpaceDir="${XDG_CONFIG_HOME:-${HOME}/.}${XDG_CONFIG_HOME:+/}SpaceVim"
XDGvimDir="${XDG_CONFIG_HOME:-${HOME}/.}${XDG_CONFIG_HOME:+/}vim"
2023-06-28 10:27:58 +08:00
XDGnvimDir="${XDG_CONFIG_HOME:-${HOME}/.config/}${XDG_CONFIG_HOME:+/}nvim"
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
2018-01-27 19:23:47 +08:00
# need_cmd {{{
2017-01-04 00:20:25 +08:00
need_cmd () {
2019-09-12 14:11:18 +08:00
if ! hash "$1" &>/dev/null; then
error "Need '$1' (command not found)"
exit 1
fi
2017-01-04 00:20:25 +08:00
}
2018-01-27 19:23:47 +08:00
# }}}
2017-01-04 00:20:25 +08:00
2018-01-27 19:23:47 +08:00
# success/info/error/warn {{{
2017-07-03 21:15:45 +08:00
msg() {
2019-09-12 14:11:18 +08:00
printf '%b\n' "$1" >&2
2017-07-03 21:15:45 +08:00
}
success() {
2019-09-12 14:11:18 +08:00
msg "${Green}[✔]${Color_off} ${1}${2}"
2017-07-03 21:15:45 +08:00
}
info() {
2019-09-12 14:11:18 +08:00
msg "${Blue}[➭]${Color_off} ${1}${2}"
2017-07-03 21:15:45 +08:00
}
error() {
2019-09-12 14:11:18 +08:00
msg "${Red}[✘]${Color_off} ${1}${2}"
exit 1
2017-07-03 21:15:45 +08:00
}
2017-07-20 05:22:58 +08:00
warn () {
2019-09-12 14:11:18 +08:00
msg "${Yellow}[⚠]${Color_off} ${1}${2}"
2017-07-20 05:22:58 +08:00
}
2018-01-27 19:23:47 +08:00
# }}}
2017-07-20 05:22:58 +08:00
2018-01-27 20:02:48 +08:00
# echo_with_color {{{
echo_with_color () {
2019-09-12 14:11:18 +08:00
printf '%b\n' "$1$2$Color_off" >&2
2018-01-27 20:02:48 +08:00
}
# }}}
2018-01-27 19:23:47 +08:00
# fetch_repo {{{
2017-01-04 00:20:25 +08:00
fetch_repo () {
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
need_cmd 'git'
if [[ -d "${XDGSpaceDir:-}" ]]; then
2019-09-12 14:11:18 +08:00
info "Trying to update SpaceVim"
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
(
cd "${XDGSpaceDir:?}"
git pull
)
2019-09-12 14:11:18 +08:00
success "Successfully update SpaceVim"
else
info "Trying to clone SpaceVim"
git clone --depth 1 https://github.com/SpaceVim/SpaceVim.git "${XDGSpaceDir:-}"
2019-09-12 14:11:18 +08:00
if [ $? -eq 0 ]; then
success "Successfully clone SpaceVim"
else
error "Failed to clone SpaceVim"
exit 0
fi
fi
2017-01-04 00:20:25 +08:00
}
2018-01-27 19:23:47 +08:00
# }}}
2017-01-04 00:20:25 +08:00
2018-01-27 19:23:47 +08:00
# install_vim {{{
2017-01-04 00:20:25 +08:00
install_vim () {
2019-09-12 14:11:18 +08:00
if [[ -f "$HOME/.vimrc" ]]; then
mv "$HOME/.vimrc" "$HOME/.vimrc_back"
success "Backup $HOME/.vimrc to $HOME/.vimrc_back"
fi
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
if [[ -d "${XDGvimDir:-}" ]]; then
if [[ "$(readlink "${XDGvimDir:-}")" =~ \.?SpaceVim$ ]]; then
success "SpaceVim already installed in '${XDGvimDir:-}'"
return
2019-09-12 14:11:18 +08:00
fi
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
mv "${XDGvimDir:?}" "${XDGvimDir:-}_back"
success "BackUp '${XDGvimDir}' to '${XDGvimDir}_back'"
2017-01-04 00:20:25 +08:00
fi
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
ln -s "${XDGSpaceDir:?}" "${XDGvimDir:?}"
success "Installed SpaceVim for vim in '${XDGvimDir}'"
2017-01-04 00:20:25 +08:00
}
2018-01-27 19:23:47 +08:00
# }}}
2017-01-04 00:20:25 +08:00
2018-01-27 19:23:47 +08:00
# install_neovim {{{
2017-01-04 00:20:25 +08:00
install_neovim () {
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
if [[ -d "${XDGnvimDir:-}" ]]; then
if [[ "$(readlink "${XDGnvimDir:-}")" =~ \.?SpaceVim$ ]]; then
success "SpaceVim already installed in '${XDGnvimDir:-}'"
return
2019-09-12 14:11:18 +08:00
fi
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
mv "${XDGnvimDir:?}" "${XDGnvimDir:-}_back"
success "BackUp '${XDGnvimDir}' to '${XDGnvimDir}_back'"
2017-01-04 00:20:25 +08:00
fi
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
if [[ ! -d "$(dirname "${XDGnvimDir}")" ]]; then
mkdir "$(dirname "${XDGnvimDir}")"
fi
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
ln -s "${XDGSpaceDir:?}" "${XDGnvimDir:?}"
success "Installed SpaceVim for nvim in '${XDGnvimDir}'"
2017-01-04 00:20:25 +08:00
}
2018-01-27 19:23:47 +08:00
# }}}
2017-01-04 00:20:25 +08:00
2018-01-27 19:23:47 +08:00
# uninstall_vim {{{
2017-01-07 00:31:30 +08:00
uninstall_vim () {
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
if [[ -d "${XDGvimDir:-}" ]] &&
[[ "$(readlink "${XDGvimDir:?}")" =~ \.?SpaceVim$ ]]; then
rm "${XDGvimDir:?}"
success "Uninstall SpaceVim for vim"
if [[ -d "${XDGvimDir}_back" ]]; then
mv "${XDGvimDir}_back" "${XDGvimDir}"
success "Recover from ${XDGvimDir}_back"
2019-09-12 14:11:18 +08:00
fi
fi
if [[ -f "$HOME/.vimrc_back" ]]; then
mv "$HOME/.vimrc_back" "$HOME/.vimrc"
success "Recover from $HOME/.vimrc_back"
2017-01-07 00:31:30 +08:00
fi
}
2018-01-27 19:23:47 +08:00
# }}}
2017-01-04 00:20:25 +08:00
2018-01-27 19:23:47 +08:00
# uninstall_neovim {{{
2017-01-07 00:31:30 +08:00
uninstall_neovim () {
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
if [[ -d "${XDGnvimDir:-}" ]] &&
[[ "$(readlink "${XDGnvimDir:?}")" =~ \.?SpaceVim$ ]]; then
rm "${XDGnvimDir:?}"
success "Uninstall SpaceVim for neovim"
if [[ -d "${XDGnvimDir}_back" ]]; then
mv "${XDGnvimDir}_back" "${XDGnvimDir}"
success "Recover from ${XDGnvimDir}_back"
2019-09-12 14:11:18 +08:00
fi
2017-01-07 00:31:30 +08:00
fi
}
2018-01-27 19:23:47 +08:00
# }}}
2017-01-04 00:20:25 +08:00
2018-01-27 19:23:47 +08:00
# check_requirements {{{
2017-07-20 05:22:58 +08:00
check_requirements () {
2019-09-12 14:11:18 +08:00
info "Checking Requirements for SpaceVim"
if hash "git" &>/dev/null; then
git_version=$(git --version)
success "Check Requirements: ${git_version}"
2017-07-20 05:22:58 +08:00
else
2019-09-12 14:11:18 +08:00
warn "Check Requirements : git"
2018-01-27 16:38:19 +08:00
fi
feat:(XDG): add XDG support * fonts: Ensure mkfontscale is installed When installing fonts, we have a silent igored error about missing `mkfontscale` (and `mkfontdir`). Add a requirements check for it, and 'need' it when actually attempting to install fonts. * fetch_repo: Never change a directory It is bad practice to change the currents shell working directory. E.g. never use 'cd' in a script. For example, if `git pull` crashes, it would leave the user in the git directory 'somewhere' on his filesystem, potentially causing confusion, as the following `cd -` command is never executed. There are of course always exceptions, such as when tooling does not (easily) support out of tree invocation. To solve this, run the command in a subshell, which won't touch the current working directory as the exit of the subshell kept the previous working directory. A more difficult alternative would be to pass `--git-dir` and `--work-tree` along to git, but this would make it far harder to read. * fetch_repo: Do not duplicate code all over There is no reason to put `need 'git'` all over the place, when the only time we truly need it, is if we pull the repo. Make the code a little less cluttered and a bit easier to read. * install: Support XDG_CONFIG_HOME Add support for the XDG specification for XDG_CONFIG_HOME. NeoVIM already follows this, regular vim needs a bit of help there. Closes: #3517 * SpaceVim.d: Support XDG paths Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2022-12-28 14:19:06 +08:00
if hash "mkfontscale" &>/dev/null; then
mkfontscale_version=$(mkfontscale -v)
success "Check Requirements: ${mkfontscale_version}"
else
warn "Check Requirements : mkfontscale"
fi
2019-09-12 14:11:18 +08:00
if hash "vim" &>/dev/null; then
is_vim8=$(vim --version | grep "Vi IMproved 8")
is_vim74=$(vim --version | grep "Vi IMproved 7.4")
if [ -n "$is_vim8" ]; then
success "Check Requirements: vim 8.0"
elif [ -n "$is_vim74" ]; then
success "Check Requirements: vim 7.4"
else
if hash "nvim" &>/dev/null; then
success "Check Requirements: nvim"
else
warn "SpaceVim need vim 7.4 or above"
fi
fi
if hash "nvim" &>/dev/null; then
success "Check Requirements: nvim"
fi
2017-07-20 05:22:58 +08:00
else
2019-09-12 14:11:18 +08:00
if hash "nvim" &>/dev/null; then
success "Check Requirements: nvim"
else
warn "Check Requirements : vim or nvim"
fi
2017-07-20 05:22:58 +08:00
fi
2019-09-12 14:11:18 +08:00
info "Checking true colors support in terminal:"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/JohnMorales/dotfiles/master/colors/24-bit-color.sh)"
2017-07-20 05:22:58 +08:00
}
2018-01-27 19:23:47 +08:00
# }}}
2017-07-20 05:22:58 +08:00
2018-01-27 19:23:47 +08:00
# usage {{{
2017-01-07 00:31:30 +08:00
usage () {
2019-09-12 14:11:18 +08:00
echo "SpaceVim install script : V ${Version}"
echo ""
echo "Usage : curl -sLf https://spacevim.org/install.sh | bash -s -- [option] [target]"
echo ""
echo " This is bootstrap script for SpaceVim."
echo ""
echo "OPTIONS"
echo ""
echo " -i, --install install spacevim for vim or neovim"
echo " -v, --version Show version information and exit"
echo " -u, --uninstall Uninstall SpaceVim"
echo " -c, --checkRequirements checkRequirements for SpaceVim"
echo " --no-fonts skip downloading fonts"
2019-09-12 14:11:18 +08:00
echo ""
echo "EXAMPLE"
echo ""
echo " Install SpaceVim for vim and neovim"
echo ""
echo " curl -sLf https://spacevim.org/install.sh | bash"
echo ""
echo " Install SpaceVim for vim only or neovim only"
echo ""
echo " curl -sLf https://spacevim.org/install.sh | bash -s -- --install vim"
echo " curl -sLf https://spacevim.org/install.sh | bash -s -- --install neovim"
echo ""
echo " Uninstall SpaceVim"
echo ""
echo " curl -sLf https://spacevim.org/install.sh | bash -s -- --uninstall"
2017-01-07 00:31:30 +08:00
}
2018-01-27 19:23:47 +08:00
# }}}
2017-01-04 00:20:25 +08:00
2018-01-27 19:23:47 +08:00
# install_done {{{
install_done () {
2019-09-12 14:11:18 +08:00
echo_with_color ${Yellow} ""
echo_with_color ${Yellow} "Almost done!"
echo_with_color ${Yellow} "=============================================================================="
echo_with_color ${Yellow} "== Open Vim or Neovim and it will install the plugins automatically =="
echo_with_color ${Yellow} "=============================================================================="
echo_with_color ${Yellow} ""
echo_with_color ${Yellow} "That's it. Thanks for installing SpaceVim. Enjoy!"
echo_with_color ${Yellow} ""
2018-01-27 19:23:47 +08:00
}
# }}}
# welcome {{{
welcome () {
2018-01-27 20:02:48 +08:00
echo_with_color ${Yellow} " /###### /## /##/## "
echo_with_color ${Yellow} " /##__ ## | ## | #|__/ "
echo_with_color ${Yellow} " | ## \__/ /###### /###### /####### /######| ## | ##/##/######/#### "
echo_with_color ${Yellow} " | ###### /##__ ##|____ ##/##_____//##__ #| ## / ##| #| ##_ ##_ ##"
echo_with_color ${Yellow} " \____ #| ## \ ## /######| ## | ########\ ## ##/| #| ## \ ## \ ##"
echo_with_color ${Yellow} " /## \ #| ## | ##/##__ #| ## | ##_____/ \ ###/ | #| ## | ## | ##"
echo_with_color ${Yellow} " | ######| #######| ######| ######| ####### \ #/ | #| ## | ## | ##"
echo_with_color ${Yellow} " \______/| ##____/ \_______/\_______/\_______/ \_/ |__|__/ |__/ |__/"
echo_with_color ${Yellow} " | ## "
echo_with_color ${Yellow} " | ## "
echo_with_color ${Yellow} " |__/ "
echo_with_color ${Yellow} " version : ${Version} by : spacevim.org "
}
2018-01-27 19:23:47 +08:00
# }}}
# download_font {{{
2017-11-17 08:00:22 +08:00
download_font () {
url="https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/patched-fonts/SourceCodePro/Regular/complete/${1// /%20}"
2019-09-12 14:11:18 +08:00
path="$HOME/.local/share/fonts/$1"
if [[ -f "$path" && ! -s "$path" ]]
then
rm "$path"
fi
if [[ -f "$path" ]]
then
success "Downloaded $1"
else
info "Downloading $1"
curl -s -o "$path" "$url"
success "Downloaded $1"
fi
2017-11-17 08:00:22 +08:00
}
2018-01-27 19:23:47 +08:00
# }}}
# install_fonts {{{
2017-11-14 08:03:28 +08:00
install_fonts () {
2019-09-12 14:11:18 +08:00
if [[ ! -d "$HOME/.local/share/fonts" ]]; then
mkdir -p $HOME/.local/share/fonts
fi
download_font "Sauce Code Pro Nerd Font Complete.ttf"
2019-09-12 14:11:18 +08:00
info "Updating font cache, please wait ..."
if [ $System == "Darwin" ];then
if [ ! -e "$HOME/Library/Fonts" ];then
mkdir "$HOME/Library/Fonts"
fi
cp $HOME/.local/share/fonts/* $HOME/Library/Fonts/
else
2023-02-21 18:59:49 +08:00
# need_cmd 'mkfontdir'
# need_cmd 'mkfontscale'
2019-09-12 14:11:18 +08:00
fc-cache -fv > /dev/null
mkfontdir "$HOME/.local/share/fonts" > /dev/null
mkfontscale "$HOME/.local/share/fonts" > /dev/null
2019-01-07 21:15:22 +08:00
fi
2019-09-12 14:11:18 +08:00
success "font cache done!"
2018-01-27 19:23:47 +08:00
}
# }}}
### main {{{
main () {
2019-09-12 14:11:18 +08:00
if [ $# -gt 0 ]
then
case $1 in
--uninstall|-u)
info "Trying to uninstall SpaceVim"
uninstall_vim
uninstall_neovim
echo_with_color ${BWhite} "Thanks!"
exit 0
;;
--checkRequirements|-c)
check_requirements
exit 0
;;
--install|-i)
welcome
fetch_repo
if [ $# -eq 2 ]
then
case $2 in
neovim)
install_neovim
install_fonts
2019-09-12 14:11:18 +08:00
install_done
exit 0
;;
vim)
install_vim
install_fonts
2019-09-12 14:11:18 +08:00
install_done
exit 0
esac
fi
install_vim
install_neovim
install_fonts
2019-09-12 14:11:18 +08:00
install_done
exit 0
;;
--help|-h)
usage
exit 0
;;
--no-fonts)
welcome
fetch_repo
install_vim
install_neovim
install_done
exit 0
;;
2019-09-12 14:11:18 +08:00
--version|-v)
msg "${Version}"
exit 0
esac
else
2018-01-27 20:02:48 +08:00
welcome
2018-01-27 19:23:47 +08:00
fetch_repo
install_vim
install_neovim
2019-09-12 14:11:18 +08:00
install_fonts
2018-01-27 20:02:48 +08:00
install_done
2019-09-12 14:11:18 +08:00
fi
2017-11-14 08:03:28 +08:00
}
2018-01-27 19:23:47 +08:00
# }}}
main $@
2019-11-04 22:00:58 +08:00
# vim:set nofoldenable foldmethod=marker: