mirror of
https://github.com/jimeh/dotfiles.git
synced 2026-02-19 08:26:42 +00:00
Instead of keeping my emacs config as a submodule of my dotfiles, I've decided to completely disconnect them, and instead just plain clone my emacs config separately.
223 lines
4.5 KiB
Bash
Executable File
223 lines
4.5 KiB
Bash
Executable File
#! /usr/bin/env bash
|
|
|
|
#
|
|
# Configuration
|
|
#
|
|
|
|
TARGET="$HOME"
|
|
DOTFILES_LINK=".dotfiles"
|
|
SYMLINK_PATH="$DOTFILES_LINK"
|
|
PRIVATE_PATH="private"
|
|
SYMLINKS=(
|
|
Brewfile
|
|
ackrc
|
|
alacritty.yml
|
|
bitbar
|
|
bundle
|
|
coffeelint.json
|
|
erlang
|
|
eslintrc.js
|
|
gemrc
|
|
gitconfig
|
|
gitignore
|
|
hammerspoon
|
|
hgrc
|
|
hyper.js
|
|
irbrc
|
|
peco
|
|
powconfig
|
|
pryrc
|
|
reek.yml
|
|
rspec
|
|
rubocop.yml
|
|
tmux
|
|
tmux.conf
|
|
)
|
|
LOAD_FILES=(zshrc)
|
|
|
|
|
|
#
|
|
# Initial Setup
|
|
#
|
|
|
|
if [ -n "${BASH_SOURCE[0]}" ] && [ -f "${BASH_SOURCE[0]}" ] ; then
|
|
ROOT_PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
elif [ -n "$0" ] && [ -f "$0" ]; then
|
|
ROOT_PATH=$(cd "$(dirname "$0")" && pwd)
|
|
else
|
|
echo "[ERROR] Can't determine dotfiles' root path."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
#
|
|
# Main Functions
|
|
#
|
|
|
|
install_symlinks () {
|
|
# Symlink dotfiles root
|
|
symlink "$ROOT_PATH" "$TARGET/$DOTFILES_LINK"
|
|
|
|
# Setup private dotfiles
|
|
if [ -f "$ROOT_PATH/$PRIVATE_PATH/install.sh" ]; then
|
|
"$ROOT_PATH/$PRIVATE_PATH/install.sh" links
|
|
fi
|
|
|
|
# Symlink each path
|
|
for i in "${SYMLINKS[@]}"; do
|
|
symlink "$SYMLINK_PATH/$i" "$TARGET/.$i"
|
|
done
|
|
|
|
# Symlink shell init file for bash and zsh
|
|
for i in "${LOAD_FILES[@]}"; do
|
|
symlink "$DOTFILES_LINK/load_shellrc.sh" "$TARGET/.$i"
|
|
done
|
|
}
|
|
|
|
install_private () {
|
|
git_clone "git@github.com:jimeh/dotfiles-private.git" \
|
|
"$ROOT_PATH/$PRIVATE_PATH"
|
|
}
|
|
|
|
install_launch_agents () {
|
|
mkdir -p "$HOME/Library/LaunchAgents"
|
|
for file in $ROOT_PATH/launch_agents/*.plist; do
|
|
symlink "$file" "$HOME/Library/LaunchAgents/$(basename "$file")"
|
|
done
|
|
|
|
# Setup private launch_agents
|
|
if [ -f "$ROOT_PATH/$PRIVATE_PATH/install.sh" ]; then
|
|
"$ROOT_PATH/$PRIVATE_PATH/install.sh" agents
|
|
fi
|
|
}
|
|
|
|
install_homebrew () {
|
|
/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
|
|
}
|
|
|
|
install_rbenv () {
|
|
git_clone 'https://github.com/rbenv/rbenv.git' "$TARGET/.rbenv"
|
|
git_clone 'https://github.com/rbenv/ruby-build.git' "$TARGET/.rbenv/plugins/ruby-build"
|
|
}
|
|
|
|
install_nvm () {
|
|
git_clone 'https://github.com/creationix/nvm.git' "$TARGET/.nvm"
|
|
}
|
|
|
|
install_rustup () {
|
|
curl https://sh.rustup.rs -sSf | sh
|
|
}
|
|
|
|
install_virtualenv () {
|
|
curl -s https://raw.github.com/brainsik/virtualenv-burrito/master/virtualenv-burrito.sh | bash
|
|
}
|
|
|
|
install_dokku() {
|
|
git_clone 'https://github.com/progrium/dokku.git' "$TARGET/.dokku"
|
|
}
|
|
|
|
install_emacs_config() {
|
|
git_clone 'https://github.com/plexus/chemacs.git' "$TARGET/.config/chemacs"
|
|
symlink "$TARGET/.config/chemacs/.emacs" "$TARGET/.emacs"
|
|
git_clone 'git@github.com:jimeh/.emacs.d.git' "$TARGET/.emacs.d"
|
|
}
|
|
|
|
|
|
#
|
|
# Helper functions
|
|
#
|
|
|
|
ok() {
|
|
printf "OK:\t%s\n" "$1"
|
|
}
|
|
|
|
info() {
|
|
printf "INFO:\t%s\n" "$1"
|
|
}
|
|
|
|
symlink() {
|
|
local source="$1"
|
|
local target="$2"
|
|
|
|
if [ ! -e "$target" ]; then
|
|
ok "symlink: $target --> $source"
|
|
ln -s "$source" "$target"
|
|
else
|
|
info "symlink: $target exists"
|
|
fi
|
|
}
|
|
|
|
git_clone () {
|
|
local clone_url="$1"
|
|
local target="$2"
|
|
|
|
if [ ! -e "$target" ]; then
|
|
git clone "$clone_url" "$target"
|
|
ok "git clone: $clone_url --> $target"
|
|
else
|
|
info "git clone: $target already exists"
|
|
fi
|
|
}
|
|
|
|
|
|
#
|
|
# Argument Handling
|
|
#
|
|
|
|
case "$1" in
|
|
symlinks|links)
|
|
install_symlinks
|
|
;;
|
|
emacs-config|emacs)
|
|
install_emacs_config
|
|
;;
|
|
private)
|
|
install_private
|
|
;;
|
|
homebrew|brew)
|
|
install_homebrew
|
|
;;
|
|
rbenv)
|
|
install_rbenv
|
|
;;
|
|
nvm)
|
|
install_nvm
|
|
;;
|
|
rustup)
|
|
install_rustup
|
|
;;
|
|
virtualenv|venv)
|
|
install_virtualenv
|
|
;;
|
|
dokku)
|
|
install_dokku
|
|
;;
|
|
launch_agents|agents)
|
|
install_launch_agents
|
|
;;
|
|
info)
|
|
echo "Target directory: $TARGET"
|
|
echo "Detected dotfiles root: $ROOT_PATH"
|
|
;;
|
|
*)
|
|
echo 'usage: ./install.sh [command]'
|
|
echo ''
|
|
echo 'Available commands:'
|
|
echo ' info: Target and source directory info.'
|
|
echo ' symlinks: Install symlinks for various dotfiles into' \
|
|
'target directory.'
|
|
echo ' emacs_config: Install Emacs configuration.'
|
|
echo ' private: Install private dotfiles.'
|
|
echo ' homebrew: Install Homebrew (Mac OS X only).'
|
|
echo ' rbenv: Install rbenv, a Ruby version manager.'
|
|
echo ' nvm: Install nvm, a Node.js version manager.'
|
|
echo ' gvm: Install gvm, a Go version manager.'
|
|
echo ' rustup: Install rustup, a Rust version manager.'
|
|
echo ' virtualenv: Install virtualenv-burrito, a Python version and' \
|
|
'environment manager.'
|
|
echo ' dokku: Clone dokku to ~/.dokku enabling use of' \
|
|
'dokku_client.sh.'
|
|
echo ' launch_agents: Install launchd plists to ~/Library/LaunchAgents/'
|
|
;;
|
|
esac
|