-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #187 from fbs/new-installer
New/improved installer
- Loading branch information
Showing
5 changed files
with
230 additions
and
40 deletions.
There are no files selected for viewing
Empty file.
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,59 +1,249 @@ | ||
[ -z "$PRELUDE_INSTALL_DIR" ] && PRELUDE_INSTALL_DIR="$HOME/.emacs.d" | ||
[ -z "$PRELUDE_URL" ] && PRELUDE_URL=https://github.com/bbatsov/prelude.git | ||
install_prelude () { | ||
printf " Cloning the repository.\n$RESET" | ||
if [ x$PRELUDE_VERBOSE != x ] | ||
then | ||
/usr/bin/env git clone $PRELUDE_URL $PRELUDE_INSTALL_DIR | ||
else | ||
/usr/bin/env git clone $PRELUDE_URL $PRELUDE_INSTALL_DIR > /dev/null 2>&1 | ||
fi | ||
if ! [ $? -eq 0 ] | ||
then | ||
printf "$RED Unkown git error occured during installation, " | ||
printf "please check the source url: $PRELUDE_URL\n$RESET" | ||
exit 1 | ||
fi | ||
} | ||
|
||
if [ -d $PRELUDE_INSTALL_DIR/prelude ] | ||
then | ||
printf "\e[33m You already have Prelude installed.\e[0m You'll need to remove $PRELUDE_INSTALL_DIR/prelude if you want to install Prelude again.\n" | ||
exit 1; | ||
fi | ||
make_prelude_dirs () { | ||
printf " Making the required directories.\n$RESET" | ||
mkdir $PRELUDE_INSTALL_DIR/vendor $PRELUDE_INSTALL_DIR/personal > /dev/null 2>&1 | ||
mkdir $PRELUDE_INSTALL_DIR/themes $PRELUDE_INSTALL_DIR/snippets > /dev/null 2>&1 | ||
if ! [ $? -eq 0 ] | ||
then | ||
printf "$RED failed to create directories.\n$RESET" | ||
fi | ||
} | ||
|
||
colors () { | ||
# Reset | ||
RESET='\e[0m' | ||
RED='\e[0;31m' # Red | ||
GREEN='\e[0;32m' # Green | ||
YELLOW='\e[0;33m' # Yellow | ||
BLUE='\e[0;34m' # Blue | ||
PURPLE='\e[0;35m' # Purple | ||
CYAN='\e[0;36m' # Cyan | ||
WHITE='\e[0;37m' # White | ||
|
||
# Bold | ||
BRED='\e[1;31m' # Red | ||
BGREEN='\e[1;32m' # Green | ||
BYELLOW='\e[1;33m' # Yellow | ||
BBLUE='\e[1;34m' # Blue | ||
BPURPLE='\e[1;35m' # Purple | ||
BCYAN='\e[1;36m' # Cyan | ||
BWHITE='\e[1;37m' # White | ||
} | ||
|
||
# Commandline args: | ||
# -d/--directory [dir] | ||
# Install prelude into the specified directory. If 'dir' is a relative path prefix it with $HOME. | ||
# Defaults to '$HOME/.emacs.d' | ||
# -c/--colors | ||
# Enable colors | ||
# -s/--source [url] | ||
# Clone prelude from 'url'. | ||
# Defaults to 'https://github.com/bbatsov/prelude.git' | ||
# -i/--into | ||
# If one exists, install into the existing config | ||
# -n/--no-bytecompile | ||
# Skip the compilation of the prelude files. | ||
# -h/--help | ||
# Print help | ||
# -v/--verbose | ||
# Verbose output, for debugging | ||
|
||
usage() { | ||
printf "Usage: $0 [OPTION]\n" | ||
printf " -c, --colors \t \t \t Enable colors." | ||
printf " -d, --directory [dir] \t Install prelude into the specified directory.\n" | ||
printf " \t \t \t \t If 'dir' is a relative path prefix with $HOME.\n" | ||
printf " \t \t \t \t Defaults to $HOME/.emacs.d\n" | ||
printf " -s, --source [url] \t \t Clone prelude from 'url'.\n" | ||
printf " \t \t \t \t Defaults to 'https://github.com/bbatsov/prelude.git'.\n" | ||
printf " -n, --no-bytecompile \t \t Skip the bytecompilation step of prelude.\n" | ||
printf " -i, --into \t \t \t Install Prelude into the existing configuration\n" | ||
printf " \t \t \t \t The default behavious is to install prelude into the existing\n" | ||
printf " \t \t \t \t emacs configuration.\n" | ||
printf " -h, --help \t \t \t Display this help and exit\n" | ||
printf " -v, --verbose \t \t Display verbose information\n" | ||
printf "\n" | ||
} | ||
|
||
printf "Checking to see if git is installed... " | ||
hash git 2>&- || { printf >&2 "\e[33mnot found. Aborting installation!\e[0m"; exit 1; } | ||
printf "\e[32mfound.\e[0m\n" | ||
### Parse cli | ||
while [ $# -gt 0 ] | ||
do | ||
case $1 in | ||
-d | --directory) | ||
PRELUDE_INSTALL_DIR=$2 | ||
shift 2 | ||
;; | ||
-c | --colors) | ||
colors | ||
shift 1 | ||
;; | ||
-s | --source) | ||
PRELUDE_URL=$2 | ||
shift 2 | ||
;; | ||
-i | --into) | ||
PRELUDE_INTO='true' | ||
shift 1 | ||
;; | ||
-n | --no-bytecompile) | ||
PRELUDE_SKIP_BC='true' | ||
shift 1 | ||
;; | ||
-h | --help) | ||
usage | ||
exit 0 | ||
;; | ||
-v | --verbose) | ||
echo "prelude verbose $PRELUDE_VERBOSE" | ||
PRELUDE_VERBOSE='true'; | ||
shift 1 | ||
;; | ||
*) | ||
printf "Unkown option: $1\n" | ||
shift 1 | ||
;; | ||
esac | ||
done | ||
|
||
printf "Checking to see if aspell is installed... " | ||
hash aspell 2>&- || { printf >&2 "\e[33mnot found. Install aspell to benefit from flyspell-mode!\e[0m"; } | ||
printf "\e[32mfound.\e[0m\n" | ||
VERBOSE_COLOR=$BBLUE | ||
|
||
printf "Checking to see if ack is installed... " | ||
hash ack 2>&- || { printf >&2 "\e[33mnot found. You'll need it to use ack-and-a-half!\e[0m"; } | ||
printf "\e[32mfound.\e[0m\n" | ||
[ -z $PRELUDE_URL ] && PRELUDE_URL='https://github.com/bbatsov/prelude.git' | ||
[ -z $PRELUDE_INSTALL_DIR ] && PRELUDE_INSTALL_DIR='$HOME/.emacs.d' | ||
|
||
printf "Looking for an existing Emacs config... " | ||
if [ -d $PRELUDE_INSTALL_DIR ] | ||
if [ x$PRELUDE_VERBOSE != x ] | ||
then | ||
printf "\e[33mfound an existing $PRELUDE_INSTALL_DIR.\e[0m Backing it up to $PRELUDE_INSTALL_DIR.pre-prelude.\n" | ||
mv $PRELUDE_INSTALL_DIR $PRELUDE_INSTALL_DIR.pre-prelude | ||
elif [ -f ~/.emacs ] | ||
printf "$PRELUDE_VERBOSE\n" | ||
printf "$VERBOSE_COLOR" | ||
printf "INSTALL_DIR = $PRELUDE_INSTALL_DIR\n" | ||
printf "SOURCE_URL = $PRELUDE_URL\n" | ||
if [ -n $PRELUDE_SKIP_BC ] | ||
then | ||
printf "Skipping bytecompilation.\n" | ||
fi | ||
if [ -n $PRELUDE_INTO ] | ||
then | ||
printf "Replacing existing config (if one exists).\n" | ||
fi | ||
printf "$RESET" | ||
fi | ||
|
||
### Check dependencies | ||
printf "$CYAN Checking to see if git is installed... $RESET" | ||
if hash git 2>&- | ||
then | ||
printf "\e[33mfound an existing ~/.emacs.\e[0m Backing it up to ~/.emacs.pre-prelude.\n" | ||
mv ~/.emacs ~/.emacs.pre-prelude | ||
printf "$GREEN found.$RESET\n" | ||
else | ||
printf "\e[32mnot found.\e[0m\n" | ||
printf "$RED not found. Aborting installation!$RESET\n" | ||
exit 1 | ||
fi; | ||
|
||
printf "$CYAN Checking to see if aspell is installed... " | ||
if hash aspell 2>&- | ||
then | ||
printf "$GREEN found.$RESET\n" | ||
else | ||
print "$RED not found. Install aspell to benefit from flyspell-mode!$RESET\n" | ||
fi | ||
|
||
printf "$CYAN Checking to see if ack is installed... " | ||
if hash ack 2>&- | ||
then | ||
printf "$GREEN found.$RESET\n" | ||
else | ||
printf "$RED not found. You'll need it to use ack-and-a-half!$RESET\n" | ||
fi | ||
|
||
### Check emacs version | ||
if [ $(emacs --version 2>/dev/null | sed -n 's/.*[^0-9.]\([0-9]*\.[0-9.]*\).*/\1/p;q' | sed 's/\..*//g') -lt 24 ] | ||
then | ||
printf "\e[31mWarning.\e[0m Prelude depends on emacs \e[31m24\e[0m!\n" | ||
printf "$YELLOW WARNING:$RESET Prelude depends on emacs $RED 24$RESET !\n" | ||
fi | ||
|
||
# If prelude is already installed | ||
if [ -d $PRELUDE_INSTALL_DIR/prelude ] | ||
then | ||
printf "\n\n$BRED" | ||
printf "You already have Prelude installed.$RESET\nYou'll need to remove $PRELUDE_INSTALL_DIR/prelude if you want to install Prelude again.\n" | ||
printf "If you want to update your copy of prelude, run 'git pull origin master' from your prelude directory\n\n" | ||
exit 1; | ||
fi | ||
|
||
printf "Cloning Emacs Prelude from GitHub... " | ||
/usr/bin/env git clone $PRELUDE_URL $PRELUDE_INSTALL_DIR > /dev/null 2>&1 | ||
cd $PRELUDE_INSTALL_DIR | ||
printf "done.\n" | ||
if [ -d $PRELUDE_INSTALL_DIR ] || [ -f $PRELUDE_INSTALL_DIR ] | ||
then | ||
# Existing file/directory found -> backup | ||
printf " Backing up the existing config to $PRELUDE_INSTALL_DIR.pre-prelude.tar.\n" | ||
tar -cf $PRELUDE_INSTALL_DIR.pre-prelude.tar $PRELUDE_INSTALL_DIR > /dev/null 2>&1 | ||
# Overwrite existing? | ||
if [ -n $PRELUDE_INTO ] | ||
then | ||
# Install into existing config | ||
PRELUDE_INSTALL_DIR+='/prelude' | ||
install_prelude | ||
else | ||
# Replace existing config | ||
install_prelude | ||
make_prelude_dirs | ||
fi | ||
elif [ -e $PRELUDE_INSTALL_DIR ] | ||
then | ||
# File exist but not a regular file or directory | ||
# WTF NOW? | ||
printf "$BRED $PRELUDE_INSTALL_DIR exist but isn't a file or directory.\n" | ||
printf "$BRED please remove this file or install prelude in a different directory" | ||
printf "$BRED (-d flag)\n$RESET" | ||
exit 1 | ||
else | ||
# Nothing yet so just install prelude | ||
install_prelude | ||
make_prelude_dirs | ||
fi | ||
|
||
if which emacs 2>&1 > /dev/null | ||
if [ -z $PRELUDE_SKIP_BC ]; | ||
then | ||
printf "Byte compiling Prelude... " | ||
emacs -batch -f batch-byte-compile $PRELUDE_INSTALL_DIR/prelude/*.el | ||
printf "done.\n\n" | ||
if which emacs 2>&1 > /dev/null | ||
then | ||
printf " Bytecompiling Prelude.\n" | ||
if [ x$PRELUDE_VERBOSE != x ] | ||
then | ||
emacs -batch -f batch-byte-compile $PRELUDE_INSTALL_DIR/prelude/*.el | ||
emacs -batch -f batch-byte-compile "$PRELUDE_INSTALL_DIR/prelude/*.el" | ||
else | ||
emacs -batch -f batch-byte-compile $PRELUDE_INSTALL_DIR/prelude/*.el > /dev/null 2>&1 | ||
fi | ||
else | ||
printf "$YELLOW Emacs not found.$RESET Skipping bytecompilation.\n" | ||
fi | ||
else | ||
printf "Skipping bytecompilation.\n" | ||
fi | ||
|
||
printf "\e[34m ____ _ _ \n" | ||
printf "\e[34m| _ \ _ __ ___| |_ _ __| | ___ \n" | ||
printf "\e[34m| |_) | __/ _ \ | | | |/ _ |/ _ \ \n" | ||
printf "\e[34m| __/| | | __/ | |_| | (_| | __/ \n" | ||
printf "\e[34m|_| |_| \___|_|\__,_|\__,_|\___| \n" | ||
# Print usage message if prelude didn't replace .emacs.d | ||
if [ $PRELUDE_INSTALL_DIR != "$HOME/.emacs.d" ] | ||
then | ||
printf "\n To use prelude, add: $CYAN\n (defvar prelude-dir \"$PRELUDE_INSTALL_DIR/\")\n" | ||
printf " (load-file (concat prelude-dir \"init.el\"))\n$RESET" | ||
printf " To your emacs init file.\n\n" | ||
fi | ||
|
||
printf "\e[32m... is now installed and ready to do thy bidding, Master $USER!\n" | ||
printf "\e[0m" | ||
printf "\n" | ||
printf "$BBLUE ____ _ _ \n" | ||
printf "$BBLUE | _ \ _ __ ___| |_ _ __| | ___ \n" | ||
printf "$BBLUE | |_) | __/ _ \ | | | |/ _ |/ _ \ \n" | ||
printf "$BBLUE | __/| | | __/ | |_| | (_| | __/ \n" | ||
printf "$BBLUE |_| |_| \___|_|\__,_|\__,_|\___| \n\n" | ||
printf "$GREEN ... is now installed and ready to do thy bidding, Master $USER!$RESET\n" |
Empty file.