diff options
| author | Sylvain Herlédan <sylvain.herledan@hrafnagud.info> | 2017-06-03 12:52:03 +0200 |
|---|---|---|
| committer | Sylvain Herlédan <sylvain.herledan@hrafnagud.info> | 2017-06-03 12:52:03 +0200 |
| commit | e33ad4f128fb8fef2119cf2c71371eaf9c19bd29 (patch) | |
| tree | 1fe625b20799889724aad507b8bac0a77258b9ca /setup.sh | |
| download | dotfiles-e33ad4f128fb8fef2119cf2c71371eaf9c19bd29.tar.gz dotfiles-e33ad4f128fb8fef2119cf2c71371eaf9c19bd29.tar.bz2 dotfiles-e33ad4f128fb8fef2119cf2c71371eaf9c19bd29.zip | |
Initial setup with basic tools: vim/dein, tmux, st, tup, X
Diffstat (limited to 'setup.sh')
| -rwxr-xr-x | setup.sh | 290 |
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 |
