aboutsummaryrefslogtreecommitdiffstats
path: root/setup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'setup.sh')
-rwxr-xr-xsetup.sh290
1 files changed, 290 insertions, 0 deletions
diff --git a/setup.sh b/setup.sh
new file mode 100755
index 0000000..4f61e9f
--- /dev/null
+++ b/setup.sh
@@ -0,0 +1,290 @@
+#!/bin/sh
+# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
+
+# @author: Sylvain Herlédan <sylvain.herledan@hrafnagud.info>
+# @date: 2017-06-02
+
+set -o nounset
+set -o errexit
+set -o pipefail
+
+PROGNAME="$(basename "${0}")";
+PROGDIR="$(readlink -f "$(dirname "${0}")")";
+ARGS="${@}";
+
+# Include helpers
+. "${PROGDIR}/lib/colors.sh"
+. "${PROGDIR}/lib/functions.sh"
+
+function install_tup()
+{
+ local tools_dir="${1}"; shift;
+ local install_dir="${1}"; shift;
+
+ if [ ! -f "${install_dir}/bin/tup" ];
+ then
+ if [ ! -d "${tools_dir}/tup" ];
+ then
+ git clone "git://github.com/gittup/tup.git" "${tools_dir}/tup"
+ fi
+ cd "${tools_dir}/tup"
+ ./bootstrap.sh
+ mkdir -p "${install_dir}/bin"
+ cp "${tools_dir}/tup/tup" "${install_dir}/bin/tup"
+ fi
+}
+
+function install_st()
+{
+ local tools_dir="${1}"; shift;
+ local install_dir="${1}"; shift;
+ local patches_url="http://st.suckless.org/patches";
+
+ if [ ! -f "${install_dir}/bin/st" ];
+ then
+ if [ ! -d "${tools_dir}/st" ];
+ then
+ git clone "http://git.suckless.org/st" "${tools_dir}/st"
+ wget \
+ "${patches_url}/st-no_bold_colors-20160727-308bfbf.diff" \
+ -O "${tools_dir}/st/st-no_bold.diff"
+ wget \
+ "${patches_url}/st-solarized-dark-20160727-308bfbf.diff" \
+ -O "${tools_dir}/st/st-solarized.diff"
+ fi
+ cd "${tools_dir}/st"
+ git checkout tags/0.7
+ git apply st-no_bold.diff
+ git apply st-solarized.diff
+ cp config.def.h config.h
+ sed -i 's/.*Liberation Mono.*/static char font[] = "Inconsolata:pixelsize=13:antialias=true:hinting=true";/' config.h
+ sed -i 's/static int borderpx = 2;/static int borderpx = 0;/' config.h
+ sed -i 's/static char shell\[\] = "\/bin\/sh";/static char shell\[\] = "\/usr\/bin\/zsh";/' config.h
+ make clean
+ make
+ cp "${tools_dir}/st/st" "${install_dir}/bin/st"
+ fi
+}
+
+# Dein installation -----------------------------------------------------------
+#
+# Dein is a manager for vim plugins.
+# -----------------------------------------------------------------------------
+install_dein()
+{
+ local tools_dir="${1}"; shift;
+ local install_dir="${1}"; shift;
+ local repo_path="${install_dir}/config/vim/dein/repos/github.com/Shougo";
+ local link_path="${repo_path}/dein.vim";
+
+ if [ ! -h "${link_path}" -o ! -d "${link_path}" ];
+ then
+ if [ ! -d "${tools_dir}/dein" ];
+ then
+ git clone \
+ "https://github.com/Shougo/dein.vim.git" \
+ "${tools_dir}/dein"
+ fi
+
+ rm -rf "${install_dir}/config/vim/dein/repos/github.com/Shougo"
+ mkdir -p "${install_dir}/config/vim/dein/repos/github.com/Shougo"
+ ln -sf \
+ "${tools_dir}/dein" \
+ "${install_dir}/config/vim/dein/repos/github.com/Shougo/dein.vim"
+ fi
+}
+
+# Oh my zsh installation ------------------------------------------------------
+# -----------------------------------------------------------------------------
+install_oh_my_zsh()
+{
+ local tools_dir="${1}"; shift;
+ local install_dir="${1}"; shift;
+ local link_path="${install_dir}/.oh-my-zsh";
+
+ if [ ! -h "${link_path}" -o ! -d "${link_path}" ];
+ then
+ if [ ! -d "${tools_dir}/oh-my-zsh" ];
+ then
+ git clone \
+ "git://github.com/robbyrussell/oh-my-zsh.git" \
+ "${tools_dir}/oh-my-zsh"
+ fi
+ ln -sf \
+ "${tools_dir}/oh-my-zsh" \
+ "${install_dir}/config/oh-my-zsh"
+ fi
+}
+
+#
+create_symlinks()
+{
+ local cfg_dir="${1}"; shift;
+ local install_dir="${1}"; shift;
+
+ rm -rf "${install_dir}/.config/git"
+ ln -sfT "${cfg_dir}/git" "${install_dir}/.config/git"
+
+ rm -rf "${install_dir}/.config/i3"
+ ln -sfT "${cfg_dir}/i3" "${install_dir}/.config/i3"
+
+ rm -rf "${install_dir}/.xinitrc"
+ ln -sfT "${cfg_dir}/xinitrc" "${install_dir}/.config/xinitrc"
+
+ rm -rf "${install_dir}/.tmux.conf"
+ ln -sfT "${cfg_dir}/tmux.conf" "${install_dir}/.tmux.conf"
+
+ rm -rf "${install_dir}/.zshrc"
+ ln -sfT "${cfg_dir}/zshrc" "${install_dir}/.zshrc"
+
+ rm -rf "${install_dir}/.vim"
+ ln -sfT "${cfg_dir}/vim" "${install_dir}/.vim"
+
+ rm -rf "${install_dir}/.config/dunst"
+ ln -sfT "${cfg_dir}/dunst" "${install_dir}/.config/dunst"
+}
+
+# Directory creation ----------------------------------------------------------
+# -----------------------------------------------------------------------------
+function create_dirs()
+{
+ local root_dir="${1}"; shift;
+
+ mkdir -p "${root_dir}/.local/tools"
+ mkdir -p "${root_dir}/.local/data"
+ mkdir -p "${root_dir}/.local/config"
+ mkdir -p "${root_dir}/.local/config/vim/colors"
+ mkdir -p "${root_dir}/.local/config/dunst"
+ mkdir -p "${root_dir}/.local/config/i3"
+ mkdir -p "${root_dir}/.local/config/git"
+
+ mkdir -p "${root_dir}/docs/downloads"
+ mkdir -p "${root_dir}/docs/screenshots"
+
+ mkdir -p "${root_dir}/.cache/vim/undo"
+ mkdir -p "${root_dir}/.cache/vim/swap"
+ mkdir -p "${root_dir}/.cache/vim/backup"
+ mkdir -p "${root_dir}/.cache/rtorrent"
+}
+
+# Copy configuration files ----------------------------------------------------
+# -----------------------------------------------------------------------------
+function copy_files()
+{
+ local src_dir="${1}"; shift;
+ local dst_dir="${1}"; shift;
+
+ cp "${src_dir}/tomorrow_night.vim" \
+ "${dst_dir}/.local/config/vim/colors/tomorrow_night.vim"
+ cp -r "${src_dir}/aliases" \
+ "${dst_dir}/.local/config/aliases"
+ cp -r "${src_dir}/zshrc" \
+ "${dst_dir}/.local/config/zshrc"
+ cp -r "${src_dir}/i3config" \
+ "${dst_dir}/.local/config/i3/config"
+ cp -r "${src_dir}/gitconfig" \
+ "${dst_dir}/.local/config/git/config"
+ cp -r "${src_dir}/tmux.conf" \
+ "${dst_dir}/.local/config/tmux.conf"
+ cp -r "${src_dir}/vimrc" \
+ "${dst_dir}/.local/config/vim/vimrc"
+ cp -r "${src_dir}/xinitrc" \
+ "${dst_dir}/.local/config/xinitrc"
+ cp -r "${src_dir}/dunstrc" \
+ "${dst_dir}/.local/config/dunst/dunstrc"
+
+ configure_rtorrent "${src_dir}" "${dst_dir}"
+}
+
+function configure_xdg()
+{
+ local install_dir="${1}"; shift;
+ local user_dirs="${install_dir}/.config/user-dirs.dirs";
+
+ cat > "${user_dirs}" <<EOF
+XDG_CONFIG_HOME="${install_dir}/.config"
+XDG_CACHE_HOME="${install_dir}/.cache"
+XDG_DESKTOP_DIR="${install_dir}/docs"
+XDG_DOWNLOAD_DIR="${install_dir}/docs/downloads"
+XDG_DOCUMENTS_DIR="${install_dir}/docs"
+XDG_MUSIC_DIR="${install_dir}/docs"
+XDG_PICTURES_DIR="${install_dir}/docs"
+XDG_PUBLICSHARE_DIR="${install_dir}/docs"
+XDG_TEMPLATES_DIR="${install_dir}/docs"
+XDG_VIDEOS_DIR="${install_dir}/docs"
+EOF
+}
+
+configure_rtorrent()
+{
+ local src_dir="${1}"; shift;
+ local dst_dir="${1}"; shift;
+
+ sed 's!###HOME###!'"${HOME}"'!g' "${src_dir}/rtorrentrc" \
+ > "${dst_dir}/.local/config/rtorrentrc"
+
+}
+
+check_requirements()
+{
+ local requirements="git make wget i3";
+ local optional_deps="notify-send dunst pulseaudio scrot sudo redshift numlockx";
+ local requirements_not_met=0;
+
+ for cmd in ${optional_deps};
+ do
+ if has "${cmd}";
+ then
+ echo -e " [ ${LIGHT_GREEN}OK${NO_COLOR}] ${cmd}"
+ else
+ echo -e " [${LIGHT_CYAN}NOK${NO_COLOR}] ${cmd}"
+ fi
+ done
+
+
+ for cmd in ${requirements};
+ do
+ if has "${cmd}";
+ then
+ echo -e " [ ${LIGHT_GREEN}OK${NO_COLOR}] ${cmd}"
+ else
+ echo -e " [${LIGHT_RED}NOK${NO_COLOR}] ${cmd}"
+ requirements_not_met=1;
+ fi
+ done
+
+ return ${requirements_not_met};
+}
+
+main()
+{
+ local local_dir="${HOME}/.local";
+ local tools_dir="${local_dir}/tools";
+ local cfg_dir="${local_dir}/config";
+
+ echo -e "\n\t${BOLD}.:| Dotfiles |:.${NO_COLOR}"
+
+ # Check requirements first
+ echo -e "\n${YELLOW}=>${NO_COLOR}${BOLD} Checking requirements...${NO_COLOR}"
+ if check_requirements;
+ then
+ echo
+ else
+ echo -e "\n${YELLOW}=>${NO_COLOR}${BOLD} Abort.${NO_COLOR}"
+ exit 1
+ fi
+
+ create_dirs "${HOME}"
+ copy_files "${PROGDIR}" "${HOME}"
+
+ install_tup "${tools_dir}" "${local_dir}"
+ install_st "${tools_dir}" "${local_dir}"
+ install_dein "${tools_dir}" "${local_dir}"
+ install_oh_my_zsh "${tools_dir}" "${local_dir}"
+
+ create_symlinks "${cfg_dir}" "${HOME}"
+ configure_xdg "${HOME}"
+}
+
+main ${ARGS}
+exit 0