2017-06-12 16:22:05 +02:00
|
|
|
#!/bin/bash
|
|
|
|
## brethil's dotfiles installation file
|
|
|
|
## 20 June 2016
|
|
|
|
|
|
|
|
# Get the location for the dotfiles
|
|
|
|
DOTFILES=$PWD
|
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
ZSHTMP="$HOME/.zshrctmp"
|
|
|
|
echo -e "\n\n# brethil's dotfiles:" >> $ZSHTMP
|
|
|
|
echo "DOTFILES=$DOTFILES" >> $ZSHTMP
|
|
|
|
echo "source \$DOTFILES/brethil_dotfile.sh" >> $ZSHTMP
|
|
|
|
echo -e "# End of brethil's dotfiles\n\n"
|
2017-06-12 16:22:05 +02:00
|
|
|
function install_rmate {
|
2017-07-14 21:20:20 +02:00
|
|
|
# Install python version of the textmate rmate remote (from github)
|
2017-06-12 16:22:05 +02:00
|
|
|
if [[ $(whoami) == "root" ]]; then
|
|
|
|
destpath="/usr/bin"
|
|
|
|
else
|
|
|
|
destpath="$HOME/bin"
|
|
|
|
fi
|
2017-07-14 21:20:20 +02:00
|
|
|
if [[ -f $destpath/rmate ]]; then
|
|
|
|
echo "rmate already exists: not installed"
|
|
|
|
return -1
|
|
|
|
else
|
|
|
|
curl -sL https://raw.githubusercontent.com/sclukey/rmate-python/master/bin/rmate > $destpath/rmate
|
|
|
|
chmod a+x $destpath/rmate
|
|
|
|
ln -s $destpath/rmate $destpath/mate || "Could not create symbolic link to $destpath/mate (already exists?)"
|
|
|
|
echo "Installed rmate (and mate symlink) in $destpath"
|
|
|
|
return 0
|
|
|
|
fi
|
2017-06-12 16:22:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function install_vimrc {
|
2017-07-14 21:20:20 +02:00
|
|
|
# Install vimrc from github.com/amix/vimrc
|
|
|
|
git clone https://github.com/amix/vimrc.git $HOME/.vim_runtime && sh $HOME/.vim_runtime/install_awesome_vimrc.sh || return -1
|
2017-06-12 16:22:05 +02:00
|
|
|
}
|
|
|
|
|
2018-03-31 02:33:42 +02:00
|
|
|
|
2017-06-12 16:22:05 +02:00
|
|
|
function install_zsh_plugins {
|
2017-07-14 21:20:20 +02:00
|
|
|
# Install fast-syntax-highlighting (git: zdharma), zsh-autosuggestions (git:zsh-users)
|
2017-06-12 16:22:05 +02:00
|
|
|
ZSH_PLUGINS="$HOME/.oh-my-zsh/custom/plugins"
|
2018-03-31 02:33:42 +02:00
|
|
|
mkdir -p $ZSH_PLUGINS
|
2017-07-14 21:20:20 +02:00
|
|
|
git clone https://github.com/zdharma/fast-syntax-highlighting.git ${ZSH_PLUGINS}/fast-syntax-highlighting || error=true
|
|
|
|
git clone git://github.com/zsh-users/zsh-autosuggestions ${ZSH_PLUGINS}/zsh-autosuggestions || error=true
|
|
|
|
if [[ $error ]]; then
|
|
|
|
return -1
|
|
|
|
else
|
|
|
|
return 0
|
|
|
|
fi
|
2017-06-12 16:22:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
# Add an ssh config file with:
|
|
|
|
# - Connection multiplexer for faster multiple connections
|
|
|
|
# - Keep connections alive (avoid timeout disconnections)
|
|
|
|
function create_ssh_config {
|
|
|
|
echo "# Configuring ssh..."
|
|
|
|
|
|
|
|
ssh_config="$HOME/.ssh/config"
|
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
if [ ! -f $HOME/.ssh/id_rsa ]; then
|
|
|
|
echo "Creating ssh key (4096bit)..."
|
|
|
|
|
|
|
|
echo "Enter ssh-key comment (leave empty for default: user@host)"
|
|
|
|
read comment
|
2017-07-17 01:28:35 +02:00
|
|
|
if [[ $comment ]]; then
|
2017-07-14 21:20:20 +02:00
|
|
|
ssh-keygen -t rsa -b 4096 -C $comment
|
|
|
|
else
|
|
|
|
ssh-keygen -t rsa -b 4096
|
2017-07-17 01:28:35 +02:00
|
|
|
fi
|
2017-07-14 21:20:20 +02:00
|
|
|
# fix permissions
|
2017-06-12 16:22:05 +02:00
|
|
|
chmod 0700 "$HOME/.ssh"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -f $ssh_config ]]; then
|
2017-07-17 01:28:35 +02:00
|
|
|
until [[ $modifyssh == "y" || $modifyssh == "n" ]]; do
|
2017-06-12 16:22:05 +02:00
|
|
|
echo "Do you want to modify the existing ssh config? (New values will be appended) (y/n)"
|
|
|
|
read modifyssh
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "$modifyssh" != "n" ]]
|
|
|
|
then
|
2017-07-14 21:20:20 +02:00
|
|
|
echo "# brethil's dotfiles setup start" >> $ssh_config
|
|
|
|
echo 'TCPKeepAlive=yes' >> $ssh_config
|
|
|
|
echo 'ServerAliveCountMax=6' >> $ssh_config
|
2017-06-12 16:22:05 +02:00
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
echo "## Uncomment to enable compression for all ssh sessions" >> $ssh_config
|
|
|
|
echo '#Compression=yes' >> $ssh_config
|
2017-06-12 16:22:05 +02:00
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
echo '## Uncomment the following to enable ssh ControlMaster and ssh session persistence' >> $ssh_config
|
|
|
|
echo '#ControlMaster auto' >> $ssh_config
|
|
|
|
echo '#ControlPath /tmp/%r@%h:%p' >> $ssh_config
|
|
|
|
echo '#ControlPersist yes' >> $ssh_config
|
|
|
|
echo 'Host *' >> $ssh_config
|
|
|
|
echo 'ServerAliveInterval 300' >> $ssh_config
|
|
|
|
echo '## Enable the following if you want to use the rmate textmate remote' >> $ssh_config
|
|
|
|
echo "#Host *" >> $ssh_config
|
|
|
|
echo "#RemoteForward 52698 localhost:52698" >> $ssh_config
|
|
|
|
echo '## Enable the following if you want to use a reverse ssh tunnel to use mecp command on remote hosts' >> $ssh_config
|
|
|
|
echo "Host *" >> $ssh_config
|
|
|
|
echo "Remoteforward 2222 localhost:22" >> $ssh_config
|
|
|
|
echo '# end of brethil dotfiles setup #' >> $ssh_config
|
2017-06-12 16:22:05 +02:00
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
echo ".ssh/ssh_config configured check it to enable custom options:"
|
|
|
|
echo "- Compression"
|
|
|
|
echo "- Remote forwarding port 52698->52698 (Textmate rmate remote)"
|
|
|
|
echo "- Remote forwarding remote:2222->localhost:22 (mecp)"
|
2017-06-12 16:22:05 +02:00
|
|
|
else
|
|
|
|
echo "Did not modify $ssh_config."
|
|
|
|
fi
|
|
|
|
echo "# End of ssh config."
|
|
|
|
}
|
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
# First setup
|
2017-06-12 16:22:05 +02:00
|
|
|
function brethil_dotfiles_setup {
|
2017-07-14 21:20:20 +02:00
|
|
|
bin="$HOME/bin"
|
2017-06-12 16:22:05 +02:00
|
|
|
projects="$HOME/projects"
|
|
|
|
git="$HOME/git"
|
2017-07-14 21:20:20 +02:00
|
|
|
mkdir -p "$bin" "$projects" "$git" && echo "Created dirs $bin, $projects, $git"
|
|
|
|
|
2017-06-12 16:22:05 +02:00
|
|
|
# Install packages
|
|
|
|
# zsh
|
|
|
|
# grc: generic colourizer, colors output of any command
|
2017-07-14 21:20:20 +02:00
|
|
|
# ccze: similar to the above
|
|
|
|
# byobu: configuration/wrapper for tmux
|
2017-06-12 16:22:05 +02:00
|
|
|
# bmon: bandwidth monitor, monitors bandwith usage, shows graph
|
|
|
|
# mtr: mytraceroute, traceroute tool
|
|
|
|
# pv: pipe view, monitor the progress of data through a pipe
|
|
|
|
# byobu: tmux wrapper
|
2017-07-14 21:20:20 +02:00
|
|
|
packages="zsh git grc ccze bmon mtr pv tmux byobu"
|
|
|
|
|
|
|
|
# Check if running as root, if try using sudo to install packages.
|
|
|
|
# If sudo is not installed, launch a shell to try and install it
|
|
|
|
if [[ $(id -u) != 0 ]]; then
|
|
|
|
if [[ ! -f $(which sudo) ]] ; then
|
|
|
|
unset yn
|
|
|
|
until [[ $yn == "y" || $yn == "n" ]]; do
|
|
|
|
echo "Cannot install new packages without root access. Do you want to try to manually install sudo? (yn) "
|
|
|
|
read yn
|
|
|
|
done
|
|
|
|
if [[ $yn == "y" ]]; then
|
|
|
|
echo "Launching an interactive shell. Type exit after installing sudo."
|
2017-07-17 01:28:35 +02:00
|
|
|
# Launch bash
|
|
|
|
$(which bash)
|
2017-07-14 21:20:20 +02:00
|
|
|
else
|
|
|
|
echo "Quitting."
|
|
|
|
exit 0
|
|
|
|
fi
|
2017-07-17 01:28:35 +02:00
|
|
|
elif [[ -f $(which sudo) ]]; then
|
2017-07-14 21:20:20 +02:00
|
|
|
sudo="sudo "
|
|
|
|
fi
|
2017-06-12 16:22:05 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $(which apt-get ) ]]; then
|
2017-07-14 21:20:20 +02:00
|
|
|
install_command="${sudo}apt-get install"
|
2017-06-12 16:22:05 +02:00
|
|
|
elif [[ $(which pacman) ]]; then
|
2017-07-14 21:20:20 +02:00
|
|
|
install_command="${sudo}pacman -Sy"
|
2017-06-12 16:22:05 +02:00
|
|
|
elif [[ $(which yum) ]]; then
|
2017-07-14 21:20:20 +02:00
|
|
|
install_command="${sudo}yum"
|
2017-06-12 16:22:05 +02:00
|
|
|
elif [[ $(which port) ]]; then
|
2017-07-14 21:20:20 +02:00
|
|
|
install_command="${sudo}port install"
|
2017-06-12 16:22:05 +02:00
|
|
|
elif [[ $(which brew) ]]; then
|
2017-07-14 21:20:20 +02:00
|
|
|
install_command="${sudo}brew install"
|
2017-06-12 16:22:05 +02:00
|
|
|
else
|
2017-07-14 21:20:20 +02:00
|
|
|
echo "I do not know how to install the required packages. Quitting."
|
|
|
|
exit 0
|
2017-06-12 16:22:05 +02:00
|
|
|
fi
|
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
$install_command $packages
|
|
|
|
# Install oh-my-zsh
|
|
|
|
echo "Installing oh-my-zsh..."
|
|
|
|
sh -c "$(curl -sL zsh.dioporc.one)"
|
|
|
|
|
|
|
|
# oh-my-zsh's zshrc has been installed, prepend the dotfiles setup to it
|
|
|
|
cat $HOME/.zshrc >> $ZSHTMP
|
|
|
|
mv $ZSHTMP $HOME/.zshrc
|
|
|
|
|
|
|
|
# Increase history size
|
|
|
|
echo "export HISTSIZE=100000" >> $HOME/.zshrc
|
|
|
|
|
|
|
|
## Fix scrolling in byobu
|
|
|
|
if [[ $(uname) == "Darwin" ]]; then
|
|
|
|
sed -i '' 's/set -g terminal-overrides/#set -g terminal-overrides/' /usr/share/byobu/profiles/tmux
|
|
|
|
else
|
2017-06-12 16:22:05 +02:00
|
|
|
sed -i 's/set -g terminal-overrides/#set -g terminal-overrides/' /usr/share/byobu/profiles/tmux
|
|
|
|
fi
|
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
# Set m and M to enable/disable mouse mode in tmux/byobu
|
|
|
|
echo 'bind-key m source $BYOBU_PREFIX/share/byobu/keybindings/mouse.tmux.enable \; display-message "Mouse: ON"' >> ~/.tmux.conf
|
|
|
|
echo 'bind-key M source $BYOBU_PREFIX/share/byobu/keybindings/mouse.tmux.disable \; display-message "Mouse: Off"' >> ~/.tmux.conf
|
|
|
|
|
2017-06-12 16:22:05 +02:00
|
|
|
# Install the rmate client for textmate
|
2017-07-14 21:20:20 +02:00
|
|
|
inhstall_rmate && echo "Installed rmate Textmate remote "|| echo "Failed to install rmate Textmate remote"
|
2017-06-12 16:22:05 +02:00
|
|
|
|
|
|
|
# Install vim awesomerc (git amix/vimrc)
|
2017-07-14 21:20:20 +02:00
|
|
|
install_vimrc && echo "Installed vim awesome rc" || echo "Failed to install vim awesome rc"
|
2017-06-12 16:22:05 +02:00
|
|
|
# Create ssh config
|
|
|
|
create_ssh_config
|
|
|
|
|
|
|
|
# Install new zsh plugins in $ZSH/custom/plugins/
|
2017-07-14 21:20:20 +02:00
|
|
|
install_zsh_plugins && echo "Installed custom zsh plugins in $ZSH/custom/plugins/" || echo "Failed to install custom zsh plugins"
|
2017-06-12 16:22:05 +02:00
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
# Source the plugins defined in brethil_dotfile.sh ($plugins)
|
|
|
|
if [[ $(uname) == "Darwin" ]]; then # MacOS has a different syntax for sed
|
|
|
|
sed -i "" -e 's/plugins=.*/plugins=\( $plugins \)/' $HOME/.zshrc
|
|
|
|
else
|
|
|
|
sed -i -e 's/plugins=.*/plugins=\( $plugins \)/' $HOME/.zshrc
|
|
|
|
fi
|
2017-06-12 16:22:05 +02:00
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
# Symlink brethil.zsh-theme
|
2018-03-31 02:33:42 +02:00
|
|
|
ln -s $DOTFILES/brethil.zsh-theme $HOME/.oh-my-zsh/custom/
|
2017-07-17 01:28:35 +02:00
|
|
|
# Symlink brethil-minimal.zsh-theme
|
2018-03-31 02:33:42 +02:00
|
|
|
ln -s $DOTFILES/brethil-minimal.zsh-theme $HOME/.oh-my-zsh/custom/
|
2017-07-14 21:20:20 +02:00
|
|
|
|
2017-06-12 16:22:05 +02:00
|
|
|
# Set brethil theme
|
2017-07-14 21:20:20 +02:00
|
|
|
if [[ $(uname) == "Darwin" ]]; then # MacOS has a different syntax for sed
|
|
|
|
sed -i '' 's/ZSH_THEME=".*"/ZSH_THEME="brethil"/' $HOME/.zshrc
|
|
|
|
else
|
|
|
|
sed -i 's/ZSH_THEME=".*"/ZSH_THEME="brethil"/' $HOME/.zshrc
|
|
|
|
fi
|
2017-06-12 16:22:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Setup
|
|
|
|
brethil_dotfiles_setup
|
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
echo "Functions definitions in $DOTFILES/functions.sh (you can add your own functions in ~/.dotfiles_functions)"
|
|
|
|
echo "Aliases definitions in $DOTFILES/aliases.sh (you can add your own aliases in ~/.dotfiles_aliases)"
|
2017-06-12 16:22:05 +02:00
|
|
|
echo "Colors are defined in $DOTFILES/colors.sh"
|
|
|
|
|
2017-07-14 21:20:20 +02:00
|
|
|
echo "Type . ~/.zshrc to source the new dotfiles, or simply launch another shell. )"
|