Mercurial > ec-dotfiles
view setup @ 705:500c3e9bf73f
[setup] add missing done message
author | nanaya <me@nanaya.net> |
---|---|
date | Sun, 18 Dec 2022 20:46:51 +0900 |
parents | 1e0f578f6752 |
children | 42e58cea7821 |
line wrap: on
line source
#!/bin/sh # This script is bourne-shell compatible. # Or at least it is when I last tested it in Solaris 10. # Ensure no variable is empty when used. set -u # Stop on any error. set -e # Get directory where this script and dotfiles are located. # $0 contains either full path when executed from a PATH (godwhy) # or with complete path or ./<scriptname> when executed that way. # Therefore it's safe to use dirname in this case. basedir="`dirname "${0}"`" # To get actual path, go to the directory and pwd from it. cd "${basedir}" basedir="`pwd`" # FIXME: test existence of the directories. # dotfiles rcdir="${basedir}/rc" # Make sure $HOME points somewhere and writable. test -n "${HOME}" || exit 1 test -w "${HOME}" || exit 1 # A safe echo. _echo() { _echon "${*}"; printf "\n" } # A safe and cross platform echo -n. _echon() { printf '%s' "${*}" } _tcsh() { case "$1" in uninstall|install) _rc "${1}" "cshrc" ".ec.tcsh" # shellcheck disable=SC2016 _init "${1}" 'test -r "${HOME}/.ec.tcsh" && source "${HOME}/.ec.tcsh" #ECCORE_TCSH' ".cshrc" # shellcheck disable=SC2016 _init "${1}" 'test -r "${HOME}/.ec.tcsh" && source "${HOME}/.ec.tcsh" #ECCORE_TCSH' ".tcshrc" ;; esac } _bash() { case "${1}" in uninstall|install) _rc "${1}" "bashrc" ".ec.bash" # shellcheck disable=SC2016 _init "${1}" '[ -r "${HOME}/.ec.bash" ] && . "${HOME}/.ec.bash" #ECCORE_BASH' ".bash_profile" # shellcheck disable=SC2016 _init "${1}" '[ -r "${HOME}/.ec.bash" ] && . "${HOME}/.ec.bash" #ECCORE_BASH' ".bashrc" ;; esac } _ksh() { case "${1}" in uninstall|install) _rc "${1}" "kshrc" ".ec.ksh" # shellcheck disable=SC2016 _init "${1}" '[ -r "${HOME}/.ec.ksh" ] && . "${HOME}/.ec.ksh" #ECCORE_KSH' ".profile" ;; esac } _zsh() { case "${1}" in uninstall|install) _rc "${1}" "zshrc" ".ec.zsh" # shellcheck disable=SC2016 _init "${1}" '[ -r "${HOME}/.ec.zsh" ] && . "${HOME}/.ec.zsh" #ECCORE_ZSH' ".zshrc" ;; esac } _rc() { if test -z "${3}" || test -z "${2}" || test -z "${1}"; then _echo "Invalid command." return fi _srcfile="${rcdir}/${2}" _dstfile="${HOME}/${3}" _dstdir="`_echo "${_dstfile}" | sed -e 's,^\(.*\)/[^/]*$,\1,'`" mkdir -p "${_dstdir}" if test ! -h "${_dstfile}"; then if test -f "${_dstfile}"; then cp "${_dstfile}" "${_dstfile}.bak" _echo "${_dstfile} backed up to ${_dstfile}.bak" elif test -d "${_dstfile}"; then cp -r "${_dstfile}" "${_dstfile}.bak" _echo "Directory ${_dstfile} backed up to ${_dstfile}.bak" fi fi rm -rf "${_dstfile}" case "${1}" in install) ln -fs "${_srcfile}" "${_dstfile}" _echo "Installed ${_dstfile}" ;; uninstall) _echo "Removed ${_dstfile}" ;; esac } _init() { _script="${HOME}/${3}" _scripttmp="${HOME}/.tmp.${3}" rm -f "${_scripttmp}" _data="${2}" if [ -f "${_script}" ]; then sed -e "/`_echo "${_data}" | sed -e 's/.*#//'`/d" "${_script}" > "${_scripttmp}" mv -f "${_scripttmp}" "${_script}" fi case "${1}" in install) _echo "${_data}" >> "${_script}" _echo "Added autostart to ${_script}" ;; uninstall) _echo "Removed autostart from ${_script}" ;; esac } _touch() { test "${1}" = "uninstall" && return shift touch "${@}" _echo "Ensured existence of ${*}" } _tmux() { # Remove old tmux config. _rc uninstall "tmux.conf" ".tmux.conf" for tmux_conf in "${rcdir}/tmux-"*.conf; do tmux_conf_file="`basename "/${tmux_conf}"`" _rc "${1}" "${tmux_conf_file}" ".${tmux_conf_file}" done } _vim_x() { case "${1}" in install) _echon "Copying";; uninstall) _echon "Removing";; esac x="${2}" _echon " vim ${x}..." for i in "${basedir}/vendor/vim-${x}"/*.vim; do file_name="`basename "/${i}"`" _echon "[${file_name}]" _rc "${1}" "../vendor/vim-${x}/${file_name}" ".vim/${x}/${file_name}" > /dev/null done for d in "${basedir}/vendor/vim-${x}"/*/; do test -d "$d" || continue dir_name="`basename "/${d}"`" _echon "[${dir_name}]" mkdir -p ".vim/${x}/${dir_name}" for i in "${d}"/*.vim; do file_name="`basename "/${i}"`" _echon "[${file_name}]" _rc "${1}" "../vendor/vim-${x}/${dir_name}/${file_name}" ".vim/${x}/${dir_name}/${file_name}" > /dev/null done done _echo ...done } _vim_packs() { case "${1}" in install) _echon "Symlinking vim packs...";; uninstall) _echon "Removing vim packs...";; esac for i in "${basedir}/vendor/vim-packs"/*; do pack_name="`basename "/${i}"`" _echon "[${pack_name}]" _rc "${1}" "../vendor/vim-packs/${pack_name}" ".vim/pack/default/opt/${pack_name}" > /dev/null done _echo ...done } _upgrade() { for i in bash bash.after bash.before bin tcsh tcsh.after tcsh.before zsh zsh.after zsh.before; do src="${HOME}/.ecos_${i}" dst="${HOME}/.ec.${i}" if test -f "${src}" || test -d "${src}" || test -h "${src}"; then if test ! -f "${dst}" && test ! -d "${dst}" && test ! -h "${dst}"; then _echo "Moving ${src} to ${dst}" mv -f "${src}" "${dst}" fi fi done } _help() { cat <<EOF Usage: ${0} [install|uninstall] EOF } case "${1}" in install|uninstall) _upgrade _tcsh "${1}" _bash "${1}" _ksh "${1}" _zsh "${1}" _rc "${1}" "shellinit-posix" ".ec.shellinit-posix" _rc "${1}" "../bin" ".ec.bin" _rc "${1}" "gemrc" ".gemrc" _rc "${1}" "gitconfig" ".gitconfig" _rc "${1}" "gitignore_global" ".gitignore_global" _rc "${1}" "hgrc" ".hgrc" _touch "${1}" "${HOME}/.hgrc.local" _rc "${1}" "hgignore_global" ".hgignore_global" _touch "${1}" "${HOME}/.hgignore_global.local" _rc "${1}" "inputrc" ".inputrc" _tmux "${1}" _vim_x "${1}" autoload _vim_x "${1}" colors _vim_x "${1}" syntax _vim_packs "${1}" _rc "${1}" "vimrc" ".vimrc" _rc "${1}" "irbrc" ".irbrc" ;; *) _help ;; esac