-
Notifications
You must be signed in to change notification settings - Fork 24
/
archlinux.sh
executable file
·135 lines (101 loc) · 3.31 KB
/
archlinux.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/bin/bash
## Exit trap
trap 'ret=$?; test $ret -ne 0 && printf "failed\n\n" >&2; exit $ret' EXIT
set -e
## Fancy echo
fancy_echo() {
printf "\n%b\n" "$1"
}
## Installs the package if it is not installed yet
install() {
pacman -Q "$1" >/dev/null 2>&1 && echo "$1 is already installed." || sudo pacman -S "$1" --noconfirm
}
## Authority check
if [[ $UID == 0 ]]; then
fancy_echo "Please run the script without root authority.\nYou need to run it with your home user."
exit 1
fi
## Distro check
if ! grep -qiE 'arch' /etc/os-release
then
fancy_echo "Sorry! That script supports only archlinux."
exit 1
fi
## Archlinux package update
fancy_echo "Updating system packages ..."
sudo pacman -Syu
## Git
fancy_echo "Installing Git, version control system ..."
install "git"
## Check home bin
if [ ! -d "$HOME/.bin/" ]; then
mkdir "$HOME/.bin"
fi
if [ ! -f "$HOME/.zshrc" ]; then
touch $HOME/.zshrc
fi
if [[ ":$PATH:" != *":$HOME/.bin:"* ]]; then
echo 'export PATH="$HOME/.bin:$PATH"' >> $HOME/.zshrc
fi
# ZSH and Oh-My-ZSH
fancy_echo "Installing ZSH ..."
install "zsh"
fancy_echo "Setting ZSH as default, please enter your password:"
chsh -s $(which zsh)
fancy_echo "Installing Oh-My-ZSH ..."
git clone git://github.com/robbyrussell/oh-my-zsh.git $HOME/.oh-my-zsh
cp $HOME/.zshrc $HOME/.zshrc.orig
cp $HOME/.oh-my-zsh/templates/zshrc.zsh-template $HOME/.zshrc
if [ ! -n "$ZSH" ]; then
ZSH=$HOME/.oh-my-zsh
fi
## Redis
fancy_echo "Installing Redis, a good key-value database ..."
install "redis"
## Extra components
fancy_echo "Installing ImageMagick, to crop and resize images ..."
install "imagemagick"
fancy_echo "Installing NodeJS, a Javascript runtime ..."
install "nodejs"
## Rbenv
if [[ ! -d "$HOME/.rbenv" ]]; then
fancy_echo "Installing rbenv, to change Ruby versions ..."
git clone git://github.com/sstephenson/rbenv.git $HOME/.rbenv
if ! grep -qs "rbenv init" ~/.zshrc; then
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> $HOME/.zshrc
echo 'eval "$(rbenv init - --no-rehash)"' >> $HOME/.zshrc
fi
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
fi
if [[ ! -d "$HOME/.rbenv/plugins/rbenv-gem-rehash" ]]; then
fancy_echo "Installing rbenv-gem-rehash so the shell automatically picks up binaries after installing gems with binaries..."
git clone https://github.com/sstephenson/rbenv-gem-rehash.git $HOME/.rbenv/plugins/rbenv-gem-rehash
fi
if [[ ! -d "$HOME/.rbenv/plugins/ruby-build" ]]; then
fancy_echo "Installing ruby-build, to install Rubies ..."
git clone git://github.com/sstephenson/ruby-build.git $HOME/.rbenv/plugins/ruby-build
fi
## Ruby dependencies
fancy_echo "Installing dependencies ..."
install "postgresql-libs"
install "sqlite"
install "cmake"
## Ruby environment
RUBY_VERSION="2.5.1"
fancy_echo "Preveting gem system from installing documentation ..."
echo 'gem: --no-ri --no-doc' >> $HOME/.gemrc
fancy_echo "Installing Ruby $RUBY_VERSION ..."
rbenv install $RUBY_VERSION
fancy_echo "Setting $RUBY_VERSION as global default Ruby ..."
rbenv global $RUBY_VERSION
rbenv rehash
fancy_echo "Updating to latest Rubygems version ..."
gem update --system
fancy_echo "Installing Rails ..."
gem install rails
fancy_echo "Installing PostgreSQL Ruby interface ..."
gem install pg
clear
fancy_echo "Ready and running ZSH ..."
zsh