#!/bin/bash ## brethil's dotfiles installation file ## 20 June 2016 # Get the location for the dotfiles DOTFILES=$PWD 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" function setup_git { # set up some git stuff git config --global pull.ff only git config --global merge.ff only } function install_rmate { # Install python version of the textmate rmate remote (from github) if [[ $(whoami) == "root" ]]; then destpath="/usr/bin" else destpath="$HOME/bin" fi 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 } function install_vimrc { # 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 } function install_zsh_plugins { # Install fast-syntax-highlighting (git: zdharma), zsh-autosuggestions (git:zsh-users), alias-tips ZSH_PLUGINS="$HOME/.oh-my-zsh/custom/plugins" mkdir -p "$ZSH_PLUGINS" # NOTE: if adding plugins here, be sure to also add them to the _dotfiles_upgrade function in check_for_upgrade.sh git clone https://github.com/zdharma/fast-syntax-highlighting.git "${ZSH_PLUGINS}/fast-syntax-highlighting" || error=true git clone https://github.com/zsh-users/zsh-autosuggestions "${ZSH_PLUGINS}/zsh-autosuggestions" || error=true git clone https://github.com/djui/alias-tips.git "${ZSH_PLUGINS}/alias-tips" || error=true if [[ $error ]]; then return 1 else return 0 fi } # 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" 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 if [[ $comment ]]; then ssh-keygen -t rsa -b 4096 -C $comment else ssh-keygen -t rsa -b 4096 fi # fix permissions chmod 0700 "$HOME/.ssh" fi if [[ -f $ssh_config ]]; then until [[ $modifyssh == "y" || $modifyssh == "n" ]]; do echo "Do you want to modify the existing ssh config? (New values will be appended) (y/n)" read modifyssh done fi exec 3>&1 # save stdout file descriptor # add the ssh rc that symlinks the used SSH_AUTH_SOCK. This will be executed on every ssh login. # The idea is that if the user is logging in using ssh -A, the symlink will point to the correct # location of the ssh auth socket and the remote ssh agent will be used. # SSH_AUTH_SOCK is declared in brethil_dotfile.sh exec 1>>~/.ssh/rc echo '#!/bin/bash' echo 'if test "$SSH_AUTH_SOCK" ; then' echo ' ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock' echo 'fi ' chmod 755 ~/.ssh/rc exec 1>>$ssh_config # redirect everything below to the $ssh_config file if [[ "$modifyssh" != "n" ]]; then echo "# brethil's dotfiles setup start" echo 'TCPKeepAlive=yes' echo 'ServerAliveCountMax=6' echo echo "## Uncomment to enable compression for all ssh sessions" echo '#Compression=yes' echo echo '## Uncomment the following to enable ssh ControlMaster and ssh session persistence' echo '#ControlMaster auto' echo '#ControlPath /tmp/%r@%h:%p' echo '#ControlPersist yes' echo echo 'Host *' echo ' ServerAliveInterval 300' echo echo '## Enable the following if you want to use the rmate textmate remote' echo "#Host *" echo "# RemoteForward 52698 localhost:52698" echo echo '## Enable the following if you want to use a reverse ssh tunnel to use mecp command on remote hosts' echo "#Host *" echo "# Remoteforward 2222 localhost:22" echo echo '# end of brethil dotfiles setup #' exec 1>&3 # restore stdout echo ".ssh/ssh_config configured. Edit it to enable custom options:" echo "- Compression" echo "- Remote forwarding port 52698->52698 (Textmate rmate remote)" echo "- Remote forwarding remote:2222->localhost:22 (mecp)" else echo "Did not modify $ssh_config." fi echo "# End of ssh config." } # First setup function brethil_dotfiles_setup { bin="$HOME/bin" projects="$HOME/projects" git="$HOME/git" mkdir -p "$bin" "$projects" "$git" && echo "Created dirs $bin, $projects, $git" # Install packages # zsh # grc: generic colourizer, colors output of any command # ccze: similar to the above # byobu: configuration/wrapper for tmux # 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 # htop: like top, but bettah packages="zsh git grc ccze bmon mtr pv tmux byobu htop" # 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." # Launch bash $(which bash) else echo "Quitting." exit 0 fi elif [[ -f $(which sudo) ]]; then sudo="sudo " fi fi if [[ $(which apt-get ) ]]; then install_command="${sudo}apt-get install" elif [[ $(which pacman) ]]; then pacman -Sy yay # also install the yay aur package managery packages="$packages" install_command="${sudo}yay -Sy" elif [[ $(which yum) ]]; then install_command="${sudo}yum" elif [[ $(which port) ]]; then install_command="${sudo}port install" elif [[ $(which brew) ]]; then install_command="${sudo}brew install" else echo "I do not know how to install the required packages. Quitting." exit 0 fi # actually install the packages: $install_command $packages # Install oh-my-zsh echo "Installing oh-my-zsh..." sh -c "$(curl -sL zsh.dioporc.one | sed 's/env zsh/#env zsh/')" # comment the part that launches zsh # 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 sed -i 's/set -g terminal-overrides/#set -g terminal-overrides/' /usr/share/byobu/profiles/tmux fi # remove ls from the grc.zsh config: sed 's|ls \\|#ls \\|' /etc/grc.zsh # 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 ## Install the rmate client for textmate #install_rmate && echo "Installed rmate Textmate remote "|| echo "Failed to install rmate Textmate remote" # Install vim awesomerc (git amix/vimrc) install_vimrc && echo "Installed vim awesome rc" || echo "Failed to install vim awesome rc" # Create ssh config create_ssh_config # git config setup_git # Install new zsh plugins in $ZSH/custom/plugins/ install_zsh_plugins && echo "Installed custom zsh plugins in $ZSH/custom/plugins/" || echo "Failed to install custom zsh plugins" # Source the plugins defined in brethil_dotfile.sh ($plugins) if [[ $(uname) == "Darwin" ]]; then sed -i "" -e 's/plugins=.*/plugins=\( $plugins \)/' $HOME/.zshrc else sed -i -e 's/plugins=.*/plugins=\( $plugins \)/' $HOME/.zshrc fi # Symlink brethil.zsh-theme ln -s $DOTFILES/brethil.zsh-theme $HOME/.oh-my-zsh/custom/ # Symlink brethil-minimal.zsh-theme ln -s $DOTFILES/brethil-minimal.zsh-theme $HOME/.oh-my-zsh/custom/ # Set brethil theme 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 #TODO: replace brethil theme with powerline? } # Setup brethil_dotfiles_setup 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)" echo "Colors are defined in $DOTFILES/colors.sh" echo "Type . ~/.zshrc to source the new dotfiles, or simply launch another shell. )"